⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendar.class.inc

📁 groupoffice
💻 INC
📖 第 1 页 / 共 4 页
字号:
				$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 + -