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 + -
显示快捷键?