Fix: Boucle infinie sur calendrier

This commit is contained in:
Laurent Destailleur 2008-01-06 21:53:26 +00:00
parent 1e189b606c
commit f0f5625398
2 changed files with 59 additions and 32 deletions

View File

@ -49,7 +49,7 @@ if (isset($_GET["mode"]) && $_GET["mode"] == 'test')
else
{
//print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">'."\n";
print '<html><head></head><body>'."\n";
print '<html><head><title>Calendar</title></head><body>'."\n";
}
@ -88,7 +88,7 @@ function xyzToUnixTimestamp($mysqldate){
$year=substr($mysqldate,0,4);
$month=substr($mysqldate,4,2);
$day=substr($mysqldate,6,2);
$unixtimestamp=dolibarr_mktime(0,0,0,$month,$day,$year);
$unixtimestamp=dolibarr_mktime(12,0,0,$month,$day,$year);
return $unixtimestamp;
}
@ -96,7 +96,7 @@ function displayBox($selectedDate,$month,$year){
global $dolibarr_main_url_root,$langs,$conf;
//print "$selectedDate,$month,$year";
$thedate=dolibarr_mktime(0,0,0,$month,1,$year);
$thedate=dolibarr_mktime(12,0,0,$month,1,$year);
//print "thedate=$thedate";
$today=mktime();
$todayArray=dolibarr_getdate($today);
@ -120,7 +120,7 @@ function displayBox($selectedDate,$month,$year){
echo $langs->trans($selectMonth).", ".$selectYear;
?>
</td>
<td class="dpHead"><button type="buttton" class="dpInvisibleButtons" id="DPCancel" onClick="closeDPBox();">X</button></td>
<td class="dpHead"><button type="button" class="dpInvisibleButtons" id="DPCancel" onClick="closeDPBox();">X</button></td>
</tr>
<tr>
<td class="dpButtons" onClick="loadMonth('<?php echo $dolibarr_main_url_root.'/lib/' ?>','<?php echo $month?>','<?php echo $year-1?>','<?php echo $xyz ?>')">&lt;&lt;</td>
@ -130,30 +130,41 @@ function displayBox($selectedDate,$month,$year){
<td class="dpButtons" onClick="loadMonth('<?php echo $dolibarr_main_url_root.'/lib/' ?>','<?php echo $month?>','<?php echo $year+1?>','<?php echo $xyz ?>')">&gt;&gt;</td>
</tr>
<tr class="dpDayNames">
<td width="14.286%"><?php echo $langs->trans("ShortSunday") ?></td>
<td width="14.286%"><?php echo $langs->trans("ShortMonday") ?></td>
<td width="14.286%"><?php echo $langs->trans("ShortTuesday") ?></td>
<td width="14.286%"><?php echo $langs->trans("ShortWednesday") ?></td>
<td width="14.286%"><?php echo $langs->trans("ShortThursday") ?></td>
<td width="14.286%"><?php echo $langs->trans("ShortFriday") ?></td>
<td width="14.286%"><?php echo $langs->trans("ShortSaturday") ?></td>
<td width="14%"><?php echo $langs->trans("ShortSunday") ?></td>
<td width="14%"><?php echo $langs->trans("ShortMonday") ?></td>
<td width="15%"><?php echo $langs->trans("ShortTuesday") ?></td>
<td width="14%"><?php echo $langs->trans("ShortWednesday") ?></td>
<td width="15%"><?php echo $langs->trans("ShortThursday") ?></td>
<td width="14%"><?php echo $langs->trans("ShortFriday") ?></td>
<td width="14%"><?php echo $langs->trans("ShortSaturday") ?></td>
</tr>
<?php
<?php
//print "x ".$thedate." y";
$firstdate=dolibarr_getdate($thedate);
$mydate=$firstdate;
// Loop on each day of month
$day=1;
while($firstdate["month"]==$mydate["month"])
$stoploop=0; $day=1; $cols=0;
while (! $stoploop)
{
//print_r($mydate);
if($mydate["wday"]==0) echo "<TR class=\"dpWeek\">";
if($firstdate==$mydate){
// firstdate, so we may have to put in blanks
if($firstdate==$mydate) // At first run
{
echo "<TR class=\"dpWeek\">";
for($i=0;$i<$mydate["wday"];$i++)
$cols=0;
for($i=0;$i< $mydate["wday"];$i++)
{
echo "<TD>&nbsp;</TD>";
$cols++;
}
}
else
{
if ($mydate["wday"]==0)
{
echo "<TR class=\"dpWeek\">";
$cols=0;
}
}
$dayclass="dpReg";
@ -165,18 +176,28 @@ function displayBox($selectedDate,$month,$year){
echo " onMouseOver=\"dpHighlightDay(".$mydate["year"].",".dolibarr_date("n",$thedate).",".$mydate["mday"].",tradMonths)\"";
echo " onClick=\"dpClickDay(".$mydate["year"].",".dolibarr_date("n",$thedate).",".$mydate["mday"].",'".$conf->format_date_short_java."')\"";
echo ">".sprintf("%02s",$mydate["mday"])."</TD>";
$cols++;
if ($mydate["wday"]==6) echo "</TR>\n";
if($mydate["wday"]==6) echo "</tr>";
//$thedate=strtotime("tomorrow",$thedate);
$day++;
$thedate=dolibarr_mktime(0,0,0,$month,$day,$year);
$mydate=dolibarr_getdate($thedate);
$thedate=dolibarr_mktime(12,0,0,$month,$day,$year);
if ($thedate == '')
{
$stoploop=1;
}
else
{
$mydate=dolibarr_getdate($thedate);
if ($firstdate["month"] != $mydate["month"]) $stoploop=1;
}
}
if($mydate["wday"]!=0){
for($i=6;$i>=$mydate["wday"];$i--)
echo "<TD>&nbsp;</TD>";
echo "</TR>";
if ($cols < 7)
{
for($i=6; $i>=$cols; $i--) echo "<TD>&nbsp;</TD>";
echo "</TR>\n";
}
?>
<tr><td id="dpExp" class="dpExplanation" colspan="7"><?php

View File

@ -667,19 +667,25 @@ function dolibarr_getdate($timestamp,$fast=false)
\param month Mois
\param day Jour
\param year Année
\param gm Time gm
\param check No check on parameters (Can use day 32, etc...)
\return timestamp Date en timestamp, '' if error
\remarks PHP mktime is restricted to the years 1901-2038 on Unix and 1970-2038 on Windows
*/
function dolibarr_mktime($hour,$minute,$second,$month,$day,$year,$gm=0)
function dolibarr_mktime($hour,$minute,$second,$month,$day,$year,$gm=0,$check=1)
{
//print "- ".$hour.",".$minute.",".$second.",".$month.",".$day.",".$year.",".$_SERVER["WINDIR"]." -";
// Check parameters
if (! $month || ! $day) return '';
if ($day > 31) return '';
if ($month > 12) return '';
if ($min < 0 || $min > 60) return '';
if ($hour < 0 || $hour > 24) return '';
if ($min < 0 || $min > 60) return '';
if ($check)
{
if (! $month || ! $day) return '';
if ($day > 31) return '';
if ($month > 12) return '';
if ($min < 0 || $min > 60) return '';
if ($hour < 0 || $hour > 24) return '';
if ($min < 0 || $min > 60) return '';
}
$usealternatemethod=false;
if ($year <= 1970) $usealternatemethod=true; // <= 1970