Subversion Repositories Applications.projet

Rev

Rev 15 | Rev 59 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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