Loading...
 

CalendarBug2004

I think the following patch for tiki-calendar.php in 1.7.4 should fix the 2004 dating bug. Not extensively tested, but works for me so far.

Whoops! I probably should have just attached the file. I'm not familiar enough with the Wiki yet, clearly. Anyway, it's there now.

*** tiki-calendar.php.orig      2004-01-05 10:30:06.000000000 -0600
--- tiki-calendar.php   2004-01-05 16:21:52.000000000 -0600
***************
*** 408,413 ****
--- 408,414 ----
  $focus_prevmonth = mktime(0,0,0,$focus_month-1,$focus_day,$focus_year);
  $focus_nextmonth = mktime(0,0,0,$focus_month+1,$focus_day,$focus_year);

+ // these smarty values are all Unix timestamps....
  $smarty->assign('daybefore',$focus_prevday);
  $smarty->assign('weekbefore',$focus_prevweek);
  $smarty->assign('monthbefore',$focus_prevmonth);
***************
*** 421,456 ****
  $weekdays = range(0,6);

  $d = 60*60*24;
! $currentweek = date("W",$focusdate + $d) - 1;
  $wd = date('w',$focusdate);
! #if ($wd == 0) $w = 7;
! #$wd--;

  // calculate timespan for sql query
  if ($_SESSION['CalendarViewMode'] == 'month') {
!       $firstweek = date("W",mktime(0,0,0,$focus_month,2,$focus_year)) - 1;
!       $lastweek = date("W",mktime(0,0,0,$focus_month+1,1,$focus_year)) - 1;
!       if ($lastweek < $firstweek) {
!               $lastweek += 52;
!               $currentweek += 52;
!       }
!       $viewstart = mktime(0,0,0,1,(7*$firstweek) - 2,$focus_year);
!       $viewend = mktime(0,0,-1,1,(7*$lastweek + 1) + 6,$focus_year);
!       $numberofweeks = $lastweek - $firstweek;
  } elseif ($_SESSION['CalendarViewMode'] == 'week') {
!       $firstweek = $currentweek;
!       $lastweek = $currentweek;
!       $viewstart = $focusdate - ($wd * $d);
!       $viewend = $viewstart + ((7 * $d) - 1);
!       $numberofweeks = 0;
  } else {                      // I assume that this means it's a day.  It's scary what this does to $weekdays...
!       $firstweek = $currentweek;
!       $lastweek = $currentweek;
!       $viewstart = $focusdate;
!       $viewend = $focusdate + ($d - 1);
!       $weekdays = array(date('w',$focusdate));
!       $numberofweeks = 0;
  }
  $smarty->assign('viewstart',$viewstart);
  $smarty->assign('viewend',$viewend);
  $smarty->assign('numberofweeks',$numberofweeks);
--- 422,487 ----
  $weekdays = range(0,6);

  $d = 60*60*24;
! // this is the ISO standard week number.
! $currentweek = date("W",$focusdate);
! // the date is zero-based with 0 being Sunday.
  $wd = date('w',$focusdate);
!

  // calculate timespan for sql query
  if ($_SESSION['CalendarViewMode'] == 'month') {
!   $viewstart = mktime(0,0,0,$focus_month, 1, $focus_year);
!   $TmpWeekday = date("w",$viewstart);
!   // move viewstart back to Sunday....
!   $viewstart -= $TmpWeekday * $d;
!   // this is the last day of $focus_month
!   $viewend = mktime(0,0,0,$focus_month + 1, 0, $focus_year);
!   $TmpWeekday = date("w", $viewend);
!   $viewend += (6 - $TmpWeekday) * $d;
!   $viewend -= 1;
!   // ISO weeks --- kinda mangled because ours begin on Sunday...
!   $firstweek = date("W", $viewstart + $d);
!   $lastweek = date("W", $viewend);
!   $numberofweeks = $lastweek - $firstweek;
  } elseif ($_SESSION['CalendarViewMode'] == 'week') {
!   $firstweek = $currentweek;
!   $lastweek = $currentweek;
!   // start by putting $viewstart at midnight starting focusdate
!   $viewstart = mktime(0,0,0,$focus_month, $focus_day, $focus_year);
!   // then back up to the preceding Sunday;
!   $viewstart -= $wd * $d;
!   // then go to the end of the week for $viewend
!   $viewend = $viewstart + ((7 * $d) - 1);
!   $numberofweeks = 0;
  } else {                      // I assume that this means it's a day.  It's scary what this does to $weekdays...
!   $firstweek = $currentweek;
!   $lastweek = $currentweek;
!   $viewstart = mktime(0,0,0,$focus_month, $focus_day, $focus_year);
!   $viewend = $viewstart + ($d - 1);
!   $weekdays = array(date('w',$focusdate));
!   $numberofweeks = 0;
! }
!
! // untested (by me, anyway!) function grabbed from the php.net site:
! // [2004/01/05:rpg]
! function m_weeks($y, $m){
!   // monthday array
!   $monthdays = array(1=>31, 3=>31, 4=>30, 5=>31, 6=>30,7=>31,
!                8=>31, 9=>30, 10=>31, 11=>30, 12=>31);
!   // weekdays remaining in a week starting on 7 - Sunday...(could be changed)
!   $weekdays = array(7=>7, 1=>6, 2=>5, 3=>4, 4=>3, 5=>2, 6=>1);
!   $date = mktime( 0, 0, 0, $m, 1, $y);
!   $leap = date("L", $date);
!   // if it is a leap year set February to 29 days, otherwise 28
!   $monthdays[2] = ($leap ? 29 : 28);
!   // get the weekday of the first day of the month
!   $wn = strftime("%u",$date);
!   $days = $monthdays[$m] - $weekdays[$wn];
!   return (ceil($days/7) + 1);
  }
+
+
+ // view start and viewend are unix timestamps
  $smarty->assign('viewstart',$viewstart);
  $smarty->assign('viewend',$viewend);
  $smarty->assign('numberofweeks',$numberofweeks);
***************
*** 470,527 ****
        $listtikievents = array();
  }


  for ($i=0;$i<=$numberofweeks;$i++) {
!       $wee = $firstweek + $i;
!       $weeks[] = $wee;
!       foreach ($weekdays as $w) {
!               $leday = array();
!               // hrum. -2 and -1 are black magic. please exorcize if you can
!               $dday = mktime(0,0,0,1,(7*($wee))+$w-2,$focus_year);
!               $ddayend = mktime(0,0,0,1,(7*($wee))+$w-1,$focus_year);
!               $cell[$i][$w]['day'] = $dday;
!               if (isset($listevents["$dday"])) {
!                       $e = 0;
!                       foreach ($listevents["$dday"] as $le) {
!                               $leday["{$le['time']}$e"] = $le;
!                               $smarty->assign_by_ref('cellextra',$le["extra"]);
!                               $smarty->assign_by_ref('cellhead',$le["head"]);
!                               $smarty->assign_by_ref('cellprio',$le["prio"]);
!                               $smarty->assign_by_ref('cellcalname',$le["calname"]);
!                               $smarty->assign_by_ref('cellname',$le["name"]);
!                               $smarty->assign_by_ref('celldescription',$le["description"]);
!                               $leday["{$le['time']}$e"]["over"] = $smarty->fetch("tiki-calendar_box.tpl");
!                               $e++;
!                       }
!               }
!               if (isset($listtikievents["$dday"])) {
!                       $e = 0;
!                       foreach ($listtikievents["$dday"] as $lte) {
!                               $leday["{$lte['time']}$e"] = $lte;
!                               $smarty->assign('cellextra',"");
!                               $smarty->assign_by_ref('cellhead',$lte["head"]);
!                               $smarty->assign_by_ref('cellprio',$lte["prio"]);
!                               $smarty->assign_by_ref('cellcalname',$lte["calname"]);
!                               $smarty->assign_by_ref('cellname',$lte["name"]);
!                               $smarty->assign_by_ref('celldescription',$lte["description"]);
!                               $leday["{$lte['time']}$e"]["over"] = $smarty->fetch("tiki-calendar_box.tpl");
!                               $e++;
!                       }
!               }
!               if (is_array($leday)) {
!                       ksort($leday);
!                       $cell[$i][$w]['items'] = array_values($leday);

!               }
!       }
  }

! $smarty->assign('currentweek',$currentweek);
! $smarty->assign('firstweek',$firstweek);
! $smarty->assign('lastweek',$lastweek);
  $smarty->assign('weekdays',$weekdays);
  $smarty->assign('weeks',$weeks);
  $smarty->assign('daysnames',$daysnames);
  $smarty->assign('cell',$cell);
  $smarty->assign('var','');

--- 501,570 ----
        $listtikievents = array();
  }

+ define("weekInSeconds", 604800);

+ // note that number of weeks starts at ZERO (i.e., zero = 1 week to display).
  for ($i=0;$i<=$numberofweeks;$i++) {
!   // $wee is a week number....
!   $wee = $firstweek + $i;
!
!   $weeks[] = $wee;
!   // $startOfWeek is a unix timestamp
!   $startOfWeek = $viewstart + $i * weekInSeconds;
!   foreach ($weekdays as $w) {
!     $leday = array();
!     $dday = $startOfWeek + $d * $w;
!     $cell[$i][$w]['day'] = $dday;
!     if (isset($listevents["$dday"])) {
!       $e = 0;
!       foreach ($listevents["$dday"] as $le) {
!       $leday["{$le['time']}$e"] = $le;
!       $smarty->assign_by_ref('cellextra',$le["extra"]);
!       $smarty->assign_by_ref('cellhead',$le["head"]);
!       $smarty->assign_by_ref('cellprio',$le["prio"]);
!       $smarty->assign_by_ref('cellcalname',$le["calname"]);
!       $smarty->assign_by_ref('cellname',$le["name"]);
!       $smarty->assign_by_ref('celldescription',$le["description"]);
!       $leday["{$le['time']}$e"]["over"] = $smarty->fetch("tiki-calendar_box.tpl");
!       $e++;
!       }
!     }
!     if (isset($listtikievents["$dday"])) {
!       $e = 0;
!       foreach ($listtikievents["$dday"] as $lte) {
!       $leday["{$lte['time']}$e"] = $lte;
!       $smarty->assign('cellextra',"");
!       $smarty->assign_by_ref('cellhead',$lte["head"]);
!       $smarty->assign_by_ref('cellprio',$lte["prio"]);
!       $smarty->assign_by_ref('cellcalname',$lte["calname"]);
!       $smarty->assign_by_ref('cellname',$lte["name"]);
!       $smarty->assign_by_ref('celldescription',$lte["description"]);
!       $leday["{$lte['time']}$e"]["over"] = $smarty->fetch("tiki-calendar_box.tpl");
!       $e++;
!       }
!     }
!     if (is_array($leday)) {
!       ksort($leday);
!       $cell[$i][$w]['items'] = array_values($leday);

!     }
!   }
  }

! // firstweek, currentweek, and lastweek are all, I think,
! // ISO-8601 week indices.  However, I find no indication that these
! // Smarty variables are ever read.  [2004/01/05:rpg]
! // $smarty->assign('currentweek',$currentweek);
! // $smarty->assign('firstweek',$firstweek);
! // $smarty->assign('lastweek',$lastweek);
! // array of indices of days covered in the chart.  0-6 unless this is
! // a single day display.
  $smarty->assign('weekdays',$weekdays);
+ // array of week cell items...
  $smarty->assign('weeks',$weeks);
+ // array of week day names
  $smarty->assign('daysnames',$daysnames);
+ // display information (not dead sure what this array type is).
  $smarty->assign('cell',$cell);
  $smarty->assign('var','');

***************
*** 530,532 ****
--- 573,587 ----
  ?>


+
+
+
+
+
+
+
+
+
+
+
+

Page last modified on Friday 09 July 2004 19:32:51 GMT-0000

Upcoming Events

No records to display

Why Register?

Register at tiki.org and you'll be able to use the account at any *.tiki.org site, thanks to the InterTiki feature. A valid email address is required to receive site notifications and occasional newsletters. You can opt out of these items at any time.