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 ==================================================================*/