PageRenderTime 29ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/config/fonctions.php

https://code.google.com/
PHP | 443 lines | 287 code | 37 blank | 119 comment | 53 complexity | 8d65e5151f9c0e01dc03b1459562e866 MD5 | raw file
  1. <?php
  2. function nul(){}
  3. /***********************************************************************************
  4. * DATES ET HEURES
  5. ***********************************************************************************/
  6. /**
  7. * Retourne au mieux le timestamp d'une date au format inconnu
  8. */
  9. function timestamp($date, $alternative = 864000 ) {
  10. // cas du 30/01/2009 ou du 29-3-09 remplacé en aa/mm/jj
  11. if (ereg ("^([0-9]{1,2})[-/]([0-9]{1,2})[-/]([0-9]{2,4})$", $date, $regs)) {
  12. // Cas du date en aa passé en 20aa
  13. $regs[3] = (strlen($regs[3])==2?2000+$regs[3]:$regs[3]);
  14. $date = $regs[3].'/'.$regs[2].'/'.$regs[1];
  15. }
  16. if (($timestamp = strtotime($date)) === false or $timestamp == -1) {
  17. if (is_numeric($date)) { // cas d'un timestamp
  18. $timestamp = $date;
  19. }
  20. // Cas ou le format de la date n'est pas reconnu
  21. else $timestamp = time() - $alternative;
  22. }
  23. return $timestamp;
  24. }
  25. /**
  26. * Affiche une date littéralement ? partir d'un timespamp
  27. * Renvoie la date sous la forme "jour n° du jour mois année" en français
  28. */
  29. function textDate($stamp)
  30. {
  31. //
  32. $Jour = array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi");
  33. $Mois = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Ao?t","Septembre","Octobre","Novembre","Décembre");
  34. $datefr = $Jour[date("w",$stamp)]." ".date("d",$stamp)." ".$Mois[date("n",$stamp)]." ".date("Y",$stamp);
  35. return $datefr;
  36. }
  37. /**
  38. * Formate une date pour un affichage
  39. * @param string $date (format sql DATE ou DATETIME)
  40. * @return string
  41. */
  42. function formateDate($date)
  43. {
  44. $timestamp = strtotime($date);
  45. if (!$timestamp or $timestamp == -1)
  46. return false;
  47. if (strlen($date) == 10)
  48. $date = date('d/m/Y', $timestamp);
  49. elseif (strlen($date) == 19)
  50. $date = date('d/m/Y H:i:s', $timestamp);
  51. else return false;
  52. return $date;
  53. }
  54. function formateHeure($date)
  55. {
  56. // renvoi hh:ii:ss a partir de YYYY-mm-jj HH:ii:ss ou de HH:ii:ss
  57. if ($date==0){
  58. return '';
  59. }
  60. if ( strlen($date)>8 ){
  61. $date = substr($date,11,8);
  62. }
  63. $tableau = explode(":",$date);
  64. // on formate
  65. $heure =$tableau[0];
  66. $minute = $tableau[1];
  67. $seconde = $tableau[2];
  68. return $heure."h".$minute;
  69. }
  70. /**
  71. * Formate une date pour un stockage
  72. * Renvoi YYYY-mm-jj HH:ii:ss a partir de jj/mm/aaaa HH:MM:SS ou jj/mm/aaaa
  73. * @param string $date
  74. * @return string (format sql DATE ou DATETIME)
  75. */
  76. function formateDateStocke($date)
  77. {
  78. $date=trim($date);
  79. if ( strlen($date)!=19 and strlen($date)!=10 ){
  80. return false;
  81. }
  82. // On extrait
  83. $jour = substr($date,0,2);
  84. $mois = substr($date,3,2);
  85. substr($date,6,4);
  86. $date=trim($date);
  87. // On extrait
  88. $jour = substr($date,0,2);
  89. $mois = substr($date,3,2);
  90. $annee = substr($date,6,4);
  91. $date = substr_replace($date, $annee.'-'.$mois.'-'.$jour, 0);
  92. return $date;
  93. }
  94. function formateHeureStocke($str)
  95. {
  96. // renvoi HH:ii:ss a partir de hh:mm
  97. $str=trim($str);
  98. if ( strlen($str)!=5 ){
  99. return '';
  100. }
  101. // On extrait
  102. $heure= substr($str,0,2);
  103. $min = substr($str,3,2);
  104. $sec='00';
  105. return $heure.":".$min.":".$sec ;
  106. }
  107. /***********************************************************************************
  108. * EMAIL
  109. ***********************************************************************************/
  110. /**
  111. * Envoie d'un mail simple
  112. * @param string $to - email de destination
  113. * @param string $fromname - Nom de l'expéditeur
  114. * @param string $from - Email de l'expéditeur
  115. * @param string $subject - objet
  116. * @param string $message
  117. * @return bool
  118. */
  119. function sendMail($to,$fromname='',$from='',$subject='',$message='')
  120. {
  121. if (!empty($to))
  122. {
  123. $headers = "From: \"$fromname\"<$from>\n";
  124. $headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  125. $headers .= "Content-Transfer-Encoding: 8bit";
  126. $result = mail($to, $subject, $message, $headers)
  127. or trigger_error('<<< Error Mail. The mail isn\'t successfully accepted for delivery >>>', E_USER_WARNING);
  128. return $result;
  129. }
  130. else {
  131. trigger_error('<<< Error Mail. The variable receivers of the mail is empty >>>', E_USER_WARNING);
  132. return false;
  133. }
  134. }
  135. /**
  136. * Evite au robot de ne pas spamer une boite mail
  137. * @param string $email
  138. * @return string
  139. * @desc <a href="mailto:xxxx%40laposte%2Enet" ><span>xxxx</span>&#64;<span>laposte.net</span></a>
  140. */
  141. function mailAntiSpam($email)
  142. {
  143. $email1 = str_replace('@','%40',$email);
  144. $email1 = str_replace('.','%2E',$email1);
  145. $email2 = str_replace('@','</span>&#64;<span>',$email);
  146. $email = '<a href="mailto:'.$email.'"><span>'.$email.'</span></a>';
  147. return $email;
  148. }
  149. /***********************************************************************************
  150. * PAGINATION
  151. ***********************************************************************************/
  152. /**
  153. * PAGINATION sous la forme << < x y z > >>
  154. * Parametres :
  155. * - $page : page en cours
  156. * - $Nbpages : nb total de pages
  157. * - $param : autres param?tres ? passer en get, sans le 1er &
  158. * NB_PAGES_AFFICHE : constante donnant le nbre de pages ? affichere dans la nav. Tjrs impair
  159. */
  160. function pagination($page,$nbpages,$nbliens=5,$param='') {
  161. $pagination = false;
  162. $page=empty($page) ? 1 : $page; // au cas o?...
  163. if ($nbpages==1 or empty($nbpages)){return;}
  164. // Autres param?tres
  165. $param = $param!='' ? '&amp;'.$param : '';
  166. $avant=$apres=floor($nbliens/2);
  167. //echo "Page : $page - Nbpages : $Nbpages - param : $param<br>";
  168. //echo "first : $first - last : $last<br>";
  169. // Calcul premi?re et derni?re page ? afficher
  170. if ($nbpages>$avant+$apres) {
  171. if ($page>$avant+1) {
  172. if ( $page+$apres>$nbpages ) {
  173. $last = $nbpages;
  174. $first = $last-($avant+$apres);
  175. } else {
  176. $last = $page+$apres;
  177. $first = $page-$avant;
  178. }
  179. } else {
  180. if ( $page-$avant<1 ) {
  181. $first = 1;
  182. $last = $first+($avant+$apres);
  183. } else {
  184. $last = $page+$apres;
  185. $first = $page-$avant;
  186. }
  187. }
  188. } else {
  189. $first = 1;
  190. $last = $nbpages;
  191. }
  192. // Précédente et suivante
  193. $precedente=$page>1 ? $page-1 : 1;
  194. $suivante=$page<$nbpages ? $page+1 : $nbpages;
  195. if ($page>1) {
  196. $pagination .= '<a href="?page=1'.$param.'" title="Premi&egrave;re page">&laquo;</a>';
  197. $pagination .= '<a href="?page='.$precedente.$param.'" title="Page précédente">&#8249;</a>';
  198. }
  199. $first = $first==0 ? $page : $first;
  200. $last = $last==0 ? $page : $last;
  201. for ($i=$first; $i<=$last ; $i++) {
  202. $pagination .= $i==$page ? '<strong>'.$i.'</strong>' : '<a href="?page='.$i.$param.'">'.$i.'</a>';
  203. }
  204. if ($page<$nbpages) {
  205. $pagination .= '<a href="?page='.$suivante.$param.'" title="Page suivante">&#8250;</a>';
  206. $pagination .= '<a href="?page='.$nbpages.$param.'" title="Derni&egrave;re page">&raquo;</a>';
  207. }
  208. return $pagination;
  209. }
  210. /**
  211. * Préparation requete + pagination
  212. * @param string $champs : champs de la requete séparé par des virgules
  213. * @param string $table : liste des différentes tables
  214. * @param string $tri : champs utilisé par ORDER BY
  215. * @param string $champ_filtre : champs du filtre. Pour filtrer par exemple une rubrique
  216. * @param array $champ_mot : champs ou la recherche sera effectué
  217. * @param string $ordre DESC ou ASC
  218. * @param string $where Pour les jointure par exemple
  219. * @return array -
  220. * @desc Permet d'afficher des listes provenant d'une base, avec pagination, recherche, tri et filtre
  221. */
  222. function listeRequete($champs, $table, $tri, $champ_filtre="", $champ_mot=array(), $ordre="DESC", $where="", $param='') {
  223. GLOBAL $db, $ADMINISTRATION;
  224. $requete_where = false;
  225. if (isset($ADMINISTRATION)) {
  226. $NBPP = NBPP_ADMIN;
  227. $NB_LIENS = NB_LIENS_ADMIN;
  228. }
  229. else {
  230. $NBPP = NBPP_SITE;
  231. $NB_LIENS = NB_LIENS_SITE;
  232. }
  233. if (!isset($_REQUEST['tri'])) $_REQUEST['tri'] = false;
  234. if (!isset($_REQUEST['page'])) $_REQUEST['page'] = false;
  235. if (!isset($_REQUEST['mot'])) $_REQUEST['mot'] = false;
  236. if (!isset($_REQUEST['filtre'])) $_REQUEST['filtre'] = false;
  237. if ( !empty($_REQUEST['page']) AND (isset($_SESSION[SCRIPT])) ) {
  238. // Navigation par page
  239. $page = $_REQUEST['page'];
  240. $requete = $_SESSION[SCRIPT]['REQUETE'];
  241. $tri= $_SESSION[SCRIPT]['TRI'];
  242. } else {
  243. $page=1;
  244. $requete = "SELECT ".$champs." FROM ".$table;
  245. // WHERE
  246. $suite=' WHERE ';
  247. // where
  248. if ( !empty($where) ) {
  249. $requete_where = $suite.$where;
  250. $suite=' AND ';
  251. }
  252. // Filtre
  253. if ( !empty($_REQUEST['filtre']) ) {
  254. $requete_where .= $suite.$champ_filtre." = '".$db->escape($_REQUEST['filtre'])."'";
  255. $suite=' AND ';
  256. }
  257. // Recherche mot clé
  258. if ( !empty($_REQUEST['mot']) ) {
  259. $suite .= ' (';
  260. foreach ($champ_mot as $value) {
  261. $requete_where .= $suite.$value." LIKE '%".$db->escape($_REQUEST['mot'])."%'";
  262. $suite=' OR ';
  263. }
  264. $requete_where .= ') ';
  265. $suite=' AND ';
  266. }
  267. $requete .= $requete_where;
  268. // TRI
  269. if ( !empty($_REQUEST['tri']) ) {
  270. //Tri demandé sur une colonne
  271. $tri = $_REQUEST['tri'];
  272. $requete .= " ORDER BY ".$db->escape($_REQUEST['tri']);
  273. $_SESSION[SCRIPT]['ORDRE'] = $_SESSION[SCRIPT]['ORDRE']=='DESC' ? 'ASC' : 'DESC';
  274. $requete .= " ".$_SESSION[SCRIPT]['ORDRE'];
  275. } else {
  276. // Nouvelle requete par défaut (sans tri particulier)
  277. $_SESSION[SCRIPT]['ORDRE'] = $ordre;
  278. $requete .= " ORDER BY ".$tri." ".$ordre;
  279. }
  280. }
  281. // Fin préparation requete
  282. // Stockage requete complete
  283. $_SESSION[SCRIPT]['REQUETE'] = $requete;
  284. $_SESSION[SCRIPT]['PAGE'] = $page;
  285. $_SESSION[SCRIPT]['TRI'] = $_REQUEST['tri'];
  286. // Préparation gestion de page
  287. $result = $db->query('SELECT COUNT(*) FROM '.$table.' '.$requete_where);
  288. $nbtotal = $db->fetch_assoc($result);
  289. $nbtotal = $nbtotal['COUNT(*)'];
  290. $nbpages = ceil($nbtotal / $NBPP);
  291. $de=($_SESSION[SCRIPT]['PAGE']-1)*$NBPP;
  292. // Fin de la requete définitive
  293. $requete .= " LIMIT ".$de.",".$NBPP;
  294. $result = $db->query($requete);
  295. $pagination = Pagination($page,$nbpages,$NB_LIENS,'tri='.$_REQUEST['tri'].'&amp;filtre='.$_REQUEST['filtre'].$param);
  296. $feedback['pagination'] = $pagination?'<p class="pagination">'.$pagination.'</p>':'';
  297. $feedback['nbtotal'] = $nbtotal;
  298. $feedback['result'] = $result;
  299. $feedback['tri'] = $tri;
  300. $feedback['filtre'] = $_REQUEST['filtre'];
  301. $feedback['page'] = $page;
  302. $feedback['requete'] = $requete;
  303. return $feedback;
  304. }
  305. /***********************************************************************************
  306. * FONCTIONS DIVERSES
  307. ***********************************************************************************/
  308. /**
  309. * Vérifie si l'utilisateur ? le bon droit
  310. * @param string $droit
  311. * @return bool
  312. */
  313. function isDroit($erreur)
  314. {
  315. if (in_array("admin",$_SESSION['USER']['droits']) or in_array($erreur,$_SESSION['USER']['droits']))
  316. return true;
  317. return false;
  318. }
  319. /**
  320. * Redirection
  321. */
  322. function redirect($chemin)
  323. {
  324. header("location: ".$chemin);
  325. exit();
  326. }
  327. /**
  328. * Creation de mot de passe aleatoire d'une longeur donnee
  329. */
  330. function getPass($nbcaracteres)
  331. {
  332. $pass= '';
  333. $caracterespossibles = "abcdefghijklmnopqrstuvwxyzABDEFCDEFGHIJKMNPQRSTUVWXY0123456789"; // liste des caract&egrave;res que l'on peut utiliser <br />
  334. srand((double)microtime()*1000000);
  335. for($i=0; $i<$nbcaracteres; $i++)
  336. {
  337. $pass .= $caracterespossibles[rand()%strlen($caracterespossibles)];
  338. }
  339. return $pass;
  340. }
  341. /**
  342. * Formattage d'un nombre
  343. * - $nul = "n" --> renvoie &nbsp; si 0
  344. * - $num !="n" --> renvoie 0 si 0
  345. */
  346. function formatNombre($val, $decim=2, $nul="n", $mille="",$car="",$virg=".") {
  347. if ( $val ==0 && $nul != "o") {
  348. return "";
  349. }
  350. $val = str_replace( "," , "." , $val );
  351. return number_format ($val, $decim, $virg, $mille).$car ;
  352. }
  353. /**
  354. * Tronque une chaine sans césure de mot, au caract?re $longeur_max
  355. */
  356. function TronquerTexte($texte, $longeur_max=100)
  357. {
  358. if (strlen($texte) > $longeur_max)
  359. {
  360. $texte = substr($texte, 0, $longeur_max);
  361. $dernier_espace = strrpos($texte, " ");
  362. $texte = substr($texte, 0, $dernier_espace)."...";
  363. }
  364. return $texte;
  365. }
  366. /**
  367. * Affiche le message de confirmation ou les message d'erreurs
  368. * @param string $mess_confir
  369. * @param array $mess_erreur
  370. * @return string - Message d'erreur et de confirmation formatés html
  371. * @desc Récupére aussi la variable $_REQUEST.
  372. * $mess_confir écrase $_REQUEST['CONFIRMATION']
  373. */
  374. function afficheMessage($mess_confir, $mess_erreur)
  375. {
  376. if (isset($_REQUEST['CONFIRMATION']) or $mess_confir) {
  377. $mess_confir = ($mess_confir?$mess_confir:htmlspecialchars($_REQUEST['CONFIRMATION']));
  378. ?>
  379. <div class="confirmation">
  380. <p><?php echo $mess_confir ?></p>
  381. </div>
  382. <?php
  383. unset($_REQUEST['CONFIRMATION']);
  384. }
  385. if (isset($_REQUEST['ERREUR']) or $mess_erreur) {
  386. if (isset($_REQUEST['ERREUR']) and $mess_erreur)
  387. $mess_erreur = array_merge($mess_erreur, $_REQUEST['ERREUR']);
  388. else
  389. $mess_erreur = (isset($_REQUEST['ERREUR'])?htmlspecialchars($_REQUEST['ERREUR']):$mess_erreur);
  390. if (!is_array($mess_erreur))
  391. $mess_erreur = array($mess_erreur);
  392. ?>
  393. <div class="attention">
  394. <p><strong>Erreurs :</strong></p>
  395. <ul>
  396. <?php
  397. foreach ($mess_erreur as $key => $value)
  398. echo '<li>'.$value.(!is_int($key) ? '<a href="#'.$key.'"><img src="'.URL.'administration/images/bullet_arrow_down.png" alt="go" /></a>' : '').'</li>';
  399. ?>
  400. </ul>
  401. </div>
  402. <?php
  403. unset($_REQUEST['ERREUR']);
  404. }
  405. }
  406. ?>