/config/fonctions.php
PHP | 443 lines | 287 code | 37 blank | 119 comment | 53 complexity | 8d65e5151f9c0e01dc03b1459562e866 MD5 | raw file
- <?php
- function nul(){}
- /***********************************************************************************
- * DATES ET HEURES
- ***********************************************************************************/
- /**
- * Retourne au mieux le timestamp d'une date au format inconnu
- */
- function timestamp($date, $alternative = 864000 ) {
- // cas du 30/01/2009 ou du 29-3-09 remplacé en aa/mm/jj
- if (ereg ("^([0-9]{1,2})[-/]([0-9]{1,2})[-/]([0-9]{2,4})$", $date, $regs)) {
- // Cas du date en aa passé en 20aa
- $regs[3] = (strlen($regs[3])==2?2000+$regs[3]:$regs[3]);
- $date = $regs[3].'/'.$regs[2].'/'.$regs[1];
- }
- if (($timestamp = strtotime($date)) === false or $timestamp == -1) {
- if (is_numeric($date)) { // cas d'un timestamp
- $timestamp = $date;
- }
- // Cas ou le format de la date n'est pas reconnu
- else $timestamp = time() - $alternative;
- }
- return $timestamp;
- }
- /**
- * Affiche une date littéralement ? partir d'un timespamp
- * Renvoie la date sous la forme "jour n° du jour mois année" en français
- */
- function textDate($stamp)
- {
- //
- $Jour = array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi");
- $Mois = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Ao?t","Septembre","Octobre","Novembre","Décembre");
- $datefr = $Jour[date("w",$stamp)]." ".date("d",$stamp)." ".$Mois[date("n",$stamp)]." ".date("Y",$stamp);
- return $datefr;
- }
- /**
- * Formate une date pour un affichage
- * @param string $date (format sql DATE ou DATETIME)
- * @return string
- */
- function formateDate($date)
- {
- $timestamp = strtotime($date);
- if (!$timestamp or $timestamp == -1)
- return false;
- if (strlen($date) == 10)
- $date = date('d/m/Y', $timestamp);
- elseif (strlen($date) == 19)
- $date = date('d/m/Y H:i:s', $timestamp);
- else return false;
- return $date;
- }
- function formateHeure($date)
- {
- // renvoi hh:ii:ss a partir de YYYY-mm-jj HH:ii:ss ou de HH:ii:ss
- if ($date==0){
- return '';
- }
- if ( strlen($date)>8 ){
- $date = substr($date,11,8);
- }
- $tableau = explode(":",$date);
- // on formate
- $heure =$tableau[0];
- $minute = $tableau[1];
- $seconde = $tableau[2];
- return $heure."h".$minute;
- }
- /**
- * Formate une date pour un stockage
- * Renvoi YYYY-mm-jj HH:ii:ss a partir de jj/mm/aaaa HH:MM:SS ou jj/mm/aaaa
- * @param string $date
- * @return string (format sql DATE ou DATETIME)
- */
- function formateDateStocke($date)
- {
- $date=trim($date);
- if ( strlen($date)!=19 and strlen($date)!=10 ){
- return false;
- }
- // On extrait
- $jour = substr($date,0,2);
- $mois = substr($date,3,2);
- substr($date,6,4);
-
- $date=trim($date);
-
- // On extrait
- $jour = substr($date,0,2);
- $mois = substr($date,3,2);
- $annee = substr($date,6,4);
- $date = substr_replace($date, $annee.'-'.$mois.'-'.$jour, 0);
- return $date;
- }
- function formateHeureStocke($str)
- {
- // renvoi HH:ii:ss a partir de hh:mm
- $str=trim($str);
- if ( strlen($str)!=5 ){
- return '';
- }
-
- // On extrait
- $heure= substr($str,0,2);
- $min = substr($str,3,2);
- $sec='00';
- return $heure.":".$min.":".$sec ;
- }
- /***********************************************************************************
- * EMAIL
- ***********************************************************************************/
- /**
- * Envoie d'un mail simple
- * @param string $to - email de destination
- * @param string $fromname - Nom de l'expéditeur
- * @param string $from - Email de l'expéditeur
- * @param string $subject - objet
- * @param string $message
- * @return bool
- */
- function sendMail($to,$fromname='',$from='',$subject='',$message='')
- {
- if (!empty($to))
- {
- $headers = "From: \"$fromname\"<$from>\n";
- $headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
- $headers .= "Content-Transfer-Encoding: 8bit";
-
- $result = mail($to, $subject, $message, $headers)
- or trigger_error('<<< Error Mail. The mail isn\'t successfully accepted for delivery >>>', E_USER_WARNING);
- return $result;
- }
- else {
- trigger_error('<<< Error Mail. The variable receivers of the mail is empty >>>', E_USER_WARNING);
- return false;
- }
- }
- /**
- * Evite au robot de ne pas spamer une boite mail
- * @param string $email
- * @return string
- * @desc <a href="mailto:xxxx%40laposte%2Enet" ><span>xxxx</span>@<span>laposte.net</span></a>
- */
- function mailAntiSpam($email)
- {
- $email1 = str_replace('@','%40',$email);
- $email1 = str_replace('.','%2E',$email1);
- $email2 = str_replace('@','</span>@<span>',$email);
- $email = '<a href="mailto:'.$email.'"><span>'.$email.'</span></a>';
- return $email;
- }
- /***********************************************************************************
- * PAGINATION
- ***********************************************************************************/
- /**
- * PAGINATION sous la forme << < x y z > >>
- * Parametres :
- * - $page : page en cours
- * - $Nbpages : nb total de pages
- * - $param : autres param?tres ? passer en get, sans le 1er &
- * NB_PAGES_AFFICHE : constante donnant le nbre de pages ? affichere dans la nav. Tjrs impair
- */
- function pagination($page,$nbpages,$nbliens=5,$param='') {
- $pagination = false;
- $page=empty($page) ? 1 : $page; // au cas o?...
- if ($nbpages==1 or empty($nbpages)){return;}
- // Autres param?tres
- $param = $param!='' ? '&'.$param : '';
- $avant=$apres=floor($nbliens/2);
- //echo "Page : $page - Nbpages : $Nbpages - param : $param<br>";
- //echo "first : $first - last : $last<br>";
-
- // Calcul premi?re et derni?re page ? afficher
- if ($nbpages>$avant+$apres) {
- if ($page>$avant+1) {
- if ( $page+$apres>$nbpages ) {
- $last = $nbpages;
- $first = $last-($avant+$apres);
- } else {
- $last = $page+$apres;
- $first = $page-$avant;
- }
- } else {
- if ( $page-$avant<1 ) {
- $first = 1;
- $last = $first+($avant+$apres);
- } else {
- $last = $page+$apres;
- $first = $page-$avant;
- }
- }
- } else {
- $first = 1;
- $last = $nbpages;
- }
- // Précédente et suivante
- $precedente=$page>1 ? $page-1 : 1;
- $suivante=$page<$nbpages ? $page+1 : $nbpages;
- if ($page>1) {
- $pagination .= '<a href="?page=1'.$param.'" title="Première page">«</a>';
- $pagination .= '<a href="?page='.$precedente.$param.'" title="Page précédente">‹</a>';
- }
- $first = $first==0 ? $page : $first;
- $last = $last==0 ? $page : $last;
- for ($i=$first; $i<=$last ; $i++) {
- $pagination .= $i==$page ? '<strong>'.$i.'</strong>' : '<a href="?page='.$i.$param.'">'.$i.'</a>';
- }
- if ($page<$nbpages) {
- $pagination .= '<a href="?page='.$suivante.$param.'" title="Page suivante">›</a>';
- $pagination .= '<a href="?page='.$nbpages.$param.'" title="Dernière page">»</a>';
- }
- return $pagination;
- }
- /**
- * Préparation requete + pagination
- * @param string $champs : champs de la requete séparé par des virgules
- * @param string $table : liste des différentes tables
- * @param string $tri : champs utilisé par ORDER BY
- * @param string $champ_filtre : champs du filtre. Pour filtrer par exemple une rubrique
- * @param array $champ_mot : champs ou la recherche sera effectué
- * @param string $ordre DESC ou ASC
- * @param string $where Pour les jointure par exemple
- * @return array -
- * @desc Permet d'afficher des listes provenant d'une base, avec pagination, recherche, tri et filtre
- */
- function listeRequete($champs, $table, $tri, $champ_filtre="", $champ_mot=array(), $ordre="DESC", $where="", $param='') {
- GLOBAL $db, $ADMINISTRATION;
-
- $requete_where = false;
- if (isset($ADMINISTRATION)) {
- $NBPP = NBPP_ADMIN;
- $NB_LIENS = NB_LIENS_ADMIN;
- }
- else {
- $NBPP = NBPP_SITE;
- $NB_LIENS = NB_LIENS_SITE;
- }
-
- if (!isset($_REQUEST['tri'])) $_REQUEST['tri'] = false;
- if (!isset($_REQUEST['page'])) $_REQUEST['page'] = false;
- if (!isset($_REQUEST['mot'])) $_REQUEST['mot'] = false;
- if (!isset($_REQUEST['filtre'])) $_REQUEST['filtre'] = false;
-
- if ( !empty($_REQUEST['page']) AND (isset($_SESSION[SCRIPT])) ) {
- // Navigation par page
- $page = $_REQUEST['page'];
- $requete = $_SESSION[SCRIPT]['REQUETE'];
- $tri= $_SESSION[SCRIPT]['TRI'];
- } else {
- $page=1;
- $requete = "SELECT ".$champs." FROM ".$table;
- // WHERE
- $suite=' WHERE ';
- // where
- if ( !empty($where) ) {
- $requete_where = $suite.$where;
- $suite=' AND ';
- }
- // Filtre
- if ( !empty($_REQUEST['filtre']) ) {
- $requete_where .= $suite.$champ_filtre." = '".$db->escape($_REQUEST['filtre'])."'";
- $suite=' AND ';
- }
- // Recherche mot clé
- if ( !empty($_REQUEST['mot']) ) {
- $suite .= ' (';
- foreach ($champ_mot as $value) {
- $requete_where .= $suite.$value." LIKE '%".$db->escape($_REQUEST['mot'])."%'";
- $suite=' OR ';
- }
- $requete_where .= ') ';
- $suite=' AND ';
- }
- $requete .= $requete_where;
- // TRI
- if ( !empty($_REQUEST['tri']) ) {
- //Tri demandé sur une colonne
- $tri = $_REQUEST['tri'];
- $requete .= " ORDER BY ".$db->escape($_REQUEST['tri']);
- $_SESSION[SCRIPT]['ORDRE'] = $_SESSION[SCRIPT]['ORDRE']=='DESC' ? 'ASC' : 'DESC';
- $requete .= " ".$_SESSION[SCRIPT]['ORDRE'];
- } else {
- // Nouvelle requete par défaut (sans tri particulier)
- $_SESSION[SCRIPT]['ORDRE'] = $ordre;
- $requete .= " ORDER BY ".$tri." ".$ordre;
- }
- }
- // Fin préparation requete
-
- // Stockage requete complete
- $_SESSION[SCRIPT]['REQUETE'] = $requete;
- $_SESSION[SCRIPT]['PAGE'] = $page;
- $_SESSION[SCRIPT]['TRI'] = $_REQUEST['tri'];
-
- // Préparation gestion de page
- $result = $db->query('SELECT COUNT(*) FROM '.$table.' '.$requete_where);
- $nbtotal = $db->fetch_assoc($result);
- $nbtotal = $nbtotal['COUNT(*)'];
- $nbpages = ceil($nbtotal / $NBPP);
-
- $de=($_SESSION[SCRIPT]['PAGE']-1)*$NBPP;
-
- // Fin de la requete définitive
- $requete .= " LIMIT ".$de.",".$NBPP;
- $result = $db->query($requete);
- $pagination = Pagination($page,$nbpages,$NB_LIENS,'tri='.$_REQUEST['tri'].'&filtre='.$_REQUEST['filtre'].$param);
-
- $feedback['pagination'] = $pagination?'<p class="pagination">'.$pagination.'</p>':'';
- $feedback['nbtotal'] = $nbtotal;
- $feedback['result'] = $result;
- $feedback['tri'] = $tri;
- $feedback['filtre'] = $_REQUEST['filtre'];
- $feedback['page'] = $page;
- $feedback['requete'] = $requete;
-
- return $feedback;
- }
- /***********************************************************************************
- * FONCTIONS DIVERSES
- ***********************************************************************************/
- /**
- * Vérifie si l'utilisateur ? le bon droit
- * @param string $droit
- * @return bool
- */
- function isDroit($erreur)
- {
- if (in_array("admin",$_SESSION['USER']['droits']) or in_array($erreur,$_SESSION['USER']['droits']))
- return true;
-
- return false;
- }
- /**
- * Redirection
- */
- function redirect($chemin)
- {
- header("location: ".$chemin);
- exit();
- }
- /**
- * Creation de mot de passe aleatoire d'une longeur donnee
- */
- function getPass($nbcaracteres)
- {
- $pass= '';
- $caracterespossibles = "abcdefghijklmnopqrstuvwxyzABDEFCDEFGHIJKMNPQRSTUVWXY0123456789"; // liste des caractères que l'on peut utiliser <br />
- srand((double)microtime()*1000000);
- for($i=0; $i<$nbcaracteres; $i++)
- {
- $pass .= $caracterespossibles[rand()%strlen($caracterespossibles)];
- }
- return $pass;
- }
- /**
- * Formattage d'un nombre
- * - $nul = "n" --> renvoie si 0
- * - $num !="n" --> renvoie 0 si 0
- */
- function formatNombre($val, $decim=2, $nul="n", $mille="",$car="",$virg=".") {
- if ( $val ==0 && $nul != "o") {
- return "";
- }
- $val = str_replace( "," , "." , $val );
- return number_format ($val, $decim, $virg, $mille).$car ;
- }
- /**
- * Tronque une chaine sans césure de mot, au caract?re $longeur_max
- */
- function TronquerTexte($texte, $longeur_max=100)
- {
- if (strlen($texte) > $longeur_max)
- {
- $texte = substr($texte, 0, $longeur_max);
- $dernier_espace = strrpos($texte, " ");
- $texte = substr($texte, 0, $dernier_espace)."...";
- }
- return $texte;
- }
- /**
- * Affiche le message de confirmation ou les message d'erreurs
- * @param string $mess_confir
- * @param array $mess_erreur
- * @return string - Message d'erreur et de confirmation formatés html
- * @desc Récupére aussi la variable $_REQUEST.
- * $mess_confir écrase $_REQUEST['CONFIRMATION']
- */
- function afficheMessage($mess_confir, $mess_erreur)
- {
- if (isset($_REQUEST['CONFIRMATION']) or $mess_confir) {
- $mess_confir = ($mess_confir?$mess_confir:htmlspecialchars($_REQUEST['CONFIRMATION']));
- ?>
- <div class="confirmation">
- <p><?php echo $mess_confir ?></p>
- </div>
- <?php
- unset($_REQUEST['CONFIRMATION']);
- }
- if (isset($_REQUEST['ERREUR']) or $mess_erreur) {
- if (isset($_REQUEST['ERREUR']) and $mess_erreur)
- $mess_erreur = array_merge($mess_erreur, $_REQUEST['ERREUR']);
- else
- $mess_erreur = (isset($_REQUEST['ERREUR'])?htmlspecialchars($_REQUEST['ERREUR']):$mess_erreur);
- if (!is_array($mess_erreur))
- $mess_erreur = array($mess_erreur);
- ?>
- <div class="attention">
- <p><strong>Erreurs :</strong></p>
- <ul>
- <?php
- foreach ($mess_erreur as $key => $value)
- echo '<li>'.$value.(!is_int($key) ? '<a href="#'.$key.'"><img src="'.URL.'administration/images/bullet_arrow_down.png" alt="go" /></a>' : '').'</li>';
- ?>
- </ul>
- </div>
- <?php
- unset($_REQUEST['ERREUR']);
- }
- }
- ?>