Fix running weekly task if last run was in the year before the next run.
authorJan Schneider <jan@horde.org>
Sat, 1 Jan 2011 22:18:01 +0000 (23:18 +0100)
committerJan Schneider <jan@horde.org>
Sat, 1 Jan 2011 22:18:01 +0000 (23:18 +0100)
framework/LoginTasks/lib/Horde/LoginTasks.php

index 17f0d63..1836b9b 100644 (file)
@@ -124,15 +124,22 @@ class Horde_LoginTasks
                     break;
 
                 case self::MONTHLY:
-                    $addtask = (($cur_date['year'] > $lastrun['year']) || ($cur_date['mon'] > $lastrun['mon']));
+                    $addtask = (($cur_date['year'] > $lastrun['year']) ||
+                                ($cur_date['mon'] > $lastrun['mon']));
                     break;
 
                 case self::WEEKLY:
-                    $addtask = (($cur_date['wday'] < $lastrun['wday']) || ($cur_date['yday'] >= $lastrun['yday'] + 7));
+                    $days = date('L', $lastrun[0]) ? 366 : 365;
+                    $addtask = (($cur_date['wday'] < $lastrun['wday']) ||
+                                (($cur_date['year'] == $lastrun['year']) &&
+                                 ($cur_date['yday'] >= $lastrun['yday'] + 7)) ||
+                                (($cur_date['year'] > $lastrun['year']) &&
+                                 ($cur_date['yday'] >= $lastrun['yday'] + 7 - $days)));
                     break;
 
                 case self::DAILY:
-                    $addtask = (($cur_date['year'] > $lastrun['year']) || ($cur_date['yday'] > $lastrun['yday']));
+                    $addtask = (($cur_date['year'] > $lastrun['year']) ||
+                                ($cur_date['yday'] > $lastrun['yday']));
                     break;
 
                 case self::EVERY: