TODO : vérifier si on pas plutot utiliser un Closure au lieu d'un callable pour le typehint
502104
public function group(string $prefix, callable $callback): RouteGroup
    {
        $prefix = ($prefix === '/') ? $this->prefix : rtrim($this->prefix, '/') . sprintf('/%s', ltrim($prefix, '/'));

        $group = $this->router->group($prefix, $callback);

        // in cases of group of groups, we need to persist the settings from the previous group in the new one.
        if ($host = $this->getHost()) {
            $group->setHost($host);
        }
        if ($scheme = $this->getScheme()) {
            $group->setScheme($scheme);
        }
        if ($port = $this->getPort()) {
            $group->setPort($port);
        }
        if ($strategy = $this->getStrategy()) {
            $group->setStrategy($strategy);
        }

        // merge all the previous group middlewares in this last group.
        $group->middleware(array_merge($this->getMiddlewareStack(), $group->getMiddlewareStack()));

        return $group;
    }
290239
public function ajouter()
    {
        $html = '';
        $erreur = array();
        $tabForm = array();
        $ajoutOk = false;
        $aAuthentification = new archiAuthentification();
        $formulaire = new formGenerator();
        if ($aAuthentification->estConnecte() == 0) {
            echo 'utilisateur non connecté';
            $this->erreurs->ajouter('Vous n\'êtes pas connecté !');
        } elseif (isset($this->variablesPost['ajoutSousEvenement'])) {
            $tabForm=$this->getEvenementFields('nouveauDossier');

            $erreur = $formulaire->getArrayFromPost($tabForm);

            if (count($erreur) == 0) {
                $this->connexionBdd->getLock(array('evenements'));

                //***************
                //**  GESTION DES VARIABLES
                //**

                $titre              = mysql_escape_string($tabForm['titre']['value']);
                $description        = mysql_escape_string($tabForm['description']['value']);
                $dateDebut          = $this->date->toBdd($this->date->convertYears($tabForm['dateDebut']['value']));
                $isDateDebutEnviron = $tabForm['isDateDebutEnviron']['value'];
                $dateFin            = $this->date->toBdd($this->date->convertYears($tabForm['dateFin']['value']));
                $idSource=0;
                if ($tabForm['source']['value']!='') {
                    $idSource    = $tabForm['source']['value'];
                }
                $idUtilisateur   = $aAuthentification->getIdUtilisateur();
                $idTypeStructure = $tabForm['typeStructure']['value'];
                $idTypeEvenement = $tabForm['typeEvenement']['value'];
                $nbEtages = $tabForm['nbEtages']['value'];


                $ISMH           = $tabForm['ISMH']['value'];
                $MH             = $tabForm['MH']['value'];


                //**************
                //**  VERIFICATION DOUBLON
                //**

                $sqlVerificationDoublon = "
						SELECT he1.idEvenement
						FROM evenements he2, evenements he1
						RIGHT JOIN _evenementEvenement ee ON ee.idEvenement = '".$this->variablesPost['evenementGroupeAdresse']."'
						WHERE he2.idEvenement = he1.idEvenement
						AND he1.titre='".$titre."'
						AND he1.idEvenement = ee.idEvenementAssocie
						AND he1.description = \"".$description."\"
						AND he1.dateDebut = \"".$dateDebut."\"
						AND he1.isDateDebutEnviron = '".$isDateDebutEnviron."'
						AND he1.dateFin = \"".$dateFin."\"
						AND he1.idSource = '".$idSource."'
						AND he1.idTypeStructure='".$idTypeStructure."'
						AND he1.idTypeEvenement='".$idTypeEvenement."'
						GROUP BY he1.idEvenement, he1.idEvenement
						";

                $res = $this->connexionBdd->requete($sqlVerificationDoublon);

                if (mysql_num_rows($res) != 0) {
                    $this->erreurs->ajouter(_("Exactement le même enregistrement existe déjà !"));

                    // on défini les informations pour pouvoir tout de même afficher l'événement
                    $rep         = mysql_fetch_object($res);
                    $idEvenement = $rep->idEvenement;
                    $ajoutOk     = true;
                } else {
                    //***************
                    //**  ENREGISTREMENT
                    //**
                    //$idEvenement = $this->getNewIdEvenement();
                    // si c'est un événement sans événements parents
                    // c'est qu'il faut créer un evenement vide
                    // ayant pour type d'événement un groupe d'adresses
                    // sur lequel on va donc lier les adresses

                    if (!isset($this->variablesPost['evenementGroupeAdresse']) || $this->variablesPost['evenementGroupeAdresse']=='') {//(empty($tabForm['evenements']['value']))
                    // creation de l'evenement parent groupe d'adresse
                        $sql = "INSERT INTO evenements (titre, description, dateDebut, dateFin, idSource, idUtilisateur, idTypeStructure, idTypeEvenement,dateCreationEvenement)
								VALUES ('', '', '', '', ".$idSource.", ".$idUtilisateur.", 0, '".$this->getIdTypeEvenementGroupeAdresse()."', now())";

                        $this->connexionBdd->requete($sql);
                        $tabForm['evenements']['value'][] = $idEvenement;

                        $idEvenement = $this->connexionBdd->getLastId();
                        $idSousEvenement =$idEvenement+ 1; // id du sous evenements lié à l'evenement groupe d'adresses


                        // on lie les adresses a l'evenement groupe d'adresse
                        if (!empty($tabForm['adresses']['value'])) {
                            $sqlEvenementAdresse = "INSERT INTO _adresseEvenement (idAdresse,idEvenement) VALUES ";
                            foreach (array_unique($tabForm['adresses']['value']) as $idAdresse) {
                                $sqlEvenementAdresse .= '('.$idAdresse.', '.$idEvenement.'),';
                            }
                            $sqlEvenementAdresse = pia_substr($sqlEvenementAdresse, 0, -1);
                            $this->connexionBdd->requete($sqlEvenementAdresse);
                        }
                    } else {
                        $idSousEvenement = $idEvenement; // si on est dans le cas d'un ajout de sous evenement simple , sans creation de groupe d'adresse, on recupere l'id d'un nouvel element virtuel (getNewIdEVenement)
                    }



                    // debug
                    if ($nbEtages=='') {
                        $nbEtages=0;
                    }

                    // ajout de l'evenement fils
                    $sqlHistoriqueEvenement =
                    "INSERT INTO evenements (
								titre,
								description,
								dateDebut,
								dateFin,
								idSource,
								idUtilisateur,
								idTypeStructure,
								idTypeEvenement,
								dateCreationEvenement ,
								nbEtages,
								ISMH,
								MH,
								isDateDebutEnviron
							)

							VALUES (
								\"".$titre."\",
								\"".$description."\",
								'".$dateDebut."',
								'".$dateFin."',
								 ".$idSource.",
								 ".$idUtilisateur.",
						 		'".$idTypeStructure."',
				 				'".$idTypeEvenement."',
		 						now(),
		 						".$nbEtages.",
	 							'".$ISMH."',
	 							'".$MH."',
	 							'".$isDateDebutEnviron."'
 														)";
                    $this->connexionBdd->requete($sqlHistoriqueEvenement);


                    $idSousEvenement=$this->connexionBdd->getLastId();


                    if (!empty($tabForm['courant']['value'])) {
                        $sqlEvenementCourantArchitectural = "INSERT INTO _evenementCourantArchitectural (idCourantArchitectural, idEvenement) VALUES ";
                        foreach (array_unique($tabForm['courant']['value']) as $idCourant) {
                            $sqlEvenementCourantArchitectural .= '('.$idCourant.', '.$idSousEvenement.'),';
                        }
                        $sqlEvenementCourantArchitectural = pia_substr($sqlEvenementCourantArchitectural, 0, -1);

                        $this->connexionBdd->requete($sqlEvenementCourantArchitectural);
                    }

                    if (!empty($tabForm['personnes']['value'])) {
                        $sqlEvenementPersonne = "INSERT INTO _evenementPersonne (idPersonne, idEvenement) VALUES ";
                        foreach (array_unique($tabForm['personnes']['value']) as $idPersonne) {
                            $sqlEvenementPersonne .= '('.$idPersonne.', '.$idSousEvenement.'),';
                        }
                        $sqlEvenementPersonne = pia_substr($sqlEvenementPersonne, 0, -1);
                        $this->connexionBdd->requete($sqlEvenementPersonne);
                    }


                    //TODO : Gestion du tableau de source
                    /*
					 if(!empty($tabForm['source']['value'])){
					$sqlEvenementSource = "INSERT INTO _evenementSource (idSource, idEvenement) VALUES ";
					foreach ( array_unique($tabForm['source']['value']) AS $idSource)
					{
					$sqlEvenementSource .= '('.$idSource.', '.$idSousEvenement.'),';
					}
					$sqlEvenementSource = pia_substr( $sqlEvenementSource, 0, -1);

					$this->connexionBdd->requete($sqlEvenementSource);
					}
					*/




                    // ajout de l'evenement enfant à l'evenement groupe d'adresse

                    if (!isset($this->variablesPost['evenementGroupeAdresse']) || $this->variablesPost['evenementGroupeAdresse']=='') {//(empty($tabForm['evenements']['value']))
                    // cas liaison entre le nouvel evenement groupe d'adresse et le nouvel evenement fils // ajout d'un evenement
                        $sqlEvenementEvenement = "
								insert into _evenementEvenement (idEvenement,idEvenementAssocie)
								values ('".$idEvenement."','".$idSousEvenement."');
										";
                        //debug($sqlEvenementEvenement);
                        $this->connexionBdd->requete($sqlEvenementEvenement);
                    } else {
                        // cas liaison entre l'element groupe d'adresse precisé dans $tabForm['evenementGroupeAdresse'] et le nouvel evenement fils // ajout d'un sous evenement
                        $sqlEvenementEvenement = "
								insert into _evenementEvenement (idEvenement,idEvenementAssocie)
								values ('".$this->variablesPost['evenementGroupeAdresse']."','".$idSousEvenement."')
										";
                        //debug($sqlEvenementEvenement);
                        $this->connexionBdd->requete($sqlEvenementEvenement);
                    }

                    $ajoutOk = true;
                }

                // libération de la table
                $this->connexionBdd->freeLock(array('evenements'));
            }
        }

        if ($ajoutOk === true) {
            if (isset($idSousEvenement)) {
                $idEvenementGroupeAdresse = $this->getIdEvenementGroupeAdresseFromIdEvenement($idSousEvenement);

                // d'abord on classe les evenements (les positions précédentes sont conservees)
                $this->majPositionsEvenements(array('idEvenementGroupeAdresse'=>$idEvenementGroupeAdresse,'idNouvelEvenement'=>$idSousEvenement));

                $mail = new mailObject();
                $adresse = new archiAdresse();
                $reqAdresses = $adresse->getIdAdressesFromIdEvenement(array('idEvenement'=>$idSousEvenement));

                $resAdresses = $this->connexionBdd->requete($reqAdresses);
                $arrayVilles=array();
                $arrayAdresses = array();
                while ($fetchAdresses = mysql_fetch_assoc($resAdresses)) {
                    $arrayVilles[] = $adresse->getIdVilleFrom($fetchAdresses['idAdresse'], 'idAdresse');
                    $arrayAdresses[] = $fetchAdresses['idAdresse'];
                }

                $arrayVilles = array_unique($arrayVilles);
                $arrayAdresses = array_unique($arrayAdresses);

                if ($idPerson=archiPersonne::isPerson($idEvenementGroupeAdresse)) {
                    header("Location: ".$this->creerUrl('', '', array('archiAffichage'=>'evenementListe', 'selection'=>"personne", 'id'=>$idPerson), false, false));
                }

                // ************************************************************************************************************************************************
                // envoi d'un mail a l'auteur de l'adresse
                // ************************************************************************************************************************************************
                $utilisateur = new archiUtilisateur();
                $arrayUtilisateurs = $utilisateur->getCreatorsFromAdresseFrom($idSousEvenement, 'idEvenement');

                $intituleAdresse = $adresse->getIntituleAdresseFrom($idSousEvenement, 'idEvenement');
                foreach ($arrayUtilisateurs as $indice => $idUtilisateurAdresse) {
                    if ($idUtilisateurAdresse != $aAuthentification->getIdUtilisateur()) {
                        $infosUtilisateur = $utilisateur->getArrayInfosFromUtilisateur($idUtilisateurAdresse);
                        if ($infosUtilisateur['alerteAdresses']=='1' && $infosUtilisateur['compteActif']=='1' && $infosUtilisateur['idProfil']!='4') {
                            $messageDebut = "Un utilisateur a ajouté un événement sur une adresse dont vous êtes l'auteur.";
                            $messageDebut.= "Pour vous rendre sur l'événement : <br>";
                            $messageDebut.="<a href='".$this->creerUrl('', '', array('archiAffichage'=>'adresseDetail','archiIdAdresse'=>$arrayAdresses[0],'archiIdEvenementGroupeAdresse'=>$idEvenementGroupeAdresse))."'>".$intituleAdresse."</a><br>";
                            $messageFin= $this->getMessageDesabonnerAlerteMail();

                            if ($utilisateur->isMailEnvoiImmediat($idUtilisateurAdresse)) {
                                $mail->sendMail($mail->getSiteMail(), $infosUtilisateur['mail'], 'Mise a jour d\'un événement d\'une adresse dont vous êtes l\'auteur.', $messageDebut.$messageFin, true);
                            } else {
                                $utilisateur->ajouteMailEnvoiRegroupes(array('contenu'=>$messageDebut,'idDestinataire'=>$idUtilisateurAdresse,'idTypeMailRegroupement'=>10));
                            }
                        }
                    }
                }
                // ************************************************************************************************************************************************

                // ************************************************************************************************************************************************
                // envoi au administrateurs qui sont en mode alerteAdresse
                // ************************************************************************************************************************************************

                $message = "";
                $message .= "Un nouvel événement a été ajouté sur l'adresse suivante : <br>";
                $message.="<a href='".$this->creerUrl('', '', array('archiAffichage'=>'adresseDetail','archiIdAdresse'=>$arrayAdresses[0],'archiIdEvenementGroupeAdresse'=>$idEvenementGroupeAdresse))."'>".$adresse->getIntituleAdresseFrom($idSousEvenement, 'idEvenement')."</a>";

                $mail->sendMailToAdministrators($mail->getSiteMail(), "Un nouvel événement a été ajouté - ".$intituleAdresse, $message, " AND alerteAdresses='1' ", true);
                $utilisateur->ajouteMailEnvoiRegroupesAdministrateurs(array('contenu'=>$message,'idTypeMailRegroupement'=>10,'criteres'=>" and alerteAdresses='1' "));
                // ************************************************************************************************************************************************

                // *************************************************************************************************************************************************************
                // envoi mail aussi au moderateur si ajout sur adresse de ville que celui ci modere
                $u = new archiUtilisateur();


                $arrayListeModerateurs = $u->getArrayIdModerateursActifsFromVille($arrayVilles[0], array("sqlWhere"=>" AND alerteAdresses='1' "));
                if (count($arrayListeModerateurs)>0) {
                    foreach ($arrayListeModerateurs as $indice => $idModerateur) {
                        if ($aAuthentification->getIdUtilisateur()!=$idModerateur) {
                            if ($u->isMailEnvoiImmediat($idModerateur)) {
                                $mailModerateur = $u->getMailUtilisateur($idModerateur);
                                $mail->sendMail($mail->getSiteMail(), $mailModerateur, "Un nouvel événement a été ajouté - ".$intituleAdresse, $message, true);
                            } else {
                                $u->ajouteMailEnvoiRegroupes(array('contenu'=>$message,'idDestinataire'=>$idModerateur,'idTypeMailRegroupement'=>10));
                            }
                        }
                    }
                }

                // *************************************************************************************************************************************************************

                if ($idPerson=archiPersonne::isPerson($idEvenementGroupeAdresse)) {
                    header("Location: ".$this->creerUrl('', '', array('archiAffichage'=>'evenementListe', 'selection'=>"personne", 'id'=>$idPerson), false, false));
                } else {
                    $adresse = new archiAdresse();
                    $idGroupeAdresse = $this->getParent($idSousEvenement);
                    $idAdresse = $this->getIdAdresseFromIdEvenementGroupeAdresse($idGroupeAdresse);

                    $url= $this->creerUrl(
                        '',
                        '',
                        array(
                                'archiAffichage'=>'adresseDetail',
                                "archiIdAdresse"=>$idAdresse,
                                "archiIdEvenementGroupeAdresse"=>$idGroupeAdresse
                        )
                    );
                        header("Location: ".htmlspecialchars_decode($url));
                }
            }
        } else {
            $html .= $this->afficheFormulaire($tabForm);
        }

        return $html;
    }
121080
public function onCoreController(FilterControllerEvent $event)
    {
        // ici on vérifie que la requête est une "MASTER_REQUEST" pour que les sous-requêtes soient ingorées (par exemple si on fait un render() dans notre template)
        if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
            return;
        }
        
        // On vérifie qu'un token d'autentification est bien présent avant d'essayer manipuler l'utilisateur courant.
        if ($this->context->getToken()) {
            $user = $this->context->getToken()->getUser();
            
            // On utilise un délai pendant lequel on considère que l'utilisateur est toujours actif et qu'il n'est pas nécessaire de refaire de mise à jour
            $delay = new \DateTime();
            $strDelay = sprintf('%s minutes ago', $this->delay);
            $delay->setTimestamp(strtotime($strDelay));
            
            // On vérifie que l'utilisateur est bien du bon type pour ne pas appeler getLastActivity() sur un objet autre objet User
            if ($user instanceof User && $user->getLastActivity() < $delay) {
                $user->setOnline();
                $this->em->flush($user);
            }
        }
    }
832554
public function login($credentials, $options = array()) {

        /**
         * @var $db \Joomla\Database\DatabaseDriver
         */
        $db = $this->getContainer()->get('db');

        $factory = new LanguageFactory;
        $text = $factory->getText();

        if (isset($options['silentReset']) && $options['silentReset']) { // Si on a demandé un reset du mot de passe.

            // On s'assure qu'il y a bien un utilisateur avec ce jeton et on récupère les données dans la session.
            $query  = $db->getQuery(true)
                         ->select($db->quoteName(array(
                             'id',
                             'username',
                             'password'
                         )))
                         ->from($db->quoteName('#__users'))
                         ->where($db->quoteName('activation') . ' = ' . $db->quote($credentials['activation']))
                         ->where($db->quoteName('requireReset') . ' = 1');

            $result = $db->setQuery($query)
                         ->loadObject();

            if ($result) {

                // On charge l'utilisateur.
                $user = $this->getContainer()->get('user')->load($result->id);

                // On effectue les dernières vérifications.
                if (!$this->authoriseLogin($user)) {
                    if (!isset($options['silent']) || !$options['silent']) {
                        $this->enqueueMessage($text->translate("APP_ERROR_LOGIN_BLOCKED_USER"), "danger");
                    }

                    return false;
                }

                // On met à jour la dernière visite.
                $user->setLastVisit();

                // On met à jour la session.
                $session = $this->getSession();
                $session->set('user_id', $user->id);
                $session->set('from_reset', true);

                // On met à jour les champs dans la table de session.
                $db->setQuery($db->getQuery(true)
                                 ->update($db->quoteName('#__session'))
                                 ->set($db->quoteName('guest') . ' = 0')
                                 ->set($db->quoteName('username') . ' = ' . $db->quote($user->username))
                                 ->set($db->quoteName('userid') . ' = ' . (int)$user->id)
                                 ->where($db->quoteName('session_id') . ' = ' . $db->quote($session->getId())));

                $db->execute();

                return true;
            }

        } elseif (isset($options['useCookie']) && $options['useCookie']) { // Si on a demandé l'authentification par cookie.

            // On récupère le cookie.
            $cookieName  = $this->getShortHashedUserAgent();
            $cookieValue = $this->input->cookie->get($cookieName);

            if (!$cookieValue) {

                if (!isset($options['silent']) || !$options['silent']) {
                    $this->enqueueMessage($text->translate("APP_ERROR_LOGIN_INVALID_COOKIE"), "danger");
                }

                return false;
            }

            $cookieArray = explode('.', $cookieValue);

            // On contrôle que le cookie est valide.
            if (count($cookieArray) != 2) {

                // On détruit le cookie dans le navigateur.
                $this->input->cookie->set($cookieName, false, time() - 42000, $this->get('cookie_path', '/'), $this->get('cookie_domain'));

                if (!isset($options['silent']) || !$options['silent']) {
                    $this->enqueueMessage($text->translate("APP_ERROR_LOGIN_INVALID_COOKIE"), "danger");
                }

                return false;
            }

            // On filtre les entrées car on va les utiliser dans la requête.
            $filter = new InputFilter;
            $series = $filter->clean($cookieArray[1], 'ALNUM');

            // On retire les jetons expirés.
            $query = $db->getQuery(true)
                              ->delete('#__user_keys')
                              ->where($db->quoteName('time') . ' < ' . $db->quote(time()));
            $db->setQuery($query)
                     ->execute();

            // On trouve un enregistrement correspondant s'il existe.
            $query   = $db->getQuery(true)
                                ->select($db->quoteName(array(
                                    'user_id',
                                    'token',
                                    'series',
                                    'time'
                                )))
                                ->from($db->quoteName('#__user_keys'))
                                ->where($db->quoteName('series') . ' = ' . $db->quote($series))
                                ->where($db->quoteName('uastring') . ' = ' . $db->quote($cookieName))
                                ->order($db->quoteName('time') . ' DESC');
            $results = $db->setQuery($query)
                                ->loadObjectList();

            if (count($results) !== 1) {

                // On détruit le cookie dans le navigateur.
                $this->input->cookie->set($cookieName, false, time() - 42000, $this->get('cookie_path', '/'), $this->get('cookie_domain'));

                if (!isset($options['silent']) || !$options['silent']) {
                    $this->enqueueMessage($text->translate("APP_ERROR_LOGIN_INVALID_COOKIE"), "danger");
                }

                return false;
            } else { // On a un utilisateur avec un cookie valide qui correspond à un enregistrement en base.

                // On instancie la mécanique de vérification.
                //$simpleAuth = new Simple();

                //$token = $simpleAuth->create($cookieArray[0]);

                if (!password_verify($cookieArray[0], $results[0]->token)) {

                    // C'est une attaque réelle ! Soit on a réussi à créer un cookie valide ou alors on a volé le cookie et utilisé deux fois (une fois par le pirate et une fois par la victime).
                    // On supprime tous les jetons pour cet utilisateur !
                    $query = $db->getQuery(true)
                                      ->delete('#__user_keys')
                                      ->where($db->quoteName('user_id') . ' = ' . $db->quote($results[0]->user_id));
                    $db->setQuery($query)
                             ->execute();

                    // On détruit le cookie dans le navigateur.
                    $this->input->cookie->set($cookieName, false, time() - 42000, $this->get('cookie_path', '/'), $this->get('cookie_domain'));

                    //@TODO: logguer l'attaque et envoyer un mail à l'admin.

                    if (!isset($options['silent']) || !$options['silent']) {
                        $this->enqueueMessage($text->translate("APP_ERROR_LOGIN_INVALID_COOKIE"), "danger");
                    }

                    return false;
                }
            }

            // On s'assure qu'il y a bien un utilisateur avec cet identifiant et on récupère les données dans la session.
            $query  = $db->getQuery(true)
                               ->select($db->quoteName(array(
                                   'id',
                                   'username',
                                   'password'
                               )))
                               ->from($db->quoteName('#__users'))
                               ->where($db->quoteName('username') . ' = ' . $db->quote($results[0]->user_id))
                               ->where($db->quoteName('requireReset') . ' = 0');
            $result = $db->setQuery($query)
                               ->loadObject();

            if ($result) {

                // On charge l'utilisateur.
                $user = $this->getContainer()->get('user')->load($result->id);

                // On effectue les dernières vérifications.
                if (!$this->authoriseLogin($user)) {
                    if (!isset($options['silent']) || !$options['silent']) {
                        $this->enqueueMessage($text->translate("APP_ERROR_LOGIN_BLOCKED_USER"), "danger");
                    }

                    return false;
                }

                // On met à jour la dernière visite.
                $user->setLastVisit();

                // On met à jour la session.
                $session = $this->getSession();
                $session->set('user_id', $user->id);
                $session->set('from_cookie', true);

                // On met à jour les champs dans la table de session.
                $db->setQuery($db->getQuery(true)
                                             ->update($db->quoteName('#__session'))
                                             ->set($db->quoteName('guest') . ' = 0')
                                             ->set($db->quoteName('username') . ' = ' . $db->quote($user->username))
                                             ->set($db->quoteName('userid') . ' = ' . (int)$user->id)
                                             ->where($db->quoteName('session_id') . ' = ' . $db->quote($session->getId())));

                $db->execute();

                // On crée un cookie d'authentification.
                $options['user'] = $user;
                $this->createAuthenticationCookie($options);

                return true;
            }

            if (!isset($options['silent']) || !$options['silent']) {
                $this->enqueueMessage($text->translate("APP_ERROR_LOGIN_NO_USER"), "danger");
            }

            return false;

        } else { // Sinon on procède à l'authentification classique.

            // On vérifie les données.
            $db->setQuery($db->getQuery(true)
                                         ->select('id, password, username, block')
                                         ->from('#__users')
                                         ->where('username = ' . $db->quote($credentials['username'])));

            $res = $db->loadObject();

            // Si on a trouvé l'utilisateur.
            // C'est déjà pas mal !
            if ($res) {

                // Si l'utilisateur est bloqué, il lui est impossible de se connecter.
                if ($res->block == "1") {

                    if (!isset($options['silent']) || !$options['silent']) {
                        $this->enqueueMessage($text->translate("APP_ERROR_LOGIN_BLOCKED_USER"), "danger");
                    }

                    return false;
                }

                // On instancie la mécanique de vérification.
                //$simpleAuth = new Simple();

                // On contrôle le mot de passe avec le hash dans la base de données.
                if (password_verify($credentials['password'], $res->password)) {

                    // C'est presque bon !

                    // On charge l'utilisateur.
                    $user = $this->getContainer()->get('user')->load($res->id);

                    // On effectue les dernières vérifications.
                    if (!$this->authoriseLogin($user)) {
                        if (!isset($options['silent']) || !$options['silent']) {
                            $this->enqueueMessage($text->translate("APP_ERROR_LOGIN_BLOCKED_USER"), "danger");
                        }

                        return false;
                    }

                    // On met à jour la dernière visite.
                    $user->setLastVisit();

                    // On met à jour la session.
                    $session = $this->getSession();
                    $session->set('user_id', $user->id);
                    $session->set('from_cookie', false);

                    // On met à jour les champs dans la table de session.
                    $db->setQuery($db->getQuery(true)
                                                 ->update($db->quoteName('#__session'))
                                                 ->set($db->quoteName('guest') . ' = 0')
                                                 ->set($db->quoteName('username') . ' = ' . $db->quote($user->username))
                                                 ->set($db->quoteName('userid') . ' = ' . (int)$user->id)
                                                 ->where($db->quoteName('session_id') . ' = ' . $db->quote($session->getId())));

                    $db->execute();

                    // On crée un cookie d'authentification.
                    $options['user'] = $user;
                    $this->createAuthenticationCookie($options);

                    return true;
                }

            }

            if (!isset($options['silent']) || !$options['silent']) {
                $this->enqueueMessage($text->translate("APP_ERROR_LOGIN_INVALID_USERNAME_OR_PASSWORD"), "danger");
            }

            return false;

        }

    }
214912
function le (a, b, c) {
		compare.call(this, a, b, c, '__le', le_func);
	}
1182049
def allonge(f):
    
    if not f:
        return ""

    return f

    ## TODO : Implementer correctement la suite

    taille = len(f)
    # Je sais que le morceau à attacher commence par une consonne.
    if f[taille-2] in consonnes and not f[-2:].lower() in ["āe", "āu", "ēu",  "ōe"]:
        f = re.sub("[a\u0103]([" + consonnes + "])$", "\u0101\\1", f)
        f = re.sub("[e\u0115]([" + consonnes + "])$", "\u0113\\1", f)
        f = re.sub("[i\u012d]([" + consonnes + "])$", "\u012b\\1", f)
        f = re.sub("[o\u014F]([" + consonnes + "])$", "\u014d\\1", f)
        f = re.sub("[u\u016d]([" + consonnes + "])$", "\u016b\\1", f)
        f = re.sub("[y\u0233]([" + consonnes + "])$", "\u045e\\1", f)
        f = re.sub("[A\u0102]([" + consonnes + "])$", "\u0100\\1", f)
        f = re.sub("[E\u0114]([" + consonnes + "])$", "\u0112\\1", f)
        f = re.sub("[I\u012c]([" + consonnes + "])$", "\u012a\\1", f)
        f = re.sub("[O\u014e]([" + consonnes + "])$", "\u014c\\1", f)
        f = re.sub("[U\u016c]([" + consonnes + "])$", "\u016a\\1", f)
        f = re.sub("[Y\u0232]([" + consonnes + "])$", "\u040e\\1", f)
        return f
292714
public function getHTML()
    {

            $html="<div id='".$this->googleMapNameId."' style='width: ".$this->googleMapWidth."px; height: ".$this->googleMapHeight."px; ".$this->divStyle."'>Veuilliez patienter pendant le chargement de la carte...</div>";

        //$html.="<script  >";
        /*
        if (count($this->coordonnees)>0) {
            foreach ($this->coordonnees as $indice => $value) {
                if (isset($value['link'])) {
                    $html.="tabAdresses[".$indice."]=\"".$value['link']."\";\n";
                }
            }
        }

        $html.="</script>";
        $html.="<div id='".$this->googleMapNameId."' style='width: ".$this->googleMapWidth."px; height: ".$this->googleMapHeight."px;'>Veuilliez patienter pendant le chargement de la carte...</div>";

        if ($this->debugMode)
            $displayDebug='block';
        else
            $displayDebug='none';

        $html.="<div style='width:500px; height:300px;overflow:scroll;display:".$displayDebug.";' id='debugGoogleMap'></div>";
        $html.="<script  >load();</script>";

        // fonction appelant les affichages de coordonnées ,  appels regroupées dans une fonction qui groupe les coordonnées par paquet ,  afin de ne pas trop en envoyer a la fois
        if (count($this->coordonnees)>0) {
            $html.="<script  >";
            $html.="var numPaquet=0;\n";
            $html.="var timer;\n";
            $html.="startTimerPaquets();\n";
            $html.="function startTimerPaquets()\n";
            $html.="{";
            $html.="afficheCoordonneesParPaquets();\n";
            $html.="timer = setInterval(\"afficheCoordonneesParPaquets()\", ".$this->setTimeOutPaquets.");\n";
            $html.="}\n";

            $html.="function afficheCoordonneesParPaquets(){\n";
            $i=0;
            $numPaquet = 0;
            foreach ($this->coordonnees as $indice => $value) {
                $image = ", \"http://www.google.com/mapfiles/marker.png\"";//
                if (isset($value['imageFlag']) && $value['imageFlag']!='') {
                    $image = ", \"".$value['imageFlag']."\"";
                }

                if ($i%10==0) {
                    $html.="if (numPaquet==".$numPaquet.")\n";
                    $html.="{\n";
                    $iDebut = $i;
                }

                $html.=" getCoordonnees(\"".$value['adresse']."\", ".$indice." ".$image.");\n";

                if ($i==$iDebut+9 || $i==count($this->coordonnees)-1 ) {
                    $html.="}\n";
                    $numPaquet++;
                }
                $i++;
            }


            $html.="if (numPaquet>".$numPaquet.")\n";
            $html.="{\n";
            $html.="clearInterval(timer);\n";
            $html.="}\n";
            $html.="numPaquet++;\n";
            $html.="}\n";
            $html.="</script>";
        }
        */

        /*
        if ($this->debugMode)
            $displayDebug='block';
        else
            $displayDebug='none';
            */
        //$html.="<div style='width:500px; height:300px;overflow:scroll;display:".$displayDebug.";' id='debugGoogleMap'></div>";
        $html.="<script  >load();</script>";
        $html.="<script  >";
        if (isset($params['urlImageIcon']) && isset($params['pathImageIcon'])) {
            $urlImage = $params['urlImageIcon'];

            list($imageSizeX,  $imageSizeY,  $typeImage,  $attrImage) = getimagesize($params['pathImageIcon']);

            $html.="
                var icon = new GIcon();
                //icon.image = image;


                icon.image = \"$urlImage\";
                //icon.shadow = \"https://labs.google.com/ridefinder/images/mm_20_shadow.png\";
                icon.iconSize = new GSize($imageSizeX,  $imageSizeY);
                icon.shadowSize = new GSize(22,  20);
                icon.iconAnchor = new GPoint(2,  24);
                icon.infoWindowAnchor = new GPoint(5,  1);
                var iconMarker = new GIcon(icon);
            ";
        } else {
            $html.="
                var icon = new GIcon();
                //icon.image = image;
                var iconMarker = new GIcon(icon);

                icon.image = \"https://labs.google.com/ridefinder/images/mm_20_red.png\";
                //icon.shadow = \"https://labs.google.com/ridefinder/images/mm_20_shadow.png\";
                icon.iconSize = new GSize(30,  24);
                icon.shadowSize = new GSize(22,  20);
                icon.iconAnchor = new GPoint(2,  24);
                icon.infoWindowAnchor = new GPoint(5,  1);
            ";
        }
        $html.="</script>";

        if (isset($params['listeCoordonnees'])) {
            $html.="<script  >";
            foreach ($params['listeCoordonnees'] as $indice => $values) {
                $html.="

                    point$indice = new GLatLng(".$values['latitude'].", ".$values['longitude'].");
                    marker$indice = new GMarker(point$indice, iconMarker);
                    overlay$indice = map.addOverlay(marker$indice);
                    //marker$indice.openInfoWindowHtml(\"".$values['libelle']."\");

                    ";

                if (isset($values['jsCodeOnClickMarker'])) {
                    $html.="
                            function onClickFunction$indice(overlay,  point){".$values['jsCodeOnClickMarker']."}";

                    $html.="GEvent.addListener(marker$indice,  'click',  onClickFunction$indice);";
                }

                if (isset($values['jsCodeOnMouseOverMarker'])) {
                    $html.="function onMouseOverFunction$indice(overlay, point){".$values['jsOnMouseOverMarker']."}";
                    $html.="GEvent.addListener(marker$indice, 'mouseover', onMouseOverFunction$indice);";

                }

                if (isset($values['jsCodeOnMouseOutMarker'])) {
                    $html.="function onMouseOutFunction$indice(overlay, point){".$values['jsCodeOnMouseOutMarker']."}";
                    $html.="GEvent.addListener(marker$indice, 'mouseout', onMouseOutFunction$indice);";

                }

            }
            $html.="</script>";
        }



        return $html;
    }
306959
def inTrace(self, func: callable):  # decorator
        """"""
        @wraps(func)
        def call(*args, **kwargs):
            self.TRACE("Enter " + func.__qualname__ + "()")
            result = func(*args, **kwargs)
            self.TRACE("Leave " + func.__qualname__ + "()")
            return result
        return call
406959
function afficheAccueil($params=array())
	{
		$t = new Template($this->getCheminPhysique().$this->cheminTemplates);
		$t->set_filenames(array('accueil'=>'accueil.tpl'));
		$html = '';
		$infos = "";

		$calque = new calqueObject();
		$date = new dateObject();
		$auth = new archiAuthentification();

		
		
		if ($auth->estConnecte()) {
			$t->assign_block_vars('estConnecte', array());
		}

		$t->assign_vars(
				array(
						'urlAjoutAdresse'=>$this->creerUrl('', 'ajoutNouveauDossier')
				)
		);

		$adresses = new archiAdresse();

		if (isset($this->variablesGet['modeAffichage']) && $this->variablesGet['modeAffichage']!='') {
			$modeAffichage = $this->variablesGet['modeAffichage'];
		} else {
			$modeAffichage = '';
		}

		switch($modeAffichage) {
			// **********************************************************************************************************************************
			// PROFIL
			// **********************************************************************************************************************************
			case 'profil':

				$t->assign_block_vars('afficheProfil', array());

				$t->assign_vars(
						array(
								'onglet1'=>"<a href='".$this->creerUrl('', 'afficheAccueil', array('modeAffichage'=>''))."'><font color='#FFFFFF'>"._("Nouveautés")."</font></a>",
								'onglet2'=>_("Mon Profil"),
								'onglet3'=>"<a href='".$this->creerUrl('', 'afficheAccueil', array('modeAffichage'=>'monArchi'))."'><font color='#FFFFFF'>"._("Mon Archi")."</font></a>"
						)
				);


				$u = new archiUtilisateur();
				$s = new objetSession();

				if ($s->isInSession('utilisateurConnecte'.$this->idSite)) {
					$profil = $u->afficher(array(), $s->getFromSession('utilisateurConnecte'.$this->idSite), 'utilisateurProfil');
				} else {
					//header('Location: ?archiAffichage=authentification&archiActionPrecedente=afficheProfil');
					$authentification = new ArchiAuthentification();
					echo $authentification->afficheFormulaireAuthentification();
				}


				$t->assign_vars(array('htmlProfil'=>$profil));
				break;
				//Mon Archi
			case 'monArchi':

				$t->assign_block_vars('afficheMonArchi', array());

				$t->assign_vars(
						array(
								'onglet1'=>"<a href='".$this->creerUrl('', 'afficheAccueil', array('modeAffichage'=>''))."'><font color='#FFFFFF'>"._("Nouveautés")."</font></a>",
								'onglet2'=>"<a href='".$this->creerUrl('', 'afficheAccueil', array('modeAffichage'=>'profil'))."'><font color='#FFFFFF'>"._("Mon Profil")."</font></a>",
								'onglet3'=>_("Mon Archi")
						)
				);

				$utilisateur = new archiUtilisateur();
				$adresse = new archiAdresse();


				$arrayInfosConnexions = $utilisateur->getInfosConnexions($auth->getIdUtilisateur());

				$arrayInfosModifs = $utilisateur->getInfosModifsPerso($auth->getIdUtilisateur());

				$monArchi="<table border=''><tr><td width=500><h2>"._("Mon Archi")."</h2></td></tr></table>";
				if (mysql_fetch_assoc($this->connexionBdd->requete("SELECT idImage FROM historiqueImage WHERE idUtilisateur = '".$auth->getIdUtilisateur()."' AND licence = '3'"))) {
					$monArchi.= "<strong>"._("Certaines de vos images ne sont pas librement réutilisables !")."</strong>";
					$monArchi.="<br/>";
					$monArchi.=_("Cliquez")." <a href='".$this->creerUrl("",  "batchLicence")."'>"._("ici")."</a> "._("pour les publier sous licence libre.");
					$monArchi.="<br/><br/>";
				}
				$monArchi.="<div style='font-size:12px;'>
						<b>"._("En tant qu'utilisateur vous pouvez :")."</b><ul>
						<li> <a href='".$this->creerUrl('', 'ajoutNouveauDossier')."' onmouseover=\"".$calque->getJsContextHelpOnMouseOver(_("En ajoutant votre adresse vous contribuez au développement du site. Mais d\'abord qu\'entend t-on par \"votre adresse\" ? Et bien cela peut être l\'immeuble ou la maison que vous occupez. Un immeuble que vous aimez mais que vous ne trouvez pas sur le site. Avec le développement des appareils photo numériques,  il devient très simple de prendre une photo,  et de la copier sur l\'ordinateur. Ajouter une adresse dans www.archi-strasbourg.org ne prend pas plus de 20 secondes. Copier la photo 10 secondes de plus..."))."\" onmouseout='".$calque->getJSContextHelpOnMouseOut()."'>"._("ajouter des adresses")."</a></li>
						<li> <span onmouseover=\"".$calque->getJsContextHelpOnMouseOver(_("Vous pouvez ajouter des photos afin d'illustrer une adresse."))."\" onmouseout=\"".$calque->getJSContextHelpOnMouseOut()."\"> "._("ajouter des photos à une adresse")."</span></li>
						<li> <span onmouseover=\"".$calque->getJsContextHelpOnMouseOver(_("Vous pouvez ajouter des évènements sur toute adresse qu'un autre utilisateur a créée."))."\" onmouseout=\"".$calque->getJSContextHelpOnMouseOut()."\">"._("ajouter des évènements à une adresse")."</span></li>
						<li> <span onmouseover=\"".$calque->getJsContextHelpOnMouseOver(_("En activant votre alerte mail sur les adresses,  vous serez prevenu de toute modification sur une adresse dont vous êtes l'auteur"))."\" onmouseout=\"".$calque->getJSContextHelpOnMouseOut()."\">"._("être prévenu par mail d'une modification de vos participations")."</span></li>
						<li> <span onmouseover=\"".$calque->getJsContextHelpOnMouseOver(_("En acceptant de recevoir les mails concernant les nouvelles adresses,  vous serez prévenu de l'ajout d'une nouvelle adresse sur le site."))."\" onmouseout=\"".$calque->getJSContextHelpOnMouseOut()."\">"._("être averti des nouvelles adresses")."</span></li>
						<li> <span onmouseover=\"".$calque->getJsContextHelpOnMouseOver(_("Grâce à l'alerte par mail sur les commentaires,  vous pouvez débattre avec les autres utilisateurs."))."\" onmouseout=\"".$calque->getJSContextHelpOnMouseOut()."\">"._("être averti des nouveaux commentaires ajoutés sur une adresse que vous avez créée.")."</span></li></ul>";
				$monArchi.="<b>"._("Vos statistiques :")."</b><br>";
				$monArchi.=""._("Vous vous êtes connecté :")." ".$arrayInfosConnexions['nbConnexions']." fois<br>";
				$monArchi.="&nbsp;&nbsp;&nbsp;"._("Date de votre dernière connexion :")." ".$this->date->toFrench($arrayInfosConnexions['derniereConnexion'])."<br>";

				$monArchi.="<p>
						&nbsp;&nbsp;&nbsp;"._("Nombre d'images modifiées :")." ".$arrayInfosModifs['nbModifImage']."<br />
						&nbsp;&nbsp;&nbsp;"._("Nombre d'images ajoutées :")." ".$arrayInfosModifs['nbAjoutImage']."<br />
						&nbsp;&nbsp;&nbsp;"._("Nombre d'évènements modifiés :")." ".$arrayInfosModifs['nbModifEvenement']."<br />
						&nbsp;&nbsp;&nbsp;"._("Nombre d'évènements ajoutés :")." ".$arrayInfosModifs['nbAjoutEvenement']."</p>";
				// ******************************************************************************************************************************************
				// liste des evenements ajoutés ou modifiés par l'utilisateur
				// ******************************************************************************************************************************************
				$paginationEvenements = new paginationObject();

				// calcul du nombre d'evenements ajoutes ou modifies pour la pagination
				$req = "
						SELECT distinct ha1.idAdresse, he1.dateCreationEvenement as dateCreationEvenement

						FROM evenements he2,  evenements he1
						LEFT JOIN _evenementEvenement ee1 ON ee1.idEvenementAssocie = he1.idEvenement
						LEFT JOIN _adresseEvenement ae ON ae.idEvenement = ee1.idEvenement
						LEFT JOIN historiqueAdresse ha1 ON ha1.idAdresse = ae.idAdresse
						LEFT JOIN historiqueAdresse ha2 ON ha2.idAdresse = ha1.idAdresse

						WHERE he2.idEvenement = he1.idEvenement
						AND he1.idUtilisateur = '".$auth->getIdUtilisateur()."'
								GROUP BY he1.idEvenement,  ha1.idAdresse,  ha1.idHistoriqueAdresse
								HAVING ha1.idHistoriqueAdresse = max(ha2.idHistoriqueAdresse)
								";
				$res = $this->connexionBdd->requete($req);

				//$fetchNbEvenements = mysql_fetch_assoc($res);

				$nbEnregistrementTotaux = mysql_num_rows($res);


				$nbEnregistrementsParPage=5;

				$arrayPaginationEvenements=$paginationEvenements->pagination(
						array(
								'nomParamPageCourante'=>'archiMonArchiEvenementPage',
								'nbEnregistrementsParPage'=>$nbEnregistrementsParPage,
								'nbEnregistrementsTotaux'=>$nbEnregistrementTotaux,
								'typeLiens'=>'noformulaire'
						)
				);



				$req = "
						SELECT distinct ha1.idAdresse as idAdresse, he1.dateCreationEvenement as dateCreationEvenement,  ha1.numero,  ha1.idRue,  ha1.idSousQuartier,  ha1.idQuartier,  ha1.idVille, ha1.idIndicatif,

						ha1.idAdresse as idAdresse,  ha1.numero,  ha1.idQuartier,  ha1.idVille, ind.nom,

						r.nom as nomRue,
						sq.nom as nomSousQuartier,
						q.nom as nomQuartier,
						v.nom as nomVille,
						p.nom as nomPays,
						ha1.numero as numeroAdresse,
						ha1.idRue,
						r.prefixe as prefixeRue,
						IF (ha1.idSousQuartier != 0,  ha1.idSousQuartier,  r.idSousQuartier) AS idSousQuartier,
						IF (ha1.idQuartier != 0,  ha1.idQuartier,  sq.idQuartier) AS idQuartier,
						IF (ha1.idVille != 0,  ha1.idVille,  q.idVille) AS idVille,
						IF (ha1.idPays != 0,  ha1.idPays,  v.idPays) AS idPays,

						ha1.numero as numero,
						ha1.idHistoriqueAdresse,
						ha1.idIndicatif as idIndicatif


						FROM evenements he2,  evenements he1
						LEFT JOIN _evenementEvenement ee1 ON ee1.idEvenementAssocie = he1.idEvenement
						LEFT JOIN _adresseEvenement ae ON ae.idEvenement = ee1.idEvenement
						LEFT JOIN historiqueAdresse ha1 ON ha1.idAdresse = ae.idAdresse
						LEFT JOIN historiqueAdresse ha2 ON ha2.idAdresse = ha1.idAdresse

						LEFT JOIN indicatif ind ON ind.idIndicatif = ha1.idIndicatif

						LEFT JOIN rue r         ON r.idRue = ha1.idRue
						LEFT JOIN sousQuartier sq    ON sq.idSousQuartier = if (ha1.idRue='0' and ha1.idSousQuartier!='0' , ha1.idSousQuartier , r.idSousQuartier )
						LEFT JOIN quartier q        ON q.idQuartier = if (ha1.idRue='0' and ha1.idSousQuartier='0' and ha1.idQuartier!='0' , ha1.idQuartier , sq.idQuartier )
						LEFT JOIN ville v        ON v.idVille = if (ha1.idRue='0' and ha1.idSousQuartier='0' and ha1.idQuartier='0' and ha1.idVille!='0' , ha1.idVille , q.idVille )
						LEFT JOIN pays p        ON p.idPays = if (ha1.idRue='0' and ha1.idSousQuartier='0' and ha1.idQuartier='0' and ha1.idVille='0' and ha1.idPays!='0' , ha1.idPays , v.idPays )


						WHERE he2.idEvenement = he1.idEvenement
						AND he1.idUtilisateur = '".$auth->getIdUtilisateur()."'
								GROUP BY he1.idEvenement,  ha1.idAdresse,  ha1.idHistoriqueAdresse
								HAVING ha1.idHistoriqueAdresse = max(ha2.idHistoriqueAdresse)
								ORDER BY he1.dateCreationEvenement DESC

								";

				$req = $paginationEvenements->addLimitToQuery($req);

				$res = $this->connexionBdd->requete($req);
				$monArchi.="<b>"._("Liste de vos derniers évènements créés :")."</b><br>";
				$monArchi.=$arrayPaginationEvenements['html'];
				$tableauEvenements = new tableau();
				if (mysql_num_rows($res)==0) {
					$monArchi.="<br>"._("Vous n'avez pas encore ajouté d'évènement.")."<br>";
				}
				while ($fetch = mysql_fetch_assoc($res)) {
					$tableauEvenements->addValue($date->toFrench($fetch['dateCreationEvenement']));
					$tableauEvenements->addValue("<a href='".$this->creerUrl('', 'adresseDetail', array('archiIdAdresse'=>$fetch['idAdresse']))."'>".stripslashes($adresse->getIntituleAdresse($fetch))."</a>");
				}

				$monArchi.= $tableauEvenements->createHtmlTableFromArray(2, "font-size:12px;");

				// ******************************************************************************************************************************************
				// liste des adresses ajoutés par l'utilisateur
				// ******************************************************************************************************************************************
				$paginationAdresses = new paginationObject();

				$nbEnregistrementsParPage=5;

				$req = "
						SELECT distinct ha1.idAdresse
						FROM historiqueAdresse ha2,  historiqueAdresse ha1
						LEFT JOIN indicatif ind ON ind.idIndicatif = ha1.idIndicatif
						WHERE ha2.idAdresse = ha1.idAdresse
						AND ha1.idUtilisateur = '".$auth->getIdUtilisateur()."'
								GROUP BY ha1.idAdresse ,  ha1.idHistoriqueAdresse
								HAVING ha1.idHistoriqueAdresse = max(ha2.idHistoriqueAdresse)
								ORDER BY ha1.date DESC
								";

				$res = $this->connexionBdd->requete($req);
				$nbEnregistrementTotaux=mysql_num_rows($res);
				$arrayPaginationAdresses=$paginationAdresses->pagination(
						array(
								'nomParamPageCourante'=>'archiMonArchiAdressesPage',
								'nbEnregistrementsParPage'=>$nbEnregistrementsParPage,
								'nbEnregistrementsTotaux'=>$nbEnregistrementTotaux,
								'typeLiens'=>'noformulaire'
						)
				);

				$req = "
						SELECT distinct ha1.idAdresse as idAdresse, ha1.date as date,  ha1.numero,  ha1.idRue,  ha1.idSousQuartier,  ha1.idQuartier,  ha1.idVille, ha1.idIndicatif,

						ha1.idAdresse as idAdresse,  ha1.numero,  ha1.idQuartier,  ha1.idVille, ind.nom,

						r.nom as nomRue,
						sq.nom as nomSousQuartier,
						q.nom as nomQuartier,
						v.nom as nomVille,
						p.nom as nomPays,
						ha1.numero as numeroAdresse,
						ha1.idRue,
						r.prefixe as prefixeRue,
						IF (ha1.idSousQuartier != 0,  ha1.idSousQuartier,  r.idSousQuartier) AS idSousQuartier,
						IF (ha1.idQuartier != 0,  ha1.idQuartier,  sq.idQuartier) AS idQuartier,
						IF (ha1.idVille != 0,  ha1.idVille,  q.idVille) AS idVille,
						IF (ha1.idPays != 0,  ha1.idPays,  v.idPays) AS idPays,

						ha1.numero as numero,
						ha1.idHistoriqueAdresse,
						ha1.idIndicatif as idIndicatif


						FROM historiqueAdresse ha2,  historiqueAdresse ha1

						LEFT JOIN indicatif ind ON ind.idIndicatif = ha1.idIndicatif

						LEFT JOIN rue r         ON r.idRue = ha1.idRue
						LEFT JOIN sousQuartier sq    ON sq.idSousQuartier = if (ha1.idRue='0' and ha1.idSousQuartier!='0' , ha1.idSousQuartier , r.idSousQuartier )
						LEFT JOIN quartier q        ON q.idQuartier = if (ha1.idRue='0' and ha1.idSousQuartier='0' and ha1.idQuartier!='0' , ha1.idQuartier , sq.idQuartier )
						LEFT JOIN ville v        ON v.idVille = if (ha1.idRue='0' and ha1.idSousQuartier='0' and ha1.idQuartier='0' and ha1.idVille!='0' , ha1.idVille , q.idVille )
						LEFT JOIN pays p        ON p.idPays = if (ha1.idRue='0' and ha1.idSousQuartier='0' and ha1.idQuartier='0' and ha1.idVille='0' and ha1.idPays!='0' , ha1.idPays , v.idPays )
						WHERE ha2.idAdresse = ha1.idAdresse
						AND ha1.idUtilisateur = '".$auth->getIdUtilisateur()."'
								GROUP BY ha1.idAdresse ,  ha1.idHistoriqueAdresse
								HAVING ha1.idHistoriqueAdresse = max(ha2.idHistoriqueAdresse)
								ORDER BY ha1.date DESC
								";
				$req = $paginationAdresses->addLimitToQuery($req);

				$res = $this->connexionBdd->requete($req);
				$monArchi.="<br><b>"._("Liste de vos adresses :")." </b><br>";
				$monArchi.=$arrayPaginationAdresses['html'];
				$tableauAdresse = new tableau();

				if (mysql_num_rows($res)==0) {
					$monArchi.="<br>"._("Vous n'avez pas encore ajouté d'adresse.")."<br>";
				}

				while ($fetch = mysql_fetch_assoc($res)) {
					$tableauAdresse->addValue($date->toFrench($fetch['date']));
					$tableauAdresse->addValue("<a href='".$this->creerUrl('', 'adresseDetail', array('archiIdAdresse'=>$fetch['idAdresse']))."'>".stripslashes($adresse->getIntituleAdresse($fetch))."</a>");
				}

				$monArchi.=$tableauAdresse->createHtmlTableFromArray(2, "font-size:12px;");

				// ******************************************************************************************************************************************
				// liste des adresses ou l'utilisateur a ajouté un commentaire
				// ******************************************************************************************************************************************
				$paginationCommentaires = new paginationObject();
				$nbEnregistrementsParPage=5;
				$req = "

						SELECT c.idCommentaire
						FROM commentaires c
						LEFT JOIN _adresseEvenement ae ON ae.idEvenement = c.idEvenementGroupeAdresse
						LEFT JOIN historiqueAdresse ha1 ON ha1.idAdresse = ae.idAdresse
						LEFT JOIN historiqueAdresse ha2 ON ha2.idAdresse = ha1.idAdresse
						WHERE c.idUtilisateur = '".$auth->getIdUtilisateur()."' OR c.email='".$utilisateur->getMailUtilisateur($auth->getIdUtilisateur())."'
								AND CommentaireValide=1
								GROUP BY ha1.idAdresse,  ha1.idHistoriqueAdresse
								HAVING ha1.idHistoriqueAdresse = max(ha2.idHistoriqueAdresse)
								ORDER BY c.date DESC
								";
				$res = $this->connexionBdd->requete($req);
				$nbEnregistrementTotaux=mysql_num_rows($res);
				$arrayPaginationCommentaires=$paginationCommentaires->pagination(
						array(
								'nomParamPageCourante'=>'archiMonArchiAdressesPage',
								'nbEnregistrementsParPage'=>$nbEnregistrementsParPage,
								'nbEnregistrementsTotaux'=>$nbEnregistrementTotaux,
								'typeLiens'=>'noformulaire'
						)
				);

				$req = "

						SELECT distinct ha1.idAdresse as idAdresse, c.date as dateCommentaire, ha1.date as date,  ha1.numero,  ha1.idRue,  ha1.idSousQuartier,  ha1.idQuartier,  ha1.idVille, ha1.idIndicatif,

						ha1.idAdresse as idAdresse,  ha1.numero,  ha1.idQuartier,  ha1.idVille, ind.nom,

						r.nom as nomRue,
						sq.nom as nomSousQuartier,
						q.nom as nomQuartier,
						v.nom as nomVille,
						p.nom as nomPays,
						ha1.numero as numeroAdresse,
						ha1.idRue,
						r.prefixe as prefixeRue,
						IF (ha1.idSousQuartier != 0,  ha1.idSousQuartier,  r.idSousQuartier) AS idSousQuartier,
						IF (ha1.idQuartier != 0,  ha1.idQuartier,  sq.idQuartier) AS idQuartier,
						IF (ha1.idVille != 0,  ha1.idVille,  q.idVille) AS idVille,
						IF (ha1.idPays != 0,  ha1.idPays,  v.idPays) AS idPays,

						ha1.numero as numero,
						ha1.idHistoriqueAdresse,
						ha1.idIndicatif as idIndicatif

						FROM commentaires c
						LEFT JOIN _adresseEvenement ae ON ae.idEvenement = c.idEvenementGroupeAdresse
						LEFT JOIN historiqueAdresse ha1 ON ha1.idAdresse = ae.idAdresse
						LEFT JOIN historiqueAdresse ha2 ON ha2.idAdresse = ha1.idAdresse

						LEFT JOIN indicatif ind ON ind.idIndicatif = ha1.idIndicatif

						LEFT JOIN rue r         ON r.idRue = ha1.idRue
						LEFT JOIN sousQuartier sq    ON sq.idSousQuartier = if (ha1.idRue='0' and ha1.idSousQuartier!='0' , ha1.idSousQuartier , r.idSousQuartier )
						LEFT JOIN quartier q        ON q.idQuartier = if (ha1.idRue='0' and ha1.idSousQuartier='0' and ha1.idQuartier!='0' , ha1.idQuartier , sq.idQuartier )
						LEFT JOIN ville v        ON v.idVille = if (ha1.idRue='0' and ha1.idSousQuartier='0' and ha1.idQuartier='0' and ha1.idVille!='0' , ha1.idVille , q.idVille )
						LEFT JOIN pays p        ON p.idPays = if (ha1.idRue='0' and ha1.idSousQuartier='0' and ha1.idQuartier='0' and ha1.idVille='0' and ha1.idPays!='0' , ha1.idPays , v.idPays )

						WHERE c.idUtilisateur = '".$auth->getIdUtilisateur()."' OR c.email='".$utilisateur->getMailUtilisateur($auth->getIdUtilisateur())."'
						AND CommentaireValide=1
						GROUP BY ha1.idAdresse,  ha1.idHistoriqueAdresse
						HAVING ha1.idHistoriqueAdresse = max(ha2.idHistoriqueAdresse)
						ORDER BY c.date DESC
								";

				$req = $paginationCommentaires->addLimitToQuery($req);

				$res = $this->connexionBdd->requete($req);
				$monArchi.="<br><b>"._("Liste de vos derniers commentaires :")." </b><br>";
				$monArchi.=$arrayPaginationCommentaires['html'];
				$tableauCommentaires = new tableau();

				if (mysql_num_rows($res)==0) {
					$monArchi.="<br>"._("Vous n'avez pas encore ajouté de commentaire.")."<br>";
				}

				while ($fetch = mysql_fetch_assoc($res)) {
					$tableauCommentaires->addValue($date->toFrench($fetch['dateCommentaire']));
					$tableauCommentaires->addValue("<a href='".$this->creerUrl('', 'adresseDetail', array('archiIdAdresse'=>$fetch['idAdresse']))."'>".stripslashes($adresse->getIntituleAdresse($fetch))."</a>");
				}

				$monArchi.=$tableauCommentaires->createHtmlTableFromArray(2, "font-size:12px;");
				
				
				$monArchi.="<a href=".$this->creerUrl('', 'mesInterets', array()).">Afficher mes interets </a>";

			
				$t->assign_vars(array('htmlMonArchi'=>$monArchi));
				$t->assign_vars(array('calqueHelp'=>$calque->getHtmlDivContextualHelp()));

				break;
				// **********************************************************************************************************************************
				// ACCUEIL
				// **********************************************************************************************************************************
			default:
				$params=array();
				$s = new objetSession();
				if (isset($this->variablesGet['archiIdVilleGeneral']) && $this->variablesGet['archiIdVilleGeneral']!=0 && $this->variablesGet['archiIdVilleGeneral']!='') {
					$params['idVille'] = $this->variablesGet['archiIdVilleGeneral'];
					$s->addToSession('archiIdVilleGeneral', $params['idVille']);
				} elseif ($s->isInSession('archiIdVilleGeneral') && $s->getFromSession('archiIdVilleGeneral')) {
					$params['idVille'] = $s->getFromSession('archiIdVilleGeneral');
					$s->addToSession('archiIdVilleGeneral', $params['idVille']);
				}
				if (isset($this->variablesGet['archiNomVilleGeneral'])
				&& $this->variablesGet['archiNomVilleGeneral']!=''
						) {
					$a = new archiAdresse();

					$params['idVille'] = $a->getIdVilleFromNomVille($this->variablesGet['archiNomVilleGeneral']);

					$_GET['archiIdVilleGeneral'] = $params['idVille'];

					// on place la ville general dans la session ,  ca simplifiera pas mal de choses

					$s->addToSession('archiIdVilleGeneral', $params['idVille']);

				}

				$news = $this->getLatestNewsInfo(1);
					
				//Simple templates
				$t->set_filenames(array('news' => 'accueil/news.tpl'));
				$t->set_filenames(array('derniereModfis' => 'accueil/lastmodifs.tpl'));
				$t->set_filenames(array('commentaire' => 'accueil/commentaire.tpl'));
				$t->set_filenames(array('favoris' => 'accueil/favoris.tpl'));
				$t->set_filenames(array('lastVisit' => 'accueil/lastVisit.tpl'));


				$news['titreCategory'] = 'Actualité de l\'association';
				$news['urlNewsList'] = $this->creerUrl('', 'toutesLesActualites', array());
				$t->assign_block_vars('newsAccueil', $news);
					

				//Gestion pour les commentaires
				$latestComments = $this->getLatestComments(2);
				$t->assign_vars(array(
						'commentaireSectionTitle'=>_("COMMENTAIRES RÉCENTS"),
						'urlListCommentaire' => $this->creerUrl('','tousLesCommentaires')
				));

				foreach ($latestComments as $com){
					$e = new archiEvenement();
					$commentaire = array(
							'date'=> $com['date'],
							'nom' =>  $com['nom'],
							'prenom' => $com['prenom'],
							'adresse' => $com['adresse'],
							'urlAdresse' => $com['urlAdresse'],
							'urlPersonne' => $com['urlPersonne'] ,
							'commentaire' => $com['commentaire']
					);
					$t->assign_block_vars('commentaire', $commentaire);
				}

				$lastModifs = $this->getLatestModification(8);
				foreach ( $lastModifs as $modif ) {
					if(isset($modif['idEvenement']) && $modif['idEvenement']){
						$idAdresse = $modif ['idAdresse'];
						$e = new archiEvenement ();
						$adresseArray = $e->getArrayAdresse ( $modif ['idEvenementGroupeAdresse'], 'idEvenementGroupeAdresse' );
						// Adresse
						$adresse = '';
						$adresse = $e->getAddressText ( $adresseArray );
						$infoImage = array ();
						// Image
						$a = new archiAdresse ();
						
						$reqImageEvtRelated = "				
							SELECT hi.idHistoriqueImage,hi.dateUpload,1 as priorite
							FROM historiqueImage hi
							LEFT JOIN _evenementImage ei on ei.idImage = hi.idImage
							WHERE ei.idEvenement = " . $modif ['idEvenement'] . "
					
									UNION
									
							SELECT hi.idHistoriqueImage,hi.dateUpload,2 as priorite
							FROM `evenements` evt
							LEFT JOIN _evenementEvenement ee ON ee.idEvenementAssocie = evt.idEvenement
							LEFT JOIN evenements evt2 ON evt2.idEvenement = ee.idEvenement
							LEFT JOIN historiqueImage hi on hi.idImage = evt2.idImagePrincipale
							LEFT JOIN _evenementImage ei ON ei.idImage = hi.idImage
							WHERE ee.idEvenement IS NOT NULL
							AND evt.idEvenement IS NOT NULL
							AND evt.idEvenement != 0
							AND ei.idEvenement =" . $modif ['idEvenement'] . "
							AND ee.idEvenement =" . $modif ['idEvenementGroupeAdresse'] . "
							
							ORDER BY priorite DESC
							LIMIT 1
							";
						$resImageEvtRelated = $this->connexionBdd->requete ( $reqImageEvtRelated );
						$arrayImage = mysql_fetch_assoc ( $resImageEvtRelated );
						if (isset ( $arrayImage ) && $arrayImage != '') {
							$infoImage = $arrayImage;
						} else {
							$reqImagePrincipale = "
						
							SELECT hi.idHistoriqueImage,hi.dateUpload
							FROM historiqueImage hi
							LEFT JOIN evenements evt on evt.idImagePrincipale = hi.idImage
							WHERE evt.idEvenement =" . $modif ['idEvenementGroupeAdresse'] . "
							LIMIT 1
							";
							$resImagePrincipale = $this->connexionBdd->requete ( $reqImagePrincipale );
							if (mysql_num_rows ( $reqImagePrincipale ) >= 1) {
								$infoImage = mysql_fetch_assoc ( $resImagePrincipale );
							} else {
								
								$reqOtherImage = "SELECT hi.idHistoriqueImage,hi.dateUpload
							FROM historiqueImage hi
							LEFT JOIN _evenementImage ei ON ei.idImage = hi.idImage
							LEFT JOIN _evenementEvenement ee on ee.idEvenementAssocie = ei.idEvenement
							WHERE ee.idEvenement IS NOT NULL
							AND ee.idEvenement =" . $modif ['idEvenementGroupeAdresse'] . "
							
							LIMIT 1
							";
								$resOtherImage = $this->connexionBdd->requete ( $reqOtherImage );
								if (mysql_num_rows ( $resOtherImage ) >= 1) {
									$infoImage = mysql_fetch_assoc ( $resOtherImage );
								}
							}
						}
						$urlImage = "";
						$urlEvenement = "";
						// Url Evenement
						$idEvenementGroupeAdresses = $e->getIdGroupeEvenement ( $modif ['idEvenement'] );
						if ($modif ['type'] == 'adresse') {
							$urlEvenement = $this->creerUrl ( '', '', array (
									'archiAffichage' => 'adresseDetail',
									'archiIdAdresse' => $idAdresse,
									'archiIdEvenementGroupeAdresse' => $idEvenementGroupeAdresses 
							) );
							// $urlImage = "resizeImage.php?id=".$infoImage['idHistoriqueImage']."&height=200&width=200";
							
							if (isset ( $infoImage ['dateUpload'] ) && isset ( $infoImage ['idHistoriqueImage'] ) && $infoImage ['idHistoriqueImage'] != '' && $infoImage ['dateUpload'] != '') {
								$urlImage = "images/grand/" . $infoImage ['dateUpload'] . "/" . $infoImage ['idHistoriqueImage'] . ".jpg";
							} else {
								$urlImage = "images/placeholder.jpg";
							}
						} else {
							$urlEvenement = $this->creerUrl ( '', '', array (
									'archiAffichage' => 'evenementListe',
									'selection' => "personne",
									'id' => $modif ['idPersonne'] 
							) );
							$urlImage = ArchiPersonne::getImage ( $modif ['idPersonne'], 'resized' );
						}
						
						// Description
						$so = new StringObject ();
						$bbcode = new bbCodeObject ();
						$description = $bbcode->stripBBCode ( $modif ['description'] );
						$description = $so->truncateStringToWord ( $description, 130, ' ', '...' );
						
						$t->assign_block_vars ( 'lastModif', array (
								'miniatureLabelLeft' => $modif ['typeEvenement'],
								'miniatureLabelRight' => $modif ['dateCreationEvenement'],
								'adresse' => ucfirst ( $adresse ),
								'ville' => ucfirst ( $adresseArray [0] ['nomVille'] ),
								'urlMiniature' => $urlImage,
								'urlEvenement' => $urlEvenement,
								'description' => $description,
								'titre' => $modif ['titre'] 
						) );
					}
					else{
						
					}
				}

				 

				//Gestion des dernieres visites
				$t->assign_vars(array('lastVisitTitle' => _("Dernières visites")));
				$lastVisitArray=$_SESSION['lastVisited'];
				if(empty($lastVisitArray)){
					$visite = array('content' => _("Vous n'avez visité aucune adresse pour le moment"));
					$t->assign_block_vars('lastVisitMessage', $visite);
				}
				else{
					foreach ($lastVisitArray as $lastVisit){
						$titre="";
						if($lastVisit['idAdresse'] != '' && $lastVisit['idEvenementGroupeAdresse']!=''){
							$idAdresse = $lastVisit['idAdresse'];
							$e = new archiEvenement();
							$adresseArray = $e->getArrayAdresse($lastVisit['idEvenementGroupeAdresse'], 'idEvenementGroupeAdresse');

							//Adresse
							$adresse = '';
							$adresse = $e->getAddressText($adresseArray);

							//Image
							$requeteImage = "
									SELECT hi.idHistoriqueImage ,hi.dateUpload, e.idEvenement
									FROM historiqueImage hi
									LEFT JOIN evenements e on e.idImagePrincipale = hi.idImage
									WHERE e.idEvenement = ".$lastVisit['idEvenementGroupeAdresse']."
									AND e.idImagePrincipale !=0 
									";
							$resultImage = $this->connexionBdd->requete($requeteImage);
							$array_image = mysql_fetch_assoc($resultImage);
							
								
							$a = new archiAdresse();
							if($array_image['idHistoriqueImage']==0 || !isset($array_image['idHistoriqueImage']) || $array_image['idHistoriqueImage']==''){
								$infoImage = $a->getUrlImageFromAdresse($idAdresse,'moyen');
								$image = new archiImage();
								$resImage = $image->getImagesEvenementsFromAdresse($idAdresse,  $lastVisit);
								$infoImage = mysql_fetch_assoc($resImage);
							}
							else{
								$infoImage=$array_image;
							}

							if(isset($infoImage['dateUpload']) && isset($infoImage['idHistoriqueImage'])&& $infoImage['idHistoriqueImage'] !='' && $infoImage['dateUpload'] !=''){
								$urlImage = "images/grand/".$infoImage['dateUpload']."/".$infoImage['idHistoriqueImage'].".jpg";
							}
							else{
								$urlImage="images/placeholder.jpg";
							}
								
							
							//Url Evenement
							$idEvenementGroupeAdresses = $lastVisit['idEvenementGroupeAdresse'];
							$urlEvenement = $this->creerUrl('', '', array('archiAffichage'=>'adresseDetail','archiIdAdresse'=>$idAdresse,'archiIdEvenementGroupeAdresse'=>$idEvenementGroupeAdresses));
								
								// Description
							$requeteDescription = "
									
									SELECT evt.description
									FROM evenements evt
									LEFT JOIN _evenementEvenement ee ON ee.idEvenementAssocie = evt.idEvenement
									LEFT JOIN positionsEvenements pe ON pe.idEvenementGroupeAdresse = ee.idEvenement
									WHERE ee.idEvenement =" . $lastVisit ['idEvenementGroupeAdresse'] . "
									ORDER BY pe.position
											";
							$resDescription = $this->connexionBdd->requete ( $requeteDescription );
							$arrayDescription = mysql_fetch_assoc($resDescription);
							$so = new StringObject();
							
							$description = $so->sansBalises($arrayDescription['description']);
							$description = stripslashes($description);
							$description = $so->truncateStringToWord($description, 80,' ','...');

							if(isset($lastVisit) && !empty($lastVisit) && isset($lastVisit['idEvenementGroupeAdresse'] )&& !empty($lastVisit['idEvenementGroupeAdresse']) && isset($lastVisit['idAdresse']) && !empty($lastVisit['idAdresse'])){
								//Titre
								$resTitre = $e->getIdEvenementTitre($lastVisit);
								$requeteTitre = "
										SELECT evt.titre
										FROM evenements evt
										WHERE evt.idEvenement = ".$resTitre."
												";
								$resTitre = $this->connexionBdd->requete($requeteTitre);
								$titreArray = mysql_fetch_array($resTitre);
								if($titreArray['titre'] != ''){
									//$titre = $adresse;
									$titre = $titreArray['titre'];
										
								}
								else{
								}
							}

							$visite = array(
									'adresse' => $adresse,
									'urlMiniature' => $urlImage,
									'urlEvenement' => $urlEvenement,
									'description' => $description,
									'titre' => $titre
							);
							$t->assign_block_vars('lastVisit', $visite);
						}
					}
				}


				$t->assign_vars(array(
						'lastModifTitle' => _("Dernières modifications"),
						'urlCustomNewsFeed'=>$this->creerUrl('', 'mesInterets', array())
				));


				//Associate template to the general template
				$t->assign_var_from_handle('news', 'news');
				$t->assign_var_from_handle('dernieresModifs', 'derniereModfis');
				$t->assign_var_from_handle('commentaires', 'commentaire');
				$t->assign_var_from_handle('lastVisits', 'lastVisit');
				
				break;
				

		}

		ob_start();
		$t->pparse('accueil');
		$html .= ob_get_contents();
		ob_end_clean();
		return $html;
	}
255761
public function enregistreCommentaireEvenement()
    {
        $auth = new archiAuthentification();
        $fieldsCommentaires=$this->getCommentairesFields();
        $formulaire = new formGenerator();

        if ($auth->estConnecte()) {
            unset($fieldsCommentaires['captcha']);
        }
        $error = $formulaire->getArrayFromPost($fieldsCommentaires);
        if (count($error)==0) {
            $idUtilisateur=0;
            if ($auth->estConnecte()) {
                $idUtilisateur = $auth->getIdUtilisateur();
                // suite au SPAM mise en place d'un champ CommentaireValide 0/1 (by fabien 13/01/2012)
                $CommentaireValide=1;
                $user = new archiUtilisateur();
                $userInfos = $user->getArrayInfosFromUtilisateur($idUtilisateur);
            } else {
                $CommentaireValide=0;
            }

            // enregistrement du nouveau commentaire
            //$req = "insert into commentaires (nom,prenom,email,commentaire,idEvenementGroupeAdresse,date,idUtilisateur) values (\"".addslashes(strip_tags($this->variablesPost['nom']))."\",\"".addslashes(strip_tags($this->variablesPost['prenom']))."\",\"".addslashes(strip_tags($this->variablesPost['email']))."\",\"".addslashes(strip_tags($this->variablesPost['commentaire']))."\",'".$this->variablesPost['idEvenementGroupeAdresse']."',now(),'".$idUtilisateur."')";
            $nom=$auth->estConnecte()?$userInfos["nom"]:$this->variablesPost['nom'];
            $prenom=$auth->estConnecte()?$userInfos["prenom"]:$this->variablesPost['prenom'];
            $email=$auth->estConnecte()?$user->getMailUtilisateur($idUtilisateur):$this->variablesPost['email'];
            $uniqid = uniqid(null, true);
            //$req = "insert into commentaires (nom,prenom,email,commentaire,idEvenementGroupeAdresse,date,idUtilisateur) values (\"".addslashes(strip_tags($this->variablesPost['nom']))."\",\"".addslashes(strip_tags($this->variablesPost['prenom']))."\",\"".addslashes(strip_tags($this->variablesPost['email']))."\",\"".addslashes(strip_tags($this->variablesPost['commentaire']))."\",'".$this->variablesPost['idEvenementGroupeAdresse']."',now(),'".$idUtilisateur."')";
            $req = "INSERT INTO commentairesEvenement (nom,prenom,email,commentaire, idEvenement, date, idUtilisateur, CommentaireValide)
					VALUES (\"".addslashes(strip_tags($this->variablesPost['nom']))."\",\"".addslashes(strip_tags($this->variablesPost['prenom']))."\",\"".addslashes(strip_tags($this->variablesPost['email']))."\",'".mysql_real_escape_string(strip_tags($this->variablesPost['commentaire']))."', '".mysql_real_escape_string($this->variablesPost['idEvenementGroupeAdresse'])."', now(), '".mysql_real_escape_string($idUtilisateur). "'," . mysql_real_escape_string($CommentaireValide).")";
            $res = $this->connexionBdd->requete($req);
            // retour a l'affichage de l'adresse
            $idAdresse = $this->variablesPost['idEvenementGroupeAdresse'];
            $idEvenement = $this->variablesPost['idEvenementGroupeAdresse'];
            $idEvenementGroupeAdresse = $this->getIdEvenementGroupeAdresseFromIdEvenement($idEvenement);
            $idAdresse=$this->getIdAdresseFromIdEvenementGroupeAdresse($idEvenementGroupeAdresse);


            $idCommentaire = mysql_insert_id();

            // ************************
            // envoi d'un mail a tous les participants pour le groupe d'adresse
            // ************************
            $mail = new mailObject();
            $utilisateur = new archiUtilisateur();
            $arrayUtilisateurs = $utilisateur->getParticipantsCommentairesEvenement($this->variablesPost['idEvenementGroupeAdresse']);
            //$arrayCreatorAdresse = $utilisateur->getCreatorsFromAdresseFrom($this->variablesPost['idEvenementGroupeAdresse'],'idEvenementGroupeAdresse');
            //$arrayUtilisateurs = array_merge($arrayUtilisateurs,$arrayCreatorAdresse);
            $arrayUtilisateurs = array_unique($arrayUtilisateurs);
            $intituleAdresse = $this->getIntituleAdresseFrom($idEvenement, 'idEvenement');
            if (empty($intituleAdresse)) {
                $intituleAdresse = 'Voir le commentaire';
            }
            $idPerson = archiPersonne::isPerson($idEvenementGroupeAdresse);
            //$idAdresse = $this->getIdEvenementFromIdHistoriqueEvenement($this->variablesPost['idEvenementGroupeAdresse']);

            foreach ($arrayUtilisateurs as $indice => $idUtilisateurAdresse) {
                if ($idUtilisateurAdresse != $auth->getIdUtilisateur()) {
                    $infosUtilisateur = $utilisateur->getArrayInfosFromUtilisateur($idUtilisateurAdresse);
                    if ($infosUtilisateur['alerteCommentaires']=='1' && $infosUtilisateur['compteActif']=='1' && $infosUtilisateur['idProfil']!='4') {
                        $message = "Un utilisateur a ajouté un commentaire sur un evenement que vous avez créé.";
                        if ($idPerson) {
                            $message .="<a href='".$this->creerUrl('', '', array('archiAffichage'=>'evenementListe', 'selection'=>'personne', 'id'=>$idPerson)).'#commentaireEvenement'.$idCommentaire."'>".$intituleAdresse."</a><br>";
                        } else {
                            $message.= "Pour vous rendre sur l'adresse : <a href='".$this->creerUrl('', '', array('archiAffichage'=>'adresseDetail','archiIdAdresse'=>$idAdresse,'archiIdEvenementGroupeAdresse'=>$idEvenementGroupeAdresse)).'#commentaireEvenement'.$idCommentaire."'>".$intituleAdresse."</a><br>";
                        }
                        $message.= $this->getMessageDesabonnerAlerteMail();
                        $mail->sendMail($mail->getSiteMail(), $infosUtilisateur['mail'], 'Ajout d\'un commentaire sur une adresse sur laquelle vous avez participé.', $message, true);
                    }
                }
            }
            // ************************


            // envoi d'un mail aux administrateur pour la moderation
            $message="Merci d'avoir laissé un commentaire sur Archi-Strasbourg.<br>";
            $message .= "Afin qu'il soit publié, merci de le valider en cliquant sur ";
            $message .="<a href='".$this->getUrlRacine()."script/validateEmail.php?uniqid=".urlencode($uniqid)."'>ce lien</a>.<br>";
            $message .="<br/>Cordialement,</br>";
            $mail = new mailObject();

            $envoyeur['envoyeur'] = $mail->getSiteMail();
            $envoyeur['replyTo'] = strip_tags($this->variablesPost['email']);
            $u = new archiUtilisateur();
            if (!$CommentaireValide) {
                $mail->sendMail($envoyeur['envoyeur'], $this->variablesPost['email'], 'Votre commentaire sur Archi-Strasbourg', $message, true);
            } else {
                $message="Un utilisateur a ajouté un commentaire sur archiV2 : <br>";
                $message .= "nom ou pseudo : ".strip_tags($this->variablesPost['nom'])."<br>";
                $message .= "prenom : ".strip_tags($this->variablesPost['prenom'])."<br>";
                $message .= "email : ".strip_tags($this->variablesPost['email'])."<br>";
                $message .= "commentaire : ".stripslashes(strip_tags($this->variablesPost['commentaire']))."<br>";
                $idPerson = archiPersonne::isPerson($idEvenementGroupeAdresse);
                if ($idPerson) {
                    $message .="<a href='".$this->creerUrl('', '', array('archiAffichage'=>'evenementListe', 'selection'=>'personne', 'id'=>$idPerson)).'#commentaireEvenement'.$idCommentaire."'>".$intituleAdresse."</a><br>";
                } else {
                    $message .="<a href='".$this->creerUrl('', '', array('archiAffichage'=>'adresseDetail','archiIdEvenementGroupeAdresse'=>$idEvenementGroupeAdresse,'archiIdAdresse'=>$idAdresse)).'#commentaireEvenement'.$idCommentaire."'>".$intituleAdresse."</a><br>";
                }

                $mail->sendMailToAdministrators($envoyeur, 'Un utilisateur a ajouté un commentaire', $message, " AND alerteCommentaires='1' ", true, true);
                // envoi mail aussi au moderateur si ajout sur adresse de ville que celui ci modere
                $arrayVilles=array();
                $arrayVilles[] = $this->getIdVilleFrom($idEvenement, 'idEvenement');
                $arrayVilles = array_unique($arrayVilles);
                $arrayListeModerateurs = $u->getArrayIdModerateursActifsFromVille($arrayVilles[0], array("sqlWhere"=>" AND alerteCommentaires='1' "));
                if (count($arrayListeModerateurs)>0) {
                    foreach ($arrayListeModerateurs as $indice => $idModerateur) {
                        if ($auth->getIdUtilisateur()!=$idModerateur) {
                            $mailModerateur = $u->getMailUtilisateur($idModerateur);

                            $mail->sendMail($mail->getSiteMail(), $mailModerateur, 'Un utilisateur a ajouté un commentaire', $message, true);
                        }
                    }
                }
            }

            // remise a zero des variables en post sinon on va reafficher les infos
            $_POST['commentaire']="";
            $_POST['email']="";
            $_POST['nom']="";
            $_POST['prenom']="";


            $idGroupeEvenement = $this->getIdEvenementGroupeAdresseFromIdEvenement($this->variablesPost['idEvenementGroupeAdresse']);
            $idAdresse = $this->getIdAdresseFromIdEvenementGroupeAdresse($idGroupeEvenement);

            $adresse = new archiAdresse();

            $this->messages->addConfirmation("Commentaire enregistré !");

            switch ($this->variablesPost['type']) {
                case 'evenement':
                    header("Location: ".$this->creerUrl('', '', array('archiAffichage'=>'adresseDetail', 'archiIdAdresse'=>$idAdresse, 'archiIdEvenementGroupeAdresse'=>$idGroupeEvenement), false, false).'#commentaireEvenement'.$idCommentaire);
                    break;
                case 'personne':
                    $e = new archiEvenement();
                    $idEvenementGA = $e->getIdEvenementGroupeAdresseFromIdEvenement($this->variablesPost['idEvenementGroupeAdresse']);
                    header("Location: ".$this->creerUrl('', 'evenementListe', array('selection' => 'personne', 'id' => archiPersonne::isPerson($idEvenementGA))).'#commentaireEvenement'.$idCommentaire);
                    break;
                default:
                    header("Location: ".$this->creerUrl('', '', array('archiAffichage'=>'adresseDetail', 'archiIdAdresse'=>$idAdresse, 'archiIdEvenementGroupeAdresse'=>$idGroupeEvenement), false, false).'#commentaireEvenement'.$idCommentaire);
            }
        } else {
            header("Location: ".$this->creerUrl('', '', array('archiAffichage'=>'adresseDetail', 'archiIdAdresse'=>$idAdresse, 'archiIdEvenementGroupeAdresse'=>$idGroupeEvenement), false, false));

            $this->erreurs->ajouter('Il y a une erreur dans le formulaire.');
            echo $this->erreurs->afficher();
            echo $this->getFormComment($this->variablesPost['idEvenementGroupeAdresse'], $fieldsCommentaires, 'evenement');
            echo $this->getListCommentairesEvenements($this->variablesPost['idEvenementGroupeAdresse']);
        }
    }
1346795
function manageScrollbarRender(event) {
			if (modeTimer) {
				$timeout.cancel(modeTimer);
			}
			var m = boxesScrollServices.getMousePosition(event);
			if (isTriggerOver(m)) { // la souris est au dessus du declencheur
				showScrollbar();
			}
			if (isScrollbarVisible()) {
				if (isScrollbarOver(m)) { // la souris est au dessus de la scrollbar
					showScrollbar();
					if (compareGrabberAndMousePosition(m) === 0) { // la souris est au dessus du curseur
						showScrollbar('hover');
					}
				} else {
					hideScrollbar(SHOWSB_TIMEOUT);
				}
			}
		}
419804
public function forceFlushForCommand()
    {
        // L'envoi des emails est déclenché sur une réponse du Kernel (inactif en mode commande)
        $transport = $this->swift->getTransport();
        if (!$transport instanceof \Swift_Transport_SpoolTransport) {
            return;
        }
        $spool = $transport->getSpool();
        if (!$spool instanceof \Swift_MemorySpool) {
            return;
        }

        return $spool->flushQueue($this->mailerRealTransport);
    }
112372
private function validateOptionsArray(array $options)
    {
        $refs   = [];
        /** contrôle du contenu de chaque ligne de définition d'options */
        foreach ($options as $option) {
            if (!array_key_exists('ref', $option) || empty($option['ref'])) { return false; }
            if (!array_key_exists('label', $option) || empty($option['label'])) { return false; }
            if (!array_key_exists('link', $option) || empty($option['link'])) { return false; }
            if (!array_key_exists('parent', $option)) { return false; }
            $refs = $option['ref'];
        }

        /** controle de l'existance des parents pour chaque options si non null */
        foreach ($options as $option) {
            $parent     = $option['parent'];
            if (!empty($parent) && !in_array($parent, $refs))  { return false; }
        }

        return true;
    }
935704
@Override
	public Object invoke(MethodInvocation invocation) throws Throwable {
		// cette méthode est appelée par spring aop
		if (DISABLED || !SPRING_COUNTER.isDisplayed()) {
			return invocation.proceed();
		}
		// nom identifiant la requête
		final String requestName = getRequestName(invocation);

		boolean systemError = false;
		try {
			SPRING_COUNTER.bindContextIncludingCpu(requestName);
			return invocation.proceed();
		} catch (final Error e) {
			// on catche Error pour avoir les erreurs systèmes
			// mais pas Exception qui sont fonctionnelles en général
			systemError = true;
			throw e;
		} finally {
			// on enregistre la requête dans les statistiques
			SPRING_COUNTER.addRequestForCurrentContext(systemError);
		}
	}
1254524
function (code) {
              if (isLast) {
                if (code) {
                  reject(result)
                } else {
                  resolve(result)
                }
                return
              }
              var nextClose = pipes[idx + 1] && pipes[idx + 1].close
              if (nextClose) {
                nextClose()
              }
            }
1222995
public function activation($token,$newsletter_id)
    {
        // Activate the email on the website
        $user = $this->subscription->activate($token);

        if(!$user)
        {
            alert()->danger('Le jeton ne correspond pas ou à expiré');

            return redirect('/');
        }

        $newsletter = $this->newsletter->find($newsletter_id);

        if(!$newsletter)
        {
            alert()->danger('Cette newsletter n\'existe pas');

            return redirect('/');
        }

        //Subscribe to mailjet
        $this->worker->setList($newsletter->list_id);
        $result = $this->worker->subscribeEmailToList($user->email);

        if(!$result){

            alert()->danger('Problème');

            return redirect('/');
        }

        alert()->success('Vous êtes maintenant abonné à la newsletter');

        return redirect('/');
    }
573665
function(className) {
        var cls = _classes[className];
        if (!cls) {
            var k, name,
            def = window["TFW::" + className];
            if (!def) {
                throw new Error(
                    "[TFW3] This class has not been defined: \"" + className + "\"!\n"
                        + "Did you forget to include it?"
                );
            }
            // Création de la classe à partir de sa définition.
            cls = function () {};
            var superclass = TFW3Object;
            if (def.superclass) {
                superclass = loadClass(def.superclass);
            }
            // Héritage
            cls.prototype = new superclass();
            // Eviter que le constructeur de cette classe soit celui de la super classe.
            cls.prototype.constructor = cls;
            // Définition de l'attribut $parent pour accéder aux méthodes parentes.
            cls.prototype.$parent = superclass.prototype;
            // Multilangues.
            if (typeof def.lang === "object") {
                cls.prototype.$lang = def.lang;
                for (k in def.lang) {
                    cls.prototype.$defLang = k;
                    break;
                }
            } else {
                cls.prototype.$lang = superclass.prototype.$lang || {};
                cls.prototype.$defLang = superclass.prototype.$defLang || "en";
            }
            // Conserver le nom de la super classe.
            cls.prototype.$superclass = superclass.prototype.$classname;
            // Conserver le nom de la classe.
            cls.prototype.$classname = className;
            // Les noms des signals.
            cls.prototype.$signals = def.signals;
            // Est-ce un singleton ?
            cls.prototype.$singleton = def.singleton;
            // Espace réservé aux membres statiques de la classe.
            var staticVars = {className: className};
            _statics[className] = staticVars;
            cls.prototype.$static = staticVars;
            // Valeurs par défaut des attributs.
            if (def.attributes) {
                for (k in def.attributes) {
                    cls.prototype["_" + k] = def.attributes[k];
                }
            }
            // Déclaration du constructeur.
            cls.prototype.$init = def.init;
            // Définition des méthodes liées aux signaux.
            if (def.signals) {
                for (i in def.signals) {
                    declareSignal(
                        cls,
                        def.signals[i]
                    );
                }
            }
            // Assigner toutes les méthodes.
            for (name in def.functions) {
                if (def.superclass && cls.prototype[name]) {
                    // This is an ovveride.
                    cls.prototype[def.superclass + "$" + name] = cls.prototype[name];
                }
                cls.prototype[name] = def.functions[name];
            }

            // Mise en cache de la classe.
            _classes[className] = cls;
            // Appel d'un éventuel constructeur de classe.
            if (typeof def.classInit === "function") {
                def.classInit(staticVars);
            }
        }
        return cls;
    }