📄 calendar.class.inc
字号:
return $this->Record; } return false; } function get_view_by_name($user_id, $name) { $sql = "SELECT * FROM cal_views WHERE user_id='$user_id' AND name='$name'"; $this->query($sql); if($this->next_record()) { return $this->Record; } return false; } function user_has_calendar($user_id) { $sql = "SELECT id FROM cal_calendars WHERE user_id='$user_id'"; $this->query($sql); return $this->next_record(); } function add_participant($event_id, $name, $email, $user_id = 0) { $id = $this->nextid("cal_participants"); if ($id > 0) { $sql = "INSERT INTO cal_participants (id, event_id, user_id, name, email) ". "VALUES ('$id', '$event_id', '$user_id', '$name', '$email')"; if ($this->query($sql)) { return $id; }else { return -1; } }else { return -1; } } function delete_participant($event_id, $email) { $sql = "DELETE FROM cal_participants WHERE event_id='$event_id' AND email='$email'"; return $this->query($sql); } function remove_participants($event_id) { $sql = "DELETE FROM cal_participants WHERE event_id='$event_id'"; return $this->query($sql); } function is_participant($event_id, $email) { $sql = "SELECT id FROM cal_participants WHERE event_id='$event_id' AND email='$email'"; $this->query($sql); return $this->next_record(); } function get_participants($event_id) { $sql = "SELECT * FROM cal_participants WHERE event_id='$event_id' ORDER BY email ASC" ; $this->query($sql); return $this->num_rows(); } function set_default_calendar($user_id, $calendar_id) { $sql = "UPDATE cal_settings SET default_cal_id='$calendar_id' WHERE user_id='$user_id'"; return $this->query($sql); } function set_default_view($user_id, $calendar_id, $view_id, $merged_view = '') { $sql = "UPDATE cal_settings SET default_cal_id='$calendar_id', default_view_id='$view_id' "; if($merged_view != '') { $sql .= ",merged_view='$merged_view' "; } $sql .= "WHERE user_id='$user_id'"; return $this->query($sql); } function get_settings($user_id) { $this->query("SELECT * FROM cal_settings WHERE user_id='$user_id'"); if ($this->next_record(MYSQL_ASSOC)) { return $this->Record; }else { $this->query("INSERT INTO cal_settings (user_id) VALUES ('$user_id')"); return $this->get_settings($user_id); } } function update_settings($settings) { if(!isset($settings['user_id'])) { global $GO_SECURITY; $settings['user_id'] = $GO_SECURITY->user_id; } return $this->update_row('cal_settings', 'user_id', $settings); } function add_calendar($user_id, $name, $start_hour, $end_hour, $background='FFFFCC', $group_id=1, $time_interval=1800) { global $GO_SECURITY; $acl_read = $GO_SECURITY->get_new_acl('calendar read: '.$name, $user_id); $acl_write = $GO_SECURITY->get_new_acl('calendar write: '.$name, $user_id); if ($acl_read > 0 && $acl_write > 0) { $calendar_id = $this->nextid("cal_calendars"); if ($calendar_id > 0) { $sql = "INSERT INTO cal_calendars (id, user_id, name, acl_read, acl_write, start_hour, end_hour, background, group_id, time_interval) "; $sql .= "VALUES ('$calendar_id', '$user_id', '$name', '$acl_read', '$acl_write', '$start_hour', '$end_hour', '$background', '$group_id', '$time_interval')"; if ($this->query($sql)) { $GO_SECURITY->add_user_to_acl($user_id,$acl_write); return $calendar_id; } }else { $GO_SECURITY->delete_acl($acl_read); $GO_SECURITY->delete_acl($acl_write); } } return false; } function delete_calendar($calendar_id) { global $GO_SECURITY; $delete = new calendar; if($calendar = $this->get_calendar($calendar_id)) { $sql = "SELECT * FROM cal_events_calendars WHERE calendar_id='$calendar_id'"; $this->query($sql); while ($this->next_record()) { $sql = "SELECT * FROM cal_events_calendars WHERE event_id='".$this->f("event_id")." '"; $delete->query($sql); if ($delete->num_rows() < 2) { $delete->delete_event($this->f('event_id')); } } $sql = "DELETE FROM cal_events_calendars WHERE calendar_id='$calendar_id'"; $this->query($sql); $sql = "DELETE FROM cal_views_calendars WHERE calendar_id='$calendar_id'"; $this->query($sql); $sql= "DELETE FROM cal_holidays WHERE calendar_id='$calendar_id'"; $this->query($sql); $sql= "DELETE FROM cal_calendars WHERE id='$calendar_id'"; $this->query($sql); $GO_SECURITY->delete_acl($calendar['acl_read']); $GO_SECURITY->delete_acl($calendar['acl_write']); return true; } return false; } function update_calendar($calendar_id, $user_id, $name, $start_hour, $end_hour, $background, $group_id=1, $time_interval=1800) { $sql = "UPDATE cal_calendars SET background='$background', user_id='$user_id',". "name='$name', start_hour='$start_hour', end_hour='$end_hour', group_id='$group_id', time_interval='$time_interval' WHERE id='$calendar_id'"; return $this->query($sql); } function get_calendar($calendar_id=0) { if($calendar_id > 0) { $sql = "SELECT * FROM cal_calendars WHERE id='$calendar_id'"; $this->query($sql); if ($this->next_record()) { return $this->Record; }else { return $this->get_calendar(); } }else { global $GO_SECURITY; $this->get_user_calendars($GO_SECURITY->user_id); if ($this->next_record()) { return $this->Record; }else { global $GO_USERS; $user = $GO_USERS->get_user($GO_SECURITY->user_id); $calendar_name = format_name($user['last_name'], $user['first_name'], $user['middle_name'], 'last_name'); $new_calendar_name = $calendar_name; $x = 1; while($this->get_calendar_by_name(addslashes($new_calendar_name))) { $new_calendar_name = $calendar_name.' ('.$x.')'; $x++; } if (!$calendar_id = $this->add_calendar($GO_SECURITY->user_id, addslashes($new_calendar_name), 7, 20)) { $feedback = '<p class="Error">'.$strSaveError.'</p>'; }else { return $this->get_calendar($calendar_id); } } } } function get_calendar_by_name($name, $user_id=0) { $sql = "SELECT * FROM cal_calendars WHERE name='$name'"; if($user_id>0) { $sql .= " AND user_id=$user_id"; } $this->query($sql); if ($this->next_record()) { return $this->Record; }else { return false; } } function get_user_calendars($user_id) { $sql = "SELECT * FROM cal_calendars WHERE user_id='$user_id' ORDER BY name ASC"; $this->query($sql); return $this->num_rows(); } function get_calendars($group_id=0) { $sql = "SELECT * FROM cal_calendars"; if($group_id>0) { $sql .= " WHERE group_id='$group_id'"; } $sql .= " ORDER BY name ASC"; $this->query($sql); return $this->num_rows(); } function get_authorized_calendars($user_id, $group_id=0) { $sql = "SELECT DISTINCT cal_calendars . * ". "FROM cal_calendars ". " INNER JOIN acl ON ( cal_calendars.acl_read = acl.acl_id ". "OR cal_calendars.acl_write = acl.acl_id ) ". "LEFT JOIN users_groups ON acl.group_id = users_groups.group_id ". "WHERE (acl.user_id=$user_id ". "OR users_groups.user_id=$user_id)"; if($group_id > 0) { $sql .= " AND cal_calendars.group_id='$group_id'"; } $sql .= " ORDER BY cal_calendars.name ASC"; $this->query($sql); return $this->num_rows(); } function get_authorized_resources($user_id) { $sql = "SELECT DISTINCT cal_calendars . * ". "FROM cal_calendars ". " INNER JOIN acl ON ( cal_calendars.acl_read = acl.acl_id ". "OR cal_calendars.acl_write = acl.acl_id ) ". "LEFT JOIN users_groups ON acl.group_id = users_groups.group_id ". "WHERE (acl.user_id=$user_id ". "OR users_groups.user_id=$user_id) AND cal_calendars.group_id!='1'"; $this->query($sql); return $this->num_rows(); } function get_writable_calendars($user_id, $group_id=0) { $sql = "SELECT DISTINCT cal_calendars . * ". "FROM cal_calendars ". "INNER JOIN acl ON cal_calendars.acl_write = acl.acl_id ". "LEFT JOIN users_groups ON acl.group_id = users_groups.group_id ". "WHERE (acl.user_id=$user_id ". "OR users_groups.user_id=$user_id)"; if($group_id > 0) { $sql .= " AND cal_calendars.group_id='$group_id'"; } $sql .= " ORDER BY cal_calendars.name ASC"; $this->query($sql); return $this->num_rows(); } function set_event_status($event_id, $status, $email) { $sql = "UPDATE cal_participants SET status='$status' WHERE email='$email' AND event_id='$event_id'"; return $this->query($sql); } function get_event_status($event_id, $email) { $sql = "SELECT status FROM cal_participants WHERE email='$email' AND event_id='$event_id'"; if($this->query($sql)) { if($this->next_record()) { return $this->f('status'); } } return false; } /* Times in GMT! */ function add_event($event) { if (!isset($event['user_id']) || $event['user_id'] == 0) { global $GO_SECURITY; $event['user_id'] = $GO_SECURITY->user_id; } if(!isset($event['ctime']) || $event['ctime'] == 0) { $event['ctime'] = get_gmt_time(); } if(!isset($event['mtime']) || $event['mtime'] == 0) { $event['mtime'] = $event['ctime']; } if(!isset($event['background']) || $event['background'] == '') { $event['background'] = 'FFFFCC'; } if(!isset($event['todo']) || $event['todo'] != '1') { $event['todo']='0'; } $event['id'] = $this->nextid("cal_events"); if ($event['id'] > 0 && $this->insert_row('cal_events', $event)) { return $event['id']; } return false; } function update_event($event) { 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; } 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')"; return $this->query($sql); } 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 name 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'"); } /* returns next starting time of an event in GMT timezone */ function get_next_recurrence_time($event_id, $gmt_time=0, $event='') { 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; } 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']; }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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -