Subversion Repositories Applications.papyrus

Rev

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

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