808 lines
27 KiB
PHP
Executable File
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'>×</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'>•</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"]."&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'>•</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)."&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;
|
|
}
|