diff --git a/calendar/inc/class.calendar.inc.php b/calendar/inc/class.calendar.inc.php index e768d08845..3ac9de93c9 100755 --- a/calendar/inc/class.calendar.inc.php +++ b/calendar/inc/class.calendar.inc.php @@ -301,7 +301,6 @@ class calendar extends calendar_ { $rep_events = $this->repeating_events[$i]; $id = $rep_events->id; - $frequency = intval($rep_events->rpt_freq); $start = $this->localdates($rep_events->datetime); if($rep_events->rpt_use_end) { @@ -311,83 +310,104 @@ class calendar extends calendar_ { $enddate = $this->makegmttime(0,0,0,1,1,2007); } + $full_event_date = date('Ymd',mktime(0,0,0,$rep_events->start->month,$rep_events->start->mday,$rep_events->start->year)); // only repeat after the beginning, and if there is an rpt_end before the end date if (($rep_events->rpt_use_end && ($date['full'] > $enddate['full'])) || - ($date['full'] < $start['full'])) + ($date['full'] < $full_event_date)) { continue; } - if ($date['full'] == $start['full']) + if ($date['full'] == $full_event_date) { $link[$this->repeating_event_matches++] = $id; } - elseif ($rep_events->rpt_type == 'daily') - { - if ((floor(($date['bd'] - $start['bd'])/86400) % $frequency)) - { - continue; - } - else - { - $link[$this->repeating_event_matches++] = $id; - } - } - elseif ($rep_events->rpt_type == 'weekly') - { - $isDay = strtoupper(substr($rep_events->rpt_days, $date['dow'], 1)); - - if (floor(($date['bd'] - $start['bd'])/604800) % $frequency) - { - continue; - } - - if (strcmp($isDay,'Y') == 0) - { - $link[$this->repeating_event_matches++] = $id; - } - } - elseif ($rep_events->rpt_type == 'monthlybyday') - { - if ((($date['year'] - $start['year']) * 12 + $date['month'] - $start['month']) % $frequency) - { - continue; - } - - if (($start['dow'] == $date['dow']) && - (ceil($start['day']/7) == ceil($date['day']/7))) - { - $link[$this->repeating_event_matches++] = $id; - } - } - elseif ($rep_events->rpt_type == 'monthlybydate') - { - if ((($date['year'] - $start['year']) * 12 + $date['month'] - $start['month']) % $frequency) - { - continue; - } - - if ($date['day'] == $start['day']) - { - $link[$this->repeating_event_matches++] = $id; - } - } - elseif ($rep_events->rpt_type == 'yearly') - { - if (($date['year'] - $start['year']) % $frequency) - { - continue; - } - - if ($date['dm'] == $start['dm']) - { - $link[$this->repeating_event_matches++] = $id; - } - } else { - // unknown rpt type - because of all our else ifs + switch($rep_events->recur_type) + { + case RECUR_DAILY: + if (floor(($date['bd'] - $start['bd'])/86400) % $rep_events->recur_interval) + { + continue; + } + else + { + $link[$this->repeating_event_matches++] = $id; + } + break; + case RECUR_WEEKLY: + $check = 0; + switch($date['dow']) + { + case 0: + $check = M_SUNDAY; + break; + case 1: + $check = M_MONDAY; + break; + case 2: + $check = M_TUESDAY; + break; + case 3: + $check = M_WEDNESDAY; + break; + case 4: + $check = M_THURSDAY; + break; + case 5: + $check = M_FRIDAY; + break; + case 6: + $check = M_SATURDAY; + break; + } + if (floor(($date['bd'] - $start['bd'])/604800) % $rep_events->recur_interval) + { + continue; + } + + if ($rep_events->recur_data & $check) + { + $link[$this->repeating_event_matches++] = $id; + } + break; + case RECUR_MONTHLY_WDAY: + if ((($date['year'] - $rep_events->start->year) * 12 + $date['month'] - $rep_events->start->month) % $rep_events->recur_interval) + { + continue; + } + + if (($this->day_of_week($rep_events->start->year,$rep_events->start->month,$rep_events->start->mday) == $date['dow']) && + (ceil($rep_events->start->mday/7) == ceil($date['day']/7))) + { + $link[$this->repeating_event_matches++] = $id; + } + break; + case RECUR_MONTHLY_MDAY: + if ((($date['year'] - $rep_events->start->year) * 12 + $date['month'] - $rep_events->start->month) % $rep_events->recur_interval) + { + continue; + } + + if ($date['day'] == $rep_events->start->mday) + { + $link[$this->repeating_event_matches++] = $id; + } + break; + case RECUR_YEARLY: + if (($date['year'] - $rep_events->start->year) % $rep_events->recur_interval) + { + continue; + } + + if ($date['dm'] == date('dm',mktime(0,0,0,$rep_events->start->month,$rep_events->start->mday,$rep_events->start->year))) + { + $link[$this->repeating_event_matches++] = $id; + } + break; + } } } // end for loop @@ -766,8 +786,11 @@ class calendar extends calendar_ for ($j=0;$j<7;$j++) { $date = $this->gmtdate($startdate + ($j * 24 * 3600)); - $p->set_var('column_data',''); - $p->set_var('extra',''); + $var = Array( + 'column_data' => '', + 'extra' => '' + ); + $p->set_var($var); if ($weekly || ($date['full'] >= $monthstart && $date['full'] <= $monthend)) { @@ -778,35 +801,39 @@ class calendar extends calendar_ if ($date['full'] == $this->today['full']) { - $p->set_var('extra',' bgcolor="'.$phpgw_info['theme']['cal_today'].'"'); + $extra = ' bgcolor="'.$phpgw_info['theme']['cal_today'].'"'; } else { - $p->set_var('extra',' bgcolor="'.$cellcolor.'"'); + $extra = ' bgcolor="'.$cellcolor.'"'; } + $new_event_link = ''; if (!$this->printer_friendly) { - $str = ''; if($this->check_perms(PHPGW_ACL_ADD) == True) { - $str .= ''; - $str .= 'link($phpgw_info['server']['webserver_url'].'/calendar/edit_entry.php','year='.$date_year.'&month='.$date['month'].'&day='.$date['day'].'&owner='.$this->owner).'">'; + $new_event_link .= 'set_var('new_event_link',$str); - $str = ''.$date['day'].''; - $p->set_var('day_number',$str); + $day_number = ''.$date['day'].''; } else { - $p->set_var('new_event_link',''); - $p->set_var('day_number',$date['day']); + $day_number = $date['day']; } + + $var = Array( + 'extra' => $extra, + 'new_event_link' => $new_event_link, + 'day_number' => $day_number + ); + + $p->set_var($var); $p->parse('column_data','month_day',True); @@ -815,22 +842,24 @@ class calendar extends calendar_ if ($this->sorted_events_matching) { $lr_events = CreateObject('calendar.calendar_item'); - $p->set_var('week_day_font_size','2'); - $p->set_var('events',''); + $var = Array( + 'week_day_font_size' => '2', + 'events' => '' + ); + $p->set_var($var); for ($k=0;$k<$this->sorted_events_matching;$k++) { $lr_events = $rep_events[$k]; $pict = 'circle.gif'; - for ($outer_loop=0;$outer_looprepeated_events);$outer_loop++) + if($lr_events->recur_type != RECUR_NONE) { - $gr_events = $this->repeating_events[$outer_loop]; - if ($gr_events->id == $lr_events->id) - { - $pict = 'rpt.gif'; - } + $pict = 'rpt.gif'; } +// if(count($lr_events->participants) > 1) +// { +// $pict = 'multi_1.gif'; +// } - $p->set_var('link_entry',''); $description = $this->is_private($lr_events,$owner,'description'); if (($this->printer_friendly == False) && (($description == 'private' && $this->check_perms(16)) || ($description != 'private')) && $this->check_perms(PHPGW_ACL_EDIT)) @@ -844,6 +873,10 @@ class calendar extends calendar_ $p->set_var($var); $p->parse('link_entry','link_pict'); } + else + { + $p->set_var('link_entry',''); + } if (intval($phpgw->common->show_date($lr_events->datetime,'Hi'))) { @@ -856,7 +889,7 @@ class calendar extends calendar_ $format = 'H:i'; } - if($lr_events->datetime < $date['raw'] && $lr_events->rpt_type=='none') + if($lr_events->datetime < $date['raw'] && $lr_events->recur_type==RECUR_NONE) { $temp_time = $this->makegmttime(0,0,0,$date['month'],$date['day'],$date['year']); $start_time = $phpgw->common->show_date($temp_time['raw'],$format); @@ -903,7 +936,7 @@ class calendar extends calendar_ } $p->parse('column_data','week_day_events',True); $p->set_var('events',''); - if (!$j || ($j && $date["full"] == $monthstart)) + if (!$j || ($j && $date['full'] == $monthstart)) { if(!$this->printer_friendly) {