📄 calendar.class.inc
字号:
$year = date('Y', $last_occurence_week); $month = date('n', $last_occurence_week); $day = date('j', $last_occurence_week); }else { $last_occurence_week= $start_time; } $weekday = date("w", $last_occurence_week); for ($loop=0;$loop<2;$loop++) { $day_add=$loop*$event['repeat_every']*7; for ($i=0;$i<7;$i++) { if ($weekday>6) { $weekday -= 7; } if ($event[$day_db_field[$weekday]] == '1') { $occurence_time = mktime($event['start_hour'], $event['start_min'], 0, $month, $day+$i+$day_add, $year); $new_tzo = get_timezone_offset($occurence_time); $diff = ($original_tzo-$new_tzo)*3600; $occurence_time += $diff; if ($event['repeat_forever'] == '0' && ($occurence_time > $event['repeat_end_time'])) { return 0; }elseif ($occurence_time > $gmt_time) { return $occurence_time; } } $weekday++; } } break; case REPEAT_DAILY: if ($event['repeat_every'] > 1) { $interval = $start_time - $event['start_time']; $interval_days = floor($interval/86400); $devided = $interval_days/$event['repeat_every']; $rounded = ceil($devided); $last_repeat_day = $event['repeat_every']*$rounded*86400; $last_occurence_day = $event['start_time']+$last_repeat_day; $year = date('Y', $last_occurence_day); $month = date('n', $last_occurence_day); $day = date('j', $last_occurence_day); } $occurence_time = mktime($event['start_hour'], $event['start_min'], 0, $month, $day, $year); $new_tzo = get_timezone_offset($occurence_time); $diff = ($original_tzo-$new_tzo)*3600; $occurence_time += $diff; //echo date('Ymd G:i', $occurence_time).' '.date('Ymd G:i', $start_time).'<br />'; if ($occurence_time <= $gmt_time) { $occurence_time = mktime($event['start_hour'], $event['start_min'], 0, $month, $day+$event['repeat_every'], $year); $new_tzo = get_timezone_offset($occurence_time); $diff = ($original_tzo-$new_tzo)*3600; $occurence_time += $diff; }//echo date('Ymd', $occurence_time).' '.date('Ymd', $start_time).'<br />'; if ($event['repeat_forever'] == '0' && $occurence_time > $event['repeat_end_time']) { return 0; }else { return $occurence_time; } break; case REPEAT_MONTH_DATE: if ($event['repeat_every'] > 1) { $interval_years = $year-date('Y', $event['start_time']); $interval_months = $month - date('n', $event['start_time']); $interval_months = 12*$interval_years+$interval_months; $devided = $interval_months/$event['repeat_every']; $rounded = ceil($devided); $last_repeat_month = $event['repeat_every']*$rounded; $repeat_year = date('Y', $event['start_time']); $repeat_month = date('n', $event['start_time']); $repeat_day = date('j', $event['start_time']); $last_occurence_month = mktime(0,0,0, $repeat_month+$last_repeat_month, $repeat_day, $repeat_year); }else { $last_occurence_month = $start_time; } $year = date('Y', $last_occurence_month); $month = date('n', $last_occurence_month); $occurence_time = 0;//mktime($event['start_hour'], $event['start_min'], 0, $month, $event['start_day'], $year); while ($occurence_time <= $gmt_time) { $occurence_time = mktime($event['start_hour'], $event['start_min'], 0, $month, $event['start_day'], $year); $new_tzo = get_timezone_offset($occurence_time); $diff = ($original_tzo-$new_tzo)*3600; $occurence_time += $diff; //echo date('j', $occurence_time).' '.$event['start_day'].' '.date('Ymd G:i', $occurence_time).'<br>'; while(date('j', $occurence_time) != $event['start_day']) { $month+=$event['repeat_every']; $occurence_time = mktime($event['start_hour'], $event['start_min'], 0, $month, $event['start_day'], $year); $new_tzo = get_timezone_offset($occurence_time); $diff = ($original_tzo-$new_tzo)*3600; $occurence_time += $diff; //echo date('j', $occurence_time).' '.$event['start_day'].' '.date('Ymd G:i', $occurence_time).'<br>'; } $month+=$event['repeat_every']; } if ($event['repeat_forever'] == '0' && $occurence_time > $event['repeat_end_time']) { return 0; }else { return $occurence_time; } break; case REPEAT_MONTH_DAY: if ($event['repeat_every'] > 1) { $interval_years = $year-date('Y', $event['start_time']); $interval_months = $month - date('n', $event['start_time']); $interval_months = 12*$interval_years+$interval_months; $devided = $interval_months/$event['repeat_every']; $rounded = ceil($devided); $last_repeat_month = $event['repeat_every']*$rounded; $repeat_year = date('Y', $event['start_time']); $repeat_month = date('n', $event['start_time']); $repeat_day = date('j', $event['start_time']); $last_occurence_month = mktime(0,0,0, $repeat_month+$last_repeat_month, $repeat_day, $repeat_year); }else { $last_occurence_month = $start_time; } $year = date('Y', $last_occurence_month); $month = date('n', $last_occurence_month); for($m=$month;$m<=($month+$event['repeat_every']);$m+=$event['repeat_every']) { for($d=0;$d<31;$d++) { $occurence_time = mktime($event['start_hour'], $event['start_min'], 0, $m, $d, $year); $new_tzo = get_timezone_offset($occurence_time); $diff = ($original_tzo-$new_tzo)*3600; $occurence_time += $diff; //echo date('Ymd', $occurence_time).' == '.$month.'<br>'; $weekday = date("w", $occurence_time); if ($event[$day_db_field[$weekday]] == '1') { if (ceil(date('j',$occurence_time)/7) == $event['month_time']) { if ($event['repeat_forever'] == '0' && $occurence_time > $event['repeat_end_time']) { return 0; }elseif ($occurence_time > $gmt_time) { //echo 'FOUND: '.date('Ymd G:i', $occurence_time).'<br>'; return $occurence_time; } } } } } break; case REPEAT_YEARLY; if ($event['repeat_every'] > 1) { $interval_years = $year-date('Y', $event['start_time']); $devided = $interval_years/$event['repeat_every']; $rounded = ceil($devided); $last_repeat_year = $event['repeat_every']*$rounded; $repeat_year = date('Y', $event['start_time']); $repeat_month = date('n', $event['start_time']); $repeat_day = date('j', $event['start_time']); $last_occurence_year = mktime(0,0,0, $repeat_month, $repeat_day, $repeat_year+$last_repeat_year); }else { $last_occurence_year = $start_time; } $year = date('Y', $last_occurence_year); $occurence_time = mktime($event['start_hour'], $event['start_min'], 0, $event['start_month'], $event['start_day'], $year); $new_tzo = get_timezone_offset($occurence_time); $diff = ($original_tzo-$new_tzo)*3600; $occurence_time += $diff; if ($occurence_time <= $gmt_time) { $occurence_time = mktime($event['start_hour'], $event['start_min'], 0, $event['start_month'], $event['start_day'], $year+$event['repeat_every']); $new_tzo = get_timezone_offset($occurence_time); $diff = ($original_tzo-$new_tzo)*3600; $occurence_time += $diff; } //echo $event['repeat_every']. ': '.$event['name'].' '.date('Ymd G:i', $occurence_time).' '.date('Ymd G:i', $start_time).' <br />'; if ($event['repeat_forever'] == '0' && $occurence_time > $event['repeat_end_time']) { return 0; }else { return $occurence_time; } break; } } function search_events($user_id, $query, $start_time, $end_time, $sort_field='start_time', $sort_order='ASC', $start, $offset) { $calendars = array(); if(!$this->get_authorized_calendars($user_id)) { return false; } while($this->next_record()) { $calendars[] = $this->f('id'); } $sql = "SELECT DISTINCT cal_events.* FROM cal_events ". "INNER JOIN cal_events_calendars ON cal_events.id=cal_events_calendars.event_id ". "WHERE cal_events_calendars.calendar_id IN (".implode(',', $calendars).")"; if ($start_time > 0) { $sql .= " AND ((cal_events.repeat_type='".REPEAT_NONE."' AND ("; if($end_time>0) { $sql .= "cal_events.start_time<='$end_time' AND "; } $sql .= "cal_events.end_time>='$start_time')) OR ". "(cal_events.repeat_type!='".REPEAT_NONE."' AND "; if($end_time>0) { $sql .= "cal_events.start_time<='$end_time' AND "; } $sql .= "(cal_events.repeat_end_time>='$start_time' OR cal_events.repeat_forever='1')))"; } $sql .= " AND name LIKE '$query'"; if($sort_field != '' && $sort_order != '') { $sql .= " ORDER BY $sort_field $sort_order"; } $this->query($sql); $count = $this->num_rows(); if($offset>0) { $sql .= " LIMIT $start,$offset"; $this->query($sql); } return $count; } /* Times in GMT! */ function get_events($todos, $events, $completed, $calendar_id=0, $view_id=0, $user_id=0, $links=false, $interval_start=0, $interval_end=0, $sort_field='start_time', $sort_order='ASC', $start=0, $offset=0) { $todos = $todos ? '1' : '0'; $events = $events ? '1' : '0'; $sql = "SELECT DISTINCT cal_events.* FROM cal_events"; if ($view_id > 0) { $sql .= " INNER JOIN cal_events_calendars ON (cal_events.id=cal_events_calendars.event_id)"; $sql .= " INNER JOIN cal_views_calendars ON (cal_views_calendars.calendar_id=cal_events_calendars.calendar_id)"; }elseif ($calendar_id > 0) { $sql .= " INNER JOIN cal_events_calendars ON (cal_events.id=cal_events_calendars.event_id)"; }elseif($user_id > 0) { $sql .= " INNER JOIN cal_events_calendars ON (cal_events.id=cal_events_calendars.event_id)"; $sql .= " INNER JOIN cal_calendars ON (cal_events_calendars.calendar_id=cal_calendars.id)"; } $where=false; if($events=='0' || $todos=='0') { $sql .= " WHERE todo='$todos' "; $where=true; } if(!$completed && $todos=='1') { if($where) { $sql .= " AND "; }else { $sql .= " WHERE "; $where=true; } $sql .= "completion_time=0"; } if ($view_id > 0) { if($where) { $sql .= " AND "; }else { $sql .= " WHERE "; $where=true; } $sql .= "cal_views_calendars.view_id='$view_id'"; }elseif($user_id > 0) { if($where) { $sql .= " AND "; }else { $sql .= " WHERE "; $where=true; } $sql .= "cal_calendars.user_id='$user_id' AND cal_calendars.group_id=1"; }elseif ($calendar_id > 0) { if($where) { $sql .= " AND "; }else { $sql .= " WHERE "; $where=true; } $sql .= "cal_events_calendars.calendar_id='$calendar_id'"; } if(is_array($links)) { if(!count($links)) { return 0; } if($where) { $sql .= " AND "; }else { $sql .= " WHERE "; $where=true; } $sql .= "cal_events.link_id IN (".implode(',', $links).")"; } if ($interval_start > 0) { if($where) { $sql .= " AND "; }else { $sql .= " WHERE "; $where=true; } $sql .= "((cal_events.repeat_type='".REPEAT_NONE."' AND ("; if($interval_end>0) { $sql .= "cal_events.start_time<'$interval_end' AND "; } $sql .= "cal_events.end_time>'$interval_start')) OR ". "(cal_events.repeat_type!='".REPEAT_NONE."' AND "; if($interval_end>0) { $sql .= "cal_events.start_time<'$interval_end' AND "; } $sql .= "(cal_events.repeat_end_time>'$interval_start' OR cal_events.repeat_forever='1')))"; } if($sort_field != '' && $sort_order != '') { $sql .= " ORDER BY $sort_field $sort_order"; } if($offset == 0) { $this->query($sql); return $this->num_rows(); }else { $this->query($sql); $count = $this->num_rows(); $sql .= " LIMIT $start, $offset"; $this->query($sql); return $count; } } function get_events_in_array($calendar_id, $view_id, $user_id, $interval_start_time, $interval_end_time, $show_todos=false, $completed=false, $show_events=true, $links=false) { $this->events = array(); $this->events_sort=array(); if($count = $this->get_events($show_todos, $show_events, $completed, $calendar_id, $view_id, $user_id, $links, $interval_start_time, $interval_end_time)) { while($this->next_record()) { $this->calculate_event($this->Record, $interval_start_time, $interval_end_time); } } asort($this->events_sort); $sorted_events=array(); foreach($this->events_sort as $key=>$value) { $sorted_events[] = &$this->events[$key]; } return $sorted_events; } function calculate_event($event, $interval_start_time, $interval_end_time) { global $GO_SECURITY; if (!$event['write_permission'] = $GO_SECURITY->has_permission($GO_SECURITY->user_id, $event['acl_write'])) { $event['read_permission'] = $GO_SECURITY->has_permission($GO_SECURITY->user_id, $event['acl_read']); }else { $event['read_permission'] = true; } $cal = new calendar(); $duration = $event['end_time'] - $event['start_time']; if($duration == 0) $duration = 3600; $calculated_event = $event; $calculated_event['original_start_time'] = $event['start_time']; $calculated_event['original_end_time'] = $event['end_time']; $calculated_event['original_repeat_end_time'] = $event['repeat_end_time']; if($calculated_event['start_time'] = $this->get_next_recurrence_time(0, $interval_start_time-$duration, $event)) { $calculated_event['end_time'] = $calculated_event['start_time']+$duration; //echo date('Ymd G:i', $calculated_event['start_time']).' '.date('Ymd G:i', $calculated_event['end_time'])." ".$calculated_event['name']."<br><hr /><br />"; $loops = 0; while($calculated_event['start_time'] < $interval_end_time && $calculated_event['end_time'] > $interval_start_time) { $loops++; if(!$cal->is_exception($calculated_event['id'], $calculated_event['start_time'])) { $this->events[] = $calculated_event; //echo date('Ymd G:i', $interval_start_time).' '.date('Ymd G:i', $calculated_event['start_time']).' '.date('Ymd G:i', $calculated_event['end_time'])." ".$calculated_event['name']."<br><hr /><br />"; //$timezone_offset = get_timezone_offset($calculated_event['original_start_time'])*3600; $this->events_sort[] = $calculated_event['start_time']; } if($loops==1000) { global $GO_MODULES; //echo '<a href="'.$GO_MODULES->modules['calendar']['url'].'event.php?event_id='.$calculated_event['id']. '>Warning: event looped 1000 times '. date('Ymd G:i', $calculated_event['start_time']).' '. $calculated_event['name'].' event_id='.$calculated_event['id'].'</a><br>'; exit(); } $calculated_event['original_start_time'] = $event['start_time']; $calculated_event['original_end_time'] = $event['end_time']; $calculated_event['original_repeat_end_time'] = $event['repeat_end_time']; if($calculated_event['start_time'] = $this->get_next_recurrence_time(0, $calculated_event['start_time'], $event)) { $calculated_event['end_time'] = $calculated_event['start_time']+$duration; }else { $calculated_event['end_time'] = 0; } //echo $calculated_event['end_time']. ' > '.$interval_start_time.' '.date('Ymd G:i', $calculated_event['start_time']).' '.date('Ymd G:i', $calculated_event['end_time'])." ".$calculated_event['name']."<br><hr /><br />"; } } } function get_events_to_remind($user_id, $events=true,$todos=true, $formail=false) { $todos = $todos ? '1' : '0'; $gmt_time = get_gmt_time(); $sql = "SELECT * FROM cal_reminders INNER JOIN ". "cal_events ON cal_reminders.event_id=cal_events.id WHERE ". "cal_reminders.user_id='$user_id' AND remind_time<='$gmt_time'"; if(!$events) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -