20,7 → 20,7 |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
// +------------------------------------------------------------------------------------------------------+ |
|
// CVS : $Id: projetControleur.class.php,v 1.42 2008-05-21 14:36:12 alexandre_tb Exp $ |
// CVS : $Id: projetControleur.class.php,v 1.43 2008-08-25 15:06:59 alexandre_tb Exp $ |
|
/** |
* Application projet |
33,7 → 33,7 |
//Autres auteurs : |
*@author Aucun |
*@copyright Tela-Botanica 2000-2004 |
*@version $Revision: 1.42 $ |
*@version $Revision: 1.43 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
|
110,6 → 110,18 |
define ('PROJET_DROIT_CONTRIBUTEUR', 8) ; |
define ('PROJET_DROIT_AUCUN', 16) ; |
define ('PROJET_DROIT_EN_ATTENTE', 32); |
|
/** Constante pour les notifications |
* Messages envoyes par la systeme pour prevenir |
* les utilisateurs de certaines action |
*/ |
|
define ('PROJET_NOTIFICATION_DEMANDE_INSCRIPTION', 1); |
define ('PROJET_NOTIFICATION_ACCEPTATION_INSCRIPTION', 2); |
define ('PROJET_NOTIFICATION_INSCRIPTION_NOUVELLE', 3); // Pour le coordinateur quand quelqu un s inscrit au projet |
define ('PROJET_NOTIFICATION_DESINSCRIPTION_PROJET', 4); |
define ('PROJET_NOTIFICATION_NOUVEAU_DOC', 5); |
|
/** |
* class projetControleur |
* Cette classe sert a lancer les diverses applications du module projet, en |
314,10 → 326,10 |
case PROJET_ACTION_SUPPRIMER_WIKI : $retour .= $this->supprimerWiki(); |
$this->_action = PROJET_ACTION_VOIR_RESUME ; |
break ; |
case PROJET_ACTION_INSCRIPTION_LISTE : $retour .= $this->inscriptionListe() ; |
case PROJET_ACTION_INSCRIPTION_LISTE : $message_retour = $this->inscriptionListe() ; |
$this->_action = PROJET_ACTION_VOIR_FORUM ; |
break ; |
case PROJET_ACTION_DESINSCRIPTION_LISTE : $retour .= $this->desinscriptionListe() ; |
case PROJET_ACTION_DESINSCRIPTION_LISTE : $message_retour = $this->desinscriptionListe() ; |
$this->_action = PROJET_ACTION_VOIR_FORUM ; |
break ; |
case PROJET_ACTION_REFERENCER_LISTE : $retour .= $this->referencerListeExterne() ; |
380,8 → 392,8 |
} // end of member function projetControleur |
|
/** |
* Renvoie la liste des projets auquel participe la personne loguée, avec son |
* statut et un lien vers l'action pour gérer le projet. |
* Renvoie la liste des projets auquel participe la personne logguee, avec son |
* statut et un lien vers l'action pour gerer le projet. |
* |
* @return string |
* @access public |
507,8 → 519,12 |
//$projet->getListesAssociees(); |
|
include_once PROJET_CHEMIN_CLASSES.'inscription_liste.class.php'; |
include_once PROJET_CHEMIN_CLASSES.'liste_externe.class.php'; |
foreach ($projet->_listes_associes as $info_liste) { |
|
$listes_ext = new liste_externe ($this->_db) ; |
$tableau_liste = $listes_ext->getListesAssociees($this->_id_projet) ; |
if (count ($tableau_liste) == 0) { |
$inscription_liste = new inscription_liste($this->_db) ; |
if ($inscription_liste->getStatutInscrit($info_liste->getId(), $this->_auth) == 0) { |
$action_inscription = PROJET_ACTION_INSCRIPTION_LISTE ; |
524,6 → 540,7 |
$res .= '<li class="projet_niv2"><a href="'.$this->_url->getURL().'">'; |
$res .= $label_inscription.'</a></li> '; |
} |
} |
if ($isAdm || (PROJET_UTILISATEURS_COORD && $isCoord)) { |
$this->_url->addQueryString(PROJET_VARIABLE_ACTION, PROJET_ACTION_SUPPRIMER_LISTE) ; |
$texte_liste = PROJET_SUPPRIMER_LISTE ; |
592,6 → 609,8 |
$res .= '</ul>' ; |
$res .= "</div>\n" ; |
$this->_url->removeQueryString (PROJET_VARIABLE_ACTION) ; |
$vues = array (PROJET_ACTION_VOIR_RESUME, PROJET_ACTION_VOIR_DESCRIPTION, PROJET_ACTION_VOIR_WIKINI, PROJET_ACTION_VOIR_FORUM, PROJET_ACTION_VOIR_PARTICIPANT); |
if (isset($_REQUEST[PROJET_VARIABLE_ACTION]) && in_array ($_REQUEST[PROJET_VARIABLE_ACTION], $vues)) $this->_url->addQueryString(PROJET_VARIABLE_ACTION, $_REQUEST[PROJET_VARIABLE_ACTION]); |
return $res ; |
} // end of member function menuGeneral |
|
857,20 → 876,25 |
'Fichier destination : '.PROJET_CHEMIN_FICHIER.$projet->getNomRepertoire().'/'.$chemin_upload.'/'.$nouveau_nom ; |
} |
|
|
//$document->enregistrerSQL($formulaire_document->getSubmitValues(), $projet->getNomRepertoire().'/'.$chemin_upload) ; |
$retour = $document->enregistrerSQL($formulaire_document->getSubmitValues(), $nouveau_nom); |
$document->enregistrerSQL($formulaire_document->getSubmitValues(), $nouveau_nom); |
// On place a 1 la colonne p_avoir_document |
if (!$projet->avoirDocument()) $projet->setAvoirDocument(true); |
|
// On ajoute une information de session |
$_SESSION['formulaire_document'] = 'valide'; |
|
// Pour notification coordinateur |
include_once PROJET_CHEMIN_CLASSES.'annuaire.class.php' ; |
$utilisateur = new annuaire($this->_db, array('identifiant' => PROJET_CHAMPS_ID, |
'mail' => PROJET_CHAMPS_MAIL, 'table' => PROJET_ANNUAIRE, |
'nom'=> PROJET_CHAMPS_NOM, 'prenom' => PROJET_CHAMPS_PRENOM)) ; |
$utilisateur->setId($this->_auth->getAuthData(PROJET_CHAMPS_ID)) ; |
$this->notifierCoordinateurs(PROJET_NOTIFICATION_NOUVEAU_DOC, $utilisateur); |
} else { |
return $formulaire_document->toHTML() ; |
} |
return $retour; |
unset ($projet) ; |
} // end of member function nouveauFichierValidation |
} |
|
/** |
* Valide le formulaire et appelle la fonction d'insertion. |
1028,7 → 1052,7 |
$vue_liste_document->construitListe ($liste_documents, $droits) ; |
|
$wiki_res = '' ; |
// Les wikinis associés au projet |
// Les wikinis associes au projet |
if ($projet->getWikini()) { |
$wiki_res .= '<div><a href="'.PROJET_URL_WIKINI.'wakka.php?wiki=PagePrincipale&wikini='.$projet->getWikini().'">'.PROJET_URL_WIKINI.'</a>' ; |
if ($this->_auth->getAuth() && $isCoord) { |
1040,7 → 1064,7 |
$wiki_res .= '<div>'.PROJET_WIKINI_PAS.'</div>'."\n" ; |
} |
// On charge les listes de discussion du projet |
// Pour le moment seul ezmlm est supportée |
// Pour le moment seul ezmlm est supportee |
|
$projet->getListesAssociees(); |
$sortie_liste = '' ; |
1094,7 → 1118,7 |
$show_msg = new ezmlm_msgdisplay(); |
$show_msg->listdir = $liste->listdir ; |
$show_msg->forcehref = $this->_url->getURL(); |
// actionargs[0] contient le nom du répertoire et actionargs[1] le nom du fichier |
// actionargs[0] contient le nom du repertoire et actionargs[1] le nom du fichier |
// On appelle la fonction qui affiche un fichier |
$show_msg->display($liste->actionargs[0] . "/" . $liste->actionargs[1]); |
break; |
1485,13 → 1509,29 |
include_once PROJET_CHEMIN_CLASSES.'participe.class.php' ; |
$participant = new participe($this->_db) ; |
|
if (!$projet->avoirListe()) { |
// On controle si la liste est externe (yahoo) auquel cas on ne presente pas l inscription |
include_once PROJET_CHEMIN_CLASSES.'liste_externe.class.php' ; |
$liste_ext = new liste_externe($this->_db); |
$listes = $liste_ext->getListesAssociees($this->_id_projet); |
$info_liste = $liste_ext->getInfoListe($listes[0]); |
if (count ($listes) != 0) { |
$avoir_liste_externe = true; |
$msg = ''; |
$msg = 'Pour vous inscrire à la liste de discussion, hébergée par Yahoo Groupes, <a href="mailto:'; |
$msg .= $info_liste->AGO_A_MAILABO.'">cliquez ici</a>'; |
} else { |
$avoir_liste_externe = false; |
} |
if (!$projet->avoirListe() || $avoir_liste_externe) { |
if ($projet->isModere()) { |
$participant->setStatut(3, $this->_auth->getAuthData (PROJET_CHAMPS_ID), $this->_id_projet) ; |
} else { |
$participant->setStatut(2, $this->_auth->getAuthData (PROJET_CHAMPS_ID), $this->_id_projet) ; |
$message_retour = '<p class="information">Votre inscription a bien été prise en compte'.$msg.'</p>'; |
} |
return $this->mesProjets() ; |
$message_retour = '<p class="information">Votre inscription a bien été prise en compte. '.$msg.'</p>'; |
include_once PROJET_CHEMIN_APPLI.'actions/resume.php' ; |
return $retour; |
} |
} |
if (isset($_POST['valider_inscription_projet'])) { |
1505,6 → 1545,7 |
if (!$projet->isModere()) { |
$participant->setStatut(2, $this->_auth->getAuthData (PROJET_CHAMPS_ID), $this->_id_projet) ; |
|
if ($_POST['radio_inscription_liste'] == 2) { |
include_once PROJET_CHEMIN_CLASSES.'inscription_liste.class.php' ; |
$projet->getListesAssociees() ; |
$inscription_liste = new inscription_liste($this->_db) ; |
1511,51 → 1552,23 |
$inscription_liste->inscrireUtilisateur( $utilisateur, |
$projet->_listes_associes[0], |
$_POST['radio_inscription_liste']) ; |
} |
$this->notifierCoordinateurs(PROJET_NOTIFICATION_INSCRIPTION_NOUVELLE, $utilisateur); |
} else { |
$participant->setStatut(3, $this->_auth->getAuthData (PROJET_CHAMPS_ID), $this->_id_projet) ; |
$tableau_coordinateur = $participant->getCoordinateurs($this->_id_projet) ; |
|
$entetes['From'] = $this->_auth->getUserName(); |
$entetes['To'] = ''; |
$entetes['Subject'] = PROJET_DEMANDE_INSCRIPTION ; |
$entetes['Date'] = date ('D, M j G:i:s \C\E\S\T Y') ; |
$entetes['Message-ID'] = md5(time()) ; |
$entetes['reply-to'] = '' ; |
$entetes['Content-Type'] = 'text/plain' ; |
|
$objet_mail =& Mail::factory('smtp'); |
require_once PROJET_CHEMIN_BIBLIOTHEQUE_API.'pear/HTML/Template/IT.php'; |
$tpl = new HTML_Template_IT() ; |
// Le gabarit du mail est dans un template |
// template 1 |
$requete = 'select pt_template from projet_template where pt_id_template=1'. |
' and pt_i18n like "%'.PROJET_LANGUE_DEFAUT.'"' ; |
|
if (!$tpl -> setTemplate($this->_db->getOne ($requete))) { |
echo 'erreur' ; |
$this->notifierCoordinateurs(PROJET_NOTIFICATION_DEMANDE_INSCRIPTION, $utilisateur); |
} |
$tpl->setVariable('nom', $utilisateur->getInfo( 'nom')) ; |
$tpl->setVariable('prenom', $utilisateur->getInfo( 'prenom')) ; |
$tpl->setVariable('nom_projet', $projet->getTitre()) ; |
$tpl->setVariable('lien', str_replace ('&', '&', $this->_url->getURL())) ; |
|
foreach ($tableau_coordinateur as $coordinateur) { |
$entetes['To'] .= $coordinateur[3].','; // Le champs 3 est le mail |
|
} |
// On enleve la virgule finale |
|
$entetes['To'] = substr ($entetes['To'], 0, -1); |
|
// on envoie le mail |
$objet_mail->send($entetes['To'], $entetes, html_entity_decode ($tpl->get())); |
} |
} |
|
if ($this->_presentation != 'arbre') { |
if ($projet->isModere()) return '<h1>'.$projet->getTitre().'</h1>'. |
str_replace ('nom_du_projet', $projet->getTitre(), PROJET_LAIUS_INSCRIPTION_MODERE); |
else $this->_action = PROJET_ACTION_VOIR_RESUME; |
else { |
$message_retour = '<p class="information">Votre inscription a bien été prise en compte'.$msg.'</p>'; |
include_once PROJET_CHEMIN_APPLI.'actions/resume.php' ; |
return $retour; |
} |
} else { |
$this->_action = PROJET_ACTION_VOIR_RESUME; |
} |
1588,10 → 1601,11 |
$utilisateur->setId($this->_auth->getAuthData(PROJET_CHAMPS_ID)) ; |
$inscription_liste = new inscription_liste($this->_db) ; |
$inscription_liste->inscrireUtilisateur( $utilisateur, $projet->_listes_associes[0], 2) ; // 2 est la statut inscription normale |
return '<p class="information">Vous êtes inscrit à la liste</p>'; |
} // end of member function inscriptionListe |
|
/** |
* Inscrit l'utilisateur logué à la liste dont le paraître est en post. |
* Inscrit l'utilisateur loggue a la liste dont le parametre est en post. |
* |
* @return void |
* @access public |
1610,10 → 1624,11 |
$utilisateur->setId($this->_auth->getAuthData(PROJET_CHAMPS_ID)) ; |
$inscription_liste = new inscription_liste($this->_db) ; |
$inscription_liste->desinscrireUtilisateur( $utilisateur, $projet->_listes_associes[0], $_GET['inscription_liste']) ; |
return '<p class="information">Vous avez été désinscrit de la liste</p>'; |
} |
} // end of member function inscriptionListe |
/** |
* desinscrit un utilisateur à un projet |
* desinscrit un utilisateur d un projet |
* |
* @return void |
* @access public |
1621,9 → 1636,14 |
function desinscriptionProjet( ) |
{ |
include_once PROJET_CHEMIN_CLASSES.'participe.class.php' ; |
include_once PROJET_CHEMIN_CLASSES.'annuaire.class.php' ; |
$participant = new participe($this->_db) ; |
$utilisateur = new annuaire($this->_db, array('identifiant' => PROJET_CHAMPS_ID, |
'mail' => PROJET_CHAMPS_MAIL, 'table' => PROJET_ANNUAIRE, |
'nom'=> PROJET_CHAMPS_NOM, 'prenom' => PROJET_CHAMPS_PRENOM)) ; |
$utilisateur->setId($this->_auth->getAuthData(PROJET_CHAMPS_ID)) ; |
|
// Le statut 4 désinscrit l'utilisateur, dans la méthode setStatut |
// Le statut 4 desinscrit l'utilisateur, dans la methode setStatut |
$participant->setStatut(4, $this->_auth->getAuthData (PROJET_CHAMPS_ID), $this->_id_projet) ; |
include_once PROJET_CHEMIN_CLASSES.'projet.class.php' ; |
$projet = new projet ($this->_db, $this->_id_projet) ; |
1636,16 → 1656,28 |
$desinscription= new inscription_liste($this->_db) ; |
$desinscription->desinscrireUtilisateur($annuaire, $projet->_listes_associes[0]) ; |
} |
$this->notifierCoordinateurs(PROJET_NOTIFICATION_DESINSCRIPTION_PROJET, $utilisateur); |
include_once PROJET_CHEMIN_CLASSES.'liste_externe.class.php'; |
$liste_ext = new liste_externe($this->_db); |
$listes = $liste_ext->getListesAssociees($this->_id_projet); |
$info_liste = $liste_ext->getInfoListe($listes[0]); |
$msg = ''; |
if (count ($listes) != 0) { |
$msg = 'Pensez si vous le souhaitez à vous désinscrire de la liste de discussion, hébergée par Yahoo Groupes.'; |
$msg .= ' Vous pouvez le faire en <a href="mailto:'; |
$msg .= $info_liste->AGO_A_MAILDESA.'">cliquez ici</a>'; |
} |
if ($this->_presentation != 'arbre') { |
$message_retour = '<p class="information">Votre désinscription a bien été prise en compte. '.$msg.'</p>'; |
include_once PROJET_CHEMIN_APPLI.'actions/resume.php' ; |
return $retour ; |
} else { |
$this->_action = PROJET_ACTION_VOIR_RESUME; |
} |
} // end of member function inscriptionProjet |
} |
|
/** |
* Renvoie le formulaire de création d'un wiki |
* Renvoie le formulaire de creation d'un wiki |
* |
* @return void |
* @access public |
1851,16 → 1883,98 |
return '<p class="erreur">'.$messageErreur[$valeur].'</p>' ; |
} // end of member function messageErreur |
|
/** Envoie de mail pour prevenir les coordinateurs d une action sur le projet |
* |
* |
*/ |
|
function notifierCoordinateurs ($notification, $utilisateur) { |
|
include_once PROJET_CHEMIN_CLASSES.'projetTemplate.class.php'; |
|
switch ($notification) { |
case PROJET_NOTIFICATION_DEMANDE_INSCRIPTION : |
$sujet = PROJET_TEMPLATE_DEMANDE_INSCRIPTION_SUJET; |
$corps = PROJET_TEMPLATE_DEMANDE_INSCRIPTION_CORPS; |
break; |
case PROJET_NOTIFICATION_INSCRIPTION_NOUVELLE : |
$sujet = PROJET_TEMPLATE_INSCRIPTION_NOUVELLE_SUJET; |
$corps = PROJET_TEMPLATE_INSCRIPTION_NOUVELLE_CORPS; |
break; |
case PROJET_NOTIFICATION_DESINSCRIPTION_PROJET : |
$sujet = PROJET_TEMPLATE_DESINSCRIPTION_SUJET; |
$corps = PROJET_TEMPLATE_DESINSCRIPTION_CORPS; |
break; |
case PROJET_NOTIFICATION_NOUVEAU_DOC: |
$sujet = PROJET_TEMPLATE_NOUVEAU_DOC_SUJET; |
$corps = PROJET_TEMPLATE_NOUVEAU_DOC_CORPS; |
break; |
|
} |
|
include_once PROJET_CHEMIN_CLASSES.'projet.class.php' ; |
$projet = new projet ($this->_db, $this->_id_projet) ; |
include_once PROJET_CHEMIN_CLASSES.'participe.class.php'; |
$participant = new participe($this->_db) ; |
$tableau_coordinateur = $participant->getCoordinateurs($this->_id_projet) ; |
|
$objet_mail =& Mail::factory('smtp'); |
|
|
|
$modele = new projetTemplate($GLOBALS['projet_db']); |
|
$sujet_mail = $modele->getTemplate($sujet, PROJET_LANGUE_DEFAUT); |
$corps_mail = $modele->getTemplate($corps, PROJET_LANGUE_DEFAUT); |
|
if (PEAR::isError($sujet_mail)) $sujet_mail->raiseError ($sujet_mail->getMessage().'<br />'.$sujet_mail->getDebugInfo()); |
|
$corps_mail = str_replace ('{nom}', $utilisateur->getInfo( 'nom'), $corps_mail); |
$corps_mail = str_replace ('{prenom}', $utilisateur->getInfo( 'prenom'), $corps_mail); |
$corps_mail = str_replace ('{nom_projet}', $projet->getTitre(), $corps_mail); |
$corps_mail = str_replace ('{lien}', str_replace ('&', '&', $this->_url->getURL()), $corps_mail); |
|
$entetes['From'] = PROJET_MAIL_ADMINISTRATEUR; |
$entetes['To'] = ''; |
$entetes['Subject'] = trim ($sujet_mail) ; // le trim est necessaire pour enlever d eventuels retour-chariot qui foutent el l air le message |
$entetes['Date'] = date ('D, M j G:i:s \C\E\S\T Y') ; |
$entetes['Message-ID'] = md5(time()) ; |
$entetes['reply-to'] = $this->_auth->getUserName(); |
$entetes['Content-Type'] = 'text/plain' ; |
|
foreach ($tableau_coordinateur as $coordinateur) { |
$entetes['To'] .= $coordinateur[3].','; // Le champs 3 est le mail |
|
} |
// On enleve la virgule finale |
|
$entetes['To'] = substr ($entetes['To'], 0, -1); |
|
// on envoie le mail |
$objet_mail->send($entetes['To'], $entetes, html_entity_decode ($corps_mail)); |
} |
|
|
} // end of projetControleur |
|
class bouton { |
static function toHTML($lien, $label, $id) { |
return '<div id="bouton_'.$id.'" class="projet_bouton_action">' . |
'<a href="'.$lien.'"><img src="'.PROJET_CHEMIN_ICONES.$id.'.png" alt="'.$label.'" />'.$label.'</a></div>'; |
static function toHTML($lien, $label, $id, $class='projet_bouton_action') { |
|
if ($lien != '#') { |
$balise_a_debut = '<a href="'.$lien.'"'.($id == 'cross'? ' onclick="javascript:return confirm(\''.$label.' ?\');"':'').'>'; |
$balise_a_fin = '</a>'; |
} else { |
$balise_a_debut = ''; |
$balise_a_fin = ''; |
} |
return '<div id="bouton_'.$id.'" class="'.$class.'">' . |
$balise_a_debut.'<img src="'.PROJET_CHEMIN_ICONES.$id.'.png" alt="'.$label.'" />'.$label.$balise_a_fin.'</div>'; |
} |
|
?> |
} |
/* +--Fin du code ----------------------------------------------------------------------------------------+ |
* |
* $Log: not supported by cvs2svn $ |
* |
* +-- Fin du code ----------------------------------------------------------------------------------------+ |
*/ |
?> |