aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--functions/parse/recur_functions.php85
1 files changed, 43 insertions, 42 deletions
diff --git a/functions/parse/recur_functions.php b/functions/parse/recur_functions.php
index 08b2bb1..ceab4e4 100644
--- a/functions/parse/recur_functions.php
+++ b/functions/parse/recur_functions.php
@@ -10,12 +10,12 @@ We will use two kinds of functions - those that restrict the date to allowed val
function add_recur($times,$freq=''){
global $recur_data;
- global $count, $mArray_begin, $mArray_end, $except_dates, $start_date, $start_date_unixtime,$end_range_unixtime,$until_unixtime, $day_offset, $current_view;
+ global $count, $mArray_begin, $mArray_end, $except_dates, $start_date, $start_date_unixtime,$end_range_unixtime,$until_unixtime, $day_offset, $current_view;
if (!is_array($times)) $times = array($times);
/* BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY, BYDAY, BYHOUR, BYMINUTE, BYSECOND and BYSETPOS */
#dump_times($times);
if ($current_view != 'search'){
- $times = restrict_bymonth($times,$freq);
+ $times = restrict_bymonth($times,$freq);
# $times = restrict_byweekno($times,$freq);
$times = restrict_byyearday($times,$freq);
$times = restrict_bymonthday($times,$freq);
@@ -23,28 +23,28 @@ function add_recur($times,$freq=''){
if($start_date_unixtime > $mArray_begin) $times[] = $start_date_unixtime;
$times = restrict_bysetpos($times,$freq);#echo "restrict_bysetpos";
$times = array_unique($times);
- sort($times);
+ sort($times);
}
$until_date = date("Ymd",$end_range_unixtime);
- foreach ($times as $time){
+ foreach ($times as $time){
#echo "time:". date("Ymd",$time)." $until_date<br>\n";
if (!isset($time) || $time == '') continue;
$date = date("Ymd",$time);
$time = strtotime("$date 12:00:00");
- # day offset fixes shifts across day boundaries due to time diffs.
+ # day offset fixes shifts across day boundaries due to time diffs.
# These are already fixed for the initial instance, but need to be fixed for recurrences
if (date("Ymd", $time) != $start_date) $time = $time + $day_offset * (24*60*60);
- if(isset($time)
+ if(isset($time)
&& $time != ''
- && !in_array($time, $recur_data)
- && !in_array($date, $except_dates)
- && $time <= $until_unixtime
- && $time >= $start_date_unixtime
+ && !in_array($time, $recur_data)
+ && !in_array($date, $except_dates)
+ && $time <= $until_unixtime
+ && $time >= $start_date_unixtime
&& $date <= $until_date
- ){
+ ){
$count--; #echo "\n.$count\n";
- if($time >= $mArray_begin
- && $time <= $mArray_end
+ if($time >= $mArray_begin
+ && $time <= $mArray_end
&& $count >= 0
) $recur_data[] = $time;
}
@@ -55,14 +55,14 @@ function add_recur($times,$freq=''){
function expand_bymonth($time){
global $bymonth, $byweekno, $bymonthday, $year, $start_unixtime, $freq_type;
if(!empty($byweekno)) return $time;
- if(empty($bymonth)) $bymonth = array(date("m", $start_unixtime));
+ if(empty($bymonth)) $bymonth = array(date("m", $start_unixtime));
$d = date("d",$start_unixtime);
if (!empty($bymonthday)) $d = 1;
- foreach ($bymonth as $m){
+ foreach ($bymonth as $m){
$time = mktime(12,0,0,$m,$d,$year); #echo "exm:".date("Ymd",$time)."\n";
$times[] = $time;
- }
- return $times;
+ }
+ return $times;
}
function expand_byweekno($times){
global $byweekno, $year, $freq_type, $wkst, $wkst3char;
@@ -72,8 +72,8 @@ function expand_byweekno($times){
if ($freq_type != 'year') return $times;
if (empty($byweekno)) return $times;
$total_weeks = date("W",mktime(12,0,0,12,24,$year) ) +1;
- $w1_start = strtotime("this $wkst3char", mktime(12,0,0,1,1,$year) );
- foreach($byweekno as $weekno){
+ $w1_start = strtotime("this $wkst3char", mktime(12,0,0,1,1,$year) );
+ foreach($byweekno as $weekno){
if($weekno < 0) $weekno = $weekno + $total_weeks;
#echo "\n $wkst3char w1st:".date("Ymd", $w1_start)." ".date("Ymd", mktime(12,0,0,1,1,$year))." weekno:$weekno";
$new_times[] = strtotime("+".(($weekno-1)*7)."days",$w1_start);
@@ -85,15 +85,15 @@ function expand_byweekno($times){
function expand_byyearday($times){
global $byyearday, $year;
if (empty($byyearday)) return $times;
- $py = $year-1;
+ $py = $year-1;
$ny = $year+1;
$new_times = array();
- foreach($times as $time){
+ foreach($times as $time){
foreach($byyearday as $yearday){
if($yearday > 0){ $day = strtotime("+$yearday days Dec 31, $py");#echo "\n".date("Ymd",$day)." = +$yearday days Dec 31, $py";
}else $day = strtotime("Jan 1 $ny $yearday days");
if(date("Y",$day == $year)) $new_times[] = $day;
- }
+ }
}
# dump_times($new_times);
return $new_times;
@@ -102,14 +102,14 @@ function expand_byyearday($times){
function expand_bymonthday($times){
global $bymonthday, $year;
if (empty($bymonthday)) return $times;
- foreach($times as $time){
+ foreach($times as $time){
$month = date('m',$time);
- foreach($bymonthday as $monthday){
+ foreach($bymonthday as $monthday){
if($monthday < 0) $monthday = date("t",$time) + $monthday +1;
$new_times[] = mktime(12,0,0,$month,$monthday,$year);
#echo "monthday:$monthday\n";
- }
- }
+ }
+ }
return $new_times;
}
@@ -131,21 +131,22 @@ function expand_byday($time){
switch($freq_type){
case 'week':
#need to find the first day of the appropriate week.
- $next_date_time = strtotime("this $on_day",strtotime($the_sunday)) + (12 * 60 * 60);
- $times[] = $next_date_time;
+ $next_date_time = strtotime("this $on_day",strtotime($the_sunday)) + (12 * 60 * 60);
+ $times[] = $next_date_time;
break;
case 'month':
$time = mktime(12,0,0,$month,1,$year);
case 'year':
if(empty($byweekno)){
$week_arr = array(1,2,3,4,5);
- if(isset($byday_arr[2]) && $byday_arr[2] !='') $week_arr = array($byday_arr[2]);
+ if(isset($byday_arr[2]) && $byday_arr[2] !='') $week_arr = array($byday_arr[2]);
$month_start = strtotime(date("Ym01",$time)) - (24 * 60 * 60);
$month_end = strtotime(date("Ymt",$time))+ (36 * 60 * 60);
if($freq_type == 'year' && empty($bymonth)){
$month_start = mktime(12,0,0,1,0,$year);
$month_end = mktime(12,0,0,1,1,$year+1);
}
+ $month_start_day = strtolower(date("D", $month_start));
foreach($week_arr as $week){
#echo "<pre>$summary ".$byday_arr[1].$week.$on_day." st:".date("Ymd",$month_start)." t:".date("Ymd",$time)."\n";
if($byday_arr[1] == '-') $next_date_time = strtotime($byday_arr[1].$week.$on_day,$month_end);
@@ -157,17 +158,17 @@ function expand_byday($time){
$next_date_time = strtotime($byday_arr[1] . $week . $on_day, ($month_start + $special_offset));
}
# check that we're still in the same month
- if (date("m",$next_date_time) == date("m",$time) ) $times[] = $next_date_time;
+ if (date("m",$next_date_time) == date("m",$time) ) $times[] = $next_date_time;
}
}else{
# byweekno should act like freq_type = week
- $next_date_time = strtotime("this $on_day",strtotime($the_sunday)) + (12 * 60 * 60);
- $times[] = $next_date_time;
+ $next_date_time = strtotime("this $on_day",strtotime($the_sunday)) + (12 * 60 * 60);
+ $times[] = $next_date_time;
}
break;
default:
$month_start = strtotime(date("Ym01",$time));
- $next_date_time = strtotime($byday_arr[1].$byday_arr[2].$on_day, $month_start);
+ $next_date_time = strtotime($byday_arr[1].$byday_arr[2].$on_day, $month_start);
}
}
#echo "exp byday";dump_times($times);
@@ -179,9 +180,9 @@ function restrict_bymonth($times,$freq=''){
global $bymonth, $byyearday;
if (empty($bymonth) || !empty($byyearday)) return $times;
$new_times=array();
- foreach ($times as $time){
+ foreach ($times as $time){
if(in_array(date("m", $time), $bymonth)) $new_times[] = $time;
- }
+ }
return $new_times;
}
function restrict_byweekno($times,$freq=''){
@@ -201,12 +202,12 @@ function restrict_byyearday($times,$freq=''){
if($yearday < 0){
$yearday = 365 + $yearday +1;
if(date("L",$time)) $yearday += 1;
- }
+ }
$yearday_arr[] = $yearday;
}
# date(z,$time) gives 0 for Jan 1
if(in_array((date("z", $time)+1), $yearday_arr)) $new_times[] = $time;
- }
+ }
return $new_times;
}
@@ -218,9 +219,9 @@ function restrict_bymonthday($times,$freq=''){
foreach ($bymonthday as $monthday){
if($monthday < 0) $monthday = date("t",$time) + $monthday +1;
$monthday_arr[] = $monthday;
- }
+ }
if(in_array(date("j", $time), $monthday_arr)) $new_times[] = $time;
- }
+ }
return $new_times;
}
function restrict_byday($times,$freq=''){
@@ -238,18 +239,18 @@ function restrict_byday($times,$freq=''){
}
$new_times=array();
foreach ($times as $time) if(in_array(strtolower(date("D", $time)), $byday3)) $new_times[] = $time;
- return $new_times;
+ return $new_times;
}
function restrict_bysetpos($times,$freq=''){
global $bysetpos;
if(empty($bysetpos)) return $times;
sort($times);
- $new_times=array();
+ $new_times=array();
foreach($bysetpos as $setpos){
$new_times[] = implode('',array_slice($times, $setpos, 1));
}
- return $new_times;
+ return $new_times;
}
# for diagnostics

© 2014-2024 Faster IT GmbH | imprint | privacy policy