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

📄 calendar.class.inc

📁 groupoffice
💻 INC
📖 第 1 页 / 共 4 页
字号:
<?php/*Copyright Intermesh 2003Author: Merijn Schering <mschering@intermesh.nl>Version: 1.0 Release date: 08 July 2003This program is free software; you can redistribute it and/or modify itunder the terms of the GNU General Public License as published by theFree Software Foundation; either version 2 of the License, or (at youroption) any later version.*/define('REPEAT_NONE', 0);define('REPEAT_DAILY', 1);define('REPEAT_WEEKLY', 2);define('REPEAT_MONTH_DATE', 3);define('REPEAT_MONTH_DAY', 4);define('REPEAT_YEARLY', 5);define('DB_DATETIME_FORMAT', 'Y-m-d H:i:00');define('DB_DATE_FORMAT', 'Y-m-d');define('DB_TIME_FORMAT', 'H:i:00');define('PARTICIPANTS_WRITE', '0');define('EVERYBODY_READ', '1');define('EVERYBODY_WRITE', '2');define('PRIVATE_EVENT', '3');define('CUSTOM', '4');require_once($GO_CONFIG->class_path.'xml/xml.class.inc');class calendar extends db{	var $events = array();	var $events_sort = array(); //used to sort the events at start_time	var $all_day_events = array();	var $backgrounds = array();	function calendar()	{		$this->db();	}		function get_statuses($type='VEVENT')	{		$sql = "SELECT * FROM cal_statuses WHERE type='$type'";		$this->query($sql);		return $this->num_rows();	}		function get_status($status_id)	{			$sql = "SELECT * FROM cal_statuses WHERE id='$status_id'";		$this->query($sql);		if($this->next_record())		{			return $this->Record;		}		return false;	}		function get_status_id($name)	{			$sql = "SELECT * FROM cal_statuses WHERE name='$name'";		$this->query($sql);		if($this->next_record())		{			return $this->f('id');		}		return false;	}		function add_custom_field($group_id, $field)	{				$existing_group = $this->get_group($group_id);		if($existing_group['custom_fields'] == '')		{			$existing_group ['custom_fields'] = '<fields></fields>';		}		$fieldsNode = text_to_xml ($existing_group['custom_fields']);		$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)	{		$doc = text_to_xml('<fields></fields>');		$custom_fields = $this->get_custom_fields($group_id);		foreach(	$custom_fields as $inputNode)		{					$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'=>$inputNode->get_attribute('name'), 'type'=>$inputNode->get_attribute('type'), 'value'=>$value));		}		return $doc->get_xml();	}		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'=>$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<$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);			}		}		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_group_admins($group_id)	{		$sql = "SELECT * FROM cal_group_admins WHERE group_id='$group_id'";		$this->query($sql);		return $this->num_rows();	}			function get_resource_groups()	{		$sql = "SELECT * FROM cal_groups WHERE id!=1 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) ".			"AND cal_groups.id!=1 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_SECURITY, $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);						$old_acl_read = $event['acl_read'];			$old_acl_write = $event['acl_write'];						$event['acl_read'] = $GO_SECURITY->get_new_acl('Event read');			$event['acl_write'] = $GO_SECURITY->get_new_acl('Event write');						$GO_SECURITY->copy_acl($old_acl_read, $event['acl_read']);			$GO_SECURITY->copy_acl($old_acl_write, $event['acl_write']);						$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';			}												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']);							$dst_event['acl_read'] = $GO_SECURITY->get_new_acl('event read');			$dst_event['acl_write'] = $GO_SECURITY->get_new_acl('event write');						$GO_SECURITY->copy_acl($src_event['acl_read'], $dst_event['acl_read']);			$GO_SECURITY->copy_acl($src_event['acl_write'], $dst_event['acl_write']);						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)	{		$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);		return $this->num_rows();	}	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)	{		$sql = "DELETE FROM cal_views_calendars WHERE calendar_id='$calendar_id' AND view_id='$view_id'";		return $this->query($sql);	}		function remove_calendars_from_view($view_id)	{		$sql = "DELETE FROM cal_views_calendars WHERE view_id='$view_id'";		return $this->query($sql);	}	function get_view_calendar($calendar_id, $view_id)	{		$sql = "SELECT * FROM cal_views_calendars WHERE calendar_id='$calendar_id' AND view_id='$view_id'";		$this->query($sql);		if($this->next_record())		{

⌨️ 快捷键说明

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