Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
448 ddelon 1
<?php
598 ddelon 2
/*vim: set expandtab tabstop=4 shiftwidth=4: */
448 ddelon 3
// +------------------------------------------------------------------------------------------------------+
4
// | PHP version 4.1                                                                                      |
5
// +------------------------------------------------------------------------------------------------------+
6
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
7
// +------------------------------------------------------------------------------------------------------+
8
// | This library is free software; you can redistribute it and/or                                        |
9
// | modify it under the terms of the GNU General Public                                                  |
10
// | License as published by the Free Software Foundation; either                                         |
11
// | version 2.1 of the License, or (at your option) any later version.                                   |
12
// |                                                                                                      |
13
// | This library is distributed in the hope that it will be useful,                                      |
14
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
15
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                                    |
16
// | General Public License for more details.                                                             |
17
// |                                                                                                      |
18
// | You should have received a copy of the GNU General Public                                            |
19
// | License along with this library; if not, write to the Free Software                                  |
20
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
21
// +------------------------------------------------------------------------------------------------------+
1303 alexandre_ 22
// CVS : $Id: projet.class.php,v 1.7.2.1 2007-04-11 12:24:47 alexandre_tb Exp $
448 ddelon 23
/**
24
* Application projet
25
*
26
* La classe projet
27
*
28
*@package projet
29
//Auteur original :
30
*@author        Alexandre Granier <alexandre@tela-botanica.org>
31
//Autres auteurs :
32
*@author        Aucun
33
*@copyright     Tela-Botanica 2000-2004
1303 alexandre_ 34
*@version       $Revision: 1.7.2.1 $
448 ddelon 35
// +------------------------------------------------------------------------------------------------------+
36
*/
37
 
38
 
39
// +------------------------------------------------------------------------------------------------------+
40
// |                                            ENTETE du PROGRAMME                                       |
41
// +------------------------------------------------------------------------------------------------------+
42
 
43
include_once PROJET_CHEMIN_CLASSES.'document.class.php' ;
44
include_once PROJET_CHEMIN_CLASSES.'liste_discussion.class.php' ;
598 ddelon 45
/* Permet la récupération d'un nouvel identifiant d'une table.*/
46
require_once PROJET_CHEMIN_BIBLIOTHEQUE_API.'sql/SQL_manipulation.fonct.php';
448 ddelon 47
include_once 'Mail.php' ;
48
 
49
// +------------------------------------------------------------------------------------------------------+
50
// |                                            ENTETE du PROGRAMME                                       |
51
// +------------------------------------------------------------------------------------------------------+
52
 
53
 
54
 
55
 
56
/**
57
 * class projet
598 ddelon 58
 *
448 ddelon 59
 */
60
class projet
61
{
62
 
63
    /** Aggregations: */
64
 
65
    /**
66
     * Le tableau d'objet document associés au projet
67
     *
68
     */
69
    var $_documents_associes = array();
70
 
71
    var $_listes_associes = array();
72
 
73
    /** Compositions: */
74
 
75
    /*** Attributes: ***/
598 ddelon 76
 
448 ddelon 77
    /**
78
     * L'identifiant du projet.
79
     * @access private
80
     */
81
    var $_id_projet;
82
 
83
    /**
84
     * Le titre du projet, tel que dans la base de donnée.
85
     * @access private
86
     */
87
    var $_titre;
88
    /**
89
     * La description du projet, tel que dans la base.
90
     * @access private
91
     */
92
    var $_description;
93
    /**
94
     * L'URL d'un site sur le projet. Facultatif.
95
     * @access private
96
     */
97
    var $_espace_internet;
98
    /**
99
     * Le nom du wikini associé au projet, avec la syntaxe wikini. Vide par défaut.
100
     * @access private
101
     */
102
    var $_nom_wikini;
103
    /**
104
     * Date de création du projet. A priori ne varie pas dans le temps.
105
     * @access private
106
     */
107
    var $_date_creation;
108
    /**
109
     * Le chemin relatif vers le répertoire contenant les wikinis.
110
     * @access private
111
     */
112
    var $_chemin_wikini;
113
    /**
114
     * Une connexion vers la base de donnée.
115
     * @access private
116
     */
117
    var $_db;
118
 
119
    /**
120
     * Contient le nom du répertoire du projet tel que sur le disque.
121
     * @access private
122
     */
123
    var $_nom_repertoire;
124
 
125
    /**
126
     * Le chemin jusqu'au répertoire où seront stockés les fichiers.
127
     * @access private
128
     */
129
    var $_chemin_repertoire;
130
 
131
    /**
132
     * Vaut vrai si le projet est un projet racine et s'il est le seul.
133
     * @access private
134
     */
135
    var $_est_racine;
136
    /**
137
     * Le résumé du projet
138
     * @access private
139
     */
140
    var $_resume;
474 alexandre_ 141
    /**
142
     * Contient le numéro du type du projet
143
     * @access private
144
     */
145
    var $_type;
448 ddelon 146
 
887 alexandre_ 147
	/**
1303 alexandre_ 148
     * Indique si l'inscription au projet est moderes
887 alexandre_ 149
     * @access private
150
     */
151
    var $_isModere;
1303 alexandre_ 152
 
153
	/**
154
     * Indique si le projet a des documents
155
     * @access private
156
     */
157
    var $_avoirDocument;
158
 
448 ddelon 159
    /**
598 ddelon 160
     *
161
     * PHP5
448 ddelon 162
     * @return projet
163
     * @access public
164
     */
481 ddelon 165
    function __construct( &$dbObject,  $id_projet = "")
448 ddelon 166
    {
481 ddelon 167
      $this->projet($dbObject,  $id_projet);
598 ddelon 168
 
448 ddelon 169
    } // end of member function __construct
170
 
171
    /**
172
     *
598 ddelon 173
     *
448 ddelon 174
     * @param DB dbObject Un objet PEAR:DB
175
     * @param int id_projet On passe un identifiant de projet au constructeur. Cela lui permet de faire une
176
     * première requête pour les infos de bases comme le titre, le description etc.
177
     * @return projet
178
     * @access public
179
     */
180
    function projet( &$dbObject,  $id_projet = "")
181
    {
182
        $this->_db = $dbObject ;
183
        if ($id_projet != "") {
184
            $requete = "select * from projet where p_id=$id_projet" ;
185
            $resultat = $this->_db->query ($requete) ;
186
            if (DB::isError($resultat)) {
187
                die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
188
            }
189
            $ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ;
598 ddelon 190
 
448 ddelon 191
            // Affectations dans les propriétés
192
            $this->_id_projet = $ligne->p_id ;
193
            $this->_titre = $ligne->p_titre ;
194
            $this->_description = $ligne->p_description ;
195
            $this->_espace_internet = $ligne->p_espace_internet ;
196
            $this->_date_creation = $ligne->p_date_creation ;
197
            $this->_nom_wikini = $ligne->p_wikini ;
198
            $this->_resume = $ligne->p_resume;
474 alexandre_ 199
            $this->_type = $ligne->p_type ;
448 ddelon 200
            // On récupère le nom du répertoire
201
            $this->_nom_repertoire = $ligne->p_nom_repertoire ;
887 alexandre_ 202
            $this->_isModere = $ligne->p_modere;
1303 alexandre_ 203
			$this->_avoirDocument = $ligne->p_avoir_document;
448 ddelon 204
            // on regarde si on a à faire au projet racine
535 alexandre_ 205
            if (PROJET_UTILISE_HIERARCHIE) {
206
	            $requete = 'select  ph_id_projet_pere, ph_id_projet_fils from projet_hierarchie where ph_id_projet_fils='.$this->_id_projet ;
207
	            $resultat = $this->_db->query ($requete) ;
208
	            if (DB::isError ($resultat)) {
209
	                die ("Echec de la requete : $requete<br />".$resultat->getMessage()) ;
210
	            }
211
	            if (!$resultat->numRows()) {
212
	                $this->_est_racine = true ;
213
	            } else {
214
	                $this->_est_racine = false ;
215
	            }
448 ddelon 216
            }
217
        }
218
    } // end of member function projet
219
 
220
    /**
221
     *
598 ddelon 222
     *
448 ddelon 223
     * @param DB dbObject Un objet PEAR:DB
224
     * @param int id_projet On passe un identifiant de projet au constructeur.
598 ddelon 225
     * @return bool
448 ddelon 226
     * @access public
227
     */
228
    function projetExiste( &$dbObject,  $id_projet)
229
    {
230
        if ($id_projet != "") {
231
            $requete = "select * from projet where p_id=$id_projet" ;
232
            $resultat = $dbObject->query ($requete) ;
233
            if (DB::isError($resultat)) {
234
                die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
235
            }
236
            if ($resultat->numRows() != 0) {
237
                return true ;
238
            }
239
        }
240
    } // end of member function projet
598 ddelon 241
 
448 ddelon 242
    /**
243
     *
598 ddelon 244
     *
245
     * @param int id_projet
448 ddelon 246
     * @return string
247
     * @access public
248
     */
249
    function getTitre( $id_projet = "" )
250
    {
251
        return $this->_titre ;
252
    } // end of member function getTitre
598 ddelon 253
 
448 ddelon 254
    /**
255
     *
598 ddelon 256
     *
448 ddelon 257
     * @return string
258
     * @access public
259
     */
260
    function getResume( )
261
    {
262
        return $this->_resume ;
263
    } // end of member function getResume
264
 
265
    /**
266
     * Renvoie l'identifiant du projet courant.
267
     *
268
     * @return int
269
     * @access public
270
     */
271
    function getId( )
272
    {
273
        return $this->_id_projet ;
274
    } // end of member function getId
275
 
276
    /**
277
     *
598 ddelon 278
     *
448 ddelon 279
     * @return string
280
     * @access public
281
     */
282
    function getDescription( )
283
    {
284
        return $this->_description;
285
    } // end of member function getDescription
286
 
287
    /**
288
     *
598 ddelon 289
     *
448 ddelon 290
     * @return string
291
     * @access public
292
     */
293
    function getEspaceInternet( )
294
    {
295
        return $this->_espace_internet;
296
    } // end of member function getEspaceInternet
297
 
298
    /**
299
     * Charge dans l'objet projet, les listes de discussion
300
     * ['nom_liste']
301
     * ['domaine']
302
     * ['adresse']
303
     *
304
     * @return boolean  true en cas de succès
305
     * @access public
306
     */
307
    function getListesAssociees( )
308
    {
309
        // On rajoute un test pour éviter l'appel SQL si il a déjà été fait une fois
310
        if (count($this->_listes_associes) > 0) return ;
311
        $requete = "select pl_id_liste from projet_lien_liste where pl_id_projet=".$this->_id_projet ;
312
        $resultat = $this->_db->query ($requete) ;
313
        if (DB::isError ($resultat)) {
314
            die ("Echec de la requete : $requete<br />".$resultat->getMessage()) ;
315
        }
316
        $retour = array() ;
317
        if ($resultat->numRows()) {
318
            $ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ;
319
            $this->_listes_associes[] = new liste_discussion($ligne->pl_id_liste, $this->_db) ;
598 ddelon 320
 
448 ddelon 321
        }
322
    } // end of member function getListesAssociees
323
 
324
    /**
325
     * Renvoie vrai si le projet a au moins une liste
326
     *
327
     * @return bool
328
     * @access public
329
     */
330
    function avoirListe( )
331
    {
332
        $this->getListesAssociees() ;
333
        if (count($this->_listes_associes)) {
334
            return true ;
335
        }
336
        return false ;
1303 alexandre_ 337
    }
448 ddelon 338
 
1303 alexandre_ 339
    /**
340
     * Renvoie vrai si le projet a au moins un document, fichier ou repertoire
341
     *
342
     * Mis en place pour des raisons de performances avant la methode getListesDocuments etait utilisee
343
     *
344
     * @return bool
345
     * @access public
346
     */
347
    function avoirDocument( )
348
    {
349
        return $this->_avoirDocument;
350
    }
448 ddelon 351
 
352
    /**
1303 alexandre_ 353
     * Permet de fixer la colonne p_avoir_document à 1
354
     *
355
     * Mis en place pour des raisons de performances avant la methode getListesDocuments etait utilisee
356
     *
357
     * @param bool
358
     * @return mixed true si la requete fonctionne
359
     * @access public
360
     */
361
    function setAvoirDocument($bool)
362
    {
363
        $val = 0 ;
364
        if ($bool) $val = 1;
365
        $requete = 'update projet set p_avoir_document='.$val.' where p_id='.$this->_id_projet;
366
        $resultat = $this->_db->query ($requete) ;
367
        if (DB::isError($resultat)) {
368
            echo ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
369
        }
370
        return true;
371
    }
372
 
373
    /**
448 ddelon 374
     * Renvoie la liste des documents associés sous forme d'un tableau, avec les
375
     * informations afférentes. 0 => "nom (cliquable)"
376
     "Taille"
377
     "Date
378
     * de création"          "Proriétaire"          "Visibilité"          "Action
379
     * (cliquable)"
380
     *
381
     * @param visibilite visibilite Si visibilite est à prive, tous les fichiers sont renvoyés ainsi qu'une entrée
598 ddelon 382
     * pour indiquer la visibilité du document.
448 ddelon 383
     * @return Array
384
     * @access public
385
     */
386
    function getListesDocuments( $chemin, $chemin_icones = "icones/" )
387
    {
388
        // On réalise une requete sur projet_documents avec une jointure sur l'annuaire
389
        // et sur gen_type_de_fichier pour envoyer un résultat complet.
390
        // On exclue les fichiers racines cad pd_pere is null
391
        $requete = "select pd_id from projet_documents where pd_ce_projet=".$this->_id_projet.' order by pd_nom' ;
392
        $resultat = $this->_db->query ($requete) ;
393
        if (DB::isError($resultat)) {
394
            die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
395
        }
396
        $tableau_document = array() ;
598 ddelon 397
 
448 ddelon 398
        // Un compteur
399
        $i = 0 ;
598 ddelon 400
 
448 ddelon 401
        while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) {
402
            array_push ($tableau_document, new document ($ligne->pd_id, &$this->_db, $chemin, $chemin_icones)) ;
403
        }
404
        return $tableau_document ;
405
    } // end of member function getListesDocuments
406
 
407
 
408
    /**
409
     * Renvoie un tableau avec tous les répertoires d'un projet, imbriqué. ['rep1'],
410
     * ['rep2'] => array (['rep21'], 	['rep22']), etc .
411
     *
412
     * @return Array
413
     * @access public
414
     */
415
    function getListeRepertoireHierarchisee( )
416
    {
417
        // On ne prend que les répertoires
418
        $requete = "select pd_id from projet_documents where pd_ce_projet=".$this->_id_projet.' and pd_ce_type=0 order by pd_nom' ;
419
        $resultat = $this->_db->query ($requete) ;
420
        if (DB::isError($resultat)) {
421
            die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
422
        }
423
        $tableau_document = array() ;
598 ddelon 424
 
448 ddelon 425
        while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) {
426
            array_push ($tableau_document, new document ($ligne->pd_id, $this->_db));
427
        }
598 ddelon 428
 
448 ddelon 429
        return $tableau_document ;
430
    } // end of member function getListeRepertoireHierarchisee
431
 
432
 
433
    /**
434
     * Renvoie un tableau comprenant tous les objets projet de la base.
435
     *
436
     * @return Array
437
     * @static
438
     * @access public
439
     */
1303 alexandre_ 440
    function getTousLesProjets(&$objetDB, $exclu = '')
448 ddelon 441
    {
1303 alexandre_ 442
    	$sql = '';
443
        if (count($this->_projet_exclu)) {
444
        	$sql = 'where p_id not in (';
445
            foreach ($this->_projet_exclu as $valeur) {
446
            	$sql .= $valeur.',' ;
447
            }
448
            $sql[count($sql)-1] = ')';
449
        }
450
        $requete = 'select p_id from projet '.$sql.' order by p_titre' ;
448 ddelon 451
        $resultat = $objetDB->query ($requete) ;
452
        if (DB::isError($resultat)) {
1303 alexandre_ 453
            echo ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
448 ddelon 454
        }
455
        $tableau_resultat = array() ;
456
        while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) {
457
            array_push ($tableau_resultat, new projet ($objetDB, $ligne->p_id)) ;
458
        }
459
        return $tableau_resultat ;
460
    } // end of member function getTousLesProjets
461
 
462
    /**
474 alexandre_ 463
     * Renvoie un tableau comprenant les objets projet de la base du type $type.
464
     *
465
     * @return Array
466
     * @static
467
     * @access public
468
     */
469
    function getProjetDuType($type, &$objetDB)
470
    {
471
        $requete = "select p_id from projet where p_type=$type order by p_titre" ;
472
        $resultat = $objetDB->query ($requete) ;
473
        if (DB::isError($resultat)) {
474
            die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
475
        }
476
        $tableau_resultat = array() ;
477
        while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) {
478
            array_push ($tableau_resultat, new projet ($objetDB, $ligne->p_id)) ;
479
        }
480
        return $tableau_resultat ;
481
    } // end of member function getTousLesProjets
482
 
483
    /**
484
     * Renvoie un le projet racine.
485
     *
486
     * @return projet
487
     * @static
488
     * @access public
489
     */
490
    function getProjetRacine(&$objetDB)
491
    {
492
        $requete = "select p_id from projet where p_id not in (select ph_id_projet_fils from projet_hierarchie)" ;
493
        $resultat = $objetDB->query ($requete) ;
494
        if (DB::isError($resultat)) {
495
            die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
496
        }
497
        if ($resultat->numRows() == 1) {
498
            $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ;
499
            return new projet($objetDB, $ligne->p_id) ;
500
        }
501
        $tableau_resultat = array() ;
502
        while ($ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT)) {
503
            array_push ($tableau_resultat, new projet ($objetDB, $ligne->p_id)) ;
504
        }
505
        return $tableau_resultat ;
506
    } // end of member function getTousLesProjets
507
 
508
    /**
448 ddelon 509
     * Desctructeur de la classe. Libère la mémoire, ferme les connexions et fichiers.
510
     *
511
     * @return void
512
     * @access public
513
     */
514
    function __destruct( )
515
    {
598 ddelon 516
 
448 ddelon 517
    } // end of member function __destruct
518
 
519
    /**
520
     * Supprime le projet courrant. Il s'ensuit une suppression en cascade de tous les
521
     * éléments liés.
522
     *
523
     * @return void
524
     * @access public
525
     */
526
    function supprimer( )
527
    {
598 ddelon 528
 
448 ddelon 529
    } // end of member function supprimer
530
 
531
    /**
532
     * Permet d'enregistrer une ligne dans la table concernée.
533
     *
534
     * @param Array tableau_de_valeur Le tableau de valeur a insérer dans la base avec pour clé les noms des éléments
535
     * du formulaire.
536
     * @return int
537
     * @access public
538
     */
539
    function enregistrerSQL( $tableau_de_valeur )
540
    {
541
        $nom_repertoire = projet::genereNomRepertoire($tableau_de_valeur['projet_titre'], $this->_db) ;
542
        if (!$this->_creationRepertoire ($nom_repertoire)) {
474 alexandre_ 543
            echo 'Impossible de crée un répertoire'.$nom_repertoire ;
448 ddelon 544
            return false ;
545
        }
474 alexandre_ 546
        // Traitement du type
547
        if (!PROJET_UTILISE_TYPE) {
548
            $tableau_de_valeur['projet_type'] = 0 ;
549
        }
448 ddelon 550
        $id = SQL_obtenirNouveauId($this->_db, 'projet', 'p_id') ;
551
        $requete = 'insert into projet set p_id='.$id ;
481 ddelon 552
        if (!isset($tableau_de_valeur['projet_wikini'])) {
553
        	$tableau_de_valeur['projet_wikini']='';
554
        }
448 ddelon 555
        $requete .= ', p_titre="'.$tableau_de_valeur['projet_titre'].'", p_description="'.$tableau_de_valeur['projet_description'].'"'.
556
                    ', p_espace_internet="'.$tableau_de_valeur['projet_espace_internet'].'", p_date_creation=NOW()'.
474 alexandre_ 557
                    ', p_wikini="'.$tableau_de_valeur['projet_wikini'].'", p_nom_repertoire="'.$nom_repertoire.'", p_resume="'.$tableau_de_valeur['projet_resume'].
887 alexandre_ 558
                    '", p_type='.$tableau_de_valeur['projet_type'].', p_modere="'.$tableau_de_valeur['projet_moderation'].'"' ;
448 ddelon 559
        $resultat = $this->_db->query ($requete) ;
598 ddelon 560
 
448 ddelon 561
        if (DB::isError($resultat)) {
562
            die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
563
        }
598 ddelon 564
 
535 alexandre_ 565
        // On affecte à l'objet projet son identifiant
566
        $this->_id_projet = $id ;
598 ddelon 567
 
448 ddelon 568
        //insertion dans projet_hiérarchie
535 alexandre_ 569
		if (PROJET_UTILISE_HIERARCHIE) {
570
	        $requete = 'insert into projet_hierarchie set ph_id_projet_pere='.$tableau_de_valeur['projet_asso'].
571
	                    ', ph_id_projet_fils='.$id ;
572
	        $resultat = $this->_db->query ($requete) ;
573
		}
448 ddelon 574
        return true ;
575
    } // end of member function enregistrerSQL
576
 
577
    /**
578
     * Permet de mettre à jour une ligne dans la table concernée.
579
     *
580
     * @param Array tableau_de_valeur Le tableau de valeur a insérer dans la base avec pour clé les noms des éléments
581
     * du formulaire.
582
     * @return int
583
     * @access public
584
     */
585
    function majSQL( $tableau_de_valeur )
586
    {
474 alexandre_ 587
        // Traitement du type
588
        if (!PROJET_UTILISE_TYPE) {
589
            $tableau_de_valeur['projet_type'] = 0 ;
590
        }
448 ddelon 591
        $requete = 'update projet set ';
592
        $requete .= 'p_titre="'.$tableau_de_valeur['projet_titre'].'", p_description="'.$tableau_de_valeur['projet_description'].'"'.
593
                    ', p_espace_internet="'.$tableau_de_valeur['projet_espace_internet'].'"'.
474 alexandre_ 594
                    ', p_resume="'.$tableau_de_valeur['projet_resume'].'", p_type='.$tableau_de_valeur['projet_type'].
887 alexandre_ 595
                    ', p_modere='.$tableau_de_valeur['projet_moderation'].
448 ddelon 596
                    ' where p_id="'.$this->_id_projet.'"' ;
597
        $resultat = $this->_db->query ($requete) ;
598
        if (DB::isError($resultat)) {
599
            die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
600
        }
598 ddelon 601
 
535 alexandre_ 602
        if (PROJET_UTILISE_HIERARCHIE) {
603
	        // suppression dans projet_hierarchie
598 ddelon 604
 
535 alexandre_ 605
	        $requete = 'delete from projet_hierarchie where ph_id_projet_fils='.$this->_id_projet ;
606
	        $resultat = $this->_db->query ($requete) ;
598 ddelon 607
 
535 alexandre_ 608
	        //insertion dans projet_hiérarchie
598 ddelon 609
 
535 alexandre_ 610
	        $requete = 'insert into projet_hierarchie set ph_id_projet_pere='.$tableau_de_valeur['projet_asso'].
611
	                    ', ph_id_projet_fils='.$this->_id_projet ;
612
	        $resultat = $this->_db->query ($requete) ;
613
        }
448 ddelon 614
        return true ;
615
    } // end of member function enregistrerSQL
616
 
617
    /**
618
     * Met à jour dans la base de donnée le champs p_nom_wikini
619
     *
620
     * @param int nom_wikini Le nouveau nom wikini
621
     * @return bool
622
     * @access public
623
     */
624
    function majNomWikini( $nom_wikini )
625
    {
626
        $requete = 'update projet set p_wikini="'.$nom_wikini.'" where p_id="'.$this->_id_projet.'"' ;
627
        $resultat = $this->_db->query ($requete) ;
628
        if (DB::isError ($resultat)) {
629
            die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ;
630
        }
631
        return true ;
632
    } // end of member function majNomWikini
633
 
634
 
635
    /**
636
     *
598 ddelon 637
     *
638
     * @param string code_sql
448 ddelon 639
     * @return bool
640
     * @access public
641
     */
642
    function suppressionSQL()
643
    {
644
        $msg = '' ;
645
        // Supression du répertoire du projet
646
        if (!$this->_suppression_repertoire()) {
647
            $msg = 'La suppression du répertoire n\'a pas fonctionné' ;
648
        }
649
        // A ajouter la suppression des documents associés
598 ddelon 650
 
448 ddelon 651
        // La suppression des évènements associés
598 ddelon 652
 
448 ddelon 653
        // Le projet lui-même
654
        $requete = "delete from projet where p_id=".$this->_id_projet ;
655
        $resultat = $this->_db->query ($requete) ;
598 ddelon 656
 
535 alexandre_ 657
        if (PROJET_UTILISE_HIERARCHIE) {
658
	        $requete = "delete from projet_hierarchie where ph_id_projet_fils=".$this->_id_projet ;
659
	        $resultat = $this->_db->query ($requete) ;
660
        }
448 ddelon 661
        $requete = "delete from projet_statut_utilisateurs where psu_id_projet=".$this->_id_projet ;
662
        $resultat = $this->_db->query ($requete) ;
663
        return $msg ;
664
    } // end of member function suppressionSQL
665
 
666
    /**
667
     * Supprime le répertoire associé au projet (le répertoire doit être vide).
668
     *
669
     * @return void
670
     * @access private
671
     */
672
    function _suppression_repertoire( )
673
    {
674
        return rmdir ($this->_chemin_repertoire.$this->_nom_repertoire) ;
675
    } // end of member function _suppression_repertoire
676
 
677
    /**
678
     * Permet de créer le répertoire associé au projet.
679
     *
680
     * @param string nom_repertoire Le nom du répertoire à créer.
681
     * @return boolean
682
     * @access private
683
     */
684
    function _creationRepertoire( $nom_repertoire )
685
    {
686
        return mkdir ($this->_chemin_repertoire.$nom_repertoire) ;
687
    } // end of member function _creationRepertoire
688
 
689
    /**
690
     * Permet d'indiquer où seront stockés les fichiers.
691
     *
692
     * @param string cheminRepertoire Le chemin jusqu'au répertoire où seront stockés les fichiers.
693
     * @return void
694
     * @access public
695
     */
696
    function setCheminRepertoire( $cheminRepertoire )
697
    {
698
        $this->_chemin_repertoire = $cheminRepertoire ;
699
    } // end of member function setCheminRepertoire
700
 
701
    /**
702
     * Génère un nom de répertoire à partir de la première lettre de la chaine passé en
703
     * paramètre et de l'identifiant du dernier projet.
704
     *
705
     * @param string chaine Une chaine à partir de laquelle sera générer le nom du répertoire.
706
     * @param DB objetDB un objet PEAR::DB
707
     * @return string
708
     * @static
709
     * @access public
710
     */
711
    function genereNomRepertoire( $chaine, &$objetDB )
712
    {
713
        $requete = "select p_id from projet order by p_id desc limit 0,1" ;
714
        $resultat = $objetDB->query ($requete) ;
715
        if (DB::isError ($resultat)) {
716
            die ("Echec de la requete : $requete<br />".$resultat->getMessage()) ;
717
        }
481 ddelon 718
        if ($resultat->numRows() > 0) {
719
	        $ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ;
720
	        $nom = strtoupper(substr($chaine, 0, 1)) ;
721
	        $nom .= $ligne->p_id + 1 ;
722
        }
723
	    else {
724
	    	$nom = strtoupper(substr($chaine, 0, 1)) ;
725
	        $nom .=  1 ;
726
	    }
448 ddelon 727
        return $nom ;
598 ddelon 728
 
448 ddelon 729
    } // end of member function genereNomRepertoire
730
 
731
    /**
732
     * Permet de récupérer le nom du répertoire d'un projet.
733
     *
734
     * @return string
735
     * @access public
736
     */
737
    function getNomRepertoire( )
738
    {
739
        return $this->_nom_repertoire ;
740
    } // end of member function getNomRepertoire
741
 
742
    /**
743
     *  Ajoute une liste à un projet
744
     *  Effectue une insertion dans projet_lien_liste
745
     *
746
     * @param liste_discussion liste Une instance de la classe liste_discussion
747
     * @return void
748
     * @access public
749
     */
750
    function ajouterListe( &$liste )
751
    {
752
        $requete = "insert into projet_lien_liste set pl_id_liste=".$liste->getId().
753
                    ', pl_id_projet='.$this->_id_projet ;
754
        $resultat = $this->_db->query ($requete) ;
755
        if (DB::isError ($resultat)) {
756
            die ("Echec de la requete : $requete<br />".$resultat->getMessage()) ;
757
        }
758
    } // end of member function ajouterListe
759
 
760
    /**
761
     * Supprime la liste de discussion associée au projet
762
     *
763
     * @return void
764
     * @access public
765
     */
766
    function supprimerListe(&$liste)
767
    {
768
        $requete = 'delete from projet_lien_liste where pl_id_liste='.$liste->getId() ;
769
        $resultat = $this->_db->query ($requete) ;
770
        if (DB::isError ($resultat)) {
771
            die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ;
772
        }
773
        $requete = 'delete from projet_liste where pl_id_liste='.$liste->getId() ;
774
        $resultat = $this->_db->query ($requete) ;
775
        if (DB::isError ($resultat)) {
776
            die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ;
777
        }
778
    } // end of member function supprimerListe
779
 
780
 
781
    /**
782
     * Renvoie vrai si le projet est racine.
783
     *
784
     * @return bool
785
     * @access public
786
     */
787
    function isRacine( )
788
    {
789
        return $this->_est_racine ;
790
    } // end of member function isRacine
791
 
792
    /**
793
     * Renvoie le nombre d'inscrits au projet. Effectue une requete dans la table
794
     * projet_statut_utilisateurs
795
     *
796
     * @return int
797
     * @access public
798
     */
799
    function getNombreInscrits( )
800
    {
801
        $requete = 'select count(psu_id_utilisateur) as nbre from projet_statut_utilisateurs where psu_id_projet='.$this->_id_projet ;
802
        $resultat = $this->_db->query ($requete) ;
803
        if (DB::isError ($resultat)) {
804
            die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ;
805
        }
806
        $ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ;
807
        return $ligne->nbre ;
808
    } // end of member function getNombreInscrits
809
 
810
 
811
    /**
812
     * Renvoie un tableau contenant les identifiants des fils du projet courant.
813
     *
814
     * @return Array
815
     * @access public
816
     */
817
    function getHierarchie( )
818
    {
819
        $requete = 'select ph_id_projet_fils from projet_hierarchie where ph_id_projet_pere='.$this->_id_projet ;
820
        $resultat = $this->_db->query ($requete) ;
821
        if (DB::isError ($resultat)) {
822
            die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ;
823
        }
824
        $tableau_resultat = array() ;
825
        while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
826
            array_push ($tableau_resultat, $ligne->ph_id_projet_fils) ;
827
        }
828
        return $tableau_resultat ;
829
    } // end of member function getHierarchie
598 ddelon 830
 
448 ddelon 831
    /**
832
     * Renvoie l'identifiant du pere du projet courrant.
833
     *
834
     * @return int
835
     * @access public
836
     */
837
    function getIdPere()
838
    {
839
        $requete = 'select ph_id_projet_pere from projet_hierarchie where ph_id_projet_fils='.$this->_id_projet ;
840
        $resultat = $this->_db->query ($requete) ;
841
        if (DB::isError ($resultat)) {
842
            die ('Echec de la requete : '.$requete.'<br />'.$resultat->getMessage()) ;
843
        }
844
        $tableau_resultat = array() ;
845
        $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ;
846
        return $ligne->ph_id_projet_pere ;
847
    } // end of member function getIdPere()
848
 
849
    /**
850
     * Renvoie le nom Wiki du wikini associé au projet.
851
     *
852
     * @return string
853
     * @access public
854
     */
855
    function getWikini( )
856
    {
857
        return $this->_nom_wikini ;
858
    } // end of member function getWikini
859
 
474 alexandre_ 860
    /**
861
     * Renvoie le type du projet, ou zéro si le projet n'a pas de type.
862
     *
863
     * @return int
864
     * @access public
865
     */
866
    function getType( )
867
    {
868
        return $this->_type ;
869
    } // end of member function getType
448 ddelon 870
 
887 alexandre_ 871
	/**
872
     * Renvoie 1 si les inscriptions au projet sont modérées.
873
     *
874
     * @return int
875
     * @access public
876
     */
877
    function isModere( )
878
    {
879
        return $this->_isModere ;
880
    } // end of member function getType
448 ddelon 881
 
882
 
883
 
884
    /**
885
     * initAttributes sets all projet attributes to its default                    value make
886
     * sure to call this method within your class constructor
887
     */
888
    function initAttributes( )
889
    {
890
        $this->chemin_wikini = "projet/wikini/";
891
    }
892
 
893
 
894
} // end of projet
895
?>