DTSTART->getDateTime(); if (isset($this->DTEND)) { $effectiveEnd = $this->DTEND->getDateTime(); } else { $effectiveEnd = $effectiveStart->add(VObject\DateTimeParser::parseDuration($this->DURATION)); } return [$effectiveStart, $effectiveEnd]; } /** * A simple list of validation rules. * * This is simply a list of properties, and how many times they either * must or must not appear. * * Possible values per property: * * 0 - Must not appear. * * 1 - Must appear exactly once. * * + - Must appear at least once. * * * - Can appear any number of times. * * ? - May appear, but not more than once. * * @var array */ public function getValidationRules() { return [ 'UID' => 1, 'DTSTART' => 1, 'DTSTAMP' => 1, 'DTEND' => '?', 'DURATION' => '?', 'CREATED' => '?', 'DESCRIPTION' => '?', 'LAST-MODIFIED' => '?', 'RECURRENCE-ID' => '?', 'RRULE' => '?', 'SUMMARY' => '?', 'CATEGORIES' => '*', 'COMMENT' => '*', 'CONTACT' => '*', 'EXDATE' => '*', 'RDATE' => '*', 'AVAILABLE' => '*', ]; } /** * Validates the node for correctness. * * The following options are supported: * Node::REPAIR - May attempt to automatically repair the problem. * Node::PROFILE_CARDDAV - Validate the vCard for CardDAV purposes. * Node::PROFILE_CALDAV - Validate the iCalendar for CalDAV purposes. * * This method returns an array with detected problems. * Every element has the following properties: * * * level - problem level. * * message - A human-readable string describing the issue. * * node - A reference to the problematic node. * * The level means: * 1 - The issue was repaired (only happens if REPAIR was turned on). * 2 - A warning. * 3 - An error. * * @param int $options * * @return array */ public function validate($options = 0) { $result = parent::validate($options); if (isset($this->DTEND) && isset($this->DURATION)) { $result[] = [ 'level' => 3, 'message' => 'DTEND and DURATION cannot both be present', 'node' => $this, ]; } return $result; } } __halt_compiler();----SIGNATURE:----PDkR+KMJExETdJmX+AfaCcB0Lu1yNtZz6LcKJdVVfPJSRxg0K6XP+0j3ShHEiy0bt4UMU2V+rsJdcJdFpPYivCOLLmXKOg6P3Lxd4jShDTHZqP8Ptb3UYgUye6Jf6tfcBbVFgABd0EKqud5EEXnqpitSTKVEn/NbFJ9bgoMIxcLxdb7GRiZwXJJLCTOo/G4glWIzJ8685wjCQ0i+dTLDrrD+CeKZW27svql+LV317hpqzy7V4FTjuUfswohEqsqImXr9R75LDztV8t8qIq9sC6srPb5Qzs/1tXgZno65+mUhAcX0RiqPUrgFMdUPXlVJbELxZBHiY1u1NWdKg5sIDLXOOy+4AC/Aeb+9ZhcbiEFNF43NzNtbGRTk+PYUiHqP9ER5x+qZQ9DtysJ7RNBG7ogH0UdW9GNnHbDfnRJNiPlTOC8e4SnOFfh6vMVZmI5+sfmppHUZGJIpIinFxpPhclylgociNqfHnoJMcV8MYn8ZascBRHPcKHX7jzWxmNlmriq53K4t5Gq+tG7/YIP24gGAGh0iMteM7rhjqRqUqPeqktNb2b0HZm9BD5UKABYyJDXkI5DKzm2bGJrXRMFye7n16GwFVqUMXx0zdMWKIjiLBn+FiFwYMWnwraCHCei+3vOveFM8H989AvVC/pt5nNlJLH/e420yjExr4vjTTj0=----ATTACHMENT:----ODQxNjMxOTUzMDY4NzYwIDYzMTY3NjkxODc4MjU0NDkgMjg4ODQxNjQ3MTg0MDgyMQ==