calendar.class.inc
来自「国外很不错的一个开源OA系统Group-Office」· INC 代码 · 共 2,387 行 · 第 1/5 页
INC
2,387 行
function search_events($user_id, $calendar_id=0, $view_id=0, $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 "; if($view_id>0 || $calendar_id==0) { if($view_id>0) { $calendars = $this->get_view_calendars($view_id); }else { $calendars = array(); $this->get_authorized_calendars($user_id); while($this->next_record()) { $calendars[] = $this->f('id'); } } if(!count($calendars)) { return false; }else { foreach($calendars as $calendar) { $ids[]=$calendar['id']; } } $sql .= "cal_events_calendars.calendar_id IN (".implode(',', $ids).")"; }else { $sql .= "cal_events_calendars.calendar_id=$calendar_id"; } 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, $only_busy_events=false) { $todos = $todos ? '1' : '0'; $events = $events ? '1' : '0'; $sql = "SELECT DISTINCT cal_events.*"; $sql .= " 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($only_busy_events) { if($where) { $sql .= " AND "; }else { $sql .= " WHERE "; $where=true; } $sql .= "busy='1'"; } 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=0"; }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, $with_calendars=false,$only_busy_events=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,'start_time','ASC',0,0,$only_busy_events)) { while($this->next_record()) { $this->calculate_event($this->Record, $interval_start_time, $interval_end_time, $with_calendars); } } //return $this->events; 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, $with_calendars=false) { global $GO_SECURITY; $cal = new calendar(); $cal->set_permissions($event); $duration = $event['end_time'] - $event['start_time']; if($duration == 0) $duration = 3600; if($with_calendars) { $event_cal_count = $cal->get_calendars_from_event($event['id']); while($cal->next_record()) { $event['calendars'][]=$cal->Record; } } $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']; /*$exceptions=array(); $cal->get_exceptions($event['id']); while($cal->next_record()) { $exceptions[]=$this->f('time'); }*/ //echo 'Ik ga presenteren '.date('Ymd G:i', $interval_start_time).' tot '.date('Ymd G:i', $interval_end_time).'<br>'; //echo 'Gevraagd eerst volgende keer na '.date('Ymd G:i', $interval_start_time-$duration); 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 'Gevonden '.date('Ymd G:i', $calculated_event['start_time']).' tot '.date('Ymd G:i', $calculated_event['end_time']).' <br />'; //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'])) { //echo 'Ik voeg toe '.date('Ymd G:i', $calculated_event['start_time']).'<br />'; $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==100) { 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']; //echo 'Gevraagd eerst volgende keer na '.date('Ymd G:i', $calculated_event['start_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; //echo 'Gevonden '.date('Ymd G:i', $calculated_event['start_time']).' tot '.date('Ymd G:i', $calculated_event['end_time']).' <br />'; }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) { $sql .= " AND cal_events.todo='1'"; }elseif(!$todos) { $sql .= " AND cal_events.todo='0'"; } if($formail) { $sql .= " AND cal_reminders.email_sent='0'"; } $this->query($sql); return $this->num_rows(); } function has_read_permission($user_id, $event, $check_write_permission=true) { global $GO_SECURITY, $GO_MODULES; if($user_id==0) { return false; }elseif($event['user_id']==$user_id || $GO_SECURITY->has_permission($user_id, $GO_MODULES->modules['calendar']['acl_write'])) { return true; }elseif($event['permissions']==PRIVATE_EVENT) { return false; }else { $sql = "SELECT cal_calendars.id FROM cal_events_calendars ". "INNER JOIN cal_calendars ON cal_events_calendars.calendar_id=cal_calendars.id ". "INNER JOIN acl ON (cal_calendars.acl_read=acl.acl_id OR cal_calendars.acl_write=acl.acl_id) ". "LEFT JOIN users_groups ON users_groups.group_id=acl.group_id ". "WHERE (acl.user_id=$user_id OR users_groups.user_id=$user_id) AND ". "cal_events_calendars.event_id=".$event['id']; $this->query($sql); if($this->next_record()) { return true; }elseif($check_write_permission) { return $this->has_write_permission($user_id, $event); }else { return false; } } } function get_resource_group_id_by_event_id($event_id) { $this->get_event_subscribtions($event_id); if($this->next_record()) { if($calendar = $this->get_calendar($this->f('calendar_id'))) { if($calendar['group_id']>1) { return $calendar['group_id']; } } } return false; } function has_write_permission($user_id, $event) { global $GO_SECURITY, $GO_MODULES; if($user_id==0) { return false; }elseif($event['user_id']==$user_id || $GO_SECURITY->has_permission($user_id, $GO_MODULES->modules['calendar']['acl_write'])) { return true; }else { switch($event['permissions']) { case PARTICIPANTS_WRITE: $sql = "SELECT * FROM cal_events_calendars ". "INNER JOIN cal_
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?