hellofacteurV1/divers/utilitaires.php

808 lines
27 KiB
PHP
Executable File

<?php
require_once(BASE_REP."../modele/journal_erreurs.php");
///+++++++++++++ Affichage + traitement chaînes ++++++++++++++///
/**
* Fonction qui affiche le contenu d'un tableau
* A mettre du côté "vues" à terme...
*
* @param le tableau, le masque d'affichage
* + éventuellement un code à afficher avant ou après la liste
* @return le tableau mis en forme, false si vide au format non prévu
* @author Fabrice PENHOËT
*/
function affiche_tableau($tab,$format="#valeur",$avant="",$apres="")
{
if(is_array($tab))
{
$texte=$avant;
foreach($tab as $key => $value)
{
if(!is_array($value))
$texte.=str_replace("#valeur","$key >> $value",$format);
else
$texte.="$key >> ".affiche_tableau($value,$format,$avant,$apres);
}
$texte.=$apres;
return $texte;
}
else if (is_string($tab))
{
$texte=$avant.str_replace("#valeur",$tab,$format).$apres;
return $texte;
}
else
return false;
}
/**
* Fonction retournant une chaîne en ne gardant que les caractères autorisés
*
* @param chaîne de caractères à traiter + liste des caractères autorisés
* @return chaîne traitée (pouvant être vide)
* @author Fabrice PENHOËT
*/
function nettoye_chaine($chaine,$autorises="abcdefghijklmnopqrstuvwxyz")
{
$nouvelle_chaine="";
$i=0;
while(isset($chaine[$i]))
{
if(strpos($autorises,$chaine[$i])!==false)
$nouvelle_chaine.=$chaine[$i];
$i++;
}
return $nouvelle_chaine;
}
/**
* Fonction retournant une chaîne après l'avoir encodée en utf8 si nécessaire
*
* @param chaîne de caractères à traiter
* @return chaîne traitée
* @author Fabrice PENHOËT
*/
function affiche_utf8($chaine)
{
if(empty($chaine))
return null;
// -- vérifier encodage valides : http://php.net/manual/fr/function.mb-detect-order.php
$liste_encodages="UTF-8,EUC-JP,SJIS,eucJP-win,SJIS-win,JIS,ISO-2022-JP,ISO-8859-1";
$encodage=mb_detect_encoding($chaine,$liste_encodages,true);
if($encodage===false)
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT." >> ".htmlentities($chaine)));
elseif($encodage!="UTF-8")
{
$nouvelle_chaine=iconv($encodage,"UTF-8//TRANSLIT",$chaine);
if($nouvelle_chaine!==false)
return $nouvelle_chaine;
else
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT." >> ".htmlentities($chaine)));
}
return $chaine;
}
/**
* Fonction retournant les X premiers caractères de la chaîne passée
* si elle est + longue que le nombre de caractères max
* la chaine elle-même sinon
*
* @param chaîne de caractères à traiter, nombre de caractères max, suffixe en cas de coupure (facultatif)
* @return chaîne traitée
* @author Fabrice PENHOËT
*/
function get_chaine_debut($chaine="",$max=0,$suffixe="")
{
if($max==0)
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
return false;
}
if(!is_int($max))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
return false;
}
if(strlen($chaine)<=$max)
return $chaine;
else
{
return substr($chaine,0,($max-strlen($suffixe))).$suffixe;
}
}
/**
* Fonction détectant des liens de type url ou email dans un texte
* pour les rendre cliquable.
*
* @param texte à traiter
* @return texte traité
* @author Fabrice Lezoray (http://www.expreg.com/lire-URL-source)
*/
function crea_liens_texte($texte="")
{
if(empty($texte))
return $texte;
$cherche=array('`((?:https?)://\\S+)(\\s|\\z)`','`([[:alnum:]]([-_.]?[[:alnum:]])*@[[:alnum:]]([-_.]?[[:alnum:]])*\.([a-z]{2,4}))`');
$remplace=array('<a href="$1" rel="nofollow">$1</a>$2','<a href="mailto:$1">$1</a>');
return preg_replace($cherche,$remplace,$texte);
}
///+++++++++++++ Traitement des fichiers & images ++++++++++++++///
/**
* Fonction générant un fichier local redimensionné à partir d'un fichier image téléchargé
*
* @param adresses du fichier source + de celui à créer.
* Options : hauteur ou largueur max si miniature. Qualité de l'image si jpeg/png.
* @return booléen suivant succès
* @author Fabrice PENHOËT
*/
function import_image($adresse_fichier_source,$adresse_nouveau_fichier,$hmax=0,$lmax=0,$quality_jpg=80,$quality_png=5)
{
if (file_exists($adresse_fichier_source))
{
$tab_image=getimagesize($adresse_fichier_source);
if(empty($tab_image))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_IMAGE_VALIDE));
return false;
}
$largeur=$tab_image[0];
$hauteur=$tab_image[1];
$type_image=$tab_image[2];
if(($hmax!==0)&&($hauteur>$hmax))
{
$ratio=$hmax/$hauteur;
$new_largeur=ceil($largeur*$ratio);
$new_hauteur=$hmax;
}
else if(($lmax!==0)&&($largeur>$lmax))
{
$ratio=$lmax/$largeur;
$new_hauteur=ceil($hauteur*$ratio);
$new_largeur=$lmax;
}
else
{
$new_hauteur=$hauteur;
$new_largeur=$largeur;
}
$new_image=imagecreatetruecolor($new_largeur,$new_hauteur);
if($new_image==false)
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_IMAGE_CREATION));
return false;
}
if ($type_image==1)
{
$image_s=imagecreatefromgif($adresse_fichier_source);
imagecopyresampled($new_image,$image_s,0,0,0,0,$new_largeur,$new_hauteur,$largeur,$hauteur);
$crea=imagegif($new_image,$adresse_nouveau_fichier);
imagedestroy($new_image);
unlink($adresse_fichier_source);
return $crea;
}
elseif ($type_image==2)
{
$image_s=imagecreatefromjpeg($adresse_fichier_source);
imagecopyresampled($new_image,$image_s,0,0,0,0,$new_largeur,$new_hauteur,$largeur,$hauteur);
$crea=imagejpeg($new_image,$adresse_nouveau_fichier,$quality_jpg);
imagedestroy($new_image);
unlink($adresse_fichier_source);
return $crea;
}
elseif ($type_image==3)
{
$image_s=imagecreatefrompng($adresse_fichier_source);
imagecopyresampled($new_image,$image_s,0,0,0,0,$new_largeur,$new_hauteur,$largeur,$hauteur);
$crea=imagepng($new_image,$adresse_nouveau_fichier,$quality_png);
imagedestroy($new_image);
unlink($adresse_fichier_source);
return $crea;
}
else
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_IMAGE_FORMAT));
return false;
}
}
else
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_EXISTE));
return false;
}
}
/**
* Fonction création d'un fichier temporaire (ticket)
*
* @param le contenu à enregistré dans le fichier, son répertoire et son préfixe
* @return l'adresse du ticket créé. false si erreur rencontrée.
* @author Fabrice PENHOËT
*/
function crea_ticket($contenu="",$repertoire,$prefixe="fclf")
{
if(!file_exists($repertoire))
{
if(!mkdir($repertoire,TICKET_REP_CHMOD,true))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_REP_CREA));
return false;
}
}
if(!is_writable($repertoire))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_REP_DROIT));
return false;
}
$ticket=tempnam($repertoire,$prefixe);
if($ticket===false)
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_CREA));
return false;
}
if((!empty($contenu))&&(!file_put_contents($ticket,$contenu)))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_ECRITURE));
return false;
}
return $ticket;
}
/**
* Fonction parcourant les différentes dimensions d'un tableau pour le réécrire
*
* @param le tableau
* @return le tableau sous forme de chaine, $debut de la chaine
* @author Fabrice PENHOËT
*/
function get_chaine_tableau($tableau,$debut="")
{
if(!is_array($tableau))
return false;
$chaine_tableau="";
foreach ($tableau as $attribut => $valeur)
{
if(is_array($tableau[$attribut]))
$chaine_tableau.=get_chaine_tableau($tableau[$attribut],$debut."['$attribut']");
else
$chaine_tableau.="\$t".$debut."['$attribut']=\"".addslashes($valeur)."\";";
}
return $chaine_tableau;
}
/**
* Fonction création d'un fichier stochant un tableau php
* Utile au cache du modèle
*
* @param chemin du fichier à créer/modifier et données brutes à écrire dans le fichier pouvant être fournies sous forme de tableau.
* @return booléen suivant succès
* @author Fabrice PENHOËT
*/
function crea_cache($chemin,$donnees_fichier)
{
if(!defined('CACHE_REP'))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE." >> ".ERREUR_CACHE_REP));
return false;
}
if(empty($chemin))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE." >> ".ERREUR_PARAM_MANQUANT));
return false;
}
if((file_exists(CACHE_REP."/$chemin"))&&(!is_writable(CACHE_REP."/$chemin")))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE." >> ".ERREUR_FICHIER_ECRITURE." >> ".$chemin));
return false;
}
$repertoire=CACHE_REP."/".substr($chemin,0,(strrpos($chemin,"/")+1));
if(!file_exists($repertoire))
{
if(!mkdir($repertoire,CACHE_REP_CHMOD,true))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE." >> ".ERREUR_REP_CREA." >> ".$repertoire));
return false;
}
}
if((!file_exists(CACHE_REP."/$chemin"))&&(!is_writable($repertoire)))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE." >> ".ERREUR_REP_DROIT." >> ".$repertoire));
return false;
}
if(is_array($donnees_fichier))
$code="<?php\n".get_chaine_tableau($donnees_fichier);//le résultat peut être vide mais je créé qd même un fichier pour savoir que le traitement a été réalisé
else
$code=$donnees_fichier;
if(!file_put_contents(CACHE_REP."/$chemin",$code,LOCK_EX))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CACHE_ECRITURE." >> ".ERREUR_FICHIER_ECRITURE." >> ".$chemin));
return false;
}
else
return true;
}
/**
* Fonction supprimant un répertoire et tout ce qu'il contient
*
* @param chemin du répertoire à supprimer
* + booléen si le répertoire doit lui-même être supprimé
* @return boolén suivant succès
* @author Fabrice PENHOËT
*/
function supprime_repertoire($chemin_rep,$total=true)
{
$rep_courant=opendir($chemin_rep);
if($rep_courant===false)
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_REP_EXISTE));
return false;
}
while($fichier=readdir($rep_courant))
{
if((is_dir("$chemin_rep/$fichier"))&&($fichier!=".")&&($fichier!=".."))
{
if(!supprime_repertoire("$chemin_rep/$fichier"))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_REP_DROIT." >> $chemin_rep/$fichier"));
return false;
}
}
elseif(($fichier!=".")&&($fichier!=".."))
{
if(!unlink("$chemin_rep/$fichier"))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_FICHIER_SUPPR." >> $chemin_rep/$fichier"));
return false;
}
}
}
closedir($rep_courant);
if($total)
{
if(!rmdir($chemin_rep))
return false;
}
return true;
}
///+++++++++++++ Email ++++++++++++++///
/**
* Fonction qui envoi un email avec la fonction mail()
*
* @param email_e email expéditeur, $email_d email destinataire
* @return booléen suivant succès
*/
function envoi_message($email_e,$email_d,$objet,$corps,$nom_e=SITE_NOM)
{
if((empty($email_e))||(empty($email_d))||(empty($objet))||(empty($corps)))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_EMAIL_ENVOI." >> ".ERREUR_PARAM_MANQUANT));
return false;
}
if((!filter_var($email_e,FILTER_VALIDATE_EMAIL))||(!filter_var($email_d,FILTER_VALIDATE_EMAIL)))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_EMAIL_ENVOI." >> ".ERREUR_EMAIL_ADRESSE_FORMAT));
return false;
}
$message=wordwrap($corps,70,"\r\n");
$headers="From: $nom_e <$email_e>"."\r\n"."MIME-Version: 1.0"."\r\n"."Content-type: text/plain; charset=UTF-8"."\r\n"."Reply-To: $email_e"."\r\n"."X-Mailer: PHP/".phpversion();
if((mail($email_d,$objet,$message,$headers))===false)//!!! à revoir pour passer par smtp ???
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_EMAIL_ENVOI));
return false;
}
else
return true;
}
/**
* Fonction tentant d'initialisé un objet PHPMailer
* en se basant sur les différentes constantes déclarées pour la configuration ou non d'un serveur smtp
*
* @return l'objet créé ou false en cas d'erreur
* ne sert plus ... et bug !
function PHPMailer_initialise()
{
$mail=new PHPmailer();
if(!empty(SMTP_SERVEUR))
{
$mail->IsSMTP();
$mail->Host=SMTP_SERVEUR;
$mail->SMTPKeepAlive=true;// maintient de la connexion pour éventuellement envoyer +sieurs mail
if(!empty(SMTP_PASSE))
{
$mail->SMTPAuth=true;
$mail->Username=SMTP_NAME;
$mail->Password=SMTP_PASSE;
}
if(!empty(SMTP_PORT))
$mail->Port=SMTP_PORT;
if(!empty(SMTP_SECURE))
$mail->SMTPSecure=SMTP_SECURE;
}
$mail->setLanguage(PHPMAIL_LANG);
if(!empty($mail))
return $mail;
else
return false;
}*/
///+++++++++++++ Mots de passe & chiffrement ++++++++++++++///
/**
* Fonction qui génére un mot de passe
* en fait un nombre défini de caractères aléatoires parmi ceux fournis
*
* @param les caractères autorisés + le nombre de caractères souhaité
* @return la valeur chiffrée. false si erreur.
*/
function crea_passe($caracteres="",$nb_caracteres=0)
{
if(empty($caracteres))
{//j'évite volontairement les 0 et O sources éternelles de confusion...
//$caracteres=$caracteres.strtoupper($caracteres)."123456789@+-%*";
// je simplifie parce que...
$caracteres="abcdefghijklmnpqrstuvwxyz123456789";
}
else
$caracteres=strval($caracteres);
if($nb_caracteres==0)
$nb_caracteres=rand(7,12);
else
$nb_caracteres=intval($nb_caracteres);
$i=1;$passe="";
$max=strlen($caracteres)-1;
while($i<=$nb_caracteres)
{
$passe.=$caracteres[rand(0,$max)];
$i++;
}
if(!empty($passe))
return $passe;
else
return false;
}
/**
* Fonction qui chiffre un mot de passe
*
* @param le mot de passe à chiffrer, $cout le "coût" du chiffrement
* @return la valeur chiffrée. false si erreur
*/
function chiffrement($chaine,$cout=12)
{
if(empty($chaine))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_MANQUANT));
return false;
}
else
{
$options=array('cost'=>$cout);
$chaine_chiffree=password_hash($chaine,PASSWORD_DEFAULT,$options);
if($chaine_chiffree!=false)
return $chaine_chiffree;
else
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_CHIFFREMENT));
return false;
}
}
}
///+++++++++++++ mysql ++++++++++++++///
/**
* Fonction servant à tester si on est bien connecté à la base de données
* Ecrit des messages d'erreur si pas de connexion
*
* @param script et ligne où le test est réalisé
* @return booléen suivant si connecté ou pas.
* @author Fabrice PENHOËT
*/
function isset_connexion($script,$ligne)
{
global $Bd;
if(!($Bd instanceof PDO))
{
$ajout_journal=new journal_erreurs(array($script,$ligne,ERREUR_CONNEXION_ABSENTE));
return false;
}
else
return true;
}
/**
* Fonction qui recueille le résultat d'une requête préparée (ou non) pour traiter les éventuelles erreurs
*
* @param script et ligne où le test est réalisé + référence à la requête préparée
* @return booléen suivant succès
* @author Fabrice PENHOËT
*/
function test_requete($script,$ligne,$requete,$prepare=null)
{
global $Bd;
if($requete===false)
{
if(!empty($prepare))
{
$tab=$prepare->errorInfo();
$prepare=null;
}
else
$tab=$Bd->errorInfo();
$ajout_journal=new journal_erreurs(array($script,$ligne,$tab[2]));
return false;
}
else
return true;
}
///+++++++++++++ HTML... ++++++++++++++///
/* Ensemble de fonctions php qui vont me permettrent de créer le code html au design
* à revoir !
*/
function get_html_h1($h1)
{
return "<h1 class='page-header'>$h1</h1>";
}
function get_html_ariane($ariane_items)
{
if(empty($_SESSION["statut"]))
$html="<ol class='breadcrumb'><li><span class='glyphicon glyphicon-home'></span> <a href='".SITE_URL."'>".SITE_NOM."</a></li>";
else
$html="<ol class='breadcrumb'><li><span class='glyphicon glyphicon-home'></span> <a href='".PAGE_ACCUEIL."'>Ma page d'accueil.</a></li>";
foreach($ariane_items as $item)
{
if($item["form"]==true)
$item["txt"]=str_replace("<li>","<li><span class='glyphicon glyphicon-edit'></span> ",$item["txt"]);
else
$item["txt"]=str_replace("<li>","<li><span class='glyphicon glyphicon-chevron-right'></span> ",$item["txt"]);
if($item["actif"]==true)
$item["txt"]=str_replace("<li>","<li class='active'>",$item["txt"]);
$html.=$item["txt"];
}
$html.="</ol>";
return $html;
}
function get_html_alerte_msg($messages,$type="alert-danger")
{
$html="";
if(is_array($messages))
{
foreach($messages as $message)
$html.="<div class='alert $type alert-dismissable'><button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;</button>".str_replace("<a","<a class='alert-link'",$message)."</div>";
}
return $html;
}
function get_html_form($form,$div=true)
{
$html="";
if(!empty($form[1]))//c'est qu'il y en a au moins 2..
{
$i=0;$fin="";
while(isset($form[$i]))
{
//$item="<div class=\"panel panel-default\"><div class=\"panel-heading\">".$form[$i]["nom"]."</div><div class=\"panel-body\">".$form[$i]["champs"]."</div></div>";
$item="<div class=\"form\"><h3>".$form[$i]["nom"]."</h3>".$form[$i]["champs"]."</div>";
if($div)
{
$html.="<div id='form$i'>$item";
$fin.="</div>";
}
else
$html.=$item;
$i++;
}
$html.=$fin;
}
else
{
if(isset($form[0]))
$form=$form[0];
$html="<div class='form'><h3>".$form["nom"]."</h3>".$form["champs"]."</div>";
}
//$html="<div class=\"panel panel-default\"><div class=\"panel-heading\">".$form["nom"]."</div><div class=\"panel-body\">".$form["champs"]."</div></div>";
return "<div id='form'>$html</div>";
}
function get_html_liste_rubriques($rubriques,$abo_ok=false,$desc_ok=false,$ville_ok=false)
{
$html="<div class='container-fluid'>";
$nb_theme=0;
if($ville_ok)
{
$html.="<div class='row'><div class='col-lg-6 col-xs-12'><div class='col-lg-8 col-xs-12'><p><a href='".PAGE_ABO_CREA_VILLE."' title=\"M'abonner aux actualités locales\" rel='nofollow'><span class='glyphicon glyphicon-ok-circle'></span></a> <strong>Actualité locale.</strong>";
if($desc_ok)
$html.="<br><em>L'actualité près de chez vous : presse régionale, bonnes affaires, idées de sortie...</em></p>";
$html.="</div>
<div class='col-lg-4 col-xs-12'><p><a href='".PAGE_ABO_CREA_VILLE."' class='btn btn-info' title=\"M'abonner aux actualités locales\" rel='nofollow'>Je m'abonne !</a></p></div>";
$html.="</div>";
$nb_theme++;
}
foreach($rubriques as $rubrique_infos)
{
$nb_theme++;
if(($nb_theme%2)!=0)
$html.="<div class='row'>";
$html.="<div class='col-lg-6 col-xs-12'><div class='col-lg-8 col-xs-12'><p>";
if($abo_ok)
$html.="<a href='".PAGE_ABO_CREA_RUBRIQUE.$rubrique_infos["id_rubrique"]."' title=\"M'abonner à cette thématique\" rel='nofollow'><span class='glyphicon glyphicon-ok-circle'></span></a>";
else
$html.="<a href='".PAGE_REPERTOIRE_RUBRIQUE_INFO.$rubrique_infos["id_rubrique"]."' title=\"Voir le contenu de cette rubrique.\"><span class='glyphicon glyphicon-play'></span></a>";
$html.=" <strong>".affiche_utf8(htmlentities($rubrique_infos["nom"],ENT_QUOTES),UTF8_OK)."</strong>";
if($desc_ok)
$html.="<br><em>".affiche_utf8(htmlentities($rubrique_infos["description"],ENT_QUOTES),UTF8_OK)."</em></p>";
$html.="</div>";
if($abo_ok)
$html.="<div class='col-lg-4 col-xs-12'><p><a href='".PAGE_ABO_CREA_RUBRIQUE.$rubrique_infos["id_rubrique"]."' class='btn btn-info' title=\"M'abonner à cette thématique\" rel='nofollow'>Je m'abonne !</a></p></div>";
else
$html.="<div class='col-lg-4 col-xs-12'><p><a href='".PAGE_REPERTOIRE_RUBRIQUE_INFO.$rubrique_infos["id_rubrique"]."' class='btn btn-info' title=\"Voir le contenu de cette rubrique.\">Parcourir.</a></p></div>";
$html.="</div>";
if(($nb_theme%2)==0)
$html.="</div>";
}
if(($nb_theme%2)!=0)//div de la ligne à fermer
$html.="</div>";
return $html."</div>";
}
function get_html_liste_hubs($hubs,$abo_ok=false,$desc_ok=false)
{
$html="<div class='container-fluid'>";
$nb_hubs=0;
foreach($hubs as $hub_infos)
{
$nb_hubs++;
if(($nb_hubs%2)!=0)
$html.="<div class='row'>";
$html.="<div class='col-lg-6 col-xs-12'><div class='col-lg-8 col-xs-12'><p>";
$html.="<a href='".PAGE_REPERTOIRE_HUB_INFO.$hub_infos["id_hub"]."' title=\"Voir les dernières actualités\"><span class='glyphicon glyphicon-play'></span></a>
<strong>";
if($hub_infos["reference_ok"])
$html.="(*) ";
$html.=affiche_utf8(htmlentities($hub_infos["nom"],ENT_QUOTES),UTF8_OK)."</strong>";
if($desc_ok)
$html.="<br><em>".affiche_utf8(htmlentities($hub_infos["description"],ENT_QUOTES),UTF8_OK)."</em></p>";
$html.="</div>";
if($abo_ok)
$html.="<div class='col-lg-4 col-xs-12'><p><a href='".PAGE_ABO_CREA_HUB.$hub_infos["id_hub"]."' class='btn btn-info' title=\"M'abonner à ce bureau de poste\" rel='nofollow'>Je m'abonne !</a></p></div>";
else
$html.="<div class='col-lg-4 col-xs-12'><p><a href='".PAGE_REPERTOIRE_HUB_INFO.$hub_infos["id_hub"]."' class='btn btn-info' title=\"Voir les dernières actualités pour ce bureau de poste.\">Voir les dernières actualités.</a></p></div>";
$html.="</div>";
if(($nb_hubs%2)==0)
$html.="</div>";
}
if(($nb_hubs%2)!=0)//div de la ligne à fermer
$html.="</div>";
return $html."</div>";
}
function get_html_liste_liens($abo,$liens,$user,$max=0)
{//liste des liens d'un abonnement avec compteur de clics
$html="<ul class='liste_liens'>";$i=0;
foreach($liens as $lien_abo)
{
$source="";
if(!empty($lien_abo["flux"]))
$source=stripslashes($lien_abo["flux"]["source"]["nom"]);
elseif(!empty($lien_abo["hub"]))
$source=stripslashes($lien_abo["hub"]["nom"]);
elseif(!empty($lien_abo["auteur"]))
$source=htmlspecialchars_decode(stripslashes($lien_abo["auteur"]["pseudo"]));
$html.="<li id='lien_".$lien_abo["id_post"]."'><span class='liste_item'>&bull;</span> [$source] ".htmlspecialchars_decode(stripslashes($lien_abo["ancre"]))." <a href='".PAGE_CLIC_LIEN.$abo->id_abonnement."/".$lien_abo["id_post"]."/".$user->id_utilisateur."/s/' title=\"Accéder à l'article\" target='_blank' class='btn btn-success btn-xs' rel='nofollow'>Lire l'article.</a>
<a target='_blank' title='Envoyer par mail' href=\"mailto:?subject=".$lien_abo["ancre"]."&body=".$lien_abo["url"]."%0D%0A%0D%0AVu sur : ".SITE_URL."\" rel='nofollow'><img src='".SITE_URL."/images/icones/email_icon.png' alt='email' style='height:20px' /></a>
<a rel='nofollow' href='https://www.facebook.com/sharer.php?u=".$lien_abo["url"]."' target='_blank'><img src='".SITE_URL."/images/icones/facebook_icon.png' alt='Partager sur facebook' style='height:20px'></a>
<a rel='nofollow' href='https://twitter.com/share?url=".$lien_abo["url"]."&amp;text=".urlencode($lien_abo["ancre"])."' target='_blank'><img src='".SITE_URL."/images/icones/twitter_icon.png' alt='Partager sur twitter' style='height:20px'></a></li>";
$i++;
if(($max!=0)&&($i>=$max))
break;
}
$html.="</ul>";
return $html;
}
function get_html_liste_liens_simple($liens,$max=0,$partage=true,$hub_infos=false)
{//liste simplement les derniers liens d'un hub / flux
$html="<ul class='liste_liens'>";$i=0;
foreach($liens as $lien)
{
if(($max!=0)&&($i>=$max))
break;
if(isset($lien["designation"]))
$lien["ancre"]=$lien["designation"];
$rel="rel='nofollow' ";
if(!empty($lien["auteur_id"]))
{// si une annonce a été saisie, on reste sur le site
$post=new FclFlux_post();
$post->id_post=$lien["id_post"];
$post_infos=$post->get_infos_cache(true);
if(!empty($post_infos["annonce"]))
{
$lien["url"]=PAGE_REPERTOIRE_POST_INFO.$post->id_post;
$rel="";
}
unset($post);
}
if(!empty($lien["url"]))
{
$source="";
if(($hub_infos==true)&&(!empty($lien["hub_id"])))
{
$hub_lien=new FclFlux_hub;
$hub_lien->id_hub=$lien["hub_id"];
$hub_infos=$hub_lien->get_infos_cache();
if(!empty($hub_infos))
$source="[".stripslashes($hub_infos["nom"])."] ";
}
$url=$lien["url"];
$html.="<li><span class='liste_item'>&bull;</span> $source".affiche_utf8(strip_tags(stripslashes($lien["ancre"])),UTF8_OK)." <a href='".$url."' target='_blank' class='btn btn-success btn-xs' $rel> + Lire la suite.</a>";
if($partage)
$html.=" <a rel='nofollow' href='https://www.facebook.com/sharer.php?u=".urlencode($url)."' target='_blank'><img src='".SITE_URL."/images/icones/facebook_icon.png' alt='Partager sur facebook' style='height:20px'></a> <a rel='nofollow' href='https://twitter.com/share?url=".urlencode($url)."&amp;text=".urlencode($lien["ancre"])."' target='_blank'><img src='".SITE_URL."/images/icones/twitter_icon.png' alt='Partager sur twitter' style='height:20px'></a> <a rel='nofollow' href='https://plus.google.com/share?url=".urlencode($url)."' target='_blank' ><img src='".SITE_URL."/images/icones/gplus_icon.png' alt='Partager sur G+' style='height:20px'></a>";
$html.="</li>";
$i++;
}
}
$html.="</ul>";
return $html;
}
///+++++++++++++ Divers... ++++++++++++++///
/**
* Fonction qui retourne l'adresse ip d'un visiteur
*
* @return adresse ip. false si erreur rencontrée.
*/
function getIp()
{
$ip="";
if(!empty($_SERVER['REMOTE_ADDR']))
$ip=$_SERVER['REMOTE_ADDR'];
elseif(!empty($_SERVER['HTTP_CLIENT_IP']))
$ip=$_SERVER['HTTP_CLIENT_IP'];
elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
if(!filter_var($ip,FILTER_VALIDATE_IP))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_IP."(IP : $ip)."));
return false;
}
else
{
return $ip;
}
}
/**
* Retourne le nombre de secondes entre 2 dates
*
* @param dates au format JJ/MM/AAAA
* @return nombre de secondes ou false si une erreur est rencontrée
* @author Fabrice PENHOËT
*/
function IntervalDates($date1,$date2)
{
if((preg_match(DATE_FORMAT_EREG,$date1)==0)||(preg_match(DATE_FORMAT_EREG,$date2)==0))
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_DATE_FORMAT));
return false;
}
$tDate1=explode("/",$date1);
$tDate2=explode("/",$date2);
$diff=mktime(0,0,0,$tDate2[1],$tDate2[0],$tDate2[2])-mktime(0,0,0,$tDate1[1],$tDate1[0],$tDate1[2]);
return $diff;
}
/**
* Fonction recherchant la ville pour une expression fournie
* recherche exacte sur le code postal et l'insee et approximative sur le nom de la ville
*
* @param la valeur recherchée, le nom du champ sur lequel recherché si souhaité
* @return la liste des villes correspondant si ok, false sinon
* @author Fabrice PENHOËT
*/
function get_villes($recherche,$champ="")
{
global $Bd;
if((isset_connexion(__FILE__,__LINE__)===false)) return false;
if(strlen($recherche)<3)
{
$ajout_journal=new journal_erreurs(array(__FILE__,__LINE__,ERREUR_PARAM_FORMAT));
return false;
}
if(empty($champ))
{
$recherche_like="%".str_replace("-","%",str_replace(" ","%",$recherche))."%";
$prepare=$Bd->prepare("SELECT insee,cp,nom,dep_num,region_nom FROM villes WHERE cp=:valeur OR nom LIKE :valeur2 ORDER BY nom;");
$recherche=$prepare->execute(array(":valeur"=>$recherche,":valeur2"=>$recherche_like));
}
else
{
$prepare=$Bd->prepare("SELECT insee,cp,nom,dep_num,region_nom FROM villes WHERE $champ=:valeur ORDER BY nom;");
$recherche=$prepare->execute(array(":valeur"=>$recherche));
}
if((test_requete(__FILE__,__LINE__,$recherche,$prepare)===false)) return false;
$villes=$prepare->fetchAll();
$prepare=null;
if(!empty($villes))
return $villes;
else
return false;
}