function splitIndicatifFromNumero($num = '', $mysqli)
{
    echo "splitIndicatifFromNumero<br>";
    echo $num . "<br>";
    $numero = 0;
    $idIndicatif = 0;
    $continue = true;
    for ($i = 0; $i < pia_strlen($num) && $continue; $i++) {
        $caractereCourant = pia_substr($num, $i, 1);
        if (!is_numeric($caractereCourant)) {
            $continue = false;
        }
    }
    if ($continue == true) {
        // aucun caractere non numerique n'a ete trouvé
        $numero = $num;
    } else {
        $reqIndicatif = $mysqli->prepare("select idIndicatif from indicatif where nom = ?");
        $numero = pia_substr($num, 0, $i - 1);
        $longueurRestante = pia_strlen($num) - ($i - 1);
        $indicatif = trim(pia_substr($num, $i - 1, $longueurRestante));
        // requete pour trouver l'idIndicatif
        //$reqIndicatif = "select * from indicatif where nom = '".$indicatif."'";
        $reqIndicatif->bind_param('s', $indicatif) or die($mysqli->error);
        $reqIndicatif->execute() or die($mysqli->error);
        $reqIndicatif->bind_result($idIndicatif);
        $fetchIndicatif = $reqIndicatif->fetch();
    }
    return array('numero' => $numero, 'idIndicatif' => $idIndicatif);
}
 /**
  * Return the dates as a string to display for evenement display
  *
  * @param unknown $fetch : fetch of the request containing the date
  * @return string date
  */
 private function getDateAsString($res)
 {
     $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']);
             }
         }
     }
     return $dateTxt;
 }
 public function getArrayEncartAdressesImmeublesAvantApres($params = array())
 {
     $html = "";
     $t = new Template('modules/archi/templates/');
     $t->set_filenames(array('encartAdresse' => 'encartAdresseDetailAdresse.tpl'));
     $i = new archiImage();
     if (isset($this->variablesGet['archiIdAdresse'])) {
         $idAdresseCourante = $this->variablesGet['archiIdAdresse'];
     } else {
         $idAdresseCourante = $this->getIdAdresseFromIdEvenementGroupeAdresse($params['idEvenementGroupeAdresse']);
     }
     // recherche de l'image principale courante , sinon celle de position 1 , sinon celle par defaut
     // image centrale = image2
     $arrayImage2 = $this->getUrlImageFromAdresse(0, 'moyen', array('idEvenementGroupeAdresse' => $params['idEvenementGroupeAdresse']));
     $isPhotoCentrale = false;
     $dimensions = array();
     if ($arrayImage2['trouve']) {
         $isPhotoCentrale = true;
         // list($w,$h) = getimagesize($this->getCheminPhysique()."images/moyen/".$arrayImage2['dateUpload']."/".$arrayImage2['idHistoriqueImage'].".jpg");
         //TODO : Change back URL for production
         list($w, $h) = getimagesize("images/moyen/" . $arrayImage2['dateUpload'] . "/" . $arrayImage2['idHistoriqueImage'] . ".jpg");
         $newWGrand = round(75 * $w / 100);
         $newHGrand = round(75 * $h / 100);
         $newWPetit = round(35 * $w / 100);
         $newHPetit = round(35 * $h / 100);
         $t->assign_vars(array('image2' => "<div id='divImagePetit2' style='display:none;'><img src='" . $arrayImage2['url'] . "' alt='' width={$newWPetit} height={$newHPetit} id='image2Petit'></div><div id='divImageGrand2' style='display:block;'><img src='images/moyen/" . $arrayImage2['dateUpload'] . "/" . $arrayImage2['idHistoriqueImage'] . ".jpg' alt=''  id='image2Grand' itemprop='image'></div>"));
     } else {
         // image par defaut , si aucune image liee a l'adresse
         $isPhotoCentrale = true;
         list($w, $h) = getimagesize($this->getUrlRacine() . "resizeImage.php");
         $newWGrand = round(75 * $w / 100);
         $newHGrand = round(75 * $h / 100);
         $newWPetit = round(35 * $w / 100);
         $newHPetit = round(35 * $h / 100);
         $t->assign_vars(array('image2' => "<div id='divImagePetit2' style='display:none;'><img src='resizeImage.php' alt='' width={$newWPetit} height={$newHPetit} id='image2Petit'></div><div id='divImageGrand2' style='display:block;'><img src='resizeImage.php' alt='' width={$newWGrand} height={$newHGrand} id='image2Grand'></div>"));
     }
     // fabrication de la liste des adresses affichées sur l'encart
     // adresse courante affichée en rouge:
     //$txtAdresseCourante = $this->getIntituleAdresseFrom($idAdresseCourante,'idAdresse',array('noSousQuartier'=>true,'noQuartier'=>true,'noVille'=>true));
     // recherche des autres adresses du groupe d'adresse courant
     //$txtAutreAdressesGroupeAdresse = "";
     $txtAdresses = "";
     $reqAdresseDuGroupeAdresse = "\n            SELECT ha1.idAdresse as idAdresse,ha1.numero as numero, ha1.idRue as idRue, IF(ha1.idIndicatif='0','',i.nom) as nomIndicatif, ha1.idQuartier as idQuartier, ha1.idSousQuartier as idSousQuartier\n            FROM historiqueAdresse ha2, historiqueAdresse ha1\n            LEFT JOIN _adresseEvenement ae ON ae.idAdresse = ha1.idAdresse\n            LEFT JOIN indicatif i ON i.idIndicatif = ha1.idIndicatif\n            WHERE ha2.idAdresse = ha1.idAdresse\n            AND ae.idEvenement ='" . $params['idEvenementGroupeAdresse'] . "'\n\n            GROUP BY ha1.idAdresse, ha1.idHistoriqueAdresse\n            HAVING ha1.idHistoriqueAdresse = max(ha2.idHistoriqueAdresse)\n            ORDER BY ha1.numero,ha1.idRue\n        ";
     //AND ha1.idAdresse<>'".$idAdresseCourante."'
     $resAdresseDuGroupeAdresse = $this->connexionBdd->requete($reqAdresseDuGroupeAdresse);
     if (mysql_num_rows($resAdresseDuGroupeAdresse) > 0) {
         $arrayNumero = array();
         while ($fetchAdressesGroupeAdresse = mysql_fetch_assoc($resAdresseDuGroupeAdresse)) {
             $isAdresseCourante = false;
             if ($idAdresseCourante == $fetchAdressesGroupeAdresse['idAdresse']) {
                 $isAdresseCourante = true;
             }
             if ($fetchAdressesGroupeAdresse['idRue'] == '0' || $fetchAdressesGroupeAdresse['idRue'] == '') {
                 if ($fetchAdressesGroupeAdresse['idQuartier'] != '' && $fetchAdressesGroupeAdresse['idQuartier'] != '0') {
                     $arrayNumero[$this->getIntituleAdresseFrom($fetchAdressesGroupeAdresse['idAdresse'], 'idAdresse', array('noSousQuartier' => true, 'noQuartier' => false, 'noVille' => true))][] = array('indicatif' => $fetchAdressesGroupeAdresse['nomIndicatif'], 'numero' => $fetchAdressesGroupeAdresse['numero'], 'url' => $this->creerUrl('', '', array('archiAffichage' => 'adresseDetail', 'archiIdAdresse' => $fetchAdressesGroupeAdresse['idAdresse'], 'archiIdEvenementGroupeAdresse' => $params['idEvenementGroupeAdresse'])), 'isAdresseCourante' => $isAdresseCourante);
                 }
                 if ($fetchAdressesGroupeAdresse['idSousQuartier'] != '' && $fetchAdressesGroupeAdresse['idSousQuartier'] != '0') {
                     $arrayNumero[$this->getIntituleAdresseFrom($fetchAdressesGroupeAdresse['idAdresse'], 'idAdresse', array('noSousQuartier' => false, 'noQuartier' => true, 'noVille' => true))][] = array('indicatif' => $fetchAdressesGroupeAdresse['nomIndicatif'], 'numero' => $fetchAdressesGroupeAdresse['numero'], 'url' => $this->creerUrl('', '', array('archiAffichage' => 'adresseDetail', 'archiIdAdresse' => $fetchAdressesGroupeAdresse['idAdresse'], 'archiIdEvenementGroupeAdresse' => $params['idEvenementGroupeAdresse'])), 'isAdresseCourante' => $isAdresseCourante);
                 }
             } else {
                 $arrayNumero[$this->getIntituleAdresseFrom($fetchAdressesGroupeAdresse['idRue'], 'idRueWithNoNumeroAuthorized', array('noSousQuartier' => true, 'noQuartier' => true, 'noVille' => true))][] = array('indicatif' => $fetchAdressesGroupeAdresse['nomIndicatif'], 'numero' => $fetchAdressesGroupeAdresse['numero'], 'url' => $this->creerUrl('', '', array('archiAffichage' => 'adresseDetail', 'archiIdAdresse' => $fetchAdressesGroupeAdresse['idAdresse'], 'archiIdEvenementGroupeAdresse' => $params['idEvenementGroupeAdresse'])), 'isAdresseCourante' => $isAdresseCourante);
             }
             //$txtAutreAdressesGroupeAdresse .= "<br><a href='".$this->creerUrl('','',array('archiAffichage'=>'adresseDetail','archiIdAdresse'=>$fetchAutresAdressesGroupeAdresse['idAdresse'],'archiIdEvenementGroupeAdresse'=>$params['idEvenementGroupeAdresse']))."'>".$this->getIntituleAdresseFrom($fetchAutresAdressesGroupeAdresse['idAdresse'],'idAdresse',array('noSousQuartier'=>true,'noQuartier'=>true,'noVille'=>true))."</a>";
         }
     }
     // affichage adresses regroupees
     foreach ($arrayNumero as $intituleRue => $arrayInfosNumero) {
         $isSelectedRue = false;
         $isUnSeulNumeroSurGroupeAdresse = false;
         if (count($arrayInfosNumero) == 1) {
             // s'il n'y a qu'un seul numero dans le groupe d'adresse de la rue courante , on fait le lien href sur tout le texte de l'adresse , pas seulement sur le numero
             if ($arrayInfosNumero[0]['numero'] == '0') {
                 $arrayInfosNumero[0]['numero'] = '';
             }
             if ($arrayInfosNumero[0]['isAdresseCourante'] == true) {
                 $txtAdresses .= "<a href='" . $arrayInfosNumero[0]['url'] . "' style='font-weight:bold;'>" . $arrayInfosNumero[0]['numero'] . $arrayInfosNumero[0]['indicatif'] . " " . $intituleRue . "</a><span style='color:#4b4b4b'>-</span>";
                 $isUnSeulNumeroSurGroupeAdresse = true;
             } else {
                 $txtAdresses .= "<a href='" . $arrayInfosNumero[0]['url'] . "'>" . $arrayInfosNumero[0]['numero'] . $arrayInfosNumero[0]['indicatif'] . " " . $intituleRue . "</a><span style='color:#4b4b4b'>-</span>";
                 $isUnSeulNumeroSurGroupeAdresse = true;
             }
         } else {
             foreach ($arrayInfosNumero as $indice => $infosNumero) {
                 if ($infosNumero['isAdresseCourante'] == true) {
                     if ($infosNumero['numero'] == '' || $infosNumero['numero'] == '0') {
                         $isSelectedRue = true;
                     } else {
                         $txtAdresses .= "<a href='" . $infosNumero['url'] . "'>" . $infosNumero['numero'] . $infosNumero['indicatif'] . "</a><span style='color:#4b4b4b'>-</span>";
                         $isSelectedRue = true;
                     }
                 } else {
                     if ($infosNumero['numero'] == '' || $infosNumero['numero'] == '0') {
                         //rien
                     } else {
                         $txtAdresses .= "<a href='" . $infosNumero['url'] . "'>" . $infosNumero['numero'] . $infosNumero['indicatif'] . "</a><span style='color:#4b4b4b'>-</span>";
                     }
                 }
             }
         }
         $txtAdresses = pia_substr($txtAdresses, 0, -pia_strlen("<span style='color:#4b4b4b'>-</span>"));
         if (!$isUnSeulNumeroSurGroupeAdresse) {
             if ($isSelectedRue) {
                 $txtAdresses .= "<span >" . $intituleRue . "</span><br>";
             } else {
                 $txtAdresses .= "<span style='color:#4B4B4B;'>" . $intituleRue . "</span><br>";
             }
         } else {
             $txtAdresses .= "<br>";
         }
     }
     $txtAdresses = pia_substr($txtAdresses, 0, -pia_strlen("<br>"));
     $t->assign_vars(array('adresse2' => $txtAdresses));
     // ensuite on recherche les groupes d'adresses autour de l'adresse courante, sans afficher les adresses du meme groupe d'adresse que le courant
     $arrayIdAdresses = $this->getArrayIdAdressesNearCurrentAdresse(array('idAdresse' => $idAdresseCourante, 'idEvenementGroupeAdresseCourant' => $params['idEvenementGroupeAdresse']));
     if (isset($arrayIdAdresses['avant']['idAdresse'])) {
         $infosImageAvant = $this->getArrayInfosImageAvantOrApres(array('positionImage' => 'avant', 'idAdresse' => $arrayIdAdresses['avant']['idAdresse'], 'idEvenementGroupeAdresse' => $arrayIdAdresses['avant']['idEvenementGroupeAdresse']));
         $t->assign_vars(array('image1' => $infosImageAvant['image']));
         $t->assign_vars(array('adresse1' => $infosImageAvant['adresse']));
     }
     if (isset($arrayIdAdresses['apres']['idAdresse'])) {
         $infosImageApres = $this->getArrayInfosImageAvantOrApres(array('positionImage' => 'apres', 'idAdresse' => $arrayIdAdresses['apres']['idAdresse'], 'idEvenementGroupeAdresse' => $arrayIdAdresses['apres']['idEvenementGroupeAdresse']));
         $t->assign_vars(array('image3' => $infosImageApres['image']));
         $t->assign_vars(array('adresse3' => $infosImageApres['adresse']));
     }
     // si une adresse avant ou apres n'a pas ete trouvée , on va chercher les adresses les plus proches qui ne sont pas dans cette rue (car si elles sont dans cette rue , elles sont forcement dans le parcours
     if (isset($arrayIdAdresses['apres']['idAdresse']) && !isset($arrayIdAdresses['avant']['idAdresse']) || !isset($arrayIdAdresses['apres']['idAdresse']) && isset($arrayIdAdresses['avant']['idAdresse'])) {
         $arrayCoordonnees = $this->getCoordonneesFrom($idAdresseCourante, 'idAdresse');
         $arrayRue = $this->getIdRuesFrom($idAdresseCourante, 'idAdresse');
         $idVilleAdresseCourante = $this->getIdVilleFrom($idAdresseCourante, 'idAdresse');
         // idVilleCourante pour rester dans les adresses de la ville en cours , et pas avoir en resultat une adresse d'une autre ville
         if ($arrayCoordonnees['latitude'] == '') {
             $arrayCoordonnees['latitude'] = 0;
         }
         if ($arrayCoordonnees['longitude'] == '') {
             $arrayCoordonnees['longitude'] = 0;
         }
         $reqAdresseProche = "\n                SELECT ha1.idAdresse as idAdresse, ((acos(sin(" . $arrayCoordonnees['latitude'] . "*PI()/180) * sin(ha1.latitude*PI()/180) + cos(" . $arrayCoordonnees['latitude'] . "*PI()/180) * cos(ha1.latitude*PI()/180) * cos((" . $arrayCoordonnees['longitude'] . " - ha1.longitude)*PI()/180))/ pi() * 180.0)* 60 * 1.1515 * 1.609344)*1000 as distance, ae.idEvenement as idEvenementGroupeAdresse\n                FROM historiqueAdresse ha2, historiqueAdresse ha1\n                LEFT JOIN _adresseEvenement ae ON ae.idAdresse = ha1.idAdresse\n                LEFT JOIN _evenementEvenement ee ON ee.idEvenement = ae.idEvenement\n                LEFT JOIN rue r ON r.idRue = ha1.idRue\n                LEFT JOIN sousQuartier sq ON sq.idSousQuartier = r.idSousQuartier\n                LEFT JOIN quartier q ON q.idQuartier = sq.idQuartier\n                LEFT JOIN ville v ON v.idVille = q.idVille\n                WHERE\n                    ha2.idAdresse = ha1.idAdresse\n                AND ha1.idRue<>'" . $arrayRue[0] . "'\n                AND v.idVille = '" . $idVilleAdresseCourante . "'\n                GROUP BY ha1.idAdresse, ha1.idHistoriqueAdresse,ee.idEvenement\n                HAVING ha1.idHistoriqueAdresse = max(ha2.idHistoriqueAdresse) AND count(ee.idEvenement)>0\n                ORDER BY distance ASC\n                LIMIT 1\n            ";
         $resAdresseProche = $this->connexionBdd->requete($reqAdresseProche);
         $fetchAdresseProche = mysql_fetch_assoc($resAdresseProche);
         // affichage de l'adresse
         if (!isset($arrayIdAdresses['avant']['idAdresse'])) {
             $infosImageAvant = $this->getArrayInfosImageAvantOrApres(array('positionImage' => 'avant', 'idAdresse' => $fetchAdresseProche['idAdresse'], 'idEvenementGroupeAdresse' => $fetchAdresseProche['idEvenementGroupeAdresse']));
             $t->assign_vars(array('image1' => $infosImageAvant['image']));
             $t->assign_vars(array('adresse1' => $infosImageAvant['adresse']));
         } elseif (!isset($arrayIdAdresses['apres']['idAdresse'])) {
             $infosImageAvant = $this->getArrayInfosImageAvantOrApres(array('positionImage' => 'apres', 'idAdresse' => $fetchAdresseProche['idAdresse'], 'idEvenementGroupeAdresse' => $fetchAdresseProche['idEvenementGroupeAdresse']));
             $t->assign_vars(array('image3' => $infosImageAvant['image']));
             $t->assign_vars(array('adresse3' => $infosImageAvant['adresse']));
         }
     } elseif (!isset($arrayIdAdresses['apres']['idAdresse']) && !isset($arrayIdAdresses['avant']['idAdresse'])) {
         // s'il n'y pas ni adresse avant ni adresse apres, on prend l'adresse la plus proche qui n'est pas dans la rue , on la met a gauche , l'adresse la plus proche suivante on la met a droite
         $arrayCoordonnees = $this->getCoordonneesFrom($idAdresseCourante, 'idAdresse');
         $arrayRue = $this->getIdRuesFrom($idAdresseCourante, 'idAdresse');
         $idVilleAdresseCourante = $this->getIdVilleFrom($idAdresseCourante, 'idAdresse');
         // idVilleCourante pour rester dans les adresses de la ville en cours , et pas avoir en resultat une adresse d'une autre ville
         if ($arrayCoordonnees['latitude'] == '') {
             $arrayCoordonnees['latitude'] = 0;
         }
         if ($arrayCoordonnees['longitude'] == '') {
             $arrayCoordonnees['longitude'] = 0;
         }
         $reqAdressesProches = "\n                SELECT DISTINCT ae.idEvenement as idEvenementGroupeAdresse\n                FROM _adresseEvenement ae\n                LEFT JOIN historiqueAdresse ha1 ON ha1.idAdresse = ae.idAdresse\n                LEFT JOIN historiqueAdresse ha2 ON ha2.idAdresse = ha1.idAdresse\n                LEFT JOIN _evenementEvenement ee ON ee.idEvenement = ae.idEvenement\n                LEFT JOIN rue r ON r.idRue = ha1.idRue\n                LEFT JOIN sousQuartier sq ON sq.idSousQuartier = r.idSousQuartier\n                LEFT JOIN quartier q ON q.idQuartier = sq.idQuartier\n                LEFT JOIN ville v ON v.idVille = q.idVille\n                WHERE\n                    ha2.idAdresse = ha1.idAdresse\n                AND ha1.idRue<>'" . $arrayRue[0] . "'\n                AND v.idVille = '" . $idVilleAdresseCourante . "'\n                GROUP BY ha1.idAdresse, ha1.idHistoriqueAdresse,ee.idEvenement\n                HAVING ha1.idHistoriqueAdresse = max(ha2.idHistoriqueAdresse)  AND count(ee.idEvenement)>0\n                ORDER BY ((acos(sin(" . $arrayCoordonnees['latitude'] . "*PI()/180) * sin(ha1.latitude*PI()/180) + cos(" . $arrayCoordonnees['latitude'] . "*PI()/180) * cos(ha1.latitude*PI()/180) * cos((" . $arrayCoordonnees['longitude'] . " - ha1.longitude)*PI()/180))/ pi() * 180.0)* 60 * 1.1515 * 1.609344)*1000 ASC\n\n            ";
         $resAdressesProches = $this->connexionBdd->requete($reqAdressesProches);
         $fetchAdressesProches = mysql_fetch_assoc($resAdressesProches);
         $idAdresseAvant = $this->getIdAdresseFromIdEvenementGroupeAdresse($fetchAdressesProches['idEvenementGroupeAdresse']);
         $infosImageAvant = $this->getArrayInfosImageAvantOrApres(array('positionImage' => 'avant', 'idAdresse' => $idAdresseAvant, 'idEvenementGroupeAdresse' => $fetchAdressesProches['idEvenementGroupeAdresse']));
         if (isset($infosImageAvant['image'])) {
             $t->assign_vars(array('image1' => $infosImageAvant['image']));
         }
         if (isset($infosImageAvant['adresse'])) {
             $t->assign_vars(array('adresse1' => $infosImageAvant['adresse']));
         }
         $fetchAdressesProches = mysql_fetch_assoc($resAdressesProches);
         $idAdresseApres = $this->getIdAdresseFromIdEvenementGroupeAdresse($fetchAdressesProches['idEvenementGroupeAdresse']);
         $infosImageApres = $this->getArrayInfosImageAvantOrApres(array('positionImage' => 'apres', 'idAdresse' => $idAdresseApres, 'idEvenementGroupeAdresse' => $fetchAdressesProches['idEvenementGroupeAdresse']));
         if (isset($infosImageApres['image'])) {
             $t->assign_vars(array('image3' => $infosImageApres['image']));
         }
         if (isset($infosImageApres['adresse'])) {
             $t->assign_vars(array('adresse3' => $infosImageApres['adresse']));
         }
     }
     $titre = $this->getIntituleAdresseFrom($params['idEvenementGroupeAdresse'], 'idEvenementGroupeAdresse', array('afficheTitreSiTitreSinonRien' => true));
     if ($titre != '') {
         $t->assign_block_vars('isTitre', array('titre' => $titre));
     }
     ob_start();
     $t->pparse('encartAdresse');
     $html .= ob_get_contents();
     ob_end_clean();
     // javascript a mettre dans le header , on le retourne donc dans la fonction
     $jsHeader = "\n            <script  >\n            function imageOver(numImage)\n            {\n                if(numImage==1)\n                {\n                    if(document.getElementById('divImagePetit1'))\n                    {\n                        document.getElementById('divImagePetit1').style.display='none';\n                        document.getElementById('divImageGrand1').style.display='block';\n                    }\n\n                    if(document.getElementById('divImagePetit2'))\n                    {\n                        document.getElementById('divImageGrand2').style.display='none';\n                        document.getElementById('divImagePetit2').style.display='block';\n                    }\n\n                    if(document.getElementById('divImagePetit3'))\n                    {\n                        document.getElementById('divImageGrand3').style.display='none';\n                        document.getElementById('divImagePetit3').style.display='block';\n                    }\n                }\n\n                if(numImage==2)\n                {\n                    /*document.getElementById('divImagePetit1').style.display='none';\n                    document.getElementById('divImageGrand2').style.display='none';\n                    document.getElementById('divImageGrand3').style.display='none';\n                    document.getElementById('divImageGrand1').style.display='block';\n                    document.getElementById('divImagePetit2').style.display='block';\n                    document.getElementById('divImagePetit3').style.display='block';*/\n                }\n\n                if(numImage==3)\n                {\n                    if(document.getElementById('divImagePetit1'))\n                    {\n                        document.getElementById('divImagePetit1').style.display='none';\n                        document.getElementById('divImageGrand1').style.display='block';\n                    }\n\n                    if(document.getElementById('divImagePetit2'))\n                    {\n                        document.getElementById('divImageGrand2').style.display='none';\n                        document.getElementById('divImagePetit2').style.display='block';\n                    }\n\n                    if(document.getElementById('divImagePetit3'))\n                    {\n                        document.getElementById('divImageGrand3').style.display='block';\n                        document.getElementById('divImagePetit3').style.display='none';\n                    }\n                }\n            }\n\n            function imageOut(numImage)\n            {\n                if(numImage==1)\n                {\n                    if(document.getElementById('divImagePetit2'))\n                    {\n                        document.getElementById('divImagePetit2').style.display='block';\n                        document.getElementById('divImageGrand2').style.display='none';\n                    }\n\n                    if(document.getElementById('divImagePetit3'))\n                    {\n                        document.getElementById('divImagePetit3').style.display='block';\n                        document.getElementById('divImageGrand3').style.display='none';\n                    }\n                }\n                else\n                if(numImage==2)\n                {\n                    if(document.getElementById('divImagePetit1'))\n                    {\n                        document.getElementById('divImagePetit1').style.display='block';\n                        document.getElementById('divImageGrand1').style.display='none';\n                    }\n\n                    if(document.getElementById('divImagePetit3'))\n                    {\n                        document.getElementById('divImagePetit3').style.display='block';\n                        document.getElementById('divImageGrand3').style.display='none';\n                    }\n\n                }\n                else\n                if(numImage==3)\n                {\n                    if(document.getElementById('divImagePetit1'))\n                    {\n                        document.getElementById('divImagePetit1').style.display='block';\n                        document.getElementById('divImageGrand1').style.display='none';\n                    }\n\n                    if(document.getElementById('divImagePetit2'))\n                    {\n                        document.getElementById('divImagePetit2').style.display='block';\n                        document.getElementById('divImageGrand2').style.display='none';\n                    }\n                }\n                else\n                {\n\n                    if(document.getElementById('divImagePetit1'))\n                    {\n                        document.getElementById('divImagePetit1').style.display='block';\n                        document.getElementById('divImageGrand1').style.display='none';\n                    }\n\n                    if(document.getElementById('divImagePetit2'))\n                    {\n                        document.getElementById('divImagePetit2').style.display='none';\n                        document.getElementById('divImageGrand2').style.display='block';\n                    }\n\n                    if(document.getElementById('divImagePetit3'))\n                    {\n                        document.getElementById('divImagePetit3').style.display='block';\n                        document.getElementById('divImageGrand3').style.display='none';\n                    }\n                }\n\n\n            }\n            </script>\n        ";
     $this->addToJsHeader($jsHeader);
     return array('html' => $html, 'isPhotoCentrale' => $isPhotoCentrale);
 }
 /**
  * Generates a reference to the given variable inside the given (possibly nested)
  * block namespace. This is a string of the form:
  * ' . $this->_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['varname'] . '
  * It's ready to be inserted into an "echo" line in one of the templates.
  * NOTE: expects a trailing "." on the namespace.
  * 
  * @param string $namespace ?
  * @param string $varname   ?
  * 
  * @return string
  */
 function generate_block_varref($namespace, $varname)
 {
     // Strip the trailing period.
     $namespace = pia_substr($namespace, 0, pia_strlen($namespace) - 1);
     // Get a reference to the data block for this namespace.
     $varref = $this->generate_block_data_ref($namespace, true);
     // Prepend the necessary code to stick this in an echo line.
     // Append the variable reference.
     $varref .= '[\'' . $varname . '\']';
     $varref = '\' . ( ( isset(' . $varref . ') ) ? ' . $varref . ' : \'\' ) . \'';
     return $varref;
 }
 public function changementMotDePasseOublie()
 {
     $html = "";
     $configFields = $this->getFieldsFromChangementMotDePasseOublie();
     $f = new formGenerator();
     $errors = $f->getArrayFromPost($configFields);
     $erreur = new objetErreur();
     if (isset($this->variablesPost['mail']) && $this->variablesPost['mail'] != '' && isset($this->variablesPost['md5']) && $this->verifMD5ChangementMotDePasse($this->variablesPost['md5'], $this->variablesPost['mail'])) {
         if ($configFields['mdp1']['value'] == $configFields['mdp2']['value']) {
             if (pia_strlen($configFields['mdp1']['value']) >= 5) {
                 // mise a jour du mot de passe
                 $reqMaj = "update utilisateur set motDePasse=md5('" . $configFields['mdp1']['value'] . "') where mail='" . $this->variablesPost['mail'] . "'";
                 $resMaj = $this->connexionBdd->requete($reqMaj);
                 $html .= _("Votre mot de passe a été mis à jour.") . "<br>";
             } else {
                 $erreur->ajouter(_("Attention un mot de passe doit comporter au moins 5 caractères."));
             }
         } else {
             $erreur->ajouter(_("Attention le mot de passe et sa vérification ne correspondent pas."));
         }
     } else {
         $erreur->ajouter(_("Problème changement de mot de passe : il y a un problème avec le formulaire. Merci de contacter l'administrateur."));
     }
     if ($erreur->getNbErreurs() > 0) {
         $html .= $erreur->afficher();
         $html .= $this->afficheFormulaireChangementMotDePasseOublie();
     }
     return $html;
 }
 /**
  * ?
  * 
  * @param string $email E-mail
  * @param string $name  Nom
  * 
  * @return string HTML
  * */
 function encodeEmail_debutpage($email, $name = null)
 {
     $email = preg_replace("/\"/", "\\\"", $email);
     if ($name == null) {
         $name = $email;
     }
     $old = "document.write('<a CLASS=infoacceuil " . "href=\"mailto:{$email}\">{$name}</a>')";
     $output = "";
     for ($i = 0; $i < pia_strlen($old); $i++) {
         $output = $output . '%' . bin2hex(pia_substr($old, $i, 1));
     }
     $output = '<script type="text/javascript">eval(unescape(\'' . $output . '\'))</script>';
     $output .= '<noscript><div>Vous devez accepter le Javascript' . ' pour voir l\'email</div></noscript>';
     return $output;
 }
 function convertYears($date)
 {
     $converted = '';
     $dateSansSeparateur = preg_replace('#[^0-9/]#', '', $date);
     if ($date != '') {
         if (pia_strlen($dateSansSeparateur) <= 4) {
             $converted = '00/00/' . $date;
         } else {
             $tabDate = explode('/', $date);
             if (count($tabDate) === 2) {
                 $converted = '00/' . $tabDate[0] . '/' . $tabDate[1];
             } else {
                 if (count($tabDate) === 3) {
                     $converted = $tabDate[0] . '/' . $tabDate[1] . '/' . $tabDate[2];
                 } else {
                     //echo  "le champ date doit comprendre 8 chiffres :: convertYears (".$date.")";
                 }
             }
         }
     }
     return $converted;
 }
 function getArrayFromPost(&$tableauTravail = array(), $param = null, $captcha = false)
 {
     global $config;
     if (empty($param)) {
         $param = $_POST;
     }
     $errors = array();
     foreach ($tableauTravail as $name => $value) {
         switch ($value['type']) {
             case 'multiple':
                 if (isset($param[$name])) {
                     $tableauTravail[$name]['value'] = $param[$name];
                 }
                 if ($tableauTravail[$name]["required"]) {
                     if (!isset($param[$name]) or count($param[$name]) < 1) {
                         $errors[] = $name;
                         $tableauTravail[$name]['error'] = 'Champ obligatoire';
                     }
                 }
                 break;
             case 'numeric':
                 if (isset($param[$name])) {
                     $tableauTravail[$name]['value'] = $param[$name];
                 }
                 if ($tableauTravail[$name]["required"]) {
                     if ($param[$name] != $tableauTravail[$name]["default"] and $this->estChiffre($param[$name])) {
                         // OK
                     } else {
                         if (!$this->estChiffre($param[$name])) {
                             $errors[] = 'Ce champ requière une valeur numérique';
                             $tableauTravail[$name]['error'] = 'Ce champ requière une valeur numérique';
                         } else {
                             $errors[] = 'Valeur obligatoire';
                             $tableauTravail[$name]['error'] = 'Valeur obligatoire';
                         }
                     }
                 } elseif (isset($tableauTravail[$name]) && isset($param[$name]) && $tableauTravail[$name]["required"] == false && $param[$name] != '' && !$this->estChiffre($param[$name])) {
                     $errors[] = 'Ce champ requière une valeur numérique';
                     $tableauTravail[$name]['error'] = 'Ce champ requière une valeur numérique';
                 } else {
                     if (isset($param[$name]) && $param[$name] == '') {
                         $tableauTravail[$name]['value'] = $tableauTravail[$name]['default'];
                     }
                 }
                 break;
             case 'date':
                 if (isset($param[$name])) {
                     $tableauTravail[$name]['value'] = $param[$name];
                     $dateSansSeparateur = preg_replace('#[^0-9/]#', '', $param[$name]);
                     if ($tableauTravail[$name]['required'] == true) {
                         if (pia_strlen($param[$name]) > 0) {
                             if (pia_strlen($dateSansSeparateur) == 4) {
                                 $tableauTravail[$name]['value'] = '00/00/' . $dateSansSeparateur;
                             } else {
                                 $tabDate = explode('/', $param[$name]);
                                 if (count($tabDate) === 2) {
                                     $tableauTravail[$name]['value'] = '00/' . $tabDate[0] . '/' . $tabDate[1];
                                 } else {
                                     if (count($tabDate) === 3) {
                                         $tableauTravail[$name]['value'] = $tabDate[0] . '/' . $tabDate[1] . '/' . $tabDate[2];
                                     } else {
                                         $errors[] = 'date';
                                         $tableauTravail[$name]['error'] = 'Ce champ doit comprendre 8 chiffres';
                                     }
                                 }
                             }
                         }
                     }
                 } else {
                     $tableauTravail[$name]['value'] = $tableauTravail[$name]['default'];
                 }
                 break;
             case 'hidden':
             case 'bigText':
             case 'simpleList':
             case 'text':
                 if (isset($param[$name])) {
                     $tableauTravail[$name]['value'] = $param[$name];
                     if ($tableauTravail[$name]["required"]) {
                         // le champs est requis
                         if ($param[$name] != $tableauTravail[$name]["default"] && trim($param[$name]) != "") {
                             // rien
                         } else {
                             // erreur
                             $errors[] = $name;
                             $tableauTravail[$name]['error'] = 'Champ obligatoire';
                         }
                     }
                 } else {
                     $tableauTravail[$name]['value'] = $tableauTravail[$name]['default'];
                 }
                 break;
             case 'email':
                 if (isset($param[$name])) {
                     $tableauTravail[$name]['value'] = $param[$name];
                     if ($tableauTravail[$name]["required"]) {
                         $mailObj = new mailObject();
                         // le champs est requis
                         if ($param[$name] != $tableauTravail[$name]["default"] && trim($param[$name]) != "" && $mailObj->isMail($param[$name])) {
                             // rien
                         } else {
                             // erreur
                             $errors[] = $name;
                             $tableauTravail[$name]['error'] = 'Champ obligatoire';
                         }
                     }
                 } else {
                     $tableauTravail[$name]['value'] = $tableauTravail[$name]['default'];
                 }
                 break;
             case 'checkbox':
                 if (isset($param[$name])) {
                     $tableauTravail[$name]['value'] = '1';
                 } else {
                     if ($tableauTravail[$name]['default'] != '') {
                         $tableauTravail[$name]['value'] = $tableauTravail[$name]['default'];
                     } else {
                         $tableauTravail[$name]['value'] = '0';
                     }
                 }
                 break;
             case 'radio':
                 $tableauTravail[$name]['value'] = $param[$name];
                 if ($tableauTravail[$name]["required"]) {
                     // le champs est requis
                     if ($param[$name] != $tableauTravail[$name]["default"] && $param[$name] != "") {
                         // rien
                     } else {
                         // erreur
                         $errors[] = $name;
                         $tableauTravail[$name]['error'] = 'Champ obligatoire';
                     }
                 }
                 break;
             case 'checklist':
                 $tableauTravail[$name]['value'] = $param[$name];
                 foreach ($param[$name] as $idCourant) {
                     if (!$this->estChiffre($idCourant)) {
                         $errors[] = $name;
                         $tableauTravail[$name]['error'] = 'Mauvaise valeur !';
                     }
                 }
                 break;
             case 'password':
                 $tableauTravail[$name]['value'] = $param[$name];
                 // si le champ est différent de '' c'est qu'on va modifier le mot de passe
                 // sinon on ne modifie pas
                 // erreur si les deux champs sont différents
                 if ($tableauTravail[$name]['value'] != "") {
                     if (isset($tableauTravail[$name]['fieldToCompare'])) {
                         if ($tableauTravail[$name]['value'] == $param[$tableauTravail[$name]['fieldToCompare']]) {
                             // rien
                         } else {
                             $errors[] = $name;
                             $tableauTravail[$name]['error'] = 'Les mots de passe diffèrent';
                         }
                     }
                 } else {
                     if ($tableauTravail[$name]['required']) {
                         $errors[] = $name;
                         $tableauTravail[$name]['error'] = 'Mot de passe requis';
                     }
                 }
                 break;
             case 'captcha':
                 $securimage = new Securimage();
                 //debug(array('fonction' =>$securimage->check($param[$name]) , 'param' => $param[$name],'name' => $name));
                 if ($securimage->check($param[$name]) == false) {
                     // the code was incorrect
                     // handle the error accordingly with your other error checking
                     $errors[] = $name;
                     $tableauTravail[$name]['error'] = 'Erreur dans le code à recopier';
                 }
                 break;
             default:
                 $tableauTravail[$name]['error'] = 'Ce type de champ n\'existe pas !';
                 break;
         }
         // verification de l'existence d'un identifiant au moment de l'ajout quand il y a une liaison vers une autre table ,  cas des listes select,  multiple etc
         // si la valeur n'existe pas ,  on renvoi une erreur
         if (isset($tableauTravail[$name]['checkExist']) && $tableauTravail[$name]['error'] == '' and $tableauTravail[$name]['value'] != 0) {
             if (is_array($tableauTravail[$name]['value'])) {
                 $liste = implode("', '", $tableauTravail[$name]['value']);
                 $sql = "SELECT DISTINCT " . $tableauTravail[$name]['checkExist']['primaryKey'] . " \n                        FROM " . $tableauTravail[$name]['checkExist']['table'] . " \n                        WHERE " . $tableauTravail[$name]['checkExist']['primaryKey'] . " IN ('" . $liste . "')";
                 $resCheck = $this->connexionBdd->requete($sql);
                 if (mysql_num_rows($resCheck) != count($tableauTravail[$name]['value'])) {
                     $tableauTravail[$name]['error'] = "Un élément a été supprimé de la base de données";
                 }
             } else {
                 $sql = "SELECT DISTINCT " . $tableauTravail[$name]['checkExist']['primaryKey'] . " \n                        FROM " . $tableauTravail[$name]['checkExist']['table'] . " \n                        WHERE " . $tableauTravail[$name]['checkExist']['primaryKey'] . "='" . $tableauTravail[$name]['value'] . "' LIMIT 1";
                 $resCheck = $this->connexionBdd->requete($sql);
                 if (mysql_num_rows($resCheck) == 0) {
                     $tableauTravail[$name]['error'] = "Cet élément a été supprimé de la base de données";
                 }
             }
         }
     }
     if ($captcha) {
         if (isset($param["g-recaptcha-response"])) {
             $ch = curl_init();
             curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify');
             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
             curl_setopt($ch, CURLOPT_POSTFIELDS, array('secret' => $config->captchakey, 'response' => $param["g-recaptcha-response"]));
             $resp = json_decode(curl_exec($ch));
             if (!$resp->success) {
                 $errors['captcha-error'] = 'Captcha incorrect !';
             }
         } else {
             $errors['captcha-error'] = 'Captcha manquant !';
         }
     }
     return $errors;
 }
 public function getFileNameWithoutExtension($fichier = '')
 {
     $retour = "";
     $trouve = false;
     for ($i = pia_strlen($fichier) - 1; $i > 0 && !$trouve; $i--) {
         if (pia_substr($fichier, $i, 1) == '.') {
             $trouve = true;
         }
     }
     if ($trouve) {
         $retour = pia_substr($fichier, 0, $i + 1);
     } else {
         $retour = $fichier;
     }
     return $retour;
 }
 public function getHtml($params = array())
 {
     $html = "";
     $maxValue = $this->getMaxValue();
     // cette valeur va permettre de calculer l'echelle la plus pratique a utiliser
     $nbChiffres = pia_strlen($maxValue);
     $unite = '1';
     for ($i = 0; $i < $nbChiffres - 2; $i++) {
         $unite .= '0';
     }
     $roundedValue = round($maxValue, -$nbChiffres + 2) + $unite;
     $hauteur = 200;
     if (isset($params['hauteur']) && $params['hauteur'] != '') {
         $hauteur = $params['hauteur'];
     }
     $colWidth = 20;
     if (isset($params['colWidth']) && $params['colWidth'] != '') {
         $colWidth = $params['colWidth'];
     }
     // echelle
     $heightEchelle = $hauteur;
     $html .= "<table cellspacing=0 cellpadding=0 border=0 height=" . ($heightEchelle + 50 + 50) . "><tr><td valign=bottom>";
     $html .= "<table border=0 cellspacing=0 cellpadding=0 style='background-color:white;' height=" . ($heightEchelle + 50) . ">";
     $html .= "<tr>";
     $html .= "<td valign=top>";
     $html .= " <table height={$heightEchelle} width=60 border=0 cellspacing=0 cellpadding=0 style=''><tr><td width=60 valign=bottom>";
     $html .= "<div style='position:relative;'>";
     $html .= "<div style='position:absolute;bottom:" . round($heightEchelle / 4) . "px;left:0;width:60px;text-align:right;'>" . round($roundedValue / 4) . "_</div>";
     $html .= "<div style='position:absolute;bottom:" . round($heightEchelle / 2) . "px;left:0;width:60px;text-align:right;'>" . round($roundedValue / 2) . "_</div>";
     $html .= "<div style='position:absolute;bottom:" . round($heightEchelle / (4 / 3)) . "px;left:0;width:60px;text-align:right;'>" . round($roundedValue / (4 / 3)) . "_</div>";
     $html .= "<div style='position:absolute;bottom:0px;left:0;width:60px;text-align:right;'>0_</div>";
     $html .= "<div style='position:absolute;bottom:" . $heightEchelle . "px;left:0;width:60px;text-align:right;'>" . $roundedValue . "_</div>";
     $html .= "</div>";
     $html .= "</td><td style='background-color:black;' width=2></td></tr></table>";
     $html .= "</td>";
     foreach ($this->listeValues as $indice => $value) {
         if (is_array($value)) {
             if (!isset($this->listeModesAffichage[$indice]) || $this->listeModesAffichage[$indice] != 'cumul') {
                 asort($value);
             }
             $html .= "<td valign=bottom height=200>";
             $html .= "<table cellspacing=0 cellpadding=0 border=0  width={$colWidth} style=''>";
             $valPrecedente = 0;
             $arrayHtmlGraph = array();
             foreach ($value as $index => $values) {
                 if (isset($this->listeModesAffichage[$indice]) && $this->listeModesAffichage[$indice] == 'cumul') {
                     // dans ce cas on cumul les barres , on affiche la premiere puis la seconde au dessus
                     $height1 = round($value[$index] * $hauteur / $roundedValue);
                     $arrayHtmlGraph[] = "<tr><td style='" . $this->listeStyles[$indice][$index] . "' height=" . $height1 . "></td></tr>";
                 } else {
                     // dans ce cas on affiche les barres les une derriere les autres , et ont chacune comme ordonnee 0 au depart
                     $height1 = round(($value[$index] - $valPrecedente) * $hauteur / $roundedValue);
                     $arrayHtmlGraph[] = "<tr><td style='" . $this->listeStyles[$indice][$index] . "' height=" . $height1 . "></td></tr>";
                     $valPrecedente = $value[$index] - $valPrecedente;
                 }
             }
             // et on affiche a l'envers
             for ($i = count($arrayHtmlGraph) - 1; $i >= 0; $i--) {
                 $html .= $arrayHtmlGraph[$i];
             }
             $html .= "<tr height=50><td style='background-color:white;border-top:1px solid black;font-size:9px;' valign=top>" . $this->listeLibelles[$indice] . "</td></tr>";
             //
             $html .= "</table>";
             $html .= "</td>";
         } else {
             $html .= "<td valign=bottom height=200>";
             $height = round($value * $hauteur / $roundedValue);
             $html .= "<table cellspacing=0 cellpadding=0 border=0 height=" . ($height + 50) . " width={$colWidth} style='" . $this->listeStyles[$indice] . "'>";
             $html .= "<tr>";
             $html .= "<td valign=top></td>";
             $html .= "</tr>";
             $html .= "<tr height=50><td style='background-color:white;border-top:1px solid black;font-size:9px;' valign=top>" . $this->listeLibelles[$indice] . "</td></tr>";
             //
             $html .= "</table>";
             $html .= "</td>";
         }
     }
     $html .= "</tr>";
     $html .= "</table>";
     $html .= "</tr>";
     $html .= "</table>";
     return $html;
 }
 /**
  * Fonction qui affiche la liste des photos suivant les criteres fournis dans le tableau 'criteres'
  *
  * @param array $criteres Critères
  *
  * @return string HTML
  * */
 public function afficherListe($criteres = array())
 {
     $html = '';
     $html .= $this->afficherFormulaireRecherche();
     $formulaire = new formGenerator();
     $t = new Template('modules/archi/templates/');
     $t->set_filenames(array('detailImage' => 'listeImages.tpl'));
     $tabParametresAutorises = array('ordre', 'tri', 'nbEnregistrements', 'selection', 'id', "motCle", "dateUploadDu", "dateUploadAu", "datePriseDeVueDu", "datePriseDeVueAu", "pageCourante");
     // lien pour l'ajout d'une ou plusieur images dans la bibliotheque ,  sans préciser si celle(s) ci appartient (iennent) à une adresse ou un evenement
     $t->assign_vars(array('lienAjoutImage' => $this->creerUrl('', 'ajoutImageBibliotheque')));
     foreach ($tabParametresAutorises as $param) {
         if (isset($this->variablesPost[$param]) and !isset($criteres[$param])) {
             $criteres[$param] = $this->variablesPost[$param];
         }
     }
     foreach ($tabParametresAutorises as $param) {
         if (isset($this->variablesGet[$param]) and !isset($criteres[$param])) {
             $criteres[$param] = $this->variablesGet[$param];
         }
     }
     if (!isset($criteres['pageCourante'])) {
         $criteres['pageCourante'] = 1;
     }
     if (!isset($criteres['selection']) or !isset($criteres['id']) or $formulaire->estChiffre($criteres['id']) != 1) {
         $sqlWhere = '1=1';
     } else {
         switch ($criteres['selection']) {
             case 'utilisateur':
                 $sqlWhere = 'hI.idUtilisateur=' . $criteres['id'];
                 break;
             default:
                 $sqlWhere = '1=1';
         }
     }
     if (!isset($criteres['ordre'])) {
         $sqlOrdre = 'hI.nom';
     } else {
         switch ($criteres['ordre']) {
             case 'nom':
                 $sqlOrdre = 'hI.nom';
                 break;
             case 'description':
                 $sqlOrdre = 'hI.description';
                 break;
             case 'source':
                 $sqlOrdre = 'nomSource';
                 break;
             case 'dateAjout':
                 $sqlOrdre = 'hI.dateUpload';
                 break;
             default:
                 $sqlOrdre = 'hI.nom';
         }
     }
     if (isset($criteres['tri'])) {
         if ($criteres['tri'] == 'desc') {
             $sqlTri = 'DESC';
         } else {
             $sqlTri = 'ASC';
         }
     } else {
         $sqlTri = 'ASC';
     }
     // ***********************************
     // criteres sur les dates
     //  **********************************
     $sqlRecherche = "";
     // criteres sur les dates d'upload
     if (isset($criteres['dateUploadDu']) && $criteres['dateUploadDu'] != '' && (!isset($criteres['dateUploadAu']) || $criteres['dateUploadAu'] == '')) {
         $sqlRecherche .= " and hI.dateUpload='" . $this->date->toBdd($criteres['dateUploadDu']) . "' ";
     }
     if (isset($criteres['dateUploadDu']) && $criteres['dateUploadDu'] != '' && (!isset($criteres['dateUploadAu']) || $criteres['dateUploadAu'] == '')) {
         $sqlRecherche .= " and hI.dateUpload='" . $this->date->toBdd($criteres['dateUploadDu']) . "' ";
     }
     if (isset($criteres['dateUploadDu']) && $criteres['dateUploadDu'] != '' && isset($criteres['dateUploadAu']) && $criteres['dateUploadAu'] != '') {
         $sqlRecherche .= " and hI.dateUpload>='" . $this->date->toBdd($criteres['dateUploadDu']) . "' and hI.dateUpload<='" . $criteres['dateUploadAu'] . "' ";
     }
     // criteres sur les dates de prises de vues
     if (isset($criteres['datePriseDeVueDu']) && $criteres['datePriseDeVueDu'] != '' && (!isset($criteres['datePriseDeVuAu']) || $criteres['datePriseDeVuAu'] == '')) {
         $sqlRecherche .= " and hI.dateCliche='" . $this->date->toBdd($criteres['datePriseDeVueDu']) . "' ";
     }
     if (isset($criteres['datePriseDeVueDu']) && $criteres['datePriseDeVueDu'] != '' && (!isset($criteres['datePriseDeVueAu']) || $criteres['datePriseDeVueAu'] == '')) {
         $sqlRecherche .= " and hI.dateCliche='" . $this->date->toBdd($criteres['datePriseDeVueDu']) . "' ";
     }
     if (isset($criteres['datePriseDeVueDu']) && $criteres['datePriseDeVueDu'] != '' && isset($criteres['datePriseDeVueAu']) && $criteres['datePriseDeVueAu'] != '') {
         $sqlRecherche .= " and hI.dateCliche>='" . $criteres['datePriseDeVueDu'] . "' and hI.dateCliche<='" . $criteres['datePriseDeVueAu'] . "' ";
     }
     // criteres sur le nom/description
     if (isset($criteres['motCle']) && $criteres['motCle'] != '') {
         $sqlRecherche .= " and ( ";
         $arrayListeMots = explode(" ", $criteres['motCle']);
         foreach ($arrayListeMots as $indice => $value) {
             $sqlRecherche .= " hI.nom LIKE \"%" . $value . "%\" or hI.description LIKE \"%" . $value . "%\" or ";
         }
         if (count($arrayListeMots) > 0) {
             $sqlRecherche = substr($sqlRecherche, 0, pia_strlen($sqlRecherche) - 3);
         }
         $sqlRecherche .= ") ";
     }
     //  **********************************
     // nombre d'images totales
     //$sqlNbEnregistrements = "SELECT distinct idImage from historiqueImage WHERE ".$sqlWhere.;
     $sqlNbEnregistrements = "SELECT hI.nom,  hI.idImage,  CONCAT(hI.dateUpload,  '/',  hI.idHistoriqueImage) AS urlImage,  hI.description,  s.nom AS nomSource\n            FROM historiqueImage hI2,  historiqueImage hI\n            LEFT JOIN source s USING (idSource)\n            WHERE " . $sqlWhere . " AND hI.idImage = hI2.idImage\n            " . $sqlRecherche . "\n            GROUP BY hI.idImage,  hI.idHistoriqueImage HAVING hI.idHistoriqueImage=MAX(hI2.idHistoriqueImage)\n            ORDER BY " . $sqlOrdre . " " . $sqlTri;
     $resNbEnregistrements = $this->connexionBdd->requete($sqlNbEnregistrements);
     $nbEnregistrementTotaux = mysql_num_rows($resNbEnregistrements);
     // nombre d'images affichées sur une page
     $nbEnregistrementsParPage = 5;
     $arrayPagination = $this->pagination(array('nomParamPageCourante' => 'pageCourante', 'nbEnregistrementsParPage' => $nbEnregistrementsParPage, 'nbEnregistrementsTotaux' => $nbEnregistrementTotaux, 'typeLiens' => 'formulaire', 'champPageCourante' => 'pageCourante', 'idFormulaire' => 'rechercheImages'));
     echo $arrayPagination['html'];
     $sql = "SELECT hI.nom,  hI.idImage,  CONCAT(hI.dateUpload,  '/',  hI.idHistoriqueImage) AS urlImage,  hI.description,  s.nom AS nomSource\n            FROM historiqueImage hI2,  historiqueImage hI\n            LEFT JOIN source s USING (idSource)\n            WHERE " . $sqlWhere . " AND hI.idImage = hI2.idImage\n            " . $sqlRecherche . "\n            GROUP BY hI.idImage,  hI.idHistoriqueImage HAVING hI.idHistoriqueImage=MAX(hI2.idHistoriqueImage)\n            ORDER BY " . $sqlOrdre . " " . $sqlTri . " LIMIT " . $arrayPagination['limitSqlDebut'] . ",  " . $nbEnregistrementsParPage;
     $rep = $this->connexionBdd->requete($sql);
     $t->assign_vars(array('nbReponses' => $nbEnregistrementTotaux));
     if ($nbEnregistrementTotaux > 0) {
         $tabLiens = array(array('titre' => 'Image', 'url' => '', 'urlOnClick' => '', 'urlDesc' => '', 'urlDescOnClick' => '', 'urlAsc' => '', 'urlAscOnClick' => ''), array('titre' => 'nom', 'url' => $this->creerUrl('', '', array_merge($this->variablesGet, array('ordre' => 'nom', 'pageCourante' => 1))), 'urlOnClick' => '', 'urlDesc' => $this->creerUrl('', '', array_merge($this->variablesGet, array('ordre' => 'nom', 'pageCourante' => 1, 'tri' => 'desc'))), 'urlDescOnClick' => '', 'urlAsc' => $this->creerUrl('', '', array_merge($this->variablesGet, array('ordre' => 'nom', 'pageCourante' => 1, 'tri' => 'asc'))), 'urlAscOnClick' => ''), array('titre' => 'description', 'url' => $this->creerUrl('', '', array_merge($this->variablesGet, array('ordre' => 'description', 'pageCourante' => 1))), 'urlOnClick' => '', 'urlDesc' => $this->creerUrl('', '', array_merge($this->variablesGet, array('ordre' => 'description', 'pageCourante' => 1, 'tri' => 'desc'))), 'urlDescOnClick' => '', 'urlAsc' => $this->creerUrl('', '', array_merge($this->variablesGet, array('ordre' => 'description', 'pageCourante' => 1, 'tri' => 'asc'))), 'urlAscOnClick' => ''), array('titre' => 'source', 'url' => $this->creerUrl('', '', array_merge($this->variablesGet, array('ordre' => 'source', 'pageCourante' => 1))), 'urlOnClick' => '', 'urlDesc' => $this->creerUrl('', '', array_merge($this->variablesGet, array('ordre' => 'source', 'pageCourante' => 1, 'tri' => 'desc'))), 'urlDescOnClick' => '', 'urlAsc' => $this->creerUrl('', '', array_merge($this->variablesGet, array('ordre' => 'source', 'pageCourante' => 1, 'tri' => 'asc'))), 'urlAscOnClick' => ''));
         $nbLiens = count($tabLiens);
         for ($i = 0; $i < $nbLiens; $i++) {
             $t->assign_block_vars('liens', $tabLiens[$i]);
         }
         while ($res = mysql_fetch_object($rep)) {
             $t->assign_block_vars('image', array('url' => $this->creerUrl('', 'imageDetail', array('archiIdImage' => $res->idImage)), 'urlImage' => $this->getUrlImage("mini") . $res->urlImage, 'nom' => htmlspecialchars(stripslashes($res->nom)), 'description' => htmlspecialchars(stripslashes($res->description)), 'source' => $res->nomSource));
         }
     }
     ob_start();
     $t->pparse('detailImage');
     $html .= ob_get_contents();
     ob_end_clean();
     return $html;
 }
 /**
  * Fonction permettant de connaitre le pourcentage de caracteres d'un certain type dans une chaine
  * 
  * @param string $string        ?
  * @param string $typeRecherche ?
  * 
  * @return int
  * */
 public function getPourcentageCaracteresDeType($string = '', $typeRecherche = 'majuscules')
 {
     $pourcentage = 0;
     $totalCaracteresDuTypeRecherche = 0;
     $longueurChaine = pia_strlen($string);
     $borneAsciiSuperieur = null;
     $borneAsciiInferieur = null;
     $codeEspace = 32;
     $nbEspaces = 0;
     $borneAsciiInferieurChiffre = 48;
     $borneAsciiSuperieurChiffre = 57;
     $nbChiffres = 0;
     $nbAutres = 0;
     switch ($typeRecherche) {
         case 'majuscules':
             $borneAsciiInferieur = 65;
             // A
             $borneAsciiSuperieur = 90;
             // Z
             break;
         default:
             echo "Erreur : string::getPourcentageCaracteresDeType => le type transmis en parametre n'a pas ete trouvé<br>";
             break;
     }
     // parcours de la chaine
     if ($borneAsciiSuperieur != null && $borneAsciiInferieur != null) {
         for ($i = 0; $i < $longueurChaine; $i++) {
             $caractereCourant = pia_substr($string, $i, 1);
             if (ord($caractereCourant) >= $borneAsciiInferieur && ord($caractereCourant) <= $borneAsciiSuperieur) {
                 $totalCaracteresDuTypeRecherche++;
             } elseif (ord($caractereCourant) == $codeEspace) {
                 $nbEspaces++;
             } elseif (ord($caractereCourant) >= $borneAsciiInferieurChiffre && ord($caractereCourant) <= $borneAsciiSuperieurChiffre) {
                 $nbChiffres++;
             } else {
                 $nbAutres++;
             }
         }
         if ($longueurChaine - $nbEspaces - $nbChiffres - $nbAutres > 0) {
             $pourcentage = $totalCaracteresDuTypeRecherche / ($longueurChaine - $nbEspaces - $nbChiffres - $nbAutres) * 100;
         }
     }
     return $pourcentage;
 }