Fix biweekly sunday events.
authorGunnar Wrobel <p@rdus.de>
Mon, 30 Nov 2009 20:22:50 +0000 (21:22 +0100)
committerGunnar Wrobel <p@rdus.de>
Mon, 30 Nov 2009 20:22:50 +0000 (21:22 +0100)
framework/Date/lib/Horde/Date/Recurrence.php
framework/Date/test/Horde/Date/RecurrenceTest.php

index 4046c0a..ba7f547 100644 (file)
@@ -442,15 +442,15 @@ class Horde_Date_Recurrence
             }
 
             $next = clone $start_week;
-            $next->mday += $recur - 1;
+            $next->mday += $recur;
             while ($next->compareDateTime($after) < 0 &&
                    $next->compareDateTime($after_week_end) < 0) {
-                ++$next->mday;
                 if ($this->hasRecurCount()
                     && $next->compareDateTime($after) < 0
                     && $this->recurOnDay((int)pow(2, $next->dayOfWeek()))) {
                     $recurrences++;
                 }
+                ++$next->mday;
             }
             if ($this->hasRecurCount() &&
                 $recurrences >= $this->recurCount) {
index ca60813..8087359 100644 (file)
@@ -253,6 +253,21 @@ class Horde_Date_RecurrenceTest extends PHPUnit_Framework_TestCase
                             $this->_getRecurrences($r));
     }
 
+    public function testBiweeklySundayEvent()
+    {
+        $r = new Horde_Date_Recurrence('2009-11-29 06:00:00');
+        $r->setRecurType(Horde_Date_Recurrence::RECUR_WEEKLY);
+        $r->setRecurOnDay(Horde_Date::MASK_SUNDAY);
+        $r->setRecurInterval(2);
+        $r->setRecurCount(3);
+        $this->assertEquals('W2 SU #3', $r->toRRule10($this->ical));
+        $this->assertEquals('FREQ=WEEKLY;INTERVAL=2;BYDAY=SU;COUNT=3', $r->toRRule20($this->ical));
+        $this->assertEquals(array('2009-11-29 06:00:00',
+                                  '2009-12-13 06:00:00',
+                                  '2009-12-27 06:00:00'),
+                            $this->_getRecurrences($r));
+    }
+
     public function testMonthlyEnd()
     {
         $r = new Horde_Date_Recurrence('2007-03-01 10:00:00');