mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-17 21:43:11 +01:00
193 lines
5.0 KiB
PHP
193 lines
5.0 KiB
PHP
|
<?php
|
||
|
/**************************************************************************\
|
||
|
* phpGroupWare - vCalendar *
|
||
|
* http://www.phpgroupware.org *
|
||
|
* Modified by Mark Peters <skeeter@phpgroupware.org> *
|
||
|
* -------------------------------------------- *
|
||
|
* This program is free software; you can redistribute it and/or modify it *
|
||
|
* under the terms of the GNU General Public License as published by the *
|
||
|
* Free Software Foundation; either version 2 of the License, or (at your *
|
||
|
* option) any later version. *
|
||
|
\**************************************************************************/
|
||
|
|
||
|
/* $Id$ */
|
||
|
|
||
|
class mailto
|
||
|
{
|
||
|
var $user;
|
||
|
var $host;
|
||
|
}
|
||
|
|
||
|
class attendee
|
||
|
{
|
||
|
var $cn = 'Unknown';
|
||
|
var $role = 0;
|
||
|
var $rsvp = False;
|
||
|
var $mailto;
|
||
|
var $sent_by;
|
||
|
}
|
||
|
|
||
|
class organizer
|
||
|
{
|
||
|
var $mailto;
|
||
|
var $sent_by;
|
||
|
}
|
||
|
|
||
|
class vCalendar_time {
|
||
|
var $year;
|
||
|
var $month;
|
||
|
var $mday;
|
||
|
var $hour;
|
||
|
var $min;
|
||
|
var $sec;
|
||
|
var $date;
|
||
|
var $allday = False;
|
||
|
}
|
||
|
|
||
|
class vCalendar
|
||
|
{
|
||
|
var $prodid;
|
||
|
var $version;
|
||
|
var $method;
|
||
|
var $type;
|
||
|
var $attendee = Array();
|
||
|
var $organizer;
|
||
|
var $dtstart;
|
||
|
var $dtend;
|
||
|
var $location;
|
||
|
var $transp;
|
||
|
var $sequence;
|
||
|
var $uid;
|
||
|
var $dtstamp;
|
||
|
var $description;
|
||
|
var $summary;
|
||
|
var $priority;
|
||
|
var $class;
|
||
|
|
||
|
function read($vcal_text)
|
||
|
{
|
||
|
$role = Array(
|
||
|
'NONE' => 0,
|
||
|
'OPT-PARTICIPANT' => 1,
|
||
|
'REQ-PARTICIPANT' => 2
|
||
|
);
|
||
|
|
||
|
while(strtoupper($text) != 'END:VCALENDAR')
|
||
|
{
|
||
|
$element = strtolower($this->find_element($text,Array(':',';')));
|
||
|
switch($element)
|
||
|
{
|
||
|
case 'begin':
|
||
|
$value = strtolower($this->find_element(substr($text,7,strlen($text)),Array('')));
|
||
|
if($value != 'VCALENDAR')
|
||
|
{
|
||
|
$this->type = $value;
|
||
|
}
|
||
|
break;
|
||
|
case 'prodid':
|
||
|
$this->prodid = strtolower($this->find_element(substr($text,7,strlen($text)),Array('')));
|
||
|
break;
|
||
|
case 'version':
|
||
|
$this->version = strtolower($this->find_element(substr($text,8,strlen($text)),Array('')));
|
||
|
break;
|
||
|
case 'attendee':
|
||
|
$attendee = new attendee;
|
||
|
$i = 9;
|
||
|
while($i < strlen($text))
|
||
|
{
|
||
|
$value = strtolower($this->find_element(substr($text,$i,strlen($text)),Array('=')));
|
||
|
switch($value)
|
||
|
{
|
||
|
case 'cn':
|
||
|
$i += 4;
|
||
|
$data = strtolower($this->find_element(substr($text,$i,strlen($text)),Array(';')));
|
||
|
if(substr($data,1,1) == '"')
|
||
|
{
|
||
|
$attendee->$value=substr($data,1,strlen($data) - 2);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$attendee->$value=$data;
|
||
|
}
|
||
|
$i += strlen($data) + 1;
|
||
|
break;
|
||
|
case 'role':
|
||
|
$data = strtolower($this->find_element(substr($text,$i,strlen($text)),Array(';')));
|
||
|
$attendee->$value=$role[$data];
|
||
|
$i += strlen($data) + 1;
|
||
|
break;
|
||
|
case 'rsvp':
|
||
|
$data = strtolower($this->find_element(substr($text,$i,strlen($text)),Array(':')));
|
||
|
$attendee->$value=$data;
|
||
|
$i += strlen($data) + 1;
|
||
|
$value = strtolower($this->find_element(substr($text,$i,strlen($text)),Array(':')));
|
||
|
$i += strlen($value) + 1;
|
||
|
$data = strtolower($this->find_element(substr($text,$i,strlen($text)),Array('')));
|
||
|
$attendee->$value=$data;
|
||
|
$i += strlen($data) + 1;
|
||
|
break;
|
||
|
case 'sent-by':
|
||
|
$data = strtolower($this->find_element(substr($text,$i,strlen($text)),Array(':',';')));
|
||
|
$organizer = each('@',$data);
|
||
|
$attendee->sent_by->user = $organizer[0];
|
||
|
$attendee->sent_by->host = $organizer[1];
|
||
|
$i += strlen($data) + 1;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
$this->attendee[] = $attendee;
|
||
|
unset($attendee);
|
||
|
break;
|
||
|
case 'organizer':
|
||
|
$i = 10;
|
||
|
$value = strtolower($this->find_element(substr($text,$i,strlen($text)),Array(':')));
|
||
|
$i += strlen($value) + 1;
|
||
|
switch($value)
|
||
|
{
|
||
|
case 'mailto':
|
||
|
$data = strtolower($this->find_element(substr($text,$i,strlen($text)),Array(':')));
|
||
|
$organizer = each('@',$data);
|
||
|
$this->organizer->mailto->user = $organizer[0];
|
||
|
$this->organizer->mailto->host = $organizer[1];
|
||
|
break;
|
||
|
case 'sent-by':
|
||
|
$data = strtolower($this->find_element(substr($text,$i,strlen($text)),Array(':',';')));
|
||
|
$organizer = each('@',$data);
|
||
|
$this->organizer->sent_by->user = $organizer[0];
|
||
|
$this->organizer->sent_by->host = $organizer[1];
|
||
|
$i += strlen($data) + 1;
|
||
|
break;
|
||
|
otherwise:
|
||
|
$data = $value;
|
||
|
if(strpos(' '.$data.' ','@') > 0)
|
||
|
{
|
||
|
$organizer = each('@',$data);
|
||
|
$this->organizer->mailto->user = $organizer[0];
|
||
|
$this->organizer->mailto->host = $organizer[1];
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
break;
|
||
|
case 'dtstart':
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function find_element($text,$stop_chars)
|
||
|
{
|
||
|
$element = '';
|
||
|
$i=0;
|
||
|
$char = '';
|
||
|
while(!ereg('['.explode($stop_chars,'').']',$char) && ($i<strlen($text)))
|
||
|
{
|
||
|
$char = substr($text,$i++,1);
|
||
|
$element .= $char;
|
||
|
}
|
||
|
return $element;
|
||
|
}
|
||
|
}
|
||
|
?>
|
||
|
|
||
|
|