From: <ji...@us...> - 2008-12-18 09:22:29
|
Update of /cvsroot/phpicalendar/phpicalendar/functions/parse In directory ddv4jf1.ch3.sourceforge.com:/tmp/cvs-serv21010/functions/parse Modified Files: end_vevent.php recur_functions.php Log Message: recurrence changes, add recur_tests calendars subdirectory, fix cpath Index: end_vevent.php =================================================================== RCS file: /cvsroot/phpicalendar/phpicalendar/functions/parse/end_vevent.php,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** end_vevent.php 17 Dec 2008 09:58:30 -0000 1.8 --- end_vevent.php 18 Dec 2008 09:22:23 -0000 1.9 *************** *** 243,247 **** $recur_data = array(); while ($next_range_unixtime <= $end_range_unixtime && $count > 0) { ! $year = date('Y', $next_range_unixtime); $month = date('m', $next_range_unixtime); $time = mktime(12,0,0,$month,date("d",$start_unixtime),$year); --- 243,247 ---- $recur_data = array(); while ($next_range_unixtime <= $end_range_unixtime && $count > 0) { ! $year = date("Y", $next_range_unixtime); $month = date('m', $next_range_unixtime); $time = mktime(12,0,0,$month,date("d",$start_unixtime),$year); *************** *** 254,258 **** break; case 'month': ! $times = expand_bymonthday(array($time)); foreach($times as $time){ add_recur(expand_byday($time)); --- 254,259 ---- break; case 'month': ! if(!empty($bymonthday)) $time = mktime(12,0,0,$month,1,$year); ! $times = expand_bymonthday(array($time));#echo "\n $month exp bymonthday";dump_times($times); foreach($times as $time){ add_recur(expand_byday($time)); *************** *** 261,267 **** case 'year': $times = expand_bymonth($time); #echo "exp bymonth";dump_times($times); ! $times = expand_byweekno($times); #echo "exp bymonth";dump_times($times); ! $times = expand_byyearday($times); #echo "exp bymonth";dump_times($times); ! $times = expand_bymonthday($times); #echo "exp bymonthday";dump_times($times); foreach($times as $time){ add_recur(expand_byday($time)); --- 262,268 ---- case 'year': $times = expand_bymonth($time); #echo "exp bymonth";dump_times($times); ! $times = expand_byweekno($times); #echo "exp byweekno";dump_times($times); ! $times = expand_byyearday($times); #echo "exp byyearday";dump_times($times); ! $times = expand_bymonthday($times); #echo "\nexp bymonthday";dump_times($times); foreach($times as $time){ add_recur(expand_byday($time)); Index: recur_functions.php =================================================================== RCS file: /cvsroot/phpicalendar/phpicalendar/functions/parse/recur_functions.php,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** recur_functions.php 17 Dec 2008 09:58:30 -0000 1.7 --- recur_functions.php 18 Dec 2008 09:22:23 -0000 1.8 *************** *** 28,62 **** global $count, $mArray_begin, $mArray_end, $except_dates, $start_date_unixtime,$end_range_unixtime; if (!is_array($times)) $times = array($times); - #echo "add_recur";dump_times($times); /*BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY, BYDAY, BYHOUR, BYMINUTE, BYSECOND and BYSETPOS*/ $times = restrict_bymonth($times,$freq); ! $times = restrict_byweekno($times,$freq); $times = restrict_byyearday($times,$freq); $times = restrict_bymonthday($times,$freq); $times = restrict_byday($times,$freq); - $times = restrict_bysetpos($times,$freq);#echo "restrict_bysetpos"; if($start_date_unixtime > $mArray_begin) $times[] = $start_date_unixtime; $times = array_unique($times); sort($times); $until_date = date("Ymd",$end_range_unixtime); - #dump_times($times); - #dump_times($recur_data); foreach ($times as $time){ #echo "time:". date("Ymd",$time)."\n"; $date = date("Ymd",$time); $time = strtotime("$date 12:00:00"); ! if(isset($time) && !in_array($time, $recur_data) && !in_array($date, $except_dates) && $time >= $start_date_unixtime && $date <= $until_date){ ! $count--; #echo "."; ! if($time >= $mArray_begin && $time <= $mArray_end && $count >= 0) $recur_data[] = $time; } } return; } function expand_bymonth($time){ ! global $bymonth, $year, $start_unixtime; if(empty($bymonth)) $bymonth = array(date("m", $start_unixtime)); foreach ($bymonth as $m){ ! $time = mktime(12,0,0,$m,date("d",$start_unixtime),$year); #echo "exm:".date("Ymd",$time)."\n"; $times[] = $time; } --- 28,67 ---- global $count, $mArray_begin, $mArray_end, $except_dates, $start_date_unixtime,$end_range_unixtime; if (!is_array($times)) $times = array($times); /*BYMONTH, BYWEEKNO, BYYEARDAY, BYMONTHDAY, BYDAY, BYHOUR, BYMINUTE, BYSECOND and BYSETPOS*/ $times = restrict_bymonth($times,$freq); ! # $times = restrict_byweekno($times,$freq); $times = restrict_byyearday($times,$freq); $times = restrict_bymonthday($times,$freq); $times = restrict_byday($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); $until_date = date("Ymd",$end_range_unixtime); foreach ($times as $time){ #echo "time:". date("Ymd",$time)."\n"; $date = date("Ymd",$time); $time = strtotime("$date 12:00:00"); ! if(isset($time) && !in_array($time, $recur_data) && ! !in_array($date, $except_dates) && $time >= $start_date_unixtime && $date <= $until_date){ ! $count--; #echo "\n.$count\n"; ! if($time >= $mArray_begin && ! $time <= $mArray_end ! && $count >= 0 ! ) $recur_data[] = $time; } } + #dump_times($recur_data); return; } function expand_bymonth($time){ ! global $bymonth, $byweekno, $bymonthday, $year, $start_unixtime, $freq_type; ! if(!empty($byweekno)) return $times; if(empty($bymonth)) $bymonth = array(date("m", $start_unixtime)); + $d = date("d",$start_unixtime); + if (!empty($bymonthday)) $d = 1; foreach ($bymonth as $m){ ! $time = mktime(12,0,0,$m,$d,$year); #echo "exm:".date("Ymd",$time)."\n"; $times[] = $time; } *************** *** 64,78 **** } function expand_byweekno($times){ ! global $byweekno, $year; if (empty($byweekno)) return $times; ! $py = $year-1; ! $ny = $year+1; ! foreach($times as $time){ ! foreach($byweekno as $weekno){ ! if($yearday >= 0) $day = strtotime("Jan 1 $year +$weekno weeks"); ! else $day = strtotime("Jan 1 $year $weekno weeks"); ! if(date("Y",$day == $year)) $new_times[] = $day; ! } ! } return $new_times; } --- 69,86 ---- } function expand_byweekno($times){ ! global $byweekno, $year, $freq_type, $wkst, $wkst3char; ! # byweekno is only used when repeat is yearly ! # when it's set, the input times are irrelevant ! # it also needs a byday. ! 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){ ! 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); ! } ! #dump_times($new_times); return $new_times; } *************** *** 83,93 **** $py = $year-1; $ny = $year+1; foreach($times as $time){ foreach($byyearday as $yearday){ ! if($yearday > 0) $day = strtotime("Dec 31 $py +$yearday days"); ! else $day = strtotime("Jan 1 $ny $yearday days"); if(date("Y",$day == $year)) $new_times[] = $day; } ! } return $new_times; } --- 91,103 ---- $py = $year-1; $ny = $year+1; + $new_times = array(); 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; } *************** *** 108,112 **** function expand_byday($time){ ! global $freq_type, $byday, $wkst3char, $year, $month, $start_unixtime,$summary; if (empty($byday)) return array($time); $times = array(); --- 118,122 ---- function expand_byday($time){ ! global $freq_type, $byday, $bymonth,$byweekno, $wkst3char, $year, $month, $start_unixtime, $summary; if (empty($byday)) return array($time); $times = array(); *************** *** 120,124 **** [3] => TH day abbr */ ! ereg ('([-\+]{0,1})?([0-9]{1})?([A-Z]{2})', $day, $byday_arr); $on_day = two2threeCharDays($byday_arr[3]); switch($freq_type){ --- 130,134 ---- [3] => TH day abbr */ ! ereg ('([-\+]{0,1})?([0-9]+)?([A-Z]{2})', $day, $byday_arr); $on_day = two2threeCharDays($byday_arr[3]); switch($freq_type){ *************** *** 129,143 **** break; case 'month': case 'year': ! $week_arr = array(1,2,3,4,5); ! if(isset($byday_arr[2]) && $byday_arr[2] !='') $week_arr = array($byday_arr[2]); ! $month_start = strtotime(date("Ym00",$time)); ! $month_end = strtotime(date("Ymt",$time))+ (36 * 60 * 60); ! foreach($week_arr as $week){ ! # echo "<pre>$summary".$byday_arr[1].$week.$on_day,date("Ymd",$month_start)."\n"; ! if($byday_arr[1] == '-') $next_date_time = strtotime($byday_arr[1].$week.$on_day,$month_end); ! else $next_date_time = strtotime($byday_arr[1].$week.$on_day,$month_start); ! # check that we're still in the same month ! if (date("m",$next_date_time) == date("m",$time) ) $times[] = $next_date_time; } break; --- 139,164 ---- 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]); ! $month_start = strtotime(date("Ym00",$time)); ! $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); ! } ! 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); ! else $next_date_time = strtotime($byday_arr[1].$week.$on_day,$month_start); ! # check that we're still in the same month ! 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; } break; *************** *** 153,158 **** function restrict_bymonth($times,$freq=''){ ! global $bymonth; ! if (empty($bymonth)) return $times; $new_times=array(); foreach ($times as $time){ --- 174,179 ---- function restrict_bymonth($times,$freq=''){ ! global $bymonth, $byyearday; ! if (empty($bymonth) || !empty($byyearday)) return $times; $new_times=array(); foreach ($times as $time){ *************** *** 180,185 **** } $yearday_arr[] = $yearday; ! } ! if(in_array(date("z", $time), $yearday_arr)) $new_times[] = $time; } return $new_times; --- 201,207 ---- } $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,227 **** function restrict_bysetpos($times,$freq=''){ ! global $rrule_array, $bysetpos; if(empty($bysetpos)) return $times; ! $new_times=array(); ! $n = count($times); foreach($bysetpos as $setpos){ ! $new_times[] = array_slice($times, $setpos, 1); } return $new_times; --- 240,249 ---- function restrict_bysetpos($times,$freq=''){ ! global $bysetpos; if(empty($bysetpos)) return $times; ! sort($times); ! $new_times=array(); foreach($bysetpos as $setpos){ ! $new_times[] = implode('',array_slice($times, $setpos, 1)); } return $new_times; *************** *** 232,236 **** global $summary; echo "<pre>$summary times:"; ! var_dump($times); foreach($times as $time) echo "\ndate:".date("Ymd his",$time); echo "</pre>"; --- 254,258 ---- global $summary; echo "<pre>$summary times:"; ! #var_dump($times); foreach($times as $time) echo "\ndate:".date("Ymd his",$time); echo "</pre>"; |