public function afficher($idEvenement = null, $modeAffichage = '', $idHistoriqueEvenement = null, $paramChampCache = array(), $params = array())
    {
        $authentification = new ArchiAuthentification();
        $estConnecte = $authentification->estConnecte();
        $estAdmin = $authentification->estAdmin();
        $estModerateur = $authentification->estModerateur();
        $userId = $authentification->getIdUtilisateur();
        $html = '';
        $erreurObject = new objetErreur();
        $t = new Template('modules/archi/templates/');
        $t->set_filenames(array('ev' => 'evenement.tpl'));
        $isMH = false;
        $isISMH = false;
        $isAffichageSingleEvenement = false;
        $listeGroupeAdressesAffichees = array();
        // liste des groupes d'adresses reellement affichés , donc dans cette liste ne figure pas les groupe d'adresses ou il n'y a pas d'evenements liés
        $u = new archiUtilisateur();
        // on renvoi le nom de type de structure ( ceci sert a voir si on affiche aussi le type de structure sur l'evenement suivant du groupe d'adresse (pour eviter les redondances) )
        $retourIdTypeStructure = "";
        // on renvoi le titre de l'evenement pour l'affichage des ancres
        $retourTitreAncre = "";
        $retourNomTypeEvenement = "";
        $retourDate = "";
        $retourDateFin = "";
        $nomTable = "evenements";
        $adresse = new archiAdresse();
        $imageObject = new imageObject();
        // objet image du framework
        $idAdresseCourante = 0;
        if (isset($this->variablesGet['archiIdAdresse']) && $this->variablesGet['archiIdAdresse'] != '') {
            $idAdresseCourante = $this->variablesGet['archiIdAdresse'];
        }
        $t->assign_vars(array("divDisplayMenuAction" => "none"));
        if (!isset($idEvenement) || $idEvenement == null || $idEvenement == '') {
            if (isset($this->variablesGet['archiIdEvenement']) && $this->variablesGet['archiIdEvenement'] != '') {
                if ($modeAffichage != 'consultationHistoriqueEvenement') {
                    $idEvenement = $this->variablesGet['archiIdEvenement'];
                }
            }
        }
        // fabrication de la requete en fonction des parametres
        $sqlEvenementsAdressesLiees = "";
        if (empty($idEvenement)) {
            if ($modeAffichage == 'consultationHistoriqueEvenement') {
                // on affiche les idHistoriqueEvenement de l'evenement choisi
                $isAffichageSingleEvenement = true;
                $sqlWhere = 'hE.idHistoriqueEvenement=' . $idHistoriqueEvenement;
                $nomTable = "historiqueEvenement";
            }
            if (isset($this->variablesGet['modeAffichage']) && $this->variablesGet['modeAffichage'] == 'comparaisonEvenement') {
                // debug pour eviter un message d'erreur si l'evenement n'existe pas dans l'affichage de la comparaison d'evenement ancien/nouveau
            }
        } else {
            if ($modeAffichage == 'simple') {
                // l'idEvenement en parametre correspond a l'evenement enfant a afficher
                $sqlWhere = 'hE.idEvenement=' . $idEvenement;
            } else {
                // l'idEvenement en parametres correspond a un evenement enfant on va donc chercher l'evenement parent qui correspond au groupe d'adresses
                $sqlWhere = '(hE.idEvenement=
						IF (
						(SELECT _eE.idEvenement FROM _evenementEvenement _eE
						LEFT JOIN evenements USING (idEvenement)
						LEFT JOIN typeEvenement tE USING (idTypeEvenement) WHERE idEvenementAssocie=' . $idEvenement . ' LIMIT 1),
						(SELECT _eE.idEvenement FROM _evenementEvenement _eE
						LEFT JOIN evenements USING (idEvenement)
						LEFT JOIN typeEvenement tE USING (idTypeEvenement) WHERE idEvenementAssocie=' . $idEvenement . ' LIMIT 1),
						' . $idEvenement . ')) ';
                // si on est en mode de deplacement d'image
                // ou de selection de titre
                // on rajoute le formulaire sur la page
                if ($estConnecte && (isset($this->variablesGet['afficheSelectionImage']) && $this->variablesGet['afficheSelectionImage'] == '1' || isset($this->variablesGet['afficheSelectionTitre']) && $this->variablesGet['afficheSelectionTitre'] == '1')) {
                    $html .= "<form action='' name='formulaireEvenement' method='POST' enctype='multipart/form-data' id='formulaireEvenement'>\n\t\t\t\t\t\t\t<input type='hidden' name='actionFormulaireEvenement' id='actionFormulaireEvenement' value=''>";
                }
            }
        }
        if (isset($sqlWhere)) {
            /*
             **  REQUÊTE
             */
            // recuperation des données de l'evenement groupe d'adresses
            // on ne fait pas de group by   having
            // on prend simplement le dernier enregistrement classé selon l'idHistoriqueEvenement
            // et donc le nombre de resultats de la requete permet de recuperer le nombre d'historiques sur l'evenement dans la foulée
            $sql = 'SELECT  hE.idEvenement,
					hE.titre, hE.idSource,
					hE.idTypeStructure,
					hE.idTypeEvenement,
					hE.description,
					hE.dateDebut,
					hE.dateFin,
					hE.dateDebut,
					hE.dateFin,
					tE.nom AS nomTypeEvenement,
					tS.nom AS nomTypeStructure,
					s.nom AS nomSource,
					u.nom AS nomUtilisateur,
					u.prenom as prenomUtilisateur,
					tE.groupe,
					hE.ISMH ,
					hE.MH,
					date_format(hE.dateCreationEvenement,"' . _("%e/%m/%Y à %kh%i") . '") as dateCreationEvenement,
					hE.isDateDebutEnviron as isDateDebutEnviron,
					u.idUtilisateur as idUtilisateur,
					hE.numeroArchive as numeroArchive

					FROM ' . $nomTable . ' hE
					LEFT JOIN source s      ON s.idSource = hE.idSource
					LEFT JOIN typeStructure tS  ON tS.idTypeStructure = hE.idTypeStructure
					LEFT JOIN typeEvenement tE  ON tE.idTypeEvenement = hE.idTypeEvenement
					LEFT JOIN utilisateur u     ON u.idUtilisateur = hE.idUtilisateur
					WHERE ' . $sqlWhere . '
			ORDER BY hE.idEvenement DESC';
            $rep = $this->connexionBdd->requete($sql);
        } else {
            echo "<p><strong>Cette fiche n'existe plus, merci de <a href='" . $this->creerUrl("", "contact") . "'>contacter un administrateur</a>.</strong></p>";
        }
        // lien vers le formulaire d'ajout d'une adresse pour un evenement parent
        // recherche de l'evenement parent
        $idEvenementGroupeAdresse = $this->getParent($idEvenement);
        if ($idEvenementGroupeAdresse == 0) {
            $idEvenementGroupeAdresse = $idEvenement;
            // pas de parent trouvé , donc l'evenement est lui meme un parent
        }
        // ***************************
        // gestion mode deplacement d'images
        // ***************************
        $styleColorDeplacementActif = "";
        $afficheSelectionImages = 1;
        if ($estConnecte && isset($this->variablesGet['afficheSelectionImage']) && $this->variablesGet['afficheSelectionImage'] == '1') {
            $styleColorDeplacementActif = "color:red;";
            $afficheSelectionImages = 0;
        }
        $t->assign_vars(array('urlLierAdresseAEvenement' => $this->creerUrl('', 'formulaireGroupeAdresses', array('archiIdEvenementGroupeAdresses' => $idEvenementGroupeAdresse)), 'urlAjouterEvenement' => $this->creerUrl('', 'ajouterSousEvenement', array('archiIdEvenement' => $idEvenementGroupeAdresse)), 'urlDeplacerImages' => $this->creerUrl('', 'evenement', array('idEvenement' => $idEvenementGroupeAdresse, 'afficheSelectionImage' => $afficheSelectionImages)), 'styleModeDeplacementImageActif' => "{$styleColorDeplacementActif};"));
        // **********************************
        // gestion selection du titre du groupe d'adresse
        // **********************************
        $styleColorSelectionTitreActif = "";
        $afficheSelectionTitre = 1;
        if ($estConnecte && isset($this->variablesGet['afficheSelectionTitre']) && $this->variablesGet['afficheSelectionTitre'] == '1') {
            $styleColorSelectionTitreActif = "color:red;";
            $afficheSelectionTitre = 0;
        }
        $t->assign_vars(array('urlSelectionTitreAdresse' => $this->creerUrl('', 'evenement', array('idEvenement' => $idEvenementGroupeAdresse, 'afficheSelectionTitre' => $afficheSelectionTitre)), 'styleModeChoixTitre' => $styleColorSelectionTitreActif));
        // *******************************************
        // gestion selection de l'image principale du groupe d'adresse
        // *******************************************
        $styleColorSelectionImagePrincipaleActif = "";
        $afficheSelectionImagePrincipale = 1;
        if ($estConnecte && isset($this->variablesGet['afficheSelectionImagePrincipale']) && $this->variablesGet['afficheSelectionImagePrincipale'] == '1') {
            $styleColorSelectionImagePrincipaleActif = "color:red";
            $afficheSelectionImagePrincipale = 0;
        }
        $t->assign_vars(array('urlSelectionImagePrincipale' => $this->creerUrl('', 'evenement', array('idEvenement' => $idEvenementGroupeAdresse, 'afficheSelectionImagePrincipale' => $afficheSelectionImagePrincipale)), 'styleModeSelectionImagePrincipale' => $styleColorSelectionImagePrincipaleActif));
        // *******************************************
        // gestion positionnement evenements
        // *******************************************
        $styleColorPositionnementEvenements = "";
        $affichePositionnementEvenements = 1;
        if ($estConnecte && isset($this->variablesGet['affichePositionnementEvenements']) && $this->variablesGet['affichePositionnementEvenements'] == '1') {
            $styleColorPositionnementEvenements = "color:red";
            $affichePositionnementEvenements = 0;
            $this->addToJsHeader($imageObject->getJSFunctionsDragAndDrop(array('withBalisesScript' => true)));
            // rajoute les fonctions de deplacement d'elements dans le header du formulaire
        }
        $t->assign_vars(array('urlPositionnementEvenements' => $this->creerUrl('', 'evenement', array('archiIdAdresse' => $idAdresseCourante, 'idEvenement' => $idEvenementGroupeAdresse, 'affichePositionnementEvenements' => $affichePositionnementEvenements)), 'styleModePositionnementEvenements' => $styleColorPositionnementEvenements));
        if (isset($sqlWhere) && mysql_num_rows($rep) > 0) {
            $nbHistorique = mysql_num_rows($rep) - 1;
            // on ne compte pas le groupe d'adresse qui a le meme idEvenement
            $res = mysql_fetch_object($rep);
            $idEvenement = $res->idEvenement;
            // si c'est un groupe d'adresse, on n'affiche pas le détail de l'événement, juste ses événements enfants
            if ($res->groupe != 3) {
                if ($modeAffichage === 'simple' || $modeAffichage == 'consultationHistoriqueEvenement') {
                    $t->assign_block_vars('simple', array());
                    // si l'evenement est un evenement externe au groupe d'adresse , on affiche un menu different a droite
                    if (isset($params['isLieFromOtherAdresse']) && $params['isLieFromOtherAdresse'] == true) {
                        // on recupere d'abord l'idAdresse de cet evenement externe
                        $reqAdresses = $adresse->getIdAdressesFromIdEvenement(array('idEvenement' => $idEvenement));
                        $resAdresses = $this->connexionBdd->requete($reqAdresses);
                        $fetchAdressesExternes = mysql_fetch_assoc($resAdresses);
                        $intituleAdresse = $adresse->getIntituleAdresseFrom($fetchAdressesExternes['idAdresse'], 'idAdresse');
                        //$t->assign_vars(array("divDisplayMenuAction"=>"none"));
                        $ancrePositionAdresseLiee = "";
                        $positionSurAdresseOrigine = $adresse->getPositionFromEvenement($idEvenement);
                        if ($positionSurAdresseOrigine != '' && $positionSurAdresseOrigine != '0') {
                            $ancrePositionAdresseLiee = "#" . $positionSurAdresseOrigine;
                        }
                        $t->assign_vars(array("urlEvenementExterne" => "<small>" . _("Adresse d'origine :") . " <a href='" . $this->creerUrl('', 'adresseDetail', array('archiIdAdresse' => $fetchAdressesExternes['idAdresse'])) . $ancrePositionAdresseLiee . "'>" . $intituleAdresse . "</a></small>"));
                    } else {
                        if ($modeAffichage != 'consultationHistoriqueEvenement') {
                            $t->assign_vars(array("divDisplayMenuAction" => "table"));
                        }
                    }
                    if ($estConnecte) {
                        $t->assign_block_vars('simple.menuAction', array());
                        if ($modeAffichage != 'consultationHistoriqueEvenement') {
                            if (isset($params['isLieFromOtherAdresse']) && $params['isLieFromOtherAdresse'] == true) {
                                $t->assign_vars(array("divDisplayMenuAction" => "none"));
                                // si un utilisateur est connecté , et que l'evenement est un evenement lie , on affiche pas le menu d'action
                            } else {
                                $t->assign_vars(array("divDisplayMenuAction" => "table"));
                                // si un utilisateur est connecté et que l'evenement n'est pas un evenement lié, on affiche le menu d'action
                            }
                        } else {
                            $t->assign_vars(array("divDisplayMenuAction" => "none"));
                            // si on est en mode d'affichage de l'historique d'un evenement, on ne propose pas de menu action
                        }
                        if ($u->isAuthorized('evenement_lier_adresses', $userId)) {
                            if (!archiPersonne::isPerson($idEvenementGroupeAdresse) && ($u->getIdProfil($userId) == 4 || $u->isModerateurFromVille($userId, $idEvenementGroupeAdresse, 'idEvenementGroupeAdresse'))) {
                                $t->assign_block_vars('simple.menuAction.afficheElementMenuLierAdresse', array());
                            }
                        }
                    }
                    if ($estAdmin) {
                        $t->assign_block_vars('simple.menuAction.isAdmin', array());
                    }
                    if ($u->isAuthorized('evenement_supprimer', $userId)) {
                        $isModerateurFromVilleCourante = false;
                        if ($authentification->getIdProfil() == 3) {
                            //moderateur
                            $arrayVillesModerees = $u->getArrayVillesModereesPar($userId);
                            $idVilleAdresseCourante = $adresse->getIdVilleFrom($idEvenement, 'idEvenement');
                            if (in_array($idVilleAdresseCourante, $arrayVillesModerees)) {
                                $isModerateurFromVilleCourante = true;
                            }
                        }
                        if ($authentification->getIdProfil() == 4 || $isModerateurFromVilleCourante) {
                            // est on administrateur ou moderateur de la ville ?
                            $t->assign_block_vars('simple.menuAction.isAdminOrModerateurFromVille', array());
                            if ($estConnecte && $estAdmin && isset($this->variablesGet['afficheSelectionImage']) && $this->variablesGet['afficheSelectionImage'] == '1') {
                                $t->assign_block_vars('simple.menuAction.isAdmin.isAffichageSelectionImages', array());
                            }
                        }
                    }
                    if (!archiPersonne::isPerson($idEvenementGroupeAdresse) && $u->isAuthorized('evenement_deplacer', $userId)) {
                        $t->assign_block_vars('simple.menuAction.afficheElementMenuDeplacerEvenement', array());
                    }
                    if ($estConnecte && $estAdmin && isset($this->variablesGet['afficheSelectionImage']) && $this->variablesGet['afficheSelectionImage'] == '1') {
                        //$t->assign_block_vars('simple.menuAction.isAdminOrModerateurFromVille',array());
                    }
                }
                // ******************************************************************************************************
                // Affichage des dates
                $dateTxt = "";
                $environDateDebutTxt = "";
                if ($res->isDateDebutEnviron == '1') {
                    $environDateDebutTxt = "environ ";
                }
                switch (strtolower($res->nomTypeEvenement)) {
                    case 'information (nouveautés)':
                    case 'extension':
                    case 'inauguration':
                    case 'exposition':
                        $articleAvantTypeEvenement = "de l'";
                        break;
                    default:
                        $articleAvantTypeEvenement = "de";
                        break;
                }
                if (substr($res->dateDebut, 5) == "00-00") {
                    $datetime = substr($res->dateDebut, 0, 4);
                } else {
                    $datetime = $res->dateDebut;
                }
                if ($res->nomTypeEvenement == 'Construction') {
                    if ($res->dateDebut != '0000-00-00') {
                        $dateTxt = _("Année de construction :") . " <time itemprop='startDate' datetime='" . $datetime . "'>" . $environDateDebutTxt . $this->date->toFrenchAffichage($res->dateDebut) . "</time>";
                    }
                    if ($res->dateFin != '0000-00-00') {
                        $dateTxt .= " (-> " . $this->date->toFrenchAffichage($res->dateFin) . ")";
                        $retourDateFin = " (-> " . $this->date->toFrenchAffichage($res->dateFin) . ")";
                    }
                } else {
                    if ($res->dateDebut != '0000-00-00') {
                        if ($res->MH != '1' && $res->ISMH != '1') {
                            if (pia_strlen($this->date->toFrench($res->dateDebut)) <= 4) {
                                if (archiPersonne::isPerson($idEvenementGroupeAdresse)) {
                                    $nomTypeEvenement = "début";
                                } else {
                                    $nomTypeEvenement = strtolower($res->nomTypeEvenement);
                                }
                                $dateTxt = _("Année") . " " . $articleAvantTypeEvenement . " <time itemprop='startDate' datetime='" . $datetime . "'>" . $nomTypeEvenement . " : {$environDateDebutTxt}" . $this->date->toFrenchAffichage($res->dateDebut) . "</time>";
                            } else {
                                if (archiPersonne::isPerson($idEvenementGroupeAdresse)) {
                                    $typeEvenement = "";
                                } else {
                                    $typeEvenement = $articleAvantTypeEvenement . " " . strtolower($res->nomTypeEvenement);
                                }
                                $dateTxt = _("Date") . " <time itemprop='startDate' datetime='" . $datetime . "'>" . $typeEvenement . " : {$environDateDebutTxt}" . $this->date->toFrenchAffichage($res->dateDebut) . "</time>";
                            }
                        }
                        if ($res->MH == '1') {
                            $dateTxt = "<b>" . _("Classement Monument Historique") . "</b> {$environDateDebutTxt} le " . $this->date->toFrenchAffichage($res->dateDebut);
                            $isMH = true;
                        }
                        if ($res->ISMH == '1') {
                            $dateTxt = "<b>" . _("Inscription à l'Inventaire Supplémentaire des Monuments Historiques") . "</b> {$environDateDebutTxt} : " . $this->date->toFrenchAffichage($res->dateDebut);
                            if ($res->MH == '1') {
                                $dateTxt .= "<br><b>" . _("Classement Monument Historique") . "</b> {$environDateDebutTxt} : " . $this->date->toFrenchAffichage($res->dateDebut);
                            }
                            $isISMH = true;
                        }
                    }
                    if ($res->dateFin != '0000-00-00') {
                        if (pia_strlen($this->date->toFrench($res->dateFin)) <= 4) {
                            $dateTxt .= " " . _("à") . " " . $this->date->toFrenchAffichage($res->dateFin);
                        } else {
                            $dateTxt .= " " . _("au") . " " . $this->date->toFrenchAffichage($res->dateFin);
                        }
                    }
                }
                // ******************************************************************************************************
                // on renseigne la variable nomTypeStructure pour la renvoyer au retour de la fonction
                $retourIdTypeStructure = $res->idTypeStructure;
                // idem pour le titre qui sera affiché en resume pour le tableau de liens
                $retourTitreAncre = "";
                if (stripslashes($res->titre) != '') {
                    $retourTitreAncre .= htmlspecialchars(stripslashes($res->titre));
                } else {
                    $retourTitreAncre .= _("Sans titre");
                }
                $retourNomTypeEvenement = $res->nomTypeEvenement;
                $retourDate = $environDateDebutTxt . " " . $this->date->toFrench($res->dateDebut);
                $dateDebut = $res->dateDebut;
                if (isset($paramChampCache['idTypeStructurePrecedent']) && $res->idTypeStructure == $paramChampCache['idTypeStructurePrecedent']) {
                    $typeStructure = '';
                } else {
                    if (archiPersonne::isPerson($idEvenementGroupeAdresse)) {
                        $typeStructure = "";
                    } else {
                        $typeStructure = "Structure : <a href='" . $this->creerUrl('', 'evenementListe', array('selection' => 'typeStructure', 'id' => $res->idTypeStructure)) . "'>" . $res->nomTypeStructure . "</a><br>";
                    }
                }
                $source = "";
                if ($res->idSource != 0) {
                    $source = "Source : <a href='" . $this->creerUrl('', 'listeAdressesFromSource', array('source' => $res->idSource, 'submit' => 'Rechercher')) . "' onmouseover=\"document.getElementById('calqueDescriptionSource').style.top=(getScrollHeight()+150)+'px';\n\t\t\t\t\t\t\t\t\tdocument.getElementById('calqueDescriptionSource').style.display='block';\n\t\t\t\t\t\t\t\t\tdocument.getElementById('iframe').src='" . $this->creerUrl('', 'descriptionSource', array('archiIdSource' => $res->idSource, 'noHeaderNoFooter' => 1)) . "';\"\n\t\t\t\t\t\t\t\t\t>" . stripslashes($res->nomSource) . "</a><br>";
                } else {
                    // exception temporaire (?)
                    if ($res->numeroArchive != '') {
                        // s'il y a un numero d'archive et pas de source précisée , on dit que la source est "archives municipales" (voir fabien)
                        $reqSourceStatic = "SELECT nom as nomSource FROM source WHERE idSource='24'";
                        $resSourceStatic = $this->connexionBdd->requete($reqSourceStatic);
                        $fetchSourceStatic = mysql_fetch_assoc($resSourceStatic);
                        $source = "Source : <a href='" . $this->creerUrl('', 'listeAdressesFromSource', array('submit' => 'Rechercher', 'source' => 24)) . "' onmouseover=\"document.getElementById('calqueDescriptionSource').style.top=(getScrollHeight()+150)+'px';document.getElementById('calqueDescriptionSource').style.display='block';document.getElementById('iframe').src='" . $this->creerUrl('', 'descriptionSource', array('archiIdSource' => 24, 'noHeaderNoFooter' => 1)) . "';\" onmouseout=\"document.getElementById('calqueDescriptionSource').style.display='none';\">" . stripslashes($fetchSourceStatic['nomSource']) . "</a><br>";
                    }
                }
                // DESCRIPTION ---
                $bbCode = new bbCodeObject();
                $description = $bbCode->convertToDisplay(array('text' => $res->description));
                $description = empty($description) ? "" : "<div itemprop='description' class='desc'>" . $description . "</div>";
                // --
                // numeroArchive
                $numeroArchive = "";
                if ($res->numeroArchive != '') {
                    // modif fabien du 15/04/2011 suite mail directrice Archives de Strasbourg Mme Perry Laurence
                    $numeroArchive = "Cote Archives de Strasbourg : " . $res->numeroArchive . "<br>";
                }
                $adressesLieesHTML = $this->getAdressesLieesAEvenement(array('modeRetour' => 'affichageSurDetailEvenement', 'idEvenement' => $idEvenement));
                if ($adressesLieesHTML != '') {
                    $adressesLieesHTML = "<b>" . _("Liste des adresses liées :") . "</b> <br>" . $adressesLieesHTML;
                }
                // recherche s'il y a un historique sur l'evenement courant ( plusieurs mises à jour)
                $lienHistoriqueEvenementCourant = "";
                $labelHistorique = "";
                if ($estConnecte && $this->getNbEvenementsInHistorique(array('idEvenement' => $idEvenement)) > 1 && $modeAffichage != 'consultationHistoriqueEvenement' && (!isset($params['isLieFromOtherAdresse']) || $params['isLieFromOtherAdresse'] != true)) {
                    $labelHistorique = _("(Consulter l'historique)");
                    $lienHistoriqueEvenementCourant = $this->creerUrl('', 'consultationHistoriqueEvenement', array('archiIdEvenement' => $idEvenement));
                }
                $onClickEvenementDeplacerVersGA = "";
                if ($estConnecte && $u->isAuthorized('evenement_deplacer', $userId) && $modeAffichage != 'consultationHistoriqueEvenement' && isset($params['calquePopupDeplacerEvenement'])) {
                    $onClickEvenementDeplacerVersGA = "document.getElementById('" . $params['calquePopupDeplacerEvenement']->getJSIFrameId() . "').src='" . $this->creerUrl('', 'recherche', array('noHeaderNoFooter' => 1, 'modeAffichage' => "popupDeplacerEvenementVersGroupeAdresse", "idEvenementADeplacer" => $res->idEvenement)) . "';document.getElementById('" . $params['calquePopupDeplacerEvenement']->getJSDivId() . "').style.display='block';";
                }
                $dateEnvoi = "";
                $txtEnvoi = _("envoyé");
                if (!$this->isFirstIdHistoriqueEvenementFromHistorique($res->idEvenement)) {
                    $txtEnvoi = _("modifié");
                }
                $dateEnvoi = _("le") . " " . $res->dateCreationEvenement;
                $arrayIdAdresseToUrl = array();
                if (isset($this->variablesGet['archiIdAdresse']) && $this->variablesGet['archiIdAdresse'] != '') {
                    $arrayIdAdresseToUrl = array('archiIdAdresse' => $this->variablesGet['archiIdAdresse']);
                }
                $resTypeEvenement = $this->connexionBdd->requete("SELECT idTypeEvenement,nom FROM typeEvenement where groupe = '" . $this->getGroupeFromTypeEvenement($res->idTypeEvenement) . "'");
                $fetchTypeEvenement = mysql_fetch_assoc($resTypeEvenement);
                if (archiPersonne::isPerson($idEvenementGroupeAdresse)) {
                    $typeEvenement = _("Biographie");
                    $urlTypeEvenement = "";
                } else {
                    $typeEvenement = $res->nomTypeEvenement;
                    $urlTypeEvenement = $this->creerUrl('', 'evenementListe', array('selection' => 'typeEvenement', 'id' => $res->idTypeEvenement));
                }
                $titre = empty($res->titre) ? "<meta itemprop='name' content='" . $fetchTypeEvenement['nom'] . "' />" : "<h3 itemprop='name'>" . htmlspecialchars(stripslashes($res->titre)) . "</h3>";
                $user = new archiUtilisateur();
                $user->setUserId($res->idEvenement);
                $urlProfilPic = $user->getImageAvatar(array('idUtilisateur' => $res->idUtilisateur));
                $utilisateur = "<a href='" . $this->creerUrl('', 'detailProfilPublique', array('archiIdUtilisateur' => $res->idUtilisateur, 'archiIdEvenementGroupeAdresseOrigine' => $idEvenementGroupeAdresse)) . "'>" . $res->nomUtilisateur . " " . $res->prenomUtilisateur . "</a>";
                $t->assign_vars(array('txtEnvoi' => $txtEnvoi, 'dateEnvoi' => $dateEnvoi, 'titre' => $titre, 'utilisateur' => "<a href='" . $this->creerUrl('', 'detailProfilPublique', array('archiIdUtilisateur' => $res->idUtilisateur, 'archiIdEvenementGroupeAdresseOrigine' => $idEvenementGroupeAdresse)) . "'>" . $res->nomUtilisateur . " " . $res->prenomUtilisateur . "</a>", 'dates' => $dateTxt, 'typeEvenement' => $typeEvenement, 'typeStructure' => $typeStructure, 'idSource' => $res->idSource, 'source' => $source, 'description' => $description, 'urlTypeEvenement' => $urlTypeEvenement, 'urlTypeStructure' => $this->creerUrl('', 'evenementListe', array('selection' => 'typeStructure', 'id' => $res->idTypeStructure)), 'ajouterEvenement' => '', 'supprimerEvenement' => $this->creerUrl('supprimerEvenement', '', array('archiIdEvenement' => $res->idEvenement)), 'supprimerHistoriqueEvenement' => $this->creerUrl('supprimerHistoriqueEvenement', '', array('archiIdHistoriqueEvenement' => $res->idHistoriqueEvenement)), 'ajouterImage' => $this->creerUrl('', 'ajoutImageEvenement', array('archiIdEvenement' => $res->idEvenement)), 'modifierImage' => $this->creerUrl('', 'modifierImageEvenement', array('archiIdEvenement' => $res->idEvenement)), 'modifierEvenement' => $this->creerUrl('', 'modifierEvenement', array_merge(array('archiIdEvenement' => $res->idEvenement, 'archiIdEvenementGroupeAdresse' => $idEvenementGroupeAdresse), $arrayIdAdresseToUrl)), 'urlImporterImage' => "#", 'onClickImporterImage' => "document.getElementById('formulaireEvenement').action='" . $this->creerUrl('deplacerImagesSelectionnees', 'evenement', array('idEvenement' => $idEvenement)) . "&deplacerVersIdEvenement=" . $res->idEvenement . "';document.getElementById('actionFormulaireEvenement').value='deplacerImages';if(confirm('Voulez-vous vraiment déplacer ces images ?')){document.getElementById('formulaireEvenement').submit();}", 'urlSupprimerImage' => "#", 'onClickSupprimerImage' => "document.getElementById('formulaireEvenement').action='" . $this->creerUrl('supprimerImagesSelectionnees', 'evenement', array('idEvenement' => $idEvenement)) . "';document.getElementById('actionFormulaireEvenement').value='supprimerImages';if(confirm('Voulez-vous vraiment supprimer ces images ?')){document.getElementById('formulaireEvenement').submit();}", 'urlLierAdresses' => $this->creerUrl('', 'afficheFormulaireEvenementAdresseLiee', array('idEvenement' => $res->idEvenement)), 'listeAdressesLiees' => $adressesLieesHTML, 'lienHistoriqueEvenementCourant' => $lienHistoriqueEvenementCourant, 'urlDeplacerVersNouveauGroupeAdresse' => $this->creerUrl('deplacerEvenementVersNouveauGA', 'evenement', array('idEvenement' => $res->idEvenement)), 'onClickDeplacerVersAdresses' => $onClickEvenementDeplacerVersGA, 'numeroArchive' => $numeroArchive, 'idEvenement' => $res->idEvenement, 'urlProfilPic' => $urlProfilPic, 'infoTitre' => $utilisateur . " a " . $txtEnvoi . " un événement", 'txtEnvoi' => $txtEnvoi, 'labelLienHistorique' => $labelHistorique));
                $idEvenement = $res->idEvenement;
                // affichage des images de l'evenement
                if ($modeAffichage != 'consultationHistoriqueEvenement') {
                    $images = new archiImage();
                    $arrayImagesVuesSurByDate = array();
                    if (isset($params['imagesVuesSurLinkedByDate']) && count($params['imagesVuesSurLinkedByDate']) > 0) {
                        $arrayImagesVuesSurByDate = $params['imagesVuesSurLinkedByDate'];
                    }
                    $t->assign_vars(array('imagesLiees' => $images->afficherFromEvenement($idEvenement, array('withoutImagesVuesSurPrisesDepuis' => true, 'imagesVuesSurLinkedByDate' => $arrayImagesVuesSurByDate, 'idGroupeAdresseEvenementAffiche' => $idEvenementGroupeAdresse))));
                }
                if (($idPerson = archiPersonne::isPerson($idEvenementGroupeAdresse)) && isset($params["nextEvent"])) {
                    $req = "\n\t\t\t\t\t\t\tSELECT dateDebut\n\t\t\t\t\t\t\tFROM evenements\n\t\t\t\t\t\t\tWHERE idEvenement = '" . $params["nextEvent"] . "'\n\t\t\t\t\t\t\t\t\tORDER BY idEvenement DESC LIMIT 1\n\t\t\t\t\t\t\t\t\t";
                    $res = $this->connexionBdd->requete($req);
                    $date2 = mysql_fetch_object($res);
                    $linkedEventsHTML = archiPersonne::displayEvenementsLies($idPerson, $dateDebut, $date2->dateDebut);
                    $t->assign_vars(array("evenementsLiesPersonne" => $linkedEventsHTML));
                } elseif ($idPerson = archiPersonne::isPerson($idEvenementGroupeAdresse)) {
                    $linkedEventsHTML = archiPersonne::displayEvenementsLies($idPerson, $dateDebut, 3000);
                    $t->assign_vars(array("evenementsLiesPersonne" => $linkedEventsHTML));
                }
                /*
                 * COURANTS ARCHI
                 */
                $rep = $this->connexionBdd->requete('
						SELECT  cA.idCourantArchitectural, cA.nom
						FROM _evenementCourantArchitectural _eA
						LEFT JOIN courantArchitectural cA  ON cA.idCourantArchitectural  = _eA.idCourantArchitectural
						WHERE _eA.idEvenement=' . $idEvenement . '
						ORDER BY cA.nom ASC');
                if (mysql_num_rows($rep) > 0) {
                    $t->assign_block_vars('simple.isCourantArchi', array());
                    while ($res = mysql_fetch_object($rep)) {
                        $t->assign_block_vars('simple.isCourantArchi.archi', array('url' => $this->creerUrl('', 'evenementListe', array('selection' => 'courant', 'id' => $res->idCourantArchitectural)), 'nom' => $res->nom));
                    }
                }
                /*
                 **  PERSONNES
                 */
                $rep = $this->connexionBdd->requete('
						SELECT  p.idPersonne, m.nom as metier, p.nom, p.prenom
						FROM _evenementPersonne _eP
						LEFT JOIN personne p ON p.idPersonne = _eP.idPersonne
						LEFT JOIN metier m ON m.idMetier = p.idMetier
						WHERE _eP.idEvenement=' . $idEvenement . '
						ORDER BY p.nom DESC');
                $metier = "";
                while ($res = mysql_fetch_object($rep)) {
                    if (isset($res->metier) && $res->metier != '') {
                        $metier = $res->metier . ' : ';
                    }
                    $t->assign_block_vars('simple.pers', array('urlDetail' => $this->creerUrl('', 'personne', array('idPersonne' => $res->idPersonne)), 'urlEvenement' => $this->creerUrl('', 'evenementListe', array('selection' => 'personne', 'id' => $res->idPersonne)), 'nom' => stripslashes($res->nom), 'prenom' => stripslashes($res->prenom), 'metier' => stripslashes($metier), 'idPerson' => $res->idPersonne, 'idEvent' => $idEvenement));
                    if ($estConnecte) {
                        $t->assign_block_vars('simple.pers.connected', array());
                    }
                }
                //*
                //**    Historique
                //*/
                $t->assign_vars(array('nbHistorique' => $nbHistorique));
                if ($nbHistorique > 0) {
                    $t->assign_block_vars('histo', array('url' => $this->creerUrl('', 'historiqueEvenement', array('idEvenement' => $idEvenement))));
                }
            }
            // *************************************************************************************************************************************
            // affichage des adresses et evenements lies dans la partie supérieur du detail
            // que l'événement soit un groupe d'adresse ou non, on affiche les enfants
            // *************************************************************************************************************************************
            if ($modeAffichage != 'simple' && $modeAffichage != 'consultationHistoriqueEvenement') {
                $tabIdEvenementsLies = $this->getEvenementsLies($idEvenement);
                // recherche des sous evenements (idEvenementAssocie) du groupe d'adresse
                if (count($tabIdEvenementsLies) > 0) {
                    $listeGroupeAdressesAffichees[] = $idEvenement;
                    $t->assign_block_vars('noSimple', array());
                    // vu que la fonction afficher est recursive , on affiche cette partie uniquement en affichant 'non simple'
                    //=> affichage simple = affichage de l'evenement => affichage non simple = affichage de la page ...
                    if ($modeAffichage == "personne") {
                    } else {
                        $retourAdresse = $adresse->afficherListe(array('archiIdEvenement' => $idEvenement, 'useTemplateFile' => 'listeAdressesDetailEvenement.tpl'), "listeDesAdressesDuGroupeAdressesSurDetailAdresse");
                        // modeAffichage => listeDesAdressesDuGroupeAdressesSurDetailAdresse
                    }
                    $idAdresseCourante = 0;
                    if (isset($this->variablesGet['archiIdAdresse']) && $this->variablesGet['archiIdAdresse'] != '') {
                        $idAdresseCourante = $this->variablesGet['archiIdAdresse'];
                    }
                    if ($modeAffichage != "personne") {
                        // ************************************************************************************************************************
                        // affichage carte googlemap dans une iframe
                        $coordonnees = $adresse->getCoordonneesFrom($idEvenement, 'idEvenementGroupeAdresse');
                        //$retourAdresse['arrayIdAdresses'][0]
                        // si pas de coordonnees , on va chercher les coordonnees de la ville courante
                        if ($coordonnees['longitude'] == 0 && $coordonnees['latitude'] == 0) {
                            $idVilleAdresseCourante = $adresse->getIdVilleFrom($idAdresseCourante, 'idAdresse');
                            $coordonnees = $adresse->getCoordonneesFrom($idVilleAdresseCourante, 'idVille');
                        }
                        $calqueGoogleMap = new calqueObject(array('idPopup' => 10));
                        $contenuIFramePopup = $this->getContenuIFramePopupGoogleMap(array('idAdresseCourante' => $idAdresseCourante, 'calqueObject' => $calqueGoogleMap, 'idEvenementGroupeAdresseCourant' => $idEvenement));
                        // ********************************************************************************************************************************
                        $t->assign_block_vars('noSimple.isCarteGoogle', array('src' => $this->creerUrl('', 'afficheGoogleMapIframe', array('noHeaderNoFooter' => 1, 'longitude' => $coordonnees['longitude'], 'latitude' => $coordonnees['latitude'], 'archiIdAdresse' => $idAdresseCourante, 'archiIdEvenementGroupeAdresse' => $idEvenement)), 'lienVoirCarteGrand' => "<a href='#' onclick=\"" . $calqueGoogleMap->getJsOpenPopupNoDraggableWithBackgroundOpacity() . "document.getElementById('iFrameDivPopupGM').src='" . $this->creerUrl('', 'afficheGoogleMapIframe', array('longitude' => $coordonnees['longitude'], 'latitude' => $coordonnees['latitude'], 'noHeaderNoFooter' => true, 'archiIdAdresse' => $idAdresseCourante, 'archiIdEvenementGroupeAdresse' => $idEvenement, 'modeAffichage' => 'popupDetailAdresse')) . "';\" class='bigger' style='font-size:11px;'>" . _("Voir la carte en + grand") . "</a>", 'popupGoogleMap' => $calqueGoogleMap->getDivNoDraggableWithBackgroundOpacity(array('top' => 20, 'lienSrcIFrame' => '', 'contenu' => $contenuIFramePopup))));
                        //'popupGoogleMap'=>$calqueGoogleMap->getDiv(array('width'=>550,'height'=>570,'lienSrcIFrame'=>''))."<script  >".$calqueGoogleMap->getJsToDragADiv()."</script>"
                        $t->assign_vars(array('largeurTableauResumeAdresse' => 415, 'hauteurRecapAdresse' => '270'));
                        // ************************************************************************************************************************
                        // affichage de l'encars des adresses avec les photos avant et apres l'adresse courante
                        $arrayEncartAdresses = $adresse->getArrayEncartAdressesImmeublesAvantApres(array('idEvenementGroupeAdresse' => $idEvenementGroupeAdresse));
                        $t->assign_block_vars('noSimple.adresses', array('adressesLiees' => $arrayEncartAdresses['html']));
                        $t->assign_vars(array('urlAutresBiensRue' => $retourAdresse['arrayRetourLiensVoirBatiments']['urlAutresBiensRue'], 'urlAutresBiensQuartier' => $retourAdresse['arrayRetourLiensVoirBatiments']['urlAutresBiensQuartier']));
                        if ($estConnecte) {
                            $t->assign_block_vars('noSimple.isConnected', array());
                            $t->assign_block_vars('noSimple.adresses.isConnected', array());
                        }
                        if ($retourAdresse['nbAdresses'] == 0) {
                            $t->assign_vars(array('intituleActionAdresses' => _("Ajouter une adresse")));
                        } else {
                            $t->assign_vars(array('intituleActionAdresses' => _("Modifier")));
                        }
                        if ($estConnecte && $estAdmin) {
                            // si l'utilisateur est connecté et est admin, on affiche le lien pour selectionner des images
                            $t->assign_block_vars('noSimple.isConnected.afficheLienSelectionImages', array());
                        }
                        if ($estConnecte && $u->isAuthorized('affiche_menu_evenement_choix_titre', $userId)) {
                            if ($u->getIdProfil($userId) == 4 || $u->isModerateurFromVille($userId, $idEvenementGroupeAdresse, 'idEvenementGroupeAdresse')) {
                                // tout utilisateur autorisé (admin+moderateur de la ville)  peut changer le titre par defaut du groupe d'adresse en selectionnant l'evenement de son choix ( le titre est récupéré de cet evenement),si l'autorisation est faite dans la gestion des droites de l'admin du site
                                $t->assign_block_vars('noSimple.isConnected.afficheLienSelectionTitre', array());
                            }
                        }
                        if ($estConnecte && $u->isAuthorized('affiche_menu_evenement_choix_image_principale', $userId)) {
                            if ($u->getIdProfil($userId) == 4 || $u->isModerateurFromVille($userId, $idEvenementGroupeAdresse, 'idEvenementGroupeAdresse')) {
                                // un utilisateur moderateur de la ville de l'adresse courant ou un admin peuvent selectionner ou changer l'image principale du groupe d'adresse,si l'autorisation est faite dans la gestion des droites de l'admin du site
                                $t->assign_block_vars('noSimple.isConnected.afficheLienSelectionImagePrincipale', array());
                            }
                        }
                        if ($estConnecte && $u->isAuthorized('affiche_menu_evenement_positionnement_evenements', $userId)) {
                            if ($u->getIdProfil($userId) == 4 || $u->isModerateurFromVille($userId, $idEvenementGroupeAdresse, 'idEvenementGroupeAdresse')) {
                                // un utilisateur moderateur de la ville courante ou admin peuvent changer la position des evenements, independemment de la date de debut de l'evenement ,si l'autorisation est faite dans la gestion des droites de l'admin du site
                                $t->assign_block_vars('noSimple.isConnected.afficheLienPositionnementEvenements', array());
                            }
                        }
                    }
                    //popup pour la recherche d'adresse dans le cas d'un deplacement d'evenement
                    if ($estConnecte && $u->isAuthorized('evenement_deplacer', $userId)) {
                        $c = new calqueObject(array('idPopup' => "divPopupDeplacerEvenementVersGA" . $idEvenementGroupeAdresse));
                        $t->assign_vars(array('divDeplacerEvenementVersGA' => $c->getDiv(array('lienSrcIFrame' => $this->creerUrl('', 'recherche', array('noHeaderNoFooter' => 1, 'modeAffichage' => 'popupDeplacerEvenementVersGroupeAdresse')), 'titrePopup' => _("Recherche d'adresses"), 'width' => 700))));
                        $params['calquePopupDeplacerEvenement'] = $c;
                    }
                    $images = new archiImage();
                    // **********************************************************************************************************************************************************
                    // recherche des images en rapport avec l'adresse courante
                    $resAdressesCourantes = $adresse->getAdressesFromEvenementGroupeAdresses($idEvenement);
                    $listeAdressesFromEvenement = array();
                    while ($fetchAdressesCourantes = mysql_fetch_assoc($resAdressesCourantes)) {
                        $listeAdressesFromEvenement[] = $fetchAdressesCourantes['idAdresse'];
                    }
                    if ($modeAffichage == "personne") {
                    } else {
                        $arrayCorrespondancesVuesSur = $this->getArrayCorrespondancesIdImageVuesSurAndEvenementByDateFromGA($idEvenementGroupeAdresse);
                        $arrayNoDiplayIdImageVueSur = array();
                        foreach ($arrayCorrespondancesVuesSur as $indice => $values) {
                            foreach ($values as $indice => $value) {
                                $arrayNoDiplayIdImageVueSur[] = $value['idImage'];
                            }
                        }
                    }
                    if (count($listeAdressesFromEvenement) > 0) {
                        $arrayAutresVuesSur = $images->getAutresPhotosVuesSurAdresse($listeAdressesFromEvenement, 'moyen', array('noDiplayIdImage' => $arrayNoDiplayIdImageVueSur, 'idEvenementGroupeAdresse' => $idEvenementGroupeAdresse, 'idGroupeAdresseEvenementAffiche' => $idEvenementGroupeAdresse, 'setZoomOnImageZone' => true));
                        $autresVuesSurHTML = $arrayAutresVuesSur['htmlVueSur'];
                        $codeARajouterALaFin = $arrayAutresVuesSur['htmlZonesDivMapJs'];
                        $autresPrisesDepuisHTML = $images->getAutresPhotosPrisesDepuisAdresse($listeAdressesFromEvenement, 'moyen', array('idEvenementGroupeAdresse' => $idEvenementGroupeAdresse, 'idGroupeAdresseEvenementAffiche' => $idEvenementGroupeAdresse));
                        if ($autresVuesSurHTML != '') {
                            $t->assign_block_vars('noSimple.autresVuesSur', array('value' => $autresVuesSurHTML));
                        }
                        if ($autresPrisesDepuisHTML != '') {
                            $t->assign_block_vars('noSimple.autresPrisesDepuis', array('value' => $autresPrisesDepuisHTML));
                        }
                        $arrayLiens = array();
                        if ($modeAffichage != "personne") {
                            $arrayListeAdressesCourantes = array_unique($retourAdresse['arrayIdAdresses']);
                        }
                        //foreach($arrayListeAdressesCourantes as $indice => $idAdresseCourante)
                        //{
                        $arrayLiens[] = "<a href='" . $this->creerUrl('', '', array('archiAffichage' => 'adresseDetail', 'archiIdAdresse' => $idAdresseCourante, 'archiIdEvenementGroupeAdresse' => $idEvenementGroupeAdresse)) . "'>" . $adresse->getIntituleAdresseFrom($idEvenementGroupeAdresse, 'idEvenementGroupeAdresse', array("noQuartier" => true, "noVille" => true, "noSousQuartier" => true, "ifTitreAfficheTitreSeulement" => true)) . "</a>";
                        //}
                        $t->assign_vars(array('listeAdressesCourantes' => implode(" / ", $arrayLiens)));
                    }
                    // **********************************************************************************************************************************************************
                    // **********************************************************************************************************************************************************
                    // **********************************************************************************************************************************************************
                    // affichage des evenements de l'evenement groupe d'adresses
                    // **********************************************************************************************************************************************************
                    $champsCacheTransmis = array();
                    //
                    $idEvenementWhereIsTitre = $this->getIdEvenementTitre(array("idEvenementGroupeAdresse" => $idEvenementGroupeAdresse));
                    $idAdresse = $adresse->getIdAdresseFromIdEvenementGroupeAdresse($idEvenementGroupeAdresse);
                    // initialisation des variables pour la creation du tableau de configuration de la liste triable par glisser deposer des evenements dans l'onglet historique des evenements
                    if (isset($this->variablesGet['affichePositionnementEvenements']) && $this->variablesGet['affichePositionnementEvenements'] == '1') {
                        $arrayConfigPositionnementEvenement = array();
                        $indicePositionnement = 0;
                    }
                    $i = 0;
                    // parcours des evenements
                    foreach ($tabIdEvenementsLies as $indice => $value) {
                        $params['isLieFromOtherAdresse'] = $value['isLieFromOtherAdresse'];
                        $params['imagesVuesSurLinkedByDate'] = array();
                        if (isset($tabIdEvenementsLies[$i + 1]["idEvenementAssocie"])) {
                            $params["nextEvent"] = $tabIdEvenementsLies[$i + 1]["idEvenementAssocie"];
                        } else {
                            $params["nextEvent"] = null;
                        }
                        if (isset($arrayCorrespondancesVuesSur[$value['idEvenementAssocie']])) {
                            $params['imagesVuesSurLinkedByDate'] = $arrayCorrespondancesVuesSur[$value['idEvenementAssocie']];
                        }
                        // le type de structure est le meme que l'evenement precedent , on ne l'affiche pas, c'est pour cela qu'on le transmet a la fonction d'affichage
                        $retourEvenement = $this->afficher($value['idEvenementAssocie'], 'simple', null, $champsCacheTransmis, $params);
                        $champsCacheTransmis = array('idTypeStructurePrecedent' => $retourEvenement['idTypeStructure']);
                        $titreAncre = $retourEvenement['titreAncre'];
                        if ($titreAncre == 'Sans titre' && ($retourEvenement['isMH'] || $retourEvenement['isISMH'])) {
                            if ($retourEvenement['isMH']) {
                                $titreAncre = "<b>" . _("Classement aux Monuments Historiques") . "</b>";
                            }
                            if ($retourEvenement['isISMH']) {
                                $titreAncre = "<b>" . _("Inscription à l'Inventaire Supplémentaire des Monuments Historiques") . "</b>";
                            }
                        } elseif ($titreAncre != _("Sans titre") && ($retourEvenement['isMH'] || $retourEvenement['isISMH'])) {
                            if ($retourEvenement['isMH']) {
                                $titreAncre .= " <b>(MH)</b>";
                            }
                            if ($retourEvenement['isISMH']) {
                                $titreAncre .= " <b>(ISMH)</b>";
                            }
                        }
                        if ($retourEvenement['nomTypeEvenement'] != '') {
                            $titreAncre .= " - " . $retourEvenement['nomTypeEvenement'];
                        }
                        if ($retourEvenement['date'] != '') {
                            $titreAncre .= " - " . $retourEvenement['date'];
                        }
                        if ($retourEvenement['dateFin'] != '') {
                            $titreAncre .= " " . $retourEvenement['dateFin'];
                        }
                        if (isset($this->variablesGet['affichePositionnementEvenements']) && $this->variablesGet['affichePositionnementEvenements'] == '1') {
                            // si on est en mode de positionnement des evenements manuellement
                            $arrayConfigPositionnementEvenement[$indicePositionnement]['idEvenement'] = array('value' => $value['idEvenementAssocie'], 'type' => 'identifiant');
                            $arrayConfigPositionnementEvenement[$indicePositionnement]['illustration'] = array('value' => "<img src='" . $this->urlImages . "doubleFlechesVerticales.jpg' border=0>", 'type' => 'free');
                            $arrayConfigPositionnementEvenement[$indicePositionnement]['titre'] = array('value' => $titreAncre, 'type' => 'free', 'styleColonneDonnees' => 'font-size:12px;');
                            $indicePositionnement++;
                            /*$t->assign_block_vars('noSimple.modePositionnementEvenements',array());
                            
                            							$t->assign_block_vars('noSimple.modePositionnementEvenements.titresEvenements',array(
                            									'imagesIllustrationGlisserDeposer'=>$this->urlImages."",
                            									'titre' => $titreAncre
                            
                            							));
                            							*/
                            //'url'=> $this->creerUrl('selectTitreAdresse','adresseDetail',array('archiIdAdresse'=>$idAdresse,'idEvenementTitreSelection'=>$value['idEvenementAssocie'],'archiIdEvenementGroupeAdresse'=>$idEvenementGroupeAdresse))
                        } elseif (isset($this->variablesGet['afficheSelectionTitre']) && $this->variablesGet['afficheSelectionTitre'] == '1') {
                            // si on est en mode de selection d'un titre le titre courant s'affiche en rouge
                            if ($idEvenementWhereIsTitre == $value['idEvenementAssocie']) {
                                $titreAncre = "<span style='color:red;'>" . $titreAncre . "</span>";
                            }
                            $t->assign_block_vars('noSimple.ancres', array('titre' => $titreAncre, 'url' => $this->creerUrl('selectTitreAdresse', 'adresseDetail', array('archiIdAdresse' => $idAdresse, 'idEvenementTitreSelection' => $value['idEvenementAssocie'], 'archiIdEvenementGroupeAdresse' => $idEvenementGroupeAdresse))));
                        } else {
                            $t->assign_block_vars('noSimple.ancres', array('titre' => $titreAncre, 'url' => "#" . $indice));
                        }
                        if ($this->variablesGet['selection'] == 'personne') {
                            $formulaireCommentaire = $this->getFormComment($value['idEvenementAssocie'], $this->getCommentairesFields('personne', $this->variablesGet['id']), 'personne');
                            $listeCommentaires = $this->getListCommentairesEvenements($value['idEvenementAssocie']);
                        } else {
                            $formulaireCommentaire = $this->getFormComment($value['idEvenementAssocie'], $this->getCommentairesFields('evenement'), 'evenement');
                            $listeCommentaires = $this->getListCommentairesEvenements($value['idEvenementAssocie']);
                        }
                        $t->assign_block_vars('evenementLie', array('evenement' => $retourEvenement['html'], 'numeroAncre' => $indice, 'listeCommentaires' => $listeCommentaires, 'formulaireCommentaire' => $formulaireCommentaire));
                        $i++;
                    }
                    // affichage de la liste triable a la place de l'historique des evenements, quand on est en mode positionnement d'evenements
                    if (isset($this->variablesGet['affichePositionnementEvenements']) && $this->variablesGet['affichePositionnementEvenements'] == '1') {
                        $t->assign_block_vars('noSimple.modePositionnementEvenements', array());
                        // affiche le bloc
                        $t->assign_vars(array('sortableFormListe' => $imageObject->createSortableFormListeFromArray($arrayConfigPositionnementEvenement, array('noEntetesTableau' => true)) . $imageObject->getJSInitAfterListDragAndDrop('slideshow0', array('onlyHiddenFormField' => true)), 'onClickValidationPositionnementEvenement' => $imageObject->getJSSubmitDragAndDrop() . "document.getElementById('formPositionnementEvenements').submit();", 'formActionPositionnementEvenements' => $this->creerUrl('enregistrerPositionnementEvenements', 'adresseDetail', array('archiIdAdresse' => $idAdresseCourante, 'archiIdEvenementGroupeAdresse' => $idEvenementGroupeAdresse))));
                        // ajout du code d'initialisation au niveau de la fin de la page (footer)
                        $this->addToJsFooter($imageObject->getJSInitAfterListDragAndDrop('slideshow0', array('onlyJavascriptInitCode' => true)));
                    }
                    // ajout de la possibilité de préciser que l'on ne veut pas de titre , l'adresse s'affichera donc pour l'evenement a la place d'un titre
                    if (isset($this->variablesGet['afficheSelectionTitre']) && $this->variablesGet['afficheSelectionTitre'] == '1') {
                        $titreAncre = "Pas de titre";
                        if ($idEvenementWhereIsTitre == -1) {
                            $titreAncre = "<span style='color:red;'>Pas de titre</span>";
                        }
                        $t->assign_block_vars('noSimple.choixEvenementSansTitre', array('titre' => $titreAncre, 'url' => $this->creerUrl('selectTitreAdresse', 'adresseDetail', array('archiIdAdresse' => $idAdresse, 'idEvenementTitreSelection' => -1, 'archiIdEvenementGroupeAdresse' => $idEvenementGroupeAdresse))));
                    }
                    // affichage de la liste des historiques de nom de rue pour l'adresse si celle ci ne concerne qu'une rue , sans numero de rue.
                    $infosAdresseCourante = $adresse->getArrayAdresseFromIdAdresse($idAdresse);
                    if (($infosAdresseCourante['numero'] == '0' || $infosAdresseCourante['numero'] == '') && ($infosAdresseCourante['idRue'] != '' || $infosAdresseCourante['idRue'] != '0')) {
                        $d = new dateObject();
                        // dans ce cas on va chercher les infos de l'historique de la rue
                        $reqHistoriqueNomRue = "SELECT * FROM historiqueNomsRues WHERE idRue = '" . $infosAdresseCourante['idRue'] . "' ORDER BY annee";
                        $resHistoriqueNomRue = $this->connexionBdd->requete($reqHistoriqueNomRue);
                        if (mysql_num_rows($resHistoriqueNomRue) > 0) {
                            $t->assign_block_vars("noSimple.isHistoriqueNomsRue", array());
                            while ($fetchHistoriqueNomRue = mysql_fetch_assoc($resHistoriqueNomRue)) {
                                if ($fetchHistoriqueNomRue['prefixe'] != '') {
                                    $nomRue = stripslashes($fetchHistoriqueNomRue['prefixe']) . " " . stripslashes($fetchHistoriqueNomRue['nomRue']);
                                } else {
                                    $nomRue = stripslashes($fetchHistoriqueNomRue['nomRue']);
                                }
                                $t->assign_block_vars("noSimple.listeHistoriqueNomsRue", array("annee" => $d->toFrenchAffichage($fetchHistoriqueNomRue['annee']), "nomRue" => $nomRue, "commentaire" => stripslashes($fetchHistoriqueNomRue['commentaire'])));
                            }
                        }
                    }
                    $a = new archiAdresse();
                    $listeCommentaires = $a->getListeCommentaires($idEvenementGroupeAdresse);
                    $formulaireCommentaire = $this->getFormComment($idEvenementGroupeAdresse, $this->getCommentairesFields(), '');
                    if (!ArchiPersonne::isPerson($idEvenementGroupeAdresse)) {
                        $t->assign_block_vars('commentairesAdresse', array('formulaireCommentaire' => $formulaireCommentaire, 'listeCommentaires' => $listeCommentaires));
                    }
                    $t->assign_vars(array('nbEvenements' => count($tabIdEvenementsLies) + 1));
                } else {
                }
            }
            // *************************************************************************************************************************************
        } else {
            echo 'aucun résultat !';
        }
        ob_start();
        $t->pparse('ev');
        $html .= ob_get_contents();
        ob_end_clean();
        if (isset($codeARajouterALaFin)) {
            $html .= $codeARajouterALaFin;
            // a cause du JS executé a la fin sinon il ne trouve pas certains divs
        }
        // on ferme le formulaire s'il a ete ouvert
        if ($modeAffichage != 'simple' && $modeAffichage != 'consultationHistoriqueEvenement') {
            if ($estConnecte && (isset($this->variablesGet['afficheSelectionImage']) && $this->variablesGet['afficheSelectionImage'] == '1' || isset($this->variablesGet['afficheSelectionTitre']) && $this->variablesGet['afficheSelectionTitre'] == '1')) {
                $html .= "</form>";
            }
        }
        $s = new archiSource();
        $html .= $s->getPopupDescriptionSource();
        return array('html' => $html, 'idTypeStructure' => $retourIdTypeStructure, 'titreAncre' => $retourTitreAncre, 'nomTypeEvenement' => $retourNomTypeEvenement, 'date' => $retourDate, 'isMH' => $isMH, 'isISMH' => $isISMH, 'listeGroupeAdressesAffichees' => $listeGroupeAdressesAffichees, 'dateFin' => $retourDateFin);
    }
 /**
  * Affichage de toutes les actualites
  *
  * @param array $params Paramètres
  *
  * @return string HTML
  * */
 public function getHtmlToutesLesActualites($params = array())
 {
     $html = "<h1>" . _("Actualités") . "</h1>";
     $d = new dateObject();
     $pagination = new paginationObject();
     $resDernieresActualites = $this->getDernieresActualites(array('sqlFields' => '0', "returnAsMysqlRes" => true));
     $nbEnregistrementTotaux = mysql_num_rows($resDernieresActualites);
     $nbEnregistrementsParPage = 15;
     $arrayPagination = $pagination->pagination(array('nomParamPageCourante' => 'page', 'nbEnregistrementsParPage' => $nbEnregistrementsParPage, 'nbEnregistrementsTotaux' => $nbEnregistrementTotaux, 'typeLiens' => 'noformulaire'));
     $arrayActus = $this->getDernieresActualites(array("sqlWhere" => " AND desactive<>'1' ", "sqlLimit" => "LIMIT " . mysql_real_escape_string($arrayPagination['limitSqlDebut']) . ", " . $nbEnregistrementsParPage));
     $tab = new tableau();
     foreach ($arrayActus as $indice => $value) {
         if ($value['urlFichier'] != '') {
             $url = $value['urlFichier'];
         } else {
             $url = $this->creerUrl('', 'afficherActualite', array('archiIdActualite' => $value['idActualite']));
         }
         $tab->addValue("<a href='" . $url . "'>" . $d->toFrenchAffichage($value['date']) . " " . stripslashes($value['titre']) . "</a>");
         if ($value['photoIllustration'] != '') {
             list($w, $h) = getimagesize($this->getCheminPhysique() . "images/actualites/" . $value['idActualite'] . "/" . $value['photoIllustration']);
             if ($w > $h) {
                 $dimension = "width=80";
             } else {
                 $dimension = "height=80";
             }
             $tab->addValue("<img src='" . $this->urlImages . "actualites/" . $value['idActualite'] . "/" . $value['photoIllustration'] . "' {$dimension}>");
         } else {
             $tab->addValue("&nbsp;");
         }
     }
     $html .= $arrayPagination['html'];
     $html .= $tab->createHtmlTableFromArray(2, 'margin:0;padding:0;', '', '', " border=''");
     return $html;
 }
 private function getUserPresentation($userId)
 {
     $infosArray = $this->getArrayInfosFromUtilisateur($userId);
     $avatar = $this->getImageAvatar(array('idUtilisateur' => $userId));
     $html .= "<h1>Profil</h1>";
     $nbParticipations = $this->getNbParticipationsUtilisateur(array('idUtilisateur' => $userId));
     $d = new dateObject();
     $dateCreationCompte = "";
     if ($infosArray['dateCreation'] != '0000-00-00 00:00:00') {
         $dateCreationCompte = " - Date de création du compte : " . $d->toFrenchAffichage($infosArray['dateCreation']) . "<br>";
     }
     $profil = $this->getLibelleProfil(array('idProfil' => $infosArray['idProfil']));
     $villesModereesArray = $this->getArrayVillesModereesPar($userId);
     $villesModerees = "";
     if ($infosArray['idProfil'] == 3) {
         $libelleVillesModerees = array();
         $a = new archiAdresse();
         foreach ($villesModereesArray as $indice => $idVille) {
             $fetchVille = $a->getInfosVille($idVille, array('fieldList' => "v.nom as nom"));
             $libelleVillesModerees[] = $fetchVille['nom'];
         }
         if (count($libelleVillesModerees) > 0) {
             foreach ($libelleVillesModerees as $indice => $nomVille) {
                 $villesModerees .= "<a href='" . $this->urlRacine . "{$nomVille}/'>{$nomVille}</a>,  ";
             }
             $villesModerees = "- Villes modérées : " . pia_substr($villesModerees, 0, -2);
         }
     }
     $urlSiteWeb = "";
     if ($infosArray['urlSiteWeb'] != '') {
         $urlSiteWeb = "Son site : <a href='" . $infosArray['urlSiteWeb'] . "' target='_blank'>" . $infosArray['urlSiteWeb'] . "</a><br>";
     }
     $html .= "\n    \t<div style='width:750px;'>\n    \t\n    \t<div style='float:left;width:150px;'>\n    \t<img src='{$avatar}' border=0 style='padding:10px;'>\n    \t</div>\n    \t<div style='float:left;width:600px;'>\n    \t<b>" . ucfirst($infosArray['nom']) . " " . ucfirst($infosArray['prenom']) . "</b><br>\n    \t\t\t- Nombre de participations : {$nbParticipations} (ajouts et modifications d'images,  d'événements et commentaires en tant qu'utilisateur inscrit)<br>\n    \t\t\t{$dateCreationCompte}\n    \t\t\t- Cette personne à le statut : <b>{$profil}</b> sur archi-strasbourg.org<br>\n    \t\t\t{$villesModerees}\n    \t\t\t{$urlSiteWeb}\n    \t\n    \t\t\t";
     return $html;
 }
 public function afficheFormulaireModification($parametres = array(), $liaisonsExternes = array(), $dependances = array())
 {
     $html = "<form action='" . $this->creerUrl('administration', '', array('tableName' => $parametres['tableName'])) . "' name='formModification' id='formModification' enctype='multipart/form-data' method='POST'>";
     $html .= "<input type='hidden' name='validationFormulaireAdministration' id='validationFormulaireAdministration' value='modification'>";
     // grace a ce champ on indique que l'on effectue une modification a la validation du formulaire
     $this->fields = array();
     $reqFieldsListe = "SHOW COLUMNS FROM " . $parametres['tableName'] . ";";
     $resFieldsListe = $this->connexionBdd->requete($reqFieldsListe);
     $arrayFields = array();
     $stringListeFields = "";
     $primaryKeyFieldName = "";
     $date = new dateObject();
     while ($fetchFields = mysql_fetch_assoc($resFieldsListe)) {
         $isPrimaryKey = false;
         if ($fetchFields['Key'] == 'PRI') {
             $isPrimaryKey = true;
             $primaryKeyFieldName = $fetchFields['Field'];
         }
         $type = "";
         if (preg_match("/int/i", $fetchFields['Type'])) {
             $type = 'entier';
         } elseif (preg_match("/varchar/i", $fetchFields['Type'])) {
             $type = 'text';
         } elseif (preg_match("/longtext/i", $fetchFields['Type'])) {
             $type = 'bigText';
         } elseif (preg_match("/text/i", $fetchFields['Type'])) {
             $type = 'text';
         } elseif (preg_match("/date/i", $fetchFields['Type'])) {
             $type = 'date';
         }
         $configChamp = array('name' => $fetchFields['Field'], 'isPrimaryKey' => $isPrimaryKey, 'type' => $type);
         if (isset($liaisonsExternes[$fetchFields['Field']])) {
             $this->fields[] = array_merge($configChamp, $liaisonsExternes[$fetchFields['Field']]);
         } else {
             $this->fields[] = $configChamp;
         }
         $stringListeFields .= $fetchFields['Field'] . ", ";
     }
     $reqValeurCouranteBdd = "select * from " . $parametres['tableName'] . " where " . $primaryKeyFieldName . "='" . $parametres['id'] . "'";
     $resValeurCouranteBdd = $this->connexionBdd->requete($reqValeurCouranteBdd);
     $fetchValeurCouranteBdd = mysql_fetch_assoc($resValeurCouranteBdd);
     $html .= "<table>";
     // ajout de champs qui ne sont pas relié a la base de donnée ,  mais qui peuvent afficher des infos ,  proposer un download etc
     if (isset($parametres['fieldsNotInBdd']) && is_array($parametres['fieldsNotInBdd']) && count($parametres['fieldsNotInBdd']) > 0) {
         foreach ($parametres['fieldsNotInBdd'] as $indice => $valueExternalField) {
             $this->fields[] = array_merge(array('isPrimaryKey' => false, 'fieldNotInBdd' => true), $valueExternalField);
         }
     }
     foreach ($this->fields as $field) {
         $primaryKeyReadOnly = '';
         if ($field['isPrimaryKey']) {
             $primaryKeyReadOnly = ' readonly';
         }
         if (isset($field['externalLink']) && $field['externalLink'] == true) {
             // on va afficher une liste
             $reqExternalLink = "select * from " . $field['externalTable'];
             $resExternalLink = $this->connexionBdd->requete($reqExternalLink);
             $champHtml = "<select name='" . $field['name'] . "'" . $primaryKeyReadOnly . ">";
             while ($fetchExternalLink = mysql_fetch_assoc($resExternalLink)) {
                 $selected = "";
                 if ($fetchExternalLink[$field['externalFieldPrimaryKey']] == $fetchValeurCouranteBdd[$field['name']]) {
                     $selected = " selected";
                 }
                 $champHtml .= "<option value='" . $fetchExternalLink[$field['externalFieldPrimaryKey']] . "'" . $selected . ">" . $fetchExternalLink[$field['externalFieldToDisplay']] . "</option>";
             }
             $champHtml .= "</select>";
         } elseif (isset($field['fieldNotInBdd']) && $field['fieldNotInBdd'] == true) {
             $champHtml = "";
             switch ($field['type']) {
                 case 'uploadImageLiee':
                     $affichageParametre = "";
                     if (isset($field['valueParametrable'])) {
                         if (isset($field['valueParametrable']['affichageParametre'])) {
                             // l'affichage se fait il avec une condition ?
                             if (isset($field['valueParametrable']['cheminFichierATesterPourAffichage'])) {
                                 // on remplace le parametre par une valeur s'il y en a un
                                 $valueReplacementBdd = "";
                                 // valeur que va prendre la parametre a remplacer
                                 $matches = array();
                                 preg_match("/\\#\\#\\#bddField\\[(.+)\\]\\#\\#\\#/", $field['valueParametrable']['cheminFichierATesterPourAffichage'], $matches);
                                 if (count($matches) > 0) {
                                     $valueReplacementBdd = $fetchValeurCouranteBdd[$matches[1]];
                                 }
                                 if (file_exists(str_replace($matches[0], $valueReplacementBdd, $field['valueParametrable']['cheminFichierATesterPourAffichage']))) {
                                     $matches = array();
                                     preg_match("/\\#\\#\\#bddField\\[(.+)\\]\\#\\#\\#/", $field['valueParametrable']['affichageParametre'], $matches);
                                     $valueReplacementBdd = "";
                                     if (count($matches) > 0) {
                                         $valueReplacementBdd = $fetchValeurCouranteBdd[$matches[1]];
                                     }
                                     $affichageParametre = str_replace($matches[0], $valueReplacementBdd, $field['valueParametrable']['affichageParametre']);
                                 }
                             }
                         }
                     }
                     $champHtml .= "<input type='file' name='" . $field['name'] . "' id='" . $field['name'] . "' value=''>" . $affichageParametre;
                     break;
             }
         } else {
             switch ($field['type']) {
                 case "date":
                     $champHtml = "<input type='text' style='width:150px;' name='" . $field['name'] . "' value=\"" . $date->toFrenchAffichage($fetchValeurCouranteBdd[$field['name']]) . "\"" . $primaryKeyReadOnly . ">";
                     break;
                 case "text":
                     $champHtml = "<input type='text' style='width:150px;' name='" . $field['name'] . "' value=\"" . $this->getInputSpecialCharsConversion(array('text' => $fetchValeurCouranteBdd[$field['name']])) . "\"" . $primaryKeyReadOnly . ">";
                     break;
                 case "entier":
                     $champHtml = "<input type='text' style='width:50px;' name='" . $field['name'] . "' value=\"" . $fetchValeurCouranteBdd[$field['name']] . "\"" . $primaryKeyReadOnly . ">";
                     break;
                 case "bigText":
                     $champHtml = "";
                     if (isset($parametres['afficheMiseEnFormeLongText']) && $parametres['afficheMiseEnFormeLongText'] == true) {
                         $arrayBBCode = $this->getBBCodeJSMiseEnForme($field['name'], 'formModification');
                         $champHtml .= $arrayBBCode['boutonsHTML'];
                     }
                     $champHtml .= "<textarea cols='50' rows='5' name='" . $field['name'] . "' id='" . $field['name'] . "'>" . stripslashes($fetchValeurCouranteBdd[$field['name']]) . "</textarea>";
                     if (isset($parametres['afficheMiseEnFormeLongText']) && $parametres['afficheMiseEnFormeLongText'] == true) {
                         $champHtml .= $arrayBBCode['divAndJsAfterForm'];
                     }
                     break;
             }
         }
         $html .= "<tr><td>" . $field['name'] . "</td><td>" . $champHtml . "</td></tr>";
     }
     $html .= "</table>";
     $html .= "<input type='submit' value='Modifier' name='modifier'>";
     $alertJs = "document.getElementById('validationFormulaireAdministration').value = 'suppressionFromModifForm';document.getElementById('formModification').submit();";
     if (count($dependances) > 0) {
         $msgDependances = "";
         foreach ($dependances as $indiceDependance => $dependance) {
             $reqDependance = "SELECT 0 FROM " . $dependance['table'] . " WHERE " . $dependance['champLie'] . "='" . $parametres['id'] . "'";
             $resDependance = $this->connexionBdd->requete($reqDependance);
             if (mysql_num_rows($resDependance) > 0) {
                 $msgDependances .= $dependance['message'] . "\\n";
             }
         }
         if ($msgDependances != '') {
             $alertJs = "msgConfirmation();";
             $html .= "\n                    <script  >\n                    function msgConfirmation()\n                    {\n                        if (confirm(\"Attention : \\n {$msgDependances} Si vous confirmez la suppression les dépendances seront réinitialisées\"))\n                        {\n                            document.getElementById('validationFormulaireAdministration').value = 'suppressionFromModifForm';\n                            document.getElementById('formModification').submit();\n                        }\n                        else\n                        {\n                            document.getElementById('validationFormulaireAdministration').value = 'modification';\n                        }\n                    }\n                \n                    </script>\n                ";
         }
     }
     $html .= "<input type='button' value='Supprimer' name='supprimer' onclick=\"{$alertJs}\">";
     $html .= "</form>";
     if (isset($parametres['afficheDependancesInIFrameUrl']) && $parametres['afficheDependancesInIFrameUrl'] != '') {
         $html .= "<br><b>" . _("Dépendances :") . "</b><br>";
         // si un lien est précisé on affiche une iframe vers ce lien (
         $html .= "<iframe width='700' height='1000' frameborder='no' src='" . str_replace(urlencode("###currentId###"), $parametres['id'], $parametres['afficheDependancesInIFrameUrl']) . "'></iframe>";
     }
     return $html;
 }
 /**
  * Fonction permettant a l'administrateur de visualiser l'historique de l'image
  *
  * @param int $idImage ID de l'image
  *
  * @return string HTML
  * */
 public function afficheHistoriqueImage($idImage = 0)
 {
     $u = new archiUtilisateur();
     $html = "";
     $req = "SELECT idHistoriqueImage, dateUpload, idImage, idUtilisateur, description, dateCliche, isDateClicheEnviron, idSource FROM historiqueImage WHERE idImage='" . $idImage . "'";
     $res = $this->connexionBdd->requete($req);
     $t = new tableau();
     $d = new dateObject();
     $bb = new bbCodeObject();
     $s = new archiSource();
     $authentification = new archiAuthentification();
     $droitsObject = new droitsObject();
     $idProfilUtilisateur = $u->getIdProfilFromUtilisateur($authentification->getIdUtilisateur());
     $isRegenerationPossible = false;
     if ($droitsObject->isAuthorized('image_regenerer', $idProfilUtilisateur)) {
         $isRegenerationPossible = true;
     }
     while ($fetch = mysql_fetch_assoc($res)) {
         //$html.="<img src='".$this->getUrlImage("moyen").$fetch['dateUpload']."/".$fetch['idHistoriqueImage'].".jpg"."'><br>";
         $t->addValue("<img src='" . $this->getUrlImage("moyen") . $fetch['dateUpload'] . "/" . $fetch['idHistoriqueImage'] . ".jpg" . "'>", "valign=top");
         $arrayInfosUtilisateur = $u->getArrayInfosFromUtilisateur($fetch['idUtilisateur'], array('listeChamps' => 'nom, prenom'));
         $libelleUtilisateur = $arrayInfosUtilisateur['nom'] . " " . $arrayInfosUtilisateur['prenom'];
         $dateCliche = " - ";
         if ($fetch['dateCliche'] != '0000-00-00') {
             $environ = "";
             if ($fetch['isDateClicheEnviron'] == '1') {
                 $environ = "Environ ";
             }
             $dateCliche = $environ . $d->toFrenchAffichage($fetch['dateCliche']);
         }
         $libelleSource = $s->getSourceLibelle($fetch['idSource']);
         if ($libelleSource != '') {
             $libelleSource = "<tr><td><b>source : </b>" . $libelleSource . "</td></tr>";
         }
         $description = "";
         if ($fetch['description'] != '') {
             $description = "<tr><td><b>description :</b><br>" . $bb->convertToDisplay(array('text' => $fetch['description'])) . "</td></tr>";
         }
         $detailHistoriqueImage = "<table><tr><td>de <a href='" . $this->creerUrl('', 'detailProfilPublique', array('archiIdUtilisateur' => $fetch['idUtilisateur'])) . "'>" . $libelleUtilisateur . "</a> (le " . $d->toFrenchAffichage($fetch['dateUpload']) . ")</td></tr><tr><td><b>date cliché : </b>" . $dateCliche . "</td></tr>" . $description . "" . $libelleSource . "</table>";
         $t->addValue($detailHistoriqueImage);
         if ($isRegenerationPossible) {
             $reqRegenerationAvailable = "SELECT idHistoriqueImage ,  idImage ,  cheminImageUploadee FROM imagesUploadeesPourRegeneration WHERE idHistoriqueImage = '" . $fetch['idHistoriqueImage'] . "' AND idImage='" . $idImage . "'";
             $resRegenerationAvailable = $this->connexionBdd->requete($reqRegenerationAvailable);
             if (mysql_num_rows($resRegenerationAvailable) > 0) {
                 $fetchRegenerationAvailable = mysql_fetch_assoc($resRegenerationAvailable);
                 if (file_exists($this->getCheminPhysique() . "/images/uploadMultiple/" . $fetchRegenerationAvailable['cheminImageUploadee'])) {
                     $t->addValue("<input type='button' name='regenere' value='régéréner les photos à partir de la source' onclick=\"location.href='" . $this->creerUrl('regenereImageFromUploadDir', 'imageDetail', array('archiIdHistoriqueImage' => $fetch['idHistoriqueImage'], 'archiIdImage' => $idImage)) . "';\">");
                 } else {
                     $t->addValue("Enregistrement trouvé,  mais fichier source de régénération inexistant.");
                 }
             } else {
                 $t->addValue("Pas de régénération possible");
             }
         }
     }
     // En principe cette variable represente un idEvenement,  a changer pour l'id evenementGroupeAdresse
     if (isset($this->variablesGet['archiRetourIdValue']) && $this->variablesGet['archiRetourIdValue'] != '') {
         $adresse = new archiAdresse();
         $evenement = new archiEvenement();
         $idEvenementGroupeAdresse = $evenement->getIdEvenementGroupeAdresseFromIdEvenement($this->variablesGet['archiRetourIdValue']);
         $html .= $adresse->afficherRecapitulatifAdresses($idEvenementGroupeAdresse);
     }
     $html .= "<h2>Historique de l'image {$idImage}</h2>";
     if ($isRegenerationPossible) {
         $html .= $t->createHtmlTableFromArray(3, '', '', '');
     } else {
         $html .= $t->createHtmlTableFromArray(2, '', '', '');
     }
     return $html;
 }
 /**
  * Affichage du formulaire d'ajout/édition
  * 
  * @param array $params Paramètres
  * 
  * @return string HTML
  * */
 public function formulaireActualites($params = array())
 {
     $html = "";
     $f = new formGenerator();
     $d = new dateObject();
     $c = new calqueObject();
     $this->addToJsHeader("<script>" . $c->getJSScrollHeight() . "</script>");
     $html .= $c->getDiv(array('width' => 900, 'lienSrcIFrame' => '', 'titre' => 'Prévisualisation'));
     $idActualite = 0;
     $boutonNouveau = "";
     $boutonSupprimer = "";
     $boutonPrevisualiser = "<input type='button' name='previsualisation' value='Prévisualisation' onclick=\"tinyMCE.triggerSave(true,true);document.getElementById('" . $c->getJSDivId() . "').style.top=(50+getScrollHeight())+'px';document.getElementById('" . $c->getJSIFrameId() . "').src='" . $this->creerUrl('', 'previsualisationActualite', array()) . "';" . $c->getJSOpenPopup() . "\">";
     $boutonValiderEtEnvoiMailPrevisualisation = "<input type='button' name='valideEtEnvoi' id='valideEtEnvoi' value=\"Envoyer le mail tout de suite\" onclick=\"document.getElementById('formActu').action+='&previsualisationMail=1';document.getElementById('formActu').submit();\">\n        <input type='button' name='valideEtPrev' id='valideEtPrev' value='" . _("Prévisualiser le mail") . "' onclick=\"document.getElementById('formActu').action+='&previsualisationMail=1&preview=1';document.getElementById('formActu').setAttribute('target', '_blank'); document.getElementById('formActu').submit();\">\n        <input type='button' name='testMail' id='testMail' value='" . _("Envoyer un mail de test") . "' onclick=\"document.getElementById('formActu').action+='&previsualisationMail=1&preview=1&testMail=1';document.getElementById('formActu').setAttribute('target', '_blank'); document.getElementById('formActu').submit();\">\n        ";
     if (isset($this->variablesGet['archiIdActualite']) && $this->variablesGet['archiIdActualite'] != '') {
         $idActualite = $this->variablesGet['archiIdActualite'];
         $reqActu = "SELECT date,titre, sousTitre,photoIllustration, texte,urlFichier, fichierPdf, desactive,texteMailHebdomadaire,envoiMailHebdomadaire FROM actualites WHERE idActualite='" . $idActualite . "'";
         $resActu = $this->connexionBdd->requete($reqActu);
         $fetchActu = mysql_fetch_assoc($resActu);
         $date = $d->toFrenchAffichage($fetchActu['date']);
         $titre = $fetchActu['titre'];
         $sousTitre = $fetchActu['sousTitre'];
         $illustration = $fetchActu['photoIllustration'];
         $description = $fetchActu['texte'];
         $urlFichier = $fetchActu['urlFichier'];
         $fichierPdf = $fetchActu['fichierPdf'];
         $isDesactivated = $fetchActu['desactive'];
         $texteMailHebdomadaire = $fetchActu['texteMailHebdomadaire'];
         $isEnvoi = $fetchActu['envoiMailHebdomadaire'];
         $formAction = $this->creerUrl('modifierActu', 'adminActualites', array('archiIdActualite' => $idActualite));
         $boutonNouveau = "<input type='button' name='nouveauButton' value='Nouveau' onclick=\"location.href='" . $this->creerUrl('', 'adminActualites', array()) . "'\">";
         $boutonSupprimer = "<input type='button' name='supprimerBouton' value='Supprimer' onclick=\"location.href='" . $this->creerUrl('supprimerActu', 'adminActualites', array("idActuSuppr" => $idActualite)) . "'\">";
     } else {
         $date = date("d/m/Y");
         $titre = "";
         $sousTitre = "";
         $illustration = "";
         $description = "";
         $urlFichier = "";
         $fichierPdf = "";
         $isDesactivated = 0;
         $texteMailHebdomadaire = "";
         $isEnvoi = 0;
         $formAction = $this->creerUrl('ajouterActu', 'adminActualites', array('check' => 1));
         // check sert juste a ne pas avoir a gerer le ? ou le & dans l'url quand on rajoute un parametre en js
     }
     $idActualitePathImage = "";
     if ($idActualite != 0) {
         $idActualitePathImage = $idActualite;
     }
     // bibliotheques d'images
     $fileObject = new fileObject();
     $arrayFiles = $fileObject->getListeFichiersArrayFrom($this->getCheminPhysique() . "images/actualites/" . $idActualite . "/");
     $listeFichiers = "";
     $t = new tableau();
     foreach ($arrayFiles as $indiceFichier => $fichier) {
         if (strtolower($fileObject->getExtensionFromFile($fichier)) == 'jpg' || strtolower($fileObject->getExtensionFromFile($fichier)) == 'gif' || strtolower($fileObject->getExtensionFromFile($fichier)) == 'png') {
             $t->addValue("<a onclick='injectInTinyMce(\"<img src=\\\"" . $this->getUrlImage() . "actualites/" . $idActualite . "/" . str_replace("'", "\\\\'", $fichier) . "\\\" border=0>\");'><img src=\"" . $this->getUrlImage() . "actualites/" . $idActualite . "/" . $fichier . "\" border=0 width=100 height=100></a>");
             $t->addValue("{$fichier}");
         } else {
             $t->addValue("&nbsp;");
             $t->addValue("{$fichier}");
         }
     }
     $listeFichiers = $t->createTable(2);
     $gestionBibliothequeImages = "Bibliothèque d'images de l'actualité <span style='font-size:11px;'>(cliquez sur une image pour l'inserer à la position du curseur)</span> : <div id='listeFichiers' style='background-color:#87CEFF;width:300px;height:200px;overflow:scroll;'>" . $listeFichiers . "</div>";
     $this->addToJsHeader("<script>\n                function injectInTinyMce(txt)\n                {\n                    tinyMCE.execInstanceCommand('texte','mceInsertContent',false,txt);\n                }\n                \n                function goRedim(idActualite)\n                {\n                    // validation du formulaire pour creer l'identifiant de l'actu et pouvoir ranger les photos\n                    document.getElementById('formActu').submit();\n                }\n            </script>");
     // on ne gere pas de timestamp , on assume que seul l'admin fera des mises a jour des actualités
     $applet = $fileObject->getAppletUploadMultiple(array('cheminApplet' => $this->getUrlRacine() . "/includes/", 'uploadDirPart1' => $this->getCheminPhysique() . "images/", 'uploadDirPart2' => "uploadMultipleActualites/", 'jsFunctionNameOnExit' => "goRedim({$idActualite})"));
     $configFields = array('idActualite' => array('libelle' => "idActualite", 'type' => 'hidden', 'required' => true, 'value' => '', 'forceValueTo' => $idActualite, 'htmlCode' => '', 'error' => ''), 'desactive' => array('libelle' => "désactiver", 'type' => 'singleCheckBox', 'required' => false, 'value' => '', 'forceValueTo' => '1', 'isChecked' => $isDesactivated, 'htmlCode' => '', 'error' => '', 'default' => ''), 'date' => array('libelle' => "date", 'withDatePicker' => true, 'type' => 'date', 'required' => true, 'value' => '', 'forceValueTo' => $date, 'htmlCode' => '', 'error' => ''), 'titre' => array('libelle' => "titre", 'type' => 'text', 'required' => false, 'value' => '', 'forceValueTo' => $titre, 'htmlCode' => "style='width:300px;'", 'error' => ''), 'sousTitre' => array('libelle' => "sous-titre", 'type' => 'text', 'required' => false, 'value' => '', 'forceValueTo' => $sousTitre, 'htmlCode' => "style='width:300px;'", 'error' => ''), 'photoIllustration' => array('libelle' => "illustration", 'type' => 'uploadImage', 'required' => false, 'value' => '', 'forceValueTo' => $illustration, 'physicalImagePathForTestExists' => $this->getCheminPhysique() . "images/actualites/" . $idActualitePathImage . "/", 'urlImagePathForDisplayInForm' => $this->getUrlImage() . "actualites/" . $idActualitePathImage . "/", 'htmlCode' => '', 'error' => ''), 'texte' => array('libelle' => "description", 'type' => 'tinyMCE', 'required' => false, 'value' => '', 'forceValueTo' => $description, 'htmlCode' => "cols=80 rows=30", 'error' => '', 'htmlCode2' => $gestionBibliothequeImages . "<div><a onclick=\"if(document.getElementById('divApplet').style.display=='none'){document.getElementById('divApplet').style.display='block';}else{document.getElementById('divApplet').style.display='none';}\" style='cursor:pointer;'>Voir/cacher ajouter une image</a></div><div id='divApplet' style='float:left;display:none'>" . $applet . "</div>"), 'urlFichier' => array('libelle' => "url redirection", 'type' => 'text', 'required' => false, 'value' => '', 'forceValueTo' => $urlFichier, 'htmlCode' => "style='width:300px;'", 'error' => ''), 'fichierPdf' => array('libelle' => "fichier pdf", 'type' => 'text', 'required' => false, 'value' => '', 'forceValueTo' => $fichierPdf, 'htmlCode' => "style='width:300px;'", 'error' => ''), 'texteMailHebdomadaire' => array('libelle' => "description mail hebdomadaire <span style='color:red;'>(ne pas oublier de préciser le titre)</span>", 'type' => 'tinyMCE', 'required' => false, 'value' => '', 'forceValueTo' => $texteMailHebdomadaire, 'htmlCode' => "cols=80 rows=30", 'error' => ''), 'envoiMailHebdomadaire' => array('libelle' => "envoi avec la newsletter hebdomadaire", 'type' => 'singleCheckBox', 'required' => false, 'value' => '', 'forceValueTo' => '1', 'isChecked' => $isEnvoi, 'htmlCode' => '', 'error' => '', 'default' => ''));
     $configForm = array("fields" => $configFields, 'formAction' => $formAction, 'codeHtmlAfterSubmitButton' => $boutonNouveau . $boutonSupprimer . $boutonPrevisualiser . $boutonValiderEtEnvoiMailPrevisualisation, 'formName' => 'formActu');
     $html .= $f->afficherFromArray($configForm);
     return $html;
 }
     if (!isset($arrayRegroupementTypeMail[$fetch['idUtilisateur']][$fetch['idTypeMailRegroupement']])) {
         $arrayRegroupementTypeMail[$fetch['idUtilisateur']][$fetch['idTypeMailRegroupement']] = array();
     }
     $arrayRegroupementTypeMail[$fetch['idUtilisateur']][$fetch['idTypeMailRegroupement']][] = array('idUtilisateur' => $fetch['idUtilisateur'], 'contenu' => $fetch['contenu'], 'dateHeure' => $fetch['dateHeure'], 'idTypeMailRegroupement' => $fetch['idTypeMailRegroupement'], 'idMail' => $fetch['idMail']);
 }
 foreach ($arrayRegroupementTypeMail as $idUtilisateur => $valueTypeMailRegroupement) {
     $arrayMailsASupprimer = array();
     $message = "<b>Modifications apportées sur le site archi-wiki.org" . "</b><br><br>";
     foreach ($valueTypeMailRegroupement as $idTypeMailRegroupement => $valueMail) {
         // recup de l'intitule de la rubrique de mail regroupee
         $reqIntituleRegroupement = "SELECT intitule FROM typesMailsEnvoiMailsRegroupes" . " WHERE idTypeMail = '" . $idTypeMailRegroupement . "'";
         $resIntituleRegroupement = $config->connexionBdd->requete($reqIntituleRegroupement);
         $fetchIntituleRegroupement = mysql_fetch_assoc($resIntituleRegroupement);
         $message .= "<b>" . $fetchIntituleRegroupement['intitule'] . "</b> : <br>";
         foreach ($valueMail as $indice => $value) {
             $message .= " - <i>" . $d->toFrenchAffichage($value['dateHeure']) . " :</i> " . $value['contenu'] . "<br>";
             $arrayMailsASupprimer[] = $value['idMail'];
         }
     }
     $message .= "<br>" . $config->getMessageDesabonnerAlerteMail();
     // recup du mail de la personne
     $reqMail = "SELECT mail FROM utilisateur WHERE idUtilisateur='" . $idUtilisateur . "'";
     $resMail = $config->connexionBdd->requete($reqMail);
     $fetchMail = mysql_fetch_assoc($resMail);
     $sujet = "archi-wiki.org : Modifications sur le site";
     $mail->sendMail($mail->getSiteMail(), trim($fetchMail['mail']), $sujet, $message, true, null, 'daily.log');
     // Stockage du mail dans les logs
     /*
             $reqStock = "INSERT INTO logMails".
             "(destinataire, sujet, message, date) VALUES ('"
             .trim($fetchMail['mail'])."', \"".mysql_real_escape_string($sujet)."\", \""