[kronolith] daily recurrence calculation - sql driver

Jan Schneider jan@horde.org
Tue, 2 Oct 2001 11:03:21 +0200


Many thanks for this nice catch and patch.

As you probably realized the recurrence calculation can make you some headaches 
and I'm glad that someone dives into the code and tries to fix the issues.

I still want to test your patches (also the multiday) as soon as I have the 
time but I want you to know that I'm very happy about your work.

Jan.

Zitat von Jesse Wolff <jesse_wolff@yahoo.com>:

> Hi.
> 
> Attached is a patch to fix both of the issues I mentioned. They both occur in
> 
> sql.php so they won't adversely affect mcal.
> 
> I tested it with a bunch of cases so recurrences should show up correctly now
> 
> in all of the views no matter what the start time, except of course the 
> Monthly:Same weekday recurrence which isn't yet implemented for the sql
> driver.
> 
> There's still an issue with the times for recurrences and multi-day events in
> 
> the summary view but I'll send through another patch for that.
> 
> Jesse.
> 
> Index: lib/Driver/sql.php
> ===================================================================
> RCS file: /repository/kronolith/lib/Driver/sql.php,v
> retrieving revision 1.19
> diff -r1.19 sql.php
> 128c128
> <                     if ($next && Kronolith::compareDates($next, $endDate)
> <= 0
> ) {
> ---
> >                     if ($next && Kronolith::compareDates($next, $endDate) <
> 0)
>  {
> 230c230
> <             $recur = (floor($diff->mday / $event->recurInterval)) *
> $event->re
> curInterval;
> ---
> >             $recur = (ceil($diff->mday / $event->recurInterval)) *
> $event->rec
> urInterval;
> 
> 
> 
> Quoting Jesse Wolff <jesse_wolff@yahoo.com>:
> 
> > Hi.
> > 
> > I updated to the latest cvs tonight and noticed that recurrences are
> almost
> > 
> > complete for the sql driver!
> > 
> > There are two issues I ran into, one I know how to fix and the other I
> don't
> > so 
> > I'll just mention it.
> > 
> > 1) An event with a daily recurrence and a recur interval > 1 day doesn't
> show
> > 
> > up in the month view. The problem lead me to the daily recurrences
> > calculation -
> >  nextRecurrence() in sql.php, case KRONOLITH_RECUR_DAILY - and I'm pretty
> > sure 
> > it's not being done correctly.
> > 
> > To fix it, line 230 of sql.php should use the ceil() function instead of
> the
> > 
> > floor() function.
> > 
> > current: 
> > $recur = (floor($diff->mday / $event->recurInterval)) *
> > $event->recurInterval;
> > 
> > fix:
> > $recur = (ceil($diff->mday / $event->recurInterval)) *
> > $event->recurInterval;
> > 
> > The calculation with floor() correctly returns the next recurrence date
> only
> > 
> > when the passed date ($afterDate) is the next recurrence date which is why
> it
> > 
> > shows up correctly in the summary, day, and week views and not in the
> month
> > 
> > view unless the recur interval is 1 day. It fails in the month view for
> the
> > 
> > following reason:
> > 
> > If the event startdate is 10/2/2001 and the recurInterval is 2 (days), 
> > month.php first calls nextRecurrence() passing it 10/3/2001. based on the
> > above 
> > calculation using floor(), $recur equals 0 when it should be 2.
> > 
> > I looked at a lot of examples and I'm pretty sure that the calculation
> using
> > 
> > ceil() correctly returns the next recurrence after the passed date
> > ($afterDate).
> > 
> > After changing it, you can test it and it should show up correctly in all
> 
> > views. BUT make sure your start time isn't equal to 12:00AM due to the
> next
> > 
> > issue.
> > 
> > 
> > 2) Daily and weekly recurrences display properly (with the above change)
> > except 
> > when the event start time is 12AM. This is a problem whether you make the
> > above 
> > change or not.
> > 
> > To see this, create an event with a daily recurrence repeating every 3 or
> > more 
> > days and a start time of 12AM. You'll see in the summary, daily, and
> weekly
> > 
> > views that the event and it's recurrences also show up on the previous
> days.
> > 
> > The month view is fine.
> > 
> > So it's some kind of boundary issue with 12AM. I think nextRecurrence() is
> 
> > incorrectly being called first with the previous day.
> > 
> > Thanks,
> > Jesse 
> > 
> > -- 
> > Kronolith mailing list: http://horde.org/kronolith/
> > Frequently Asked Questions: http://horde.org/faq/
> > To unsubscribe, mail: kronolith-unsubscribe@lists.horde.org
> > 
> 
> 
> 
> -- 
> Kronolith mailing list: http://horde.org/kronolith/
> Frequently Asked Questions: http://horde.org/faq/
> To unsubscribe, mail: kronolith-unsubscribe@lists.horde.org
> 
> 


:::::::::::::::::::::::::::::::::::::::: 
AMMMa AG - discover your knowledge
:::::::::::::::::::::::::::
Detmolder Str. 25-33 :: D-33604 Bielefeld
fon +49.521.96878-0 :: fax  +49.521.96878-20
http://www.ammma.de
::::::::::::::::::::::::::::::::::::::::::::::