mirror of
https://github.com/the-djmaze/snappymail.git
synced 2026-09-05 07:27:04 +03:00
CardDAV (pre-alpha/unstable)
This commit is contained in:
parent
0ec965bccb
commit
599e934b4a
76 changed files with 6984 additions and 1512 deletions
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
namespace Sabre\VObject\Component;
|
||||
|
||||
use Sabre\VObject;
|
||||
use
|
||||
Sabre\VObject,
|
||||
Sabre\VObject\Component;
|
||||
|
||||
/**
|
||||
* The VCalendar component
|
||||
|
|
@ -15,7 +17,140 @@ use Sabre\VObject;
|
|||
*/
|
||||
class VCalendar extends VObject\Document {
|
||||
|
||||
static $defaultName = 'VCALENDAR';
|
||||
/**
|
||||
* The default name for this component.
|
||||
*
|
||||
* This should be 'VCALENDAR' or 'VCARD'.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
static public $defaultName = 'VCALENDAR';
|
||||
|
||||
/**
|
||||
* This is a list of components, and which classes they should map to.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
static public $componentMap = array(
|
||||
'VEVENT' => 'Sabre\\VObject\\Component\\VEvent',
|
||||
'VFREEBUSY' => 'Sabre\\VObject\\Component\\VFreeBusy',
|
||||
'VJOURNAL' => 'Sabre\\VObject\\Component\\VJournal',
|
||||
'VTODO' => 'Sabre\\VObject\\Component\\VTodo',
|
||||
'VALARM' => 'Sabre\\VObject\\Component\\VAlarm',
|
||||
);
|
||||
|
||||
/**
|
||||
* List of value-types, and which classes they map to.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
static public $valueMap = array(
|
||||
'BINARY' => 'Sabre\\VObject\\Property\\Binary',
|
||||
'BOOLEAN' => 'Sabre\\VObject\\Property\\Boolean',
|
||||
'CAL-ADDRESS' => 'Sabre\\VObject\\Property\\ICalendar\\CalAddress',
|
||||
'DATE' => 'Sabre\\VObject\\Property\\ICalendar\\Date',
|
||||
'DATE-TIME' => 'Sabre\\VObject\\Property\\ICalendar\\DateTime',
|
||||
'DURATION' => 'Sabre\\VObject\\Property\\ICalendar\\Duration',
|
||||
'FLOAT' => 'Sabre\\VObject\\Property\\Float',
|
||||
'INTEGER' => 'Sabre\\VObject\\Property\\Integer',
|
||||
'PERIOD' => 'Sabre\\VObject\\Property\\ICalendar\\Period',
|
||||
'RECUR' => 'Sabre\\VObject\\Property\\ICalendar\\Recur',
|
||||
'TEXT' => 'Sabre\\VObject\\Property\\Text',
|
||||
'TIME' => 'Sabre\\VObject\\Property\\Time',
|
||||
'UNKNOWN' => 'Sabre\\VObject\\Property\\Unknown', // jCard / jCal-only.
|
||||
'URI' => 'Sabre\\VObject\\Property\\Uri',
|
||||
'UTC-OFFSET' => 'Sabre\\VObject\\Property\\UtcOffset',
|
||||
);
|
||||
|
||||
/**
|
||||
* List of properties, and which classes they map to.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
static public $propertyMap = array(
|
||||
// Calendar properties
|
||||
'CALSCALE' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'METHOD' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'PRODID' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'VERSION' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
|
||||
// Component properties
|
||||
'ATTACH' => 'Sabre\\VObject\\Property\\Binary',
|
||||
'CATEGORIES' => 'Sabre\\VObject\\Property\\Text',
|
||||
'CLASS' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'COMMENT' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'DESCRIPTION' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'GEO' => 'Sabre\\VObject\\Property\\Float',
|
||||
'LOCATION' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'PERCENT-COMPLETE' => 'Sabre\\VObject\\Property\\Integer',
|
||||
'PRIORITY' => 'Sabre\\VObject\\Property\\Integer',
|
||||
'RESOURCES' => 'Sabre\\VObject\\Property\\Text',
|
||||
'STATUS' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'SUMMARY' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
|
||||
// Date and Time Component Properties
|
||||
'COMPLETED' => 'Sabre\\VObject\\Property\\ICalendar\\DateTime',
|
||||
'DTEND' => 'Sabre\\VObject\\Property\\ICalendar\\DateTime',
|
||||
'DUE' => 'Sabre\\VObject\\Property\\ICalendar\\DateTime',
|
||||
'DTSTART' => 'Sabre\\VObject\\Property\\ICalendar\\DateTime',
|
||||
'DURATION' => 'Sabre\\VObject\\Property\\ICalendar\\Duration',
|
||||
'FREEBUSY' => 'Sabre\\VObject\\Property\\ICalendar\\Period',
|
||||
'TRANSP' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
|
||||
// Time Zone Component Properties
|
||||
'TZID' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'TZNAME' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'TZOFFSETFROM' => 'Sabre\\VObject\\Property\\UtcOffset',
|
||||
'TZOFFSETTO' => 'Sabre\\VObject\\Property\\UtcOffset',
|
||||
'TZURL' => 'Sabre\\VObject\\Property\\Uri',
|
||||
|
||||
// Relationship Component Properties
|
||||
'ATTENDEE' => 'Sabre\\VObject\\Property\\ICalendar\\CalAddress',
|
||||
'CONTACT' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'ORGANIZER' => 'Sabre\\VObject\\Property\\ICalendar\\CalAddress',
|
||||
'RECURRENCE-ID' => 'Sabre\\VObject\\Property\\ICalendar\\DateTime',
|
||||
'RELATED-TO' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'URL' => 'Sabre\\VObject\\Property\\Uri',
|
||||
'UID' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
|
||||
// Recurrence Component Properties
|
||||
'EXDATE' => 'Sabre\\VObject\\Property\\ICalendar\\DateTime',
|
||||
'RDATE' => 'Sabre\\VObject\\Property\\ICalendar\\DateTime',
|
||||
'RRULE' => 'Sabre\\VObject\\Property\\ICalendar\\Recur',
|
||||
'EXRULE' => 'Sabre\\VObject\\Property\\ICalendar\\Recur', // Deprecated since rfc5545
|
||||
|
||||
// Alarm Component Properties
|
||||
'ACTION' => 'Sabre\\VObject\\Property\\FlatText',
|
||||
'REPEAT' => 'Sabre\\VObject\\Property\\Integer',
|
||||
'TRIGGER' => 'Sabre\\VObject\\Property\\ICalendar\\Duration',
|
||||
|
||||
// Change Management Component Properties
|
||||
'CREATED' => 'Sabre\\VObject\\Property\\ICalendar\\DateTime',
|
||||
'DTSTAMP' => 'Sabre\\VObject\\Property\\ICalendar\\DateTime',
|
||||
'LAST-MODIFIED' => 'Sabre\\VObject\\Property\\ICalendar\\DateTime',
|
||||
'SEQUENCE' => 'Sabre\\VObject\\Property\\Integer',
|
||||
|
||||
// Request Status
|
||||
'REQUEST-STATUS' => 'Sabre\\VObject\\Property\\Text',
|
||||
|
||||
// Additions from draft-daboo-valarm-extensions-04
|
||||
'ALARM-AGENT' => 'Sabre\\VObject\\Property\\Text',
|
||||
'ACKNOWLEDGED' => 'Sabre\\VObject\\Property\\ICalendar\\DateTime',
|
||||
'PROXIMITY' => 'Sabre\\VObject\\Property\\Text',
|
||||
'DEFAULT-ALARM' => 'Sabre\\VObject\\Property\\Boolean',
|
||||
|
||||
);
|
||||
|
||||
/**
|
||||
* Returns the current document type.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function getDocumentType() {
|
||||
|
||||
return self::ICALENDAR20;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of all 'base components'. For instance, if an Event has
|
||||
|
|
@ -115,13 +250,19 @@ class VCalendar extends VObject\Document {
|
|||
|
||||
}
|
||||
|
||||
// Setting all properties to UTC time.
|
||||
foreach($newEvents as $newEvent) {
|
||||
|
||||
foreach($newEvent->children as $child) {
|
||||
if ($child instanceof VObject\Property\DateTime &&
|
||||
$child->getDateType() == VObject\Property\DateTime::LOCALTZ) {
|
||||
$child->setDateTime($child->getDateTime(),VObject\Property\DateTime::UTC);
|
||||
}
|
||||
if ($child instanceof VObject\Property\ICalendar\DateTime && $child->hasTime()) {
|
||||
$dt = $child->getDateTimes();
|
||||
// We only need to update the first timezone, because
|
||||
// setDateTimes will match all other timezones to the
|
||||
// first.
|
||||
$dt[0]->setTimeZone(new \DateTimeZone('UTC'));
|
||||
$child->setDateTimes($dt);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$this->add($newEvent);
|
||||
|
|
@ -133,6 +274,21 @@ class VCalendar extends VObject\Document {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* This method should return a list of default property values.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getDefaults() {
|
||||
|
||||
return array(
|
||||
'VERSION' => '2.0',
|
||||
'PRODID' => '-//Sabre//Sabre VObject ' . VObject\Version::VERSION . '//EN',
|
||||
'CALSCALE' => 'GREGORIAN',
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the node for correctness.
|
||||
* An array is returned with warnings.
|
||||
|
|
@ -144,8 +300,7 @@ class VCalendar extends VObject\Document {
|
|||
*
|
||||
* @return array
|
||||
*/
|
||||
/*
|
||||
public function validate() {
|
||||
public function validate($options = 0) {
|
||||
|
||||
$warnings = array();
|
||||
|
||||
|
|
@ -188,39 +343,10 @@ class VCalendar extends VObject\Document {
|
|||
);
|
||||
}
|
||||
|
||||
$allowedComponents = array(
|
||||
'VEVENT',
|
||||
'VTODO',
|
||||
'VJOURNAL',
|
||||
'VFREEBUSY',
|
||||
'VTIMEZONE',
|
||||
);
|
||||
$allowedProperties = array(
|
||||
'PRODID',
|
||||
'VERSION',
|
||||
'CALSCALE',
|
||||
'METHOD',
|
||||
);
|
||||
$componentsFound = 0;
|
||||
foreach($this->children as $child) {
|
||||
if($child instanceof Component) {
|
||||
$componentsFound++;
|
||||
if (!in_array($child->name, $allowedComponents)) {
|
||||
$warnings[] = array(
|
||||
'level' => 1,
|
||||
'message' => 'The ' . $child->name . " component is not allowed in the VCALENDAR component",
|
||||
'node' => $this,
|
||||
);
|
||||
}
|
||||
}
|
||||
if ($child instanceof Property) {
|
||||
if (!in_array($child->name, $allowedProperties)) {
|
||||
$warnings[] = array(
|
||||
'level' => 2,
|
||||
'message' => 'The ' . $child->name . " property is not allowed in the VCALENDAR component",
|
||||
'node' => $this,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -238,7 +364,6 @@ class VCalendar extends VObject\Document {
|
|||
);
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue