calendar.class.inc

来自「国外很不错的一个开源OA系统Group-Office」· INC 代码 · 共 2,387 行 · 第 1/5 页

INC
2,387
字号
			$existing_group ['custom_fields'] = '<fields></fields>';			$field['id']='1';		}else		{			$field['id']='0';		}		$fieldsNode = text_to_xml ($existing_group['custom_fields']);		for($i=0;$i<count($fieldsNode->_children);$i++)		{			if(isset($fieldsNode->_children[$i]->_attribs['name']))			{				$fieldsNode->_children[$i]->_attribs['name']=htmlspecialchars($fieldsNode->_children[$i]->_attribs['name']);			}		}		if($field['id'] == '0')		{			$field['id'] = count($fieldsNode->_children)+1;		}		$fieldsNode->new_child('input', $field);		$group['id'] = $group_id;		$group['custom_fields'] = mysql_escape_string($fieldsNode->get_xml());		if($this->update_group($group))		{			return $field['id'];		}		return false;	}	function group_values_to_xml($values, $group_id)	{		$has_values=false;		$doc = text_to_xml('<fields></fields>');		$custom_fields = $this->get_custom_fields($group_id);		foreach(	$custom_fields as $inputNode)		{			if($inputNode->get_attribute('name')!='')			{				$has_values=true;				$types[$inputNode->get_attribute('name')] = $inputNode->get_attribute('type');				$value = isset($values[$inputNode->get_attribute('name')]) ? $values[$inputNode->get_attribute('name')] : '';				$doc->new_child('input', array('name'=>htmlspecialchars($inputNode->get_attribute('name')), 'type'=>$inputNode->get_attribute('type'), 'value'=>htmlspecialchars($value)));			}		}		if($has_values)		{			return $doc->get_xml();		}		return '';	}	function group_xml_to_values($xml)	{		$values = array();		if(!empty($xml))		{			$doc = text_to_xml($xml);			foreach($doc->children() as $input)			{				$value = array('name'=>$input->get_attribute('name'), 'type'=>$input->get_attribute('type'), 'value'=>$input->get_attribute('value'));				$values[] = $value;			}		}		return $values;	}	function get_custom_fields($group_id)	{		$group = $this->get_group($group_id);		if($group['custom_fields'] == '')		{			$group ['custom_fields'] = '<fields></fields>';		}		$fieldsNode = text_to_xml ($group['custom_fields']);		return $fieldsNode->children();	}	function delete_custom_field($group_id, $custom_field_id)	{		$newxml = text_to_xml('<fields></fields>');		$fields = $this->get_custom_fields($group_id);		$id=1;		foreach($fields as $input)		{			if($input->get_attribute('id') != $custom_field_id)			{				$newxml->new_child('input', array('id'=>$id, 'name'=>htmlspecialchars($input->get_attribute('name')), 'type'=>$input->get_attribute('type')));				$id++;			}		}		$group['id'] = $group_id;		$group['custom_fields'] = mysql_escape_string($newxml->get_xml());		return $this->update_group($group);	}	function update_custom_field($group_id, $field)	{		$existing_group = $this->get_group($group_id);		if($existing_group['custom_fields'] == '')		{			$existing_group ['custom_fields'] = '<fields></fields>';		}		$xml = text_to_xml ($existing_group['custom_fields']);		for($i=0;$i<count($xml->_children);$i++)		{			if($xml->_children[$i]->get_attribute('id') == $field['id'])			{				$xml->_children[$i]->_attribs=$field;				$group['id'] = $group_id;				$group['custom_fields'] = mysql_escape_string($xml->get_xml());				return $this->update_group($group);			}else			{				$xml->_children[$i]->_attribs['name']=htmlspecialchars($xml->_children[$i]->_attribs['name']);			}		}		return false;	}	function get_custom_field($group_id, $field_id)	{		$fields = $this->get_custom_fields($group_id);		for($i=0;$i<$fields;$i++)		{			if($fields[$i]->get_attribute('id') == $field_id)			{				return $fields[$i]->_attribs;			}		}		return false;	}	function add_group_admin($group_id, $user_id)	{		$sql = "INSERT INTO cal_group_admins VALUES('$group_id', '$user_id');";		return $this->query($sql);	}	function delete_group_admin($group_id, $user_id)	{		$sql = "DELETE FROM cal_group_admins WHERE group_id='$group_id' AND user_id='$user_id';";		return $this->query($sql);	}	function get_resource_group_admins($group_id)	{		$sql = "SELECT * FROM cal_group_admins WHERE group_id='$group_id'";		$this->query($sql);		return $this->num_rows();	}	function is_resource_group_admin($user_id, $group_id)	{		$sql = "SELECT * FROM cal_group_admins WHERE group_id='$group_id' AND user_id='$user_id'";		$this->query($sql);		return $this->next_record();	}	function get_resource_groups()	{		$sql = "SELECT * FROM cal_groups ORDER BY name ASC";		$this->query($sql);		return $this->num_rows();	}	function get_writable_resource_groups($user_id)	{		$sql = "SELECT DISTINCT cal_groups.* FROM cal_groups ".		"INNER JOIN acl ON cal_groups.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) ".		"ORDER BY name ASC";		$this->query($sql);		return $this->num_rows();	}	function get_groups()	{		$sql = "SELECT * FROM cal_groups ORDER BY name ASC";		$this->query($sql);		return $this->num_rows();	}	function add_group($group)	{		$group['id'] = $this->nextid('cal_groups');		if($group['id'] && $this->insert_row('cal_groups',$group))		{			return $group['id'];		}	}	function get_event_resources($event_id)	{		if($event_id>0)		{			$sql = "SELECT cal_events.*,cal_events_calendars.calendar_id FROM cal_events ".			"INNER JOIN cal_events_calendars ON cal_events.id=cal_events_calendars.event_id ".			"WHERE cal_events.event_id='$event_id'";			$this->query($sql);			return $this->num_rows();		}		return false;	}	function get_event_resource($event_id, $calendar_id)	{		if($event_id>0 && $calendar_id>0)		{			$sql = "SELECT cal_events.*,cal_events_calendars.calendar_id FROM cal_events ".			"INNER JOIN cal_events_calendars ON cal_events.id=cal_events_calendars.event_id ".			"WHERE cal_events.event_id='$event_id' AND cal_events_calendars.calendar_id='$calendar_id'";			$this->query($sql);			if($this->next_record())			{				return $this->Record;			}		}		return false;	}	function update_group($group)	{		return $this->update_row('cal_groups', 'id', $group);	}	function delete_group($group_id)	{		$cal = new calendar();		$this->get_calendars($group_id);		while($this->next_record())		{			$cal->delete_calendar($this->f('id'));		}		return $this->query("DELETE FROM cal_groups WHERE id='$group_id'");	}	function get_group($group_id)	{		$sql = "SELECT * FROM cal_groups WHERE id='$group_id'";		$this->query($sql);		if($this->next_record())		{			return $this->Record;		}		return false;	}	function get_group_by_name($group_name)	{		$sql = "SELECT * FROM cal_groups WHERE name='$group_name'";		$this->query($sql);		if($this->next_record())		{			return $this->Record;		}		return false;	}	function copy_completed($event_id)	{		global $GO_LINKS;		/*		 If a recurring task is completed we copy it to a new task and recur that again		 */		 $event = $this->get_event($event_id);		 if($event['repeat_type'] > REPEAT_NONE && $next_recurrence_time = $this->get_next_recurrence_time(0,$event['start_time'] ,$event))		 {		 	unset($event['completion_time'], $event['id']);		 	$old_link_id = $event['link_id'];		 	$event['link_id'] = $GO_LINKS->get_link_id();		 	$GO_LINKS->copy_links($old_link_id, $event['link_id'] , 1);		 	$duration = $event['end_time']-$event['start_time'];		 	$event['start_time'] = $next_recurrence_time;		 	$event['end_time'] = $next_recurrence_time+$duration;		 	if(!isset($event['todo']) || $event['todo'] == '')		 	{		 		$event['todo'] = '0';		 	}		 	$event=array_map('addslashes',$event);		 	if($new_event_id = $this->add_event($event))		 	{		 		$cal = new calendar();		 		$this->get_event_subscribtions($event_id);		 		while($this->next_record())		 		{		 			$cal->subscribe_event($new_event_id, $this->f('calendar_id'));		 		}		 	}		 }		 return true;	}	function copy_event($event_id, $new_values=array())	{		global $GO_SECURITY;		if($src_event = $dst_event = $this->get_event($event_id))		{			unset($dst_event['id']);			foreach($new_values as $key=>$value)			{				$dst_event[$key] = $value;			}			$dst_event = array_map('addslashes', $dst_event);			return $this->add_event($dst_event);		}		return false;	}	/*	 takes a sting YYYY-MM-DD HH:MM in GMT time and converts it to an array with	 hour, min etc. with	a timezone offset. If 0000 or 00 is set in a date	 (not time) then it will be replaced with current locale	date.	 */	 function explode_datetime($datetime_stamp, $timezone_offset)	 {	 	$local_time = get_time();	 	$datetime_array = explode(' ', $datetime_stamp);	 	$date_stamp = $datetime_array[0];	 	$time_stamp = isset($datetime_array[1]) ? $datetime_array[1] : '00:00:00';	 	$date_array = explode('-',$date_stamp);	 	$year = $date_array[0] == '0000' ? date('Y', $local_time) : $date_array[0];	 	$month = $date_array[1] == '00' ? date('n', $local_time) : $date_array[1];	 	$day = $date_array[2] == '00' ? date('j', $local_time) : $date_array[2];;	 	$time_array = explode(':',$time_stamp);	 	$hour = $time_array[0];	 	$min = $time_array[1];	 	$unix_time = mktime($hour, $min, 0, $month, $day, $year);	 	$unix_time = $unix_time+($timezone_offset*3600);	 	$result['year'] = date('Y', $unix_time);	 	$result['month'] = date('n', $unix_time);	 	$result['day'] = date('j', $unix_time);	 	$result['hour'] = date('G', $unix_time);	 	$result['min'] = date('i', $unix_time);	 	return $result;	 }	 function add_view($user_id, $name, $start_hour, $end_hour, $event_colors_override, $time_interval, $acl_read, $acl_write)	 {	 	$view_id = $this->nextid("cal_views");	 	if ($view_id > 0)	 	{	 		$sql = "INSERT INTO cal_views (id, user_id, name, start_hour, end_hour, event_colors_override, time_interval,acl_read, acl_write) ".	 		"VALUES ('$view_id', '$user_id', '$name', '$start_hour', '$end_hour', '$event_colors_override', '$time_interval','$acl_read', '$acl_write')";	 		$this->query($sql);	 		return $view_id;	 	}	 	return false;	 }	 function update_view($view_id, $name, $start_hour, $end_hour, $event_colors_override, $time_interval)	 {	 	$sql = "UPDATE cal_views SET name='$name', start_hour='$start_hour', ".	 	"end_hour='$end_hour', event_colors_override='$event_colors_override', time_interval='$time_interval' WHERE id='$view_id'";	 	return $this->query($sql);	 }	 function delete_view($view_id)	 {	 	if($this->query("DELETE FROM cal_views_calendars WHERE view_id='$view_id'"))	 	{	 		return $this->query("DELETE FROM cal_views WHERE id='$view_id'");	 	}	 }	 function get_user_views($user_id)	 {	 	$sql = "SELECT * FROM cal_views WHERE user_id='$user_id'";	 	$this->query($sql);	 	return $this->num_rows();	 }	 function get_authorized_views($user_id, $start=0, $offset=0)	 {	 	$sql = "SELECT DISTINCT cal_views . * ".	 	"FROM cal_views ".	 	"	INNER JOIN acl ON ( cal_views.acl_read = acl.acl_id ".	 	"OR cal_views.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".	 	"	ORDER BY cal_views.name ASC";	 	$this->query($sql);	 	$count= $this->num_rows();	 	if($offset>0)	 	{	 		$sql .= " LIMIT $start, $offset";	 		$this->query($sql);	 	}	 	return $count;	 }	 function get_writable_views($user_id)	 {	 	$sql = "SELECT DISTINCT cal_views . * ".	 	"FROM cal_views ".	 	"	INNER JOIN acl ON cal_views.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".	 	"	ORDER BY cal_views.name ASC";	 	$this->query($sql);	 	return $this->num_rows();	 }	 function get_view($view_id)	 {	 	$sql = "SELECT * FROM cal_views WHERE id='$view_id'";	 	$this->query($sql);	 	if($this->next_record())	 	{	 		return $this->Record;	 	}	 	return false;	 }	 function get_view_calendars($view_id)	 {	 	$sql = "SELECT cal_calendars.name, cal_calendars.user_id, cal_calendars.id, cal_views_calendars.background FROM cal_calendars ".	 	"INNER JOIN cal_views_calendars ON cal_calendars.id=cal_views_calendars.calendar_id ".	 	"WHERE cal_views_calendars.view_id='$view_id' ORDER BY cal_calendars.name ASC";	 	$this->query($sql);	 	$calendars = array();	 	while($this->next_record())	 	{	 		$calendars[] = $this->Record;	 	}	 	if(isset($calendars))	 	{	 		return $calendars;	 	}	 }	 function add_calendar_to_view($calendar_id, $background, $view_id)	 {	 	$sql = "INSERT INTO cal_views_calendars (view_id, background, calendar_id) ".	 	"VALUES ('$view_id' ,'$background', '$calendar_id')";	 	return $this->query($sql);	 }	 function remove_calendar_from_view($calendar_id, $view_id)	 {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?