diff --git a/htdocs/admin/ihm.php b/htdocs/admin/ihm.php
index 811ba37792424d8308f64f1ece12f72f76cdb2c8..475072bb8a01be4a1bd732953835276a57dcd0ce 100644
--- a/htdocs/admin/ihm.php
+++ b/htdocs/admin/ihm.php
@@ -141,7 +141,10 @@ if (isset($_GET["action"]) && $_GET["action"] == 'edit')
// D�sactiver le calendrier popup
$var=!$var;
print '<tr '.$bc[$var].'><td width="35%">'.$langs->trans("UsePopupCalendar").'</td><td>';
- $liste_popup_calendar=array('0'=>$langs->trans("No"),'eldy'=>$langs->trans("Yes").' (style eldy)','andre'=>$langs->trans("Yes").' (style andre)');
+ $liste_popup_calendar=array(
+ '0'=>$langs->trans("No"),
+ 'eldy'=>$langs->trans("Yes").' (style eldy)',
+ 'andre'=>$langs->trans("Yes").' (style andre)');
$html->select_array('popup_calendar',$liste_popup_calendar,$conf->global->MAIN_POPUP_CALENDAR);
print ' ('.$langs->trans("AvailableOnlyIfJavascriptNotDisabled").')';
print '</td></tr>';
diff --git a/htdocs/lib/lib_head.js b/htdocs/lib/lib_head.js
index 09e3eda4a110c3601e49e4036ef7413c8701f3bb..35c01d660612dc8940e2d0497666ff3ea3388229 100644
--- a/htdocs/lib/lib_head.js
+++ b/htdocs/lib/lib_head.js
@@ -76,17 +76,28 @@ function showDP(base,dateFieldID,format)
showDP.box.style.top=thetop + "px";
showDP.box.style.left=theleft + "px";
- if(dateField.value) // Si il y avait valeur initiale dans champ
+ if (dateField.value) // Si il y avait valeur initiale dans champ
{
selDate=getDateFromFormat(dateField.value,format);
if (selDate)
{
+ // Success to parse value in field according to format
year=selDate.getFullYear();
month=selDate.getMonth()+1;
day=selDate.getDate();
datetime=selDate.getTime();
ymd=formatDate(selDate,'yyyyMMdd');
}
+ else
+ {
+ // Failed to parse value in field according to format
+ selDate=new Date();
+ year=selDate.getFullYear();
+ month=selDate.getUTCMonth()+1;
+ day=selDate.getDate();
+ datetime=selDate.getTime();
+ ymd=formatDate(selDate,'yyyyMMdd');
+ }
}
else
{
@@ -386,10 +397,178 @@ document.onmousemove=positiontip;
+/*=================================================================
+ Function: formatDate (javascript object Date(), format)
+ Purpose: Returns a date in the output format specified.
+ The format string can use the following tags:
+ Field | Tags
+ -------------+-------------------------------
+ Year | yyyy (4 digits), yy (2 digits)
+ Month | MM (2 digits)
+ Day of Month | dd (2 digits)
+ Hour (1-12) | hh (2 digits)
+ Hour (0-23) | HH (2 digits)
+ Minute | mm (2 digits)
+ Second | ss (2 digits)
+ Author: Laurent Destailleur
+ Licence: GPL
+==================================================================*/
+function formatDate(date,format)
+{
+ //alert('formatDate date='+date+' format='+format);
+
+ // Force parametres en chaine
+ format=format+"";
+
+ var result="";
+
+ var year=date.getYear()+""; if (year.length < 4) { year=""+(year-0+1900); }
+ var month=date.getMonth()+1;
+ var day=date.getDate();
+ var hour=date.getHours();
+ var min=date.getMinutes();
+ var seconde=date.getSeconds();
+
+ var i=0;
+ while (i < format.length)
+ {
+ c=format.charAt(i); // Recupere char du format
+ substr="";
+ j=i;
+ while ((format.charAt(j)==c) && (j < format.length)) // Recupere char successif identiques
+ {
+ substr += format.charAt(j++);
+ }
+
+ //alert('substr='+substr);
+ if (substr == 'yyyy') { result=result+year; }
+ else if (substr == 'yy') { result=result+year.substring(2,4); }
+ else if (substr == 'MM') { result=result+(month<1||month>9?"":"0")+month; }
+ else if (substr == 'd') { result=result+day; }
+ else if (substr == 'dd') { result=result+(day<1||day>9?"":"0")+day; }
+ else if (substr == 'hh') { if (hour > 12) hour-=12; result=result+(hour<1||hour>9?"":"0")+hour; }
+ else if (substr == 'HH') { result=result+(hour<1||hour>9?"":"0")+hour; }
+ else if (substr == 'mm') { result=result+(minute<1||minute>9?"":"0")+minute; }
+ else if (substr == 'ss') { result=result+(seconde<1||seconde>9?"":"0")+seconde; }
+ else { result=result+substr; }
+
+ i+=substr.length;
+ }
+
+ //alert(result);
+ return result;
+}
+
+
+/*=================================================================
+ Function: getDateFromFormat(date_string, format_string)
+ Purpose: This function takes a date string and a format string.
+ It parses the date string with format and it returns
+ the date as a javascript Date() object.
+ If date does not match format, it returns 0.
+ The format string can use the following tags:
+ Field | Tags
+ -------------+-------------------------------
+ Year | yyyy (4 digits), yy (2 digits)
+ Month | MM (2 digits)
+ Day of Month | dd (2 digits)
+ Hour (1-12) | hh (2 digits)
+ Hour (0-23) | HH (2 digits)
+ Minute | mm (2 digits)
+ Second | ss (2 digits)
+ Author: Laurent Destailleur
+ Licence: GPL
+==================================================================*/
+function getDateFromFormat(val,format)
+{
+ //alert('getDateFromFormat val='+val+' format='+format);
+
+ // Force parametres en chaine
+ val=val+"";
+ format=format+"";
+
+ var now=new Date();
+ var year=now.getYear(); if (year.length < 4) { year=""+(year-0+1900); }
+ var month=now.getMonth()+1;
+ var day=now.getDate();
+ var hour=now.getHours();
+ var minute=now.getMinutes();
+ var seconde=now.getSeconds();
+
+ var i=0;
+ while (i < format.length)
+ {
+ c=format.charAt(i); // Recupere char du format
+ substr="";
+ j=i;
+ while ((format.charAt(j)==c) && (j < format.length)) // Recupere char successif identiques
+ {
+ substr += format.charAt(j++);
+ }
+
+ //alert('substr='+substr);
+ if (substr == "yyyy") year=getIntegerInString(val,i,4,4);
+ if (substr == "yy") year=""+(getIntegerInString(val,i,2,2)-0+1900);
+ if (substr == "MM") month=getIntegerInString(val,i,2,2);
+ if (substr == "M") month=getIntegerInString(val,i,1,2);
+ if (substr == "dd") day=getIntegerInString(val,i,1,2);
+ if (substr == "hh") hour=getIntegerInString(val,i,1,2);
+ if (substr == "HH") hour=getIntegerInString(val,i,1,2);
+ if (substr == "mm") minute=getIntegerInString(val,i,1,2);
+ if (substr == "ss") seconde=getIntegerInString(val,i,1,2);
+
+ i+=substr.length;
+ }
+
+ // Check if format param are ok
+ if (year==null||year<1) { return 0; }
+ if (month==null||(month<1)||(month>12)) { return 0; }
+ if (day==null||(day<1)||(day>31)) { return 0; }
+ if (hour==null||(hour<0)||(hour>24)) { return 0; }
+ if (minute==null||(minute<0)||(minute>60)) { return 0; }
+ if (seconde==null||(seconde<0)||(seconde>60)) { return 0; }
+
+ //alert(year+' '+month+' '+day+' '+hour+' '+minute+' '+seconde);
+ var newdate=new Date(year,month-1,day,hour,minute,seconde);
+
+ return newdate;
+}
+
+/*=================================================================
+ Function: stringIsInteger(string)
+ Purpose: Return true if string is an integer
+==================================================================*/
+function stringIsInteger(str)
+{
+ var digits="1234567890";
+ for (var i=0; i < str.length; i++)
+ {
+ if (digits.indexOf(str.charAt(i))==-1)
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+/*=================================================================
+ Function: getIntegerInString(string,pos,minlength,maxlength)
+ Purpose: Return part of string from position i that is integer
+==================================================================*/
+function getIntegerInString(str,i,minlength,maxlength)
+{
+ for (var x=maxlength; x>=minlength; x--)
+ {
+ var substr=str.substring(i,i+x);
+ if (substr.length < minlength) { return null; }
+ if (stringIsInteger(substr)) { return substr; }
+ }
+ return null;
+}
/*=================================================================
- Purpose: Fonction pour champ saisie en mode ajax
+ Purpose: Fonction pour champ saisie en mode ajax
Author: Laurent Destailleur
Licence: GPL
==================================================================*/