assign('debug',isset($GLOBALS['debug']) ? $GLOBALS['debug'] : false);
$GLOBALS['smarty'] -> assign('errors',isset($GLOBALS['errors']) ? $GLOBALS['errors'] : false);
$GLOBALS['smarty'] -> assign('gitVS',getGitVersion());
$GLOBALS['smarty'] -> assign('jsFiles',$GLOBALS['jsFiles']);
$GLOBALS['smarty'] -> assign('cssFiles',$GLOBALS['cssFiles']);
$GLOBALS['smarty'] -> display($GLOBALS['template']);
die();
}
// DEBUG & ERRORS //
$GLOBALS['debug'] = array();
function addDebug($var,$label='') {
$txt = '';
if($label!='') {
$txt = $label.' : ';
}
if(is_array($var)) {
$GLOBALS['debug'][] = $txt.afficheArray($var);
}
elseif(is_bool($var)) {
if($var) {
$GLOBALS['debug'][] = $txt.'true';
}
else {
$GLOBALS['debug'][] = $txt.'false';
}
}
else {
$GLOBALS['debug'][] = $txt.print_r($var,1);
}
}
$GLOBALS['errors'] = array();
function afficheArray($array,$echo=false,$indent=20,$displayType=false) {
if(!is_array($array)) return "NOT AN ARRAY !".(($echo) ? "
" : "");
$htmlTxt = "array(";
if(count($array)==0) return "array()";
foreach($array as $key => $val) {
$htmlTxt.="
";
$htmlTxt.= (is_string($key)) ? "'".$key."'" : $key;
$htmlTxt.= " = ";
$htmlTxt.= (is_array($val)) ? afficheArray($val, false, ($indent+20), false) : getReadableVar($val,$displayType);
$htmlTxt.= ",";
}
$htmlTxt = substr($htmlTxt,0,-8).'
';
$htmlTxt.=")";
if($echo) {
echo($htmlTxt."
");
return;
}
return $htmlTxt;
}
function getReadableVar($var,$displayType=false) {
$ret = "";
$type = "";
if(is_array($var)) { $type = "array"; $ret = afficheArray($var,false,20); }
elseif(is_bool($var)) { $type = "bool"; $ret = ($var) ? 'true' : 'false'; }
elseif(is_string($var) && $var=='') { $type = "string"; $ret = "Ø (empty string)"; }
elseif(is_string($var)) { $type = "string"; $ret = '"'.$var.'"'; }
elseif(is_null($var)) { $type = "null"; $ret = 'NULL'; }
elseif($var instanceof DateTime) { $type = "datetime"; $ret = $var->format('d/m/Y - H:i:s'); }
else { $type = gettype($var); $ret = print_r($var,1); }
if($displayType) return "[".$type."] : ".$ret;
return $ret;
}
function getGitVersion() {
exec('git describe --always',$version_mini_hash);
exec('git rev-list HEAD | wc -l',$version_number);
exec('git log -1',$line);
$version['short'] = "v1.".trim($version_number[0]).".".$version_mini_hash[0];
$version['full'] = "v1.".trim($version_number[0]).".$version_mini_hash[0] (".str_replace('commit ','',$line[0]).")";
return $version;
}
// FORMAT
function br2nl($string) {
return preg_replace('/\
/i', "", $string);
}
function orderListByKey($list, $key, $sens='ASC', $sort_type=SORT_REGULAR) {
$keyList = array();
$itemList = array();
foreach($list as $k => $i) {
$keyList[] = $k;
$itemList[] = $i[$key];
}
$sort_sens = ($sens=="ASC") ? SORT_ASC : SORT_DESC;
array_multisort($itemList, $sort_sens, $sort_type, $keyList);
$newList = array();
foreach($keyList as $k) {
$newList[] = $list[$k];
}
return $newList;
}
function strtoupperFirstLetter($str) {
if(strlen($str)==0) return $str;
return strtoupper(substr($str,0,1)).substr($str,1);
}
// DATE
function getTime($date,$moment='start',$format=DATE_FORMAT) { // Retourne un timestamp à partir d'une date jj/mm/aaaa
$infos = strptime($date,$format);
if (is_array($infos)) {
if ($moment=='start') {
return mktime(
'0',
'0',
'0',
($infos['tm_mon']+1),
$infos['tm_mday'],
(1900+$infos['tm_year'])
);
}
elseif ($moment=='end') {
return mktime(
'23',
'59',
'59',
($infos['tm_mon']+1),
$infos['tm_mday'],
(1900+$infos['tm_year'])
);
}
return mktime(
$infos['tm_hour'],
$infos['tm_min'],
$infos['tm_sec'],
($infos['tm_mon']+1),
$infos['tm_mday'],
(1900+$infos['tm_year'])
);
}
return NULL;
}
function getDateTxt($timestamp,$format=DATE_FORMAT) {
if ($timestamp==0) {
return '';
}
return strftime($format,(int)$timestamp);
}
$GLOBALS['PRINT_MOIS_COURT'] = array(
1 => 'janv.',
2 => 'fév.',
3 => 'mars',
4 => 'avril',
5 => 'mai',
6 => 'juin',
7 => 'juil.',
8 => 'août',
9 => 'sept.',
10 => 'oct.',
11 => 'nov.',
12 => 'déc.'
);
$GLOBALS['PRINT_MOIS'] = array(
1 => 'janvier',
2 => 'février',
3 => 'mars',
4 => 'avril',
5 => 'mai',
6 => 'juin',
7 => 'juillet',
8 => 'août',
9 => 'septembre',
10 => 'octobre',
11 => 'novembre',
12 => 'décembre'
);
$GLOBALS['PRINT_JOUR_INI'] = array(
0 => 'D.',
1 => 'L.',
2 => 'Ma.',
3 => 'Me.',
4 => 'J.',
5 => 'V.',
6 => 'S.'
);
$GLOBALS['PRINT_JOUR_COURT'] = array(
0 => 'dim.',
1 => 'lun.',
2 => 'mar.',
3 => 'mer.',
4 => 'jeu.',
5 => 'ven.',
6 => 'sam.'
);
$GLOBALS['PRINT_JOUR'] = array(
0 => 'dimanche',
1 => 'lundi',
2 => 'mardi',
3 => 'mercredi',
4 => 'jeudi',
5=> 'vendredi',
6 => 'samedi'
);
function checkDateFormat($date, $format = 'mysql_datetime', $default = NULL) {
if($default == "now") $default = formatDate('', $format);
return isValidDate($date, $format) ? $date : $default;
}
function isValidDate($date, $format = 'mysql_datetime') {
if(!$date || is_null($date)) return false;
$f = "Y-m-d";
switch($format) {
case 'date': $f = "d/m/Y"; break;
case 'datetime': $f = "d/m/Y - H:i"; break;
case 'mysql_date': $f = "Y-m-d"; break;
case 'mysql_datetime': $f = "Y-m-d H:i:s"; break;
case 'strdatetime': $f = "Y-m-d_H.i.s"; break;
default; $f = "Y-m-d";
}
$d = DateTime::createFromFormat($f, $date);
if($d && $d->format($f) == $date) return true;
return false;
}
function getRequestDate($name, $format="mysql_date") {
if(isset($_REQUEST[$name]) && $_REQUEST[$name]!="") return checkDateFormat($_REQUEST[$name], $format);
return NULL;
}
function buildDate($day = 0, $month = 0, $year = 0, $forceBuild = false, $default = NULL) {
$date = $default;
if((int)$year>0) {
$date = $year;
if((int)$month>0 && (int)$month<13) {
$date .= "-".sprintf("%02d", $month);
$nbJ = cal_days_in_month(CAL_GREGORIAN, $month, $year);
if((int)$day>0 && (int)$day<($nbJ+1)) {
$date .= "-".sprintf("%02d", $day);
}
else if($forceBuild) $date .= "-1";
}
else if($forceBuild) $date .= "-1-1";
}
return $date;
}
function buildDatePrint ($day = 0, $month = 0, $year = 0, $default = ".") {
$date = $default;
if((int)$year>0) {
$date = $year;
if((int)$month>0 && (int)$month<13) {
$date = $GLOBALS['PRINT_MOIS'][$month]." ".$date;
$nbJ = cal_days_in_month(CAL_GREGORIAN, $month, $year);
if((int)$day>0 && (int)$day<($nbJ+1)) {
$d = $year."-".sprintf("%02d", $month)."-".sprintf("%02d", $day);
$date = formatDate($d, 'mysql_date', 'print_date_with_day');
}
}
}
return $date;
}
function buildDatePrintShort ($day = 0, $month = 0, $year = 0, $default = ".") {
$date = $default;
if((int)$year>0) {
$date = $year;
if((int)$month>0 && (int)$month<13) {
$date = $GLOBALS['PRINT_MOIS'][$month]." ".$date;
$nbJ = cal_days_in_month(CAL_GREGORIAN, $month, $year);
if((int)$day>0 && (int)$day<($nbJ+1)) {
$d = $year."-".sprintf("%02d", $month)."-".sprintf("%02d", $day);
$date = formatDate($d, 'mysql_date', 'date');
}
}
}
return $date;
}
function checkExplodeDate($day = 0, $month = 0, $year = 0, $default = NULL) {
$r = array(
"day" => $default,
"month" => $default,
"year" => $default,
"date" => $default
);
if((int)$year>0 && $year<2101) {
$r["year"] = $year;
if((int)$month>0 && (int)$month<13) {
$r["month"] = $month;
$nbJ = cal_days_in_month(CAL_GREGORIAN, $month, $year);
if((int)$day>0 && (int)$day<($nbJ+1)) $r["day"] = $day;
}
}
$r['date'] = buildDate($r["day"], $r["month"], $r["year"], true);
return $r;
}
function formatDate($original='', $originalFormat="mysql_datetime", $destinationFormat="datetime", $moment=false) {
$infos = false;
if($original!='' && intVal($original)!=0) {
switch($originalFormat) {
case 'date':
$originalFormat = "%d/%m/%Y";
$infos = strptime($original,$originalFormat);
break;
case 'datetime':
$originalFormat = "%d/%m/%Y - %H:%M";
$infos = strptime($original,$originalFormat);
break;
case 'mysql_date':
$originalFormat = "%Y-%m-%d";
$infos = strptime($original,$originalFormat);
break;
case 'mysql_datetime':
$originalFormat = "%Y-%m-%d %H:%M:%S";
$infos = strptime($original,$originalFormat);
break;
case 'strdatetime':
$originalFormat = "%Y-%m-%d_%H.%M.%S";
$infos['tm_mday_week'] = sprintf("%02d", $infos['tm_mday']);
break;
case 'timestamp':
$infos = array(
'tm_hour' => date('G',$original),
'tm_min' => intval( date('i',$original) ),
'tm_sec' => intval( date('s',$original) ),
'tm_mday' => date('j',$original),
'tm_wday' => date('N',$original),
'tm_mon' => date('n',$original)-1,
'tm_year' => date('Y',$original)-1900
);
if($infos["tm_wday"]==7) $infos["tm_wday"] = 0;
//echo($original.' : '.$infos['tm_year'].' ');
break;
default;
$infos = strptime(strftime("%c"),"%c");
}
if($originalFormat=="date" || $originalFormat=="mysql_date" || ($moment=="start" || $moment=="end")) {
if($moment=="start") {
$infos['tm_hour'] = 0;
$infos['tm_min'] = 0;
$infos['tm_sec'] = 0;
}
else {
$infos['tm_hour'] = 23;
$infos['tm_min'] = 59;
$infos['tm_sec'] = 59;
}
}
}
else {
$infos = strptime(strftime("%c"),"%c");
}
$infos['tm_hour'] = sprintf("%02d", $infos['tm_hour']);
$infos['tm_min'] = sprintf("%02d", $infos['tm_min']);
$infos['tm_sec'] = sprintf("%02d", $infos['tm_sec']);
$infos['tm_mday'] = sprintf("%02d", $infos['tm_mday']);
$infos['tm_mon'] = sprintf("%02d", ($infos['tm_mon']+1));
$infos['tm_year'] = (1900+$infos['tm_year']);
//echo($original.' : '.$infos['tm_year'].' ');
switch($destinationFormat) {
case 'date': // "%d/%m/%Y"
return $infos['tm_mday']."/".$infos['tm_mon']."/".$infos['tm_year'];
break;
case 'time': // "%d/%m/%Y"
return $infos['tm_hour'].":".$infos['tm_min'];
break;
case '%m-%d':
return $infos['tm_mon']."-".$infos['tm_mday'];
break;
case 'strdate': // "%Y-%m-%d"
return $infos['tm_year']."-".$infos['tm_mon']."-".$infos['tm_mday'];
break;
case 'strdatetime': // "%Y-%m-%d_%H.%M.%S"
return $infos['tm_year']."-".$infos['tm_mon']."-".$infos['tm_mday']."_".$infos['tm_hour'].".".$infos['tm_min'].".".$infos['tm_sec'];
break;
case 'datetime': // "%d/%m/%Y - %H:%M"
return $infos['tm_mday']."/".$infos['tm_mon']."/".$infos['tm_year']." - ".$infos['tm_hour'].":".$infos['tm_min'];
break;
case 'print_date': // "j mois annee"
return $infos['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infos['tm_mon'])]." ".$infos['tm_year'];
break;
case 'print_time': // "%H:%M"
return $infos['tm_hour'].":".$infos['tm_min'];
break;
case 'print_date_with_day': // "jour j mois annee"
return $GLOBALS['PRINT_JOUR'][$infos['tm_wday']]." ".$infos['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infos['tm_mon'])]." ".$infos['tm_year'];
break;
case 'print_datetime': // "j mois annee à heure h min"
return $infos['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infos['tm_mon'])]." ".$infos['tm_year']." à ".$infos['tm_hour']."h".$infos['tm_min'];
break;
case 'mysql_date': // "%Y-%m-%d"
return $infos['tm_year']."-".$infos['tm_mon']."-".$infos['tm_mday'];
break;
case 'mysql_datetime': //"%Y-%m-%d %H:%M:%S"
return $infos['tm_year']."-".$infos['tm_mon']."-".$infos['tm_mday']." ".$infos['tm_hour'].":".$infos['tm_min'].":".$infos['tm_sec'];
break;
case 'timestamp': //timestamp
return mktime(intval($infos['tm_hour']),intval($infos['tm_min']),intval($infos['tm_sec']),intval($infos['tm_mon']),intval($infos['tm_mday']),intval($infos['tm_year']));
break;
default;
return "";
}
}
function formatPeriode($originalDeb='', $originalFin='', $originalFormat="mysql_datetime", $time=true) {
// DEBUT
$infosDeb = false;
if($originalDeb!='' && intVal($originalDeb)!=0) {
switch($originalFormat) {
case 'date':
$infosDeb = strptime($originalDeb,"%d/%m/%Y");
break;
case 'datetime':
$infosDeb = strptime($originalDeb,"%d/%m/%Y - %H:%M");
break;
case 'mysql_date':
$infosDeb = strptime($originalDeb,"%Y-%m-%d");
break;
case 'mysql_datetime':
$infosDeb = strptime($originalDeb,"%Y-%m-%d %H:%M:%S");
break;
case 'timestamp':
$infosDeb = array(
'tm_hour' => date('G',$originalDeb),
'tm_min' => intval( date('i',$originalDeb) ),
'tm_sec' => intval( date('s',$originalDeb) ),
'tm_mday' => date('j',$originalDeb),
'tm_mon' => date('n',$originalDeb)-1,
'tm_year' => date('Y',$originalDeb)-1900
);
break;
default;
$infosDeb = strptime(strftime("%c"),"%c");
}
if($originalFormat=="date" || $originalFormat=="mysql_date") {
$infosDeb['tm_hour'] = 0;
$infosDeb['tm_min'] = 0;
$infosDeb['tm_sec'] = 0;
}
}
else {
$infosDeb = strptime(strftime("%c"),"%c");
}
$infosDeb['tm_hour'] = sprintf("%02d", $infosDeb['tm_hour']);
$infosDeb['tm_min'] = sprintf("%02d", $infosDeb['tm_min']);
$infosDeb['tm_sec'] = sprintf("%02d", $infosDeb['tm_sec']);
$infosDeb['tm_mday'] = sprintf("%02d", $infosDeb['tm_mday']);
$infosDeb['tm_mon'] = sprintf("%02d", ($infosDeb['tm_mon']+1));
$infosDeb['tm_year'] = (1900+$infosDeb['tm_year']);
// FIN
$infosFin = false;
if($originalFin && ($originalFin!='' && intVal($originalFin)!=0)) {
switch($originalFormat) {
case 'date':
$infosFin = strptime($originalFin,"%d/%m/%Y");
break;
case 'datetime':
$infosFin = strptime($originalFin,"%d/%m/%Y - %H:%M");
break;
case 'mysql_date':
$infosFin = strptime($originalFin,"%Y-%m-%d");
break;
case 'mysql_datetime':
$infosFin = strptime($originalFin,"%Y-%m-%d %H:%M:%S");
break;
case 'timestamp':
$infosFin = array(
'tm_hour' => date('G',$originalFin),
'tm_min' => intval( date('i',$originalFin) ),
'tm_sec' => intval( date('s',$originalFin) ),
'tm_mday' => date('j',$originalFin),
'tm_mon' => date('n',$originalFin)-1,
'tm_year' => date('Y',$originalFin)-1900
);
break;
default;
$infosFin = strptime(strftime("%c"),"%c");
}
if($originalFormat=="date" || $originalFormat=="mysql_date") {
$infosFin['tm_hour'] = 0;
$infosFin['tm_min'] = 0;
$infosFin['tm_sec'] = 0;
}
}
if(!$infosFin) {
if($time && ($originalFormat!="date" && $originalFormat!="mysql_date")) return 'le '.$infosDeb['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosDeb['tm_mon'])]." ".$infosDeb['tm_year']." à ".$infosDeb['tm_hour']."h".$infosDeb['tm_min'];
else return 'le '.$infosDeb['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosDeb['tm_mon'])]." ".$infosDeb['tm_year'];
}
else {
$infosFin['tm_hour'] = sprintf("%02d", $infosFin['tm_hour']);
$infosFin['tm_min'] = sprintf("%02d", $infosFin['tm_min']);
$infosFin['tm_sec'] = sprintf("%02d", $infosFin['tm_sec']);
$infosFin['tm_mday'] = sprintf("%02d", $infosFin['tm_mday']);
$infosFin['tm_mon'] = sprintf("%02d", ($infosFin['tm_mon']+1));
$infosFin['tm_year'] = (1900+$infosFin['tm_year']);
if($time && ($originalFormat!="date" && $originalFormat!="mysql_date")) {
if($infosDeb['tm_hour']==$infosFin['tm_hour']
&& $infosDeb['tm_min']==$infosFin['tm_min']
&& $infosDeb['tm_mday']==$infosFin['tm_mday']
&& $infosDeb['tm_mon']==$infosFin['tm_mon']
&& $infosDeb['tm_year']==$infosFin['tm_year']) {
// MEME JOUR, MEME HEURE
return 'le '.$infosDeb['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosDeb['tm_mon'])]." ".$infosDeb['tm_year']." à ".$infosDeb['tm_hour']."h".$infosDeb['tm_min'];
}
elseif($infosDeb['tm_mday']==$infosFin['tm_mday']
&& $infosDeb['tm_mon']==$infosFin['tm_mon']
&& $infosDeb['tm_year']==$infosFin['tm_year']) {
// MEME JOUR, HEURE DIFF
return 'le '.$infosDeb['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosDeb['tm_mon'])]." ".$infosDeb['tm_year']." de ".$infosDeb['tm_hour']."h".$infosDeb['tm_min']." à ".$infosFin['tm_hour']."h".$infosFin['tm_min'];
}
elseif($infosDeb['tm_mon']==$infosFin['tm_mon']
&& $infosDeb['tm_year']==$infosFin['tm_year']) {
// MEME MOIS, JOUR & HEURE DIFF
return 'du '.$infosDeb['tm_mday']." à ".$infosDeb['tm_hour']."h".$infosDeb['tm_min']." au ".$infosFin['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosFin['tm_mon'])]." ".$infosFin['tm_year']." à ".$infosFin['tm_hour']."h".$infosFin['tm_min'];
}
elseif($infosDeb['tm_year']==$infosFin['tm_year']) {
// MEME ANNEE, JOUR/MOIS & HEURE DIFF
return 'du '.$infosDeb['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosDeb['tm_mon'])]." à ".$infosDeb['tm_hour']."h".$infosDeb['tm_min']." au ".$infosFin['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosFin['tm_mon'])]." ".$infosFin['tm_year']." à ".$infosFin['tm_hour']."h".$infosFin['tm_min'];
}
else {
return 'du '.$infosDeb['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosDeb['tm_mon'])]." ".$infosDeb['tm_year']." à ".$infosDeb['tm_hour']."h".$infosDeb['tm_min']." au ".$infosFin['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosFin['tm_mon'])]." ".$infosFin['tm_year']." à ".$infosFin['tm_hour']."h".$infosFin['tm_min'];
}
}
else {
if($infosDeb['tm_mday']==$infosFin['tm_mday']
&& $infosDeb['tm_mon']==$infosFin['tm_mon']
&& $infosDeb['tm_year']==$infosFin['tm_year']) {
// MEME JOUR
return 'le '.$infosDeb['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosFin['tm_mon'])]." ".$infosFin['tm_year'];
}
elseif($infosDeb['tm_mon']==$infosFin['tm_mon']
&& $infosDeb['tm_year']==$infosFin['tm_year']) {
// MEME MOIS, JOUR DIFF
return 'du '.$infosDeb['tm_mday']." au ".$infosFin['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosFin['tm_mon'])]." ".$infosFin['tm_year'];
}
elseif($infosDeb['tm_year']==$infosFin['tm_year']) {
// MEME ANNEE, JOUR/MOIS
return 'du '.$infosDeb['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosDeb['tm_mon'])]." au ".$infosFin['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosFin['tm_mon'])]." ".$infosFin['tm_year'];
}
else {
return 'du '.$infosDeb['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosDeb['tm_mon'])]." ".$infosDeb['tm_year']." au ".$infosFin['tm_mday']." ".$GLOBALS['PRINT_MOIS_COURT'][intVal($infosFin['tm_mon'])]." ".$infosFin['tm_year'];
}
}
}
}
function getPeriode($target=false,$duree="3m") {
if(!$target) $target=strftime("%d/%m/%Y");
$targetDT = new DateTime(formatDate($target,"date","mysql_datetime"), new DateTimeZone(DATE_TIME_ZONE));
$limit1 = new DateTime("now", new DateTimeZone(DATE_TIME_ZONE));
$limit1->setDate($targetDT->format("Y"), $targetDT->format("m"), 0);
$limit1->setTime(0,0,0);
$limit2 = new DateTime("now", new DateTimeZone(DATE_TIME_ZONE));
$limit2->setDate($targetDT->format("Y"), $targetDT->format("m"), $targetDT->format("t"));
$limit2->setTime(23,59,59);
$int = new DateInterval('P0M');
switch($_SESSION['periode_view']) {
case "1m":
$int = new DateInterval('P1M');
break;
case "3m":
$int = new DateInterval('P3M');
break;
case "6m":
$int = new DateInterval('P6M');
break;
case "1y":
$int = new DateInterval('P1Y');
break;
}
$limit1->sub($int);
$limit2->add($int);
return array(
"start" => array(
'datetime' => $limit1,
'mysql_date' => $limit1->format('Y-m-d H:i:s')
),
"end" => array(
'datetime' => $limit2,
'mysql_date' => $limit2->format('Y-m-d H:i:s')
)
);
}
function getPeriodeJoursFeries($debut,$fin,$format="Y-m-d") {
$liste = array();
$dt = new DateTime($debut, new DateTimeZone("Europe/Paris"));
$dt->setTime(0, 0, 0);
$ft = new DateTime($fin, new DateTimeZone("Europe/Paris"));
$ft->setTime(23,59, 59);
$ndt = clone $dt;
while($ndt < $ft) {
$jf = getYearJoursFeries($ndt->format('Y'),$format);
foreach($jf as $k => $j) {
if( $j['datetime'] >= $dt && $j['datetime'] <= $ft ) $liste[$k] = $j;
}
$ndt->add( new DateInterval('P1Y') );
$ndt->setDate((int)$ndt->format('Y'),1,1);
}
ksort($liste);
return $liste;
}
function getYearJoursFeries($year=false,$format="Y-m-d") {
if(!$year) $year = intval(date('Y'));
$liste = array();
$date = new DateTime();
$date->setTimezone(new DateTimeZone('Europe/Paris'));
$date->setTime(0,0,0);
$easter_date = new DateTime('@' . easter_date($year));
$easter_date->setTimezone(new DateTimeZone('Europe/Paris'));
$easter_date->setTime(0,0,0);
// Jour de l'an - 1er janvier
$date->setDate($year, 1, 1);
$liste[ $date->format($format) ] = array(
'datetime' => clone $date,
'description' => "Jour de l'An"
);
// Fête du travail - 1er mai
$date->setDate($year, 5, 1);
$liste[ $date->format($format) ] = array(
'datetime' => clone $date,
'description' => "Fête du Travail"
);
// Victoire des alliés - 8 mai 1945
$date->setDate($year, 5, 8);
$liste[ $date->format($format) ] = array(
'datetime' => clone $date,
'description' => "Victoire des Alliés - 8 mai 1945"
);
// Fête nationale - 14 juillet
$date->setDate($year, 7, 14);
$liste[ $date->format($format) ] = array(
'datetime' => clone $date,
'description' => "Fête Nationale"
);
// Assomption - 15 août
$date->setDate($year, 8, 15);
$liste[ $date->format($format) ] = array(
'datetime' => clone $date,
'description' => "Assomption"
);
// Toussaint - 1er novembre
$date->setDate($year, 11, 1);
$liste[ $date->format($format) ] = array(
'datetime' => clone $date,
'description' => "Toussaint"
);
// Armistice 1ère Guerre Mondiale - 11 novembre
$date->setDate($year, 11, 11);
$liste[ $date->format($format) ] = array(
'datetime' => clone $date,
'description' => "Armistice 1ère Guerre Mondiale"
);
// Noël - 25 décembre
$date->setDate($year, 12, 25);
$liste[ $date->format($format) ] = array(
'datetime' => clone $date,
'description' => "Noël"
);
// Lundi de Pâques - lendemain du dimanche de Pâques
$date = clone $easter_date;
$date->add(new DateInterval('P1D'));
$liste[ $date->format($format) ] = array(
'datetime' => clone $date,
'description' => "Lundi de Pâques"
);
// Jeudi de l'ascension - 10 jours avant le Dimanche de Pentecôte
$date = clone $easter_date;
$date->add(new DateInterval('P39D'));
$liste[ $date->format($format) ] = array(
'datetime' => clone $date,
'description' => "Jeudi de l'Ascension"
);
// Lundi de Pentecôte - lendemain de la Pentecôte - 7 semaines après le lundi de pâque
$date = clone $easter_date;
$date->add(new DateInterval('P50D'));
$liste[ $date->format($format) ] = array(
'datetime' => clone $date,
'description' => "Lundi de Pentecôte"
);
return $liste;
}
function diffNbJours($debut, $fin,$format='date') {
//60 secondes X 60 minutes X 24 heures dans une journée
$nbSecondes= 60*60*24;
$debut_s = formatDate($debut,$format,'strdate');
$fin_s = formatDate($fin,$format,'strdate');
$debut_ts = strtotime($debut_s);
$fin_ts = strtotime($fin_s);
$diff = $fin_ts - $debut_ts;
return floor($diff / $nbSecondes)+1;
}
function diffNbJours2($debut, $fin) {
$dt1 = new DateTime($debut);
$dt1->setTime(0, 0, 0);
$dt2 = new DateTime($fin);
$dt2->setTime(23,59, 59);
$itv = date_diff($dt1, $dt2);
return intval($itv->format('%a'))+1;
}
function getNbOpenDays($date_start, $date_end) {
// $date_depart && $date_end au format YYYY-MM-DD
$dtd = date_create($date_start);
$dtd->setTime(0, 0, 0);
$dtf = date_create($date_end);
$dtf->setTime(0, 0, 0);
$dtf->modify( '+1 day' );
$arr_bank_holidays = array(); // Tableau des jours feriés
// On boucle dans le cas où l'année de départ serait différente de l'année d'arrivée
$diff_year = $dtf->format('Y') - $dtd->format('Y');
for ($i = 0; $i <= $diff_year; $i++) {
$year = (int)$dtd->format('Y') + $i;
// Liste des jours feriés
$arr_bank_holidays[] = '1_1_'.$year; // Jour de l'an
$arr_bank_holidays[] = '1_5_'.$year; // Fete du travail
$arr_bank_holidays[] = '8_5_'.$year; // Victoire 1945
$arr_bank_holidays[] = '14_7_'.$year; // Fete nationale
$arr_bank_holidays[] = '15_8_'.$year; // Assomption
$arr_bank_holidays[] = '1_11_'.$year; // Toussaint
$arr_bank_holidays[] = '11_11_'.$year; // Armistice 1918
$arr_bank_holidays[] = '25_12_'.$year; // Noel
// Récupération de paques. Permet ensuite d'obtenir le jour de l'ascension et celui de la pentecote
$easter = easter_date($year);
$arr_bank_holidays[] = date('j_n_'.$year, $easter + 86400); // Paques
$arr_bank_holidays[] = date('j_n_'.$year, $easter + (86400*39)); // Ascension
$arr_bank_holidays[] = date('j_n_'.$year, $easter + (86400*50)); // Pentecote
}
$nb_days_open = 0;
foreach (new DatePeriod($dtd, new DateInterval('P1D'), $dtf) as $dt) {
$dt = new DateTime($dt->format('Y-m-d'), new DateTimeZone("Europe/Paris"));
// Si le jour suivant n'est ni un dimanche (0) ou un samedi (6), ni un jour férié, on incrémente les jours ouvrés
if (!in_array($dt->format('w'), array(0, 6)) && !in_array($dt->format('j_n_Y'), $arr_bank_holidays)) $nb_days_open++;
}
return $nb_days_open;
}
/*** REMPLACE SYMBOLES ***/
function replaceSymboles($string){
$replaceSymboles = Array(
" " => "_",
"/" => "-",
'"' => "",
"'" => "",
":" => "_",
"&" => "_",
"+" => "_",
"à" => "a",
"á" => "a",
"â" => "a",
"ã" => "a",
"ä" => "a",
"ç" => "c",
"è" => "e",
"é" => "e",
"ê" => "e",
"ë" => "e",
"ì" => "i",
"í" => "i",
"î" => "i",
"ï" => "i",
"ñ" => "n",
"ò" => "o",
"ó" => "o",
"ô" => "o",
"õ" => "o",
"ö" => "o",
"ù" => "u",
"ú" => "u",
"û" => "u",
"ü" => "u",
"ý" => "y",
"ÿ" => "y",
"À" => "A",
"Á" => "A",
"Â" => "A",
"Ã" => "A",
"Ä" => "A",
"Ç" => "C",
"È" => "E",
"É" => "E",
"Ê" => "E",
"Ë" => "E",
"Ì" => "I",
"Í" => "I",
"Î" => "I",
"Ï" => "I",
"Ñ" => "N",
"Ò" => "O",
"Ó" => "O",
"Ô" => "O",
"Õ" => "O",
"Ö" => "O",
"Ù" => "U",
"Ú" => "U",
"Û" => "U",
"Ü" => "U",
"Ý" => "Y"
);
return strtr($string,$replaceSymboles);
}
/*** REFUSE TOUTE CONNECTION AUTRE QUE AJAX ***/
function preventDirectAccess() {
// prevent direct access
$isAjax = isset($_SERVER['HTTP_X_REQUESTED_WITH']) AND
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
if(!$isAjax) {
$user_error = 'Access denied - not an AJAX request...';
trigger_error($user_error, E_USER_ERROR);
return;
}
return true;
}
/*** AUTO COMPLETE HIGHLIGHT ***/
/**
* mb_stripos all occurences
* based on http://www.php.net/manual/en/function.strpos.php#87061
*
* Find all occurrences of a needle in a haystack
*
* @param string $haystack
* @param string $needle
* @return array or false
*/
function mb_stripos_all($haystack, $needle) {
$s = 0;
$i = 0;
while(is_integer($i)) {
$i = mb_stripos($haystack, $needle, $s);
if(is_integer($i)) {
$aStrPos[] = $i;
$s = $i + mb_strlen($needle);
}
}
if(isset($aStrPos)) {
return $aStrPos;
} else {
return false;
}
}
/**
* Apply highlight to row label
*
* @param string $a_json json data
* @param array $parts strings to search
* @return array
*/
function apply_highlight($a_json, $parts) {
error_reporting(0);
$p = count($parts);
$rows = count($a_json);
for($row = 0; $row < $rows; $row++) {
$label = $a_json[$row]["label"];
$a_label_match = array();
for($i = 0; $i < $p; $i++) {
$part_len = mb_strlen($parts[$i]);
$a_match_start = mb_stripos_all($label, $parts[$i]);
foreach($a_match_start as $part_pos) {
$overlap = false;
foreach($a_label_match as $pos => $len) {
if($part_pos - $pos >= 0 && $part_pos - $pos < $len) {
$overlap = true;
break;
}
}
if(!$overlap) {
$a_label_match[$part_pos] = $part_len;
}
}
}
if(count($a_label_match) > 0) {
ksort($a_label_match);
$label_highlight = '';
$start = 0;
$label_len = mb_strlen($label);
foreach($a_label_match as $pos => $len) {
if($pos - $start > 0) {
$no_highlight = mb_substr($label, $start, $pos - $start);
$label_highlight .= $no_highlight;
}
$highlight = '' . mb_substr($label, $pos, $len) . '';
$label_highlight .= $highlight;
$start = $pos + $len;
}
if($label_len - $start > 0) {
$no_highlight = mb_substr($label, $start);
$label_highlight .= $no_highlight;
}
$a_json[$row]["label"] = $label_highlight;
}
}
return $a_json;
}
// HCARD
function makeHCard(
$type="contact",
$nom="",
$prenom="",
$societe="",
$adresse="",
$cp="",
$ville="",
$pays=""
) {
$hcard = "";
// HEADER
if($type=="contact") {
$txt = "";
if($nom!="" && $prenom!="") $txt = $prenom." ".$nom;
else if($nom!="") $txt = $nom;
else if($prenom!="") $txt = $prenom;
$hcard = '