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

📄 go_ical.class.inc

📁 groupoffice
💻 INC
字号:
<?php/*Copyright Intermesh 2003Author: Merijn Schering <mschering@intermesh.nl>Version: 1.0 Release date: 14 March 2004This 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.TODO: Attendee and VTODO support*/require_once($GO_CONFIG->class_path.'mail/phpmailer/class.phpmailer.php');class go_ical extends calendar{	var $calendar_properties = '';	var $events = array();	var $datetime_format = 'Ymd\THis';	var $date_format = 'Ymd';		var $timezone_id = '';		var $version;		var $local_times;	function go_ical($version='2.0', $local_times=false)	{		$this->db();				$this->version = $version;		$this->local_times = $local_times;		$this->calendar_properties =			"VERSION:".$version."\r\n".			"PRODID:-//Intermesh//NONSGML Group-Office//EN\r\n".			"CALSCALE:GREGORIAN\r\n".			"METHOD:PUBLISH\r\n";	}		function export_calendar_header($with_timezones=true)	{		$str= "BEGIN:VCALENDAR\r\n".				$this->calendar_properties;						if($this->version=='2.0' && $with_timezones)		{				$str .= $this->export_timezone();		}		return $str;	}		function export_calendar_footer()	{		return "END:VCALENDAR\r\n";	}	function format_timezone($timezone)	{		if($timezone < 10 && $timezone > -10)		{			if($timezone > 0)			{				$timezone = '+0'.$timezone.'00';			}else			{				$timezone = '-0'.($timezone*-1).'00';							}		}else		{			if($timezone > 0)			{				$timezone = '+'.$timezone.'00';			}else			{				$timezone = '-'.$timezone.'00';							}		}				return $timezone;	}	function export_timezone()	{		global $GO_LANGUAGE;				$this->timezone_id = $GO_LANGUAGE->language['description'];				$timezone =	"BEGIN:VTIMEZONE\r\n".
								"TZID:".$this->timezone_id."\r\n";								"LAST-MODIFIED:".date($this->date_format, get_time())."\r\n";									$dst_tz_offset_from = $this->format_timezone($_SESSION['GO_SESSION']['timezone']);					$dst_tz_offset_to = $this->format_timezone($_SESSION['GO_SESSION']['DST']+$_SESSION['GO_SESSION']['timezone']);											if($_SESSION['GO_SESSION']['DST'] > 0)		{					$timezone .= 	"BEGIN:DAYLIGHT\r\n".										"DTSTART:19700329T030000\r\n".																				"TZOFFSETTO:".$dst_tz_offset_to."\r\n".
										"TZOFFSETFROM:".$dst_tz_offset_from."\r\n".
										"TZNAME:GMT".$dst_tz_offset_to."\r\n".										"RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3\r\n".										"END:DAYLIGHT\r\n";		}				$timezone .=  "BEGIN:STANDARD\r\n".									"TZOFFSETTO:".$dst_tz_offset_from."\r\n".
									"TZOFFSETFROM:".$dst_tz_offset_to."\r\n".									"TZNAME:GMT".$dst_tz_offset_from."\r\n";					if($_SESSION['GO_SESSION']['DST'] > 0)		{				$timezone .= 	"DTSTART:19701025T040000\r\n".											"RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10\r\n";		}else		{				$timezone .= "DTSTART:19700101T000000\r\n";		}				$timezone .= 	"END:STANDARD\r\n".									"END:VTIMEZONE\r\n";		return $timezone;	}	function export_event($event_id, $with_timezones=true)	{		$ics = $this->export_calendar_header($with_timezones);		$ics .= $this->convert_event($this->get_event($event_id));		$ics .= $this->export_calendar_footer();				return $ics;	}	function export_calendar($calendar_id)	{				$ics = $this->export_calendar_header();				$cal = new calendar();				$cal->get_events(false,true,false, $calendar_id);		while($cal->next_record())		{			$ics .= $this->convert_event($cal->Record);		}				$ics .= $this->export_calendar_footer();		return $ics;	}	function rfc2445_convert($string, $qp_enc=false)	{		//TODO: is there a better way? preg_replace?		$string = str_replace("\r", '', $string);		$string = str_replace("\n", '\n', $string);		$string = str_replace(',', '\,', $string);		$string = str_replace(';', '\;', $string);				if($qp_enc)		{			$string = quoted_printable_encode($string);		}		/*		if($this->version == '1.0')		{			$string = wordwrap($string, 72, "=\r\n ");		}else		{				$string = wordwrap($string, 72, " \r\n ");		}*/				$phpmailer = new PHPMailer();		$string = $phpmailer->WrapText($string, 72, $qp_enc);		return $string;	}	function convert_event($event)	{		global $GO_CONFIG, $charset;				if($this->timezone_id != '' || $this->local_times)		{		  			$timezone_offset = get_timezone_offset($event['start_time'])*3600;		}else		{			$timezone_offset = 0;			}					$ical_event = "BEGIN:VEVENT\r\n".			"UID:".$event['id']."\r\n";							$qp_summary = $this->rfc2445_convert($event['name'], true);				$event['name'] =$this->rfc2445_convert($event['name']);		if($event['name'] == $qp_summary)		{					$ical_event .= "SUMMARY:".$event['name']."\r\n";		}else		{			$ical_event .= "SUMMARY;ENCODING=QUOTED-PRINTABLE;CHARSET=$charset:\r\n=".$qp_summary."\r\n";		}		if ($event['description'] != '')		{			$qp_description = $this->rfc2445_convert($event['description'], true);					$event['description'] =$this->rfc2445_convert($event['description']);			if($event['description'] == $qp_description)			{						$ical_event .= "DESCRIPTION:".$event['description']."\r\n";			}else			{				$ical_event .= "DESCRIPTION;ENCODING=QUOTED-PRINTABLE;CHARSET=$charset:\r\n=".$qp_description."\r\n";			}		}		if ($event['location'] != '')		{			$qp_location = $this->rfc2445_convert($event['location'], true);					$event['location'] =$this->rfc2445_convert($event['location']);			if($event['location'] == $qp_location)			{						$ical_event .= "LOCATION:".$event['location']."\r\n";			}else			{				$ical_event .= "LOCATION;ENCODING=QUOTED-PRINTABLE;CHARSET=$charset:\r\n=".$qp_location."\r\n";			}		}				$status = $this->get_status($event['status_id']);				$ical_event .=			"STATUS:".$status['name']."\r\n";					if($event['permissions'] == PRIVATE_EVENT)		{			$ical_event.="CLASS:PRIVATE\r\n";		}else		{			$ical_event.="CLASS:PUBLIC\r\n";		}		if($this->version == '1.0' && $event['all_day_event'] == '1')		{			$ical_event .= "DTSTART:".date($this->datetime_format, $event['start_time'])."\r\n";			$ical_event .= "DTEND:".date($this->datetime_format, $event['start_time'])."\r\n";		}else		{			$DT_format = $event['all_day_event'] == '1' ? $this->date_format : $this->datetime_format;						$ical_event .= "DTSTART";						if ($event['all_day_event'] == '1')			{				$ical_event .= ";VALUE=DATE";			}						if($this->timezone_id != '') 			{				$ical_event .= ";TZID=".$this->timezone_id.":".date($DT_format, $event['start_time']+$timezone_offset);			}else			{				$ical_event .= ":".date($DT_format, $event['start_time']+$timezone_offset);							if(!$this->local_times) $ical_event .= "Z";			}				$ical_event .= "\r\nDTEND";						if ($event['all_day_event'] == '1')			{				$ical_event .= ";VALUE=DATE";			}						if($this->timezone_id != '') 			{				$ical_event .= ";TZID=".$this->timezone_id.":".date($DT_format, $event['end_time']+$timezone_offset);			}else			{				$ical_event .= ":".date($DT_format, $event['end_time']+$timezone_offset);								if(!$this->local_times) $ical_event .= "Z";			}			$ical_event .= "\r\n";		}			switch($event['repeat_type'])		{			case REPEAT_DAILY:				if($this->version == '1.0')				{					$ical_event .= 'RRULE:D'.$event['repeat_every'];					if ($event['repeat_forever'] == '0')					{						$ical_event .= ' '.date($this->datetime_format, $event['repeat_end_time']-86400).'Z';					}else					{						$ical_event .= ' #0';					}					$ical_event .= "\r\n";				}else				{	 				$ical_event .= "RRULE:FREQ=DAILY;";					if ($event['repeat_forever'] == '0')					{						$ical_event .= "UNTIL=".date($this->date_format, $event['repeat_end_time']-86400)."Z;";					}					$ical_event .= "INTERVAL=".$event['repeat_every']."\r\n";				}			break;			case REPEAT_WEEKLY:								$event_days = array();				if ($event['sun'] == '1')				{					$event_days[] = "SU";				}				if ($event['mon'] == '1')				{					$event_days[] = "MO";				}				if ($event['tue'] == '1')				{					$event_days[] = "TU";				}				if ($event['wed'] == '1')				{					$event_days[] = "WE";				}				if ($event['thu'] == '1')				{					$event_days[] = "TH";				}				if ($event['fri'] == '1')				{					$event_days[] = "FR";				}				if ($event['sat'] == '1')				{					$event_days[] = "SA";				}							if($this->version == '1.0')				{					$ical_event .= 'RRULE:W'.$event['repeat_every'].' ';					$ical_event .= implode(' ', $event_days);					if ($event['repeat_forever'] == '0')					{						$ical_event .= ' '.date($this->datetime_format, $event['repeat_end_time']).'Z';					}else					{						$ical_event .= ' #0';					}					$ical_event .= "\r\n";				}else				{					$ical_event .= "RRULE:FREQ=WEEKLY;";					if ($event['repeat_forever'] == '0')					{						$ical_event .= "UNTIL=".date($this->date_format, $event['repeat_end_time']).";";					}					$ical_event .= "INTERVAL=".$event['repeat_every'].";BYDAY=";					$ical_event .= implode(',', $event_days)."\r\n";				}			break;			case REPEAT_MONTH_DATE:				if($this->version == '1.0')				{					$ical_event .= 'RRULE:MD'.$event['repeat_every'].' '.date('j', $event['start_time']).'+';					if ($event['repeat_forever'] == '0')					{						$ical_event .= ' '.date($this->datetime_format, $event['repeat_end_time']).'Z';					}else					{						$ical_event .= ' #0';					}					$ical_event .= "\r\n";				}else				{					$ical_event .= "RRULE:FREQ=MONTHLY;";					if ($event['repeat_forever'] == '0')					{						$ical_event .= "UNTIL=".date($this->date_format, $event['repeat_end_time']).";";					}					$ical_event .= "INTERVAL=".$event['repeat_every']."\r\n";				}			break;			case REPEAT_MONTH_DAY:											if($this->version == '1.0')				{					$event_days = array();					if ($event['sun'] == '1')					{						$event_days[] ="SU";					}					if ($event['mon'] == '1')					{						$event_days[] = "MO";					}					if ($event['tue'] == '1')					{						$event_days[] = "TU";					}					if ($event['wed'] == '1')					{						$event_days[] = "WE";					}					if ($event['thu'] == '1')					{						$event_days[] = "TH";					}					if ($event['fri'] == '1')					{						$event_days[] = "FR";					}					if ($event['sat'] == '1')					{						$event_days[] = "SA";					}														$ical_event .= 'RRULE:MP'.$event['repeat_every'].' '.$event['month_time'].'+ '.$event_days[0];					if ($event['repeat_forever'] == '0')					{						$ical_event .= ' '.date($this->datetime_format, $event['repeat_end_time']).'Z';					}else					{						$ical_event .= ' #0';					}					$ical_event .= "\r\n";									}else				{					$event_days = array();					if ($event['sun'] == '1')					{						$event_days[] = $event['month_time']."SU";					}					if ($event['mon'] == '1')					{						$event_days[] = $event['month_time']."MO";					}					if ($event['tue'] == '1')					{						$event_days[] = $event['month_time']."TU";					}					if ($event['wed'] == '1')					{						$event_days[] = $event['month_time']."WE";					}					if ($event['thu'] == '1')					{						$event_days[] = $event['month_time']."TH";					}					if ($event['fri'] == '1')					{						$event_days[] = $event['month_time']."FR";					}					if ($event['sat'] == '1')					{						$event_days[] = $event['month_time']."SA";					}										$ical_event .= "RRULE:FREQ=MONTHLY;";					if ($event['repeat_forever'] == '0')					{						$ical_event .= "UNTIL=".date($this->date_format, $event['repeat_end_time']).";";					}					$ical_event .= "INTERVAL=".$event['repeat_every'].";BYDAY=";					$ical_event .= implode(',', $event_days)."\r\n";				}			break;			case REPEAT_YEARLY:				if($this->version=='1.0')				{					$ical_event .= 'RRULE:YM'.$event['repeat_every'].' '.date('n',$event['start_time']);					if ($event['repeat_forever'] == '0')					{						$ical_event .= ' '.date($this->datetime_format, $event['repeat_end_time']).'Z';					}else					{						$ical_event .= ' #0';					}					$ical_event .= "\r\n";				}else				{					$ical_event .= "RRULE:FREQ=YEARLY;";					if ($event['repeat_forever'] == '0')					{						$ical_event .= "UNTIL=".date($this->date_format, $event['repeat_end_time']).";";					}					$ical_event .= "INTERVAL=".$event['repeat_every'].";BYMONTH=".date('n', $event['start_time'])."\r\n";				}			break;		}		$ical_event .= "DTSTAMP:".date($this->datetime_format, $event['ctime'])."\r\n".		"X-GO-BGCOLOR:".$event['background']."\r\n".		"END:VEVENT\r\n";		return $ical_event;	}}?>

⌨️ 快捷键说明

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