calendar.class.inc
来自「国外很不错的一个开源OA系统Group-Office」· INC 代码 · 共 2,387 行 · 第 1/5 页
INC
2,387 行
$this->query($sql); if($this->next_record()) { return $this->f('id'); } return false; } function update_event($event) { unset($event['read_permission'], $event['write_permission']); if(!isset($event['mtime']) || $event['mtime'] == 0) { $event['mtime'] = get_gmt_time(); } if(isset($event['completion_time']) && $event['completion_time'] > 0 && $this->copy_completed($event['id'])) { $event['repeat_type'] = REPEAT_NONE; $event['repeat_end_time'] = 0; } if(isset($event['exceptions'])) { $this->delete_exceptions($event['id']); foreach($event['exceptions'] as $exception_time) { if($exception_time!==false) { $exception['event_id']=$event['id']; $exception['time']=$exception_time; $this->add_exception($exception); } } unset($event['exceptions']); } return $this->update_row('cal_events', 'id', $event); } function clear_subscriptions($event_id) { $sql = "DELETE FROM cal_events_calendars WHERE event_id='$event_id'"; return $this->query($sql); } function subscribe_event($event_id, $calendar_id) { $sql = "INSERT INTO cal_events_calendars (calendar_id, event_id) VALUES ('$calendar_id','$event_id')"; $this->query($sql); $update_event['id'] = $event_id; $update_event['mtime'] = get_gmt_time(); return $this->update_event($update_event); } function unsubscribe_event($event_id, $calendar_id) { $sql = "DELETE FROM cal_events_calendars WHERE calendar_id='$calendar_id' AND event_id='$event_id'"; return $this->query($sql); } function event_is_subscribed($event_id, $calendar_id) { $sql = "SELECT * FROM cal_events_calendars WHERE event_id='$event_id' AND calendar_id='$calendar_id'"; $this->query($sql); return $this->next_record(); } function get_event_subscribtions($event_id) { $sql = "SELECT * FROM cal_events_calendars WHERE event_id='$event_id'"; $this->query($sql); return $this->num_rows(); } function get_calendars_from_event($event_id) { $sql = "SELECT id,name,background FROM cal_calendars INNER JOIN cal_events_calendars ". "ON cal_events_calendars.calendar_id=cal_calendars.id ". "WHERE cal_events_calendars.event_id='$event_id'"; $this->query($sql); return $this->num_rows(); } function get_remind_time($user_id, $event_id) { $sql = "SELECT remind_time FROM cal_reminders WHERE event_id='$event_id' AND user_id='$user_id'"; $this->query($sql); if($this->next_record()) { return $this->f('remind_time'); } return false; } function add_reminder($reminder) { return $this->insert_row('cal_reminders', $reminder); } function update_reminder($user_id, $event_id, $remind_time) { return $this->query("UPDATE cal_reminders SET remind_time='$remind_time',email_sent='0' WHERE user_id='$user_id' AND event_id='$event_id'"); } function reminder_mail_sent($user_id, $event_id) { return $this->query("UPDATE cal_reminders SET email_sent='1' WHERE user_id='$user_id' AND event_id='$event_id'"); } function delete_reminder($user_id, $event_id) { return $this->query("DELETE FROM cal_reminders WHERE user_id='$user_id' AND event_id='$event_id'"); } function delete_reminders($user_id) { return $this->query("DELETE FROM cal_reminders WHERE user_id='$user_id'"); } /* returns next starting time of an event in GMT timezone */ function get_next_recurrence_time($event_id, $gmt_time=0, $event='') { //echo date('Ymd G:i', $gmt_time); if ($event == '') { if(!$event = $this->get_event($event_id)) { return false; } } if ($gmt_time == 0) { $gmt_time = get_gmt_time(); } if($gmt_time<0) { $gmt_time=0; } $event_tzo = $event['timezone']; //Daily event going into other dst zone fail //if ($event['DST'] > 0 && date('I', $event['start_time']) != 0) { if ($event['DST'] > 0 && date('I', $gmt_time) != 0) { $event_tzo += $event['DST']; } $event = $this->shift_days_to_local($event, $event_tzo); $event_tzo=$event_tzo*3600; $event['start_time'] += $event_tzo; $gmt_time += $event_tzo; //echo ' -> '.date('Ymd G:i', $gmt_time).'<br />'; if ($event['repeat_forever'] == '0' && ($event['repeat_end_time'] < $gmt_time && $event['repeat_type'] != REPEAT_NONE)) { return 0; } $duration = 0;//$event['end_time']-$event['start_time']; if ($event['start_time'] > $gmt_time && $event['repeat_type'] != REPEAT_NONE) { $start_time = $event['start_time']-$duration; }else { $start_time = $gmt_time; } $original_tzo = get_timezone_offset($event['start_time']); $year = date('Y', $start_time); $month = date('n', $start_time); $day = date('j', $start_time); $event['start_year'] = date('Y', $event['start_time']); $event['start_month'] = date('n', $event['start_time']); $event['start_day'] = date('j', $event['start_time']); $event['start_hour'] = date('G', $event['start_time']); $event['start_min'] = date('i', $event['start_time']); $day_db_field[0] = 'sun'; $day_db_field[1] = 'mon'; $day_db_field[2] = 'tue'; $day_db_field[3] = 'wed'; $day_db_field[4] = 'thu'; $day_db_field[5] = 'fri'; $day_db_field[6] = 'sat'; switch($event['repeat_type']) { case REPEAT_NONE: if($event['start_time'] > $gmt_time) { return $event['start_time']-$event_tzo; }else { return 0; } break; case REPEAT_WEEKLY: if ($event['repeat_every'] > 1) { $interval = $start_time - $event['start_time']; $interval_weeks = floor($interval/604800); $devided = $interval_weeks/$event['repeat_every']; $rounded = ceil($devided); $last_repeat_week = $event['repeat_every']*$rounded*604800; $last_occurence_week = $event['start_time']+$last_repeat_week; $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-$event_tzo; } } $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); //echo date('Ymd G:i', $occurence_time).'<br>'; $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-$event_tzo; } 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-$event_tzo; } 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); //echo ' '.date('Ymd', $last_occurence_month).' == '.$month.'<br>'; }else { $last_occurence_month = $start_time; } $year = date('Y', $last_occurence_month); $month = date('n', $last_occurence_month); $day = date('j', $last_occurence_month); for($m=$month;$m<=($month+$event['repeat_every']);$m+=$event['repeat_every']) { //echo $m.'<br>'; for($d=0;$d<31;$d++) { //$occurence_time = mktime($event['start_hour'], $event['start_min'], 0, $m, $day+$d, $year); $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); //echo date('Ymd', $occurence_time).' == '.$weekday.'<br>'; if ($event[$day_db_field[$weekday]] == '1') { //echo ceil(date('j',$occurence_time)/7).' = '.$event['month_time'].'<br>'; 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-$event_tzo; } } } } } 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-$event_tzo; } break; } }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?