/** * Updates the ICalendar-formatted object * * @param string $calendarData * @return void */ public function put($calendarData) { if (is_resource($calendarData)) { $calendarData = stream_get_contents($calendarData); } $supportedComponents = $this->calendarInfo['{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}supported-calendar-component-set']->getValue(); Sabre_CalDAV_ICalendarUtil::validateICalendarObject($calendarData, $supportedComponents); $this->caldavBackend->updateCalendarObject($this->calendarInfo['id'], $this->objectData['uri'], $calendarData); $this->objectData['calendardata'] = $calendarData; }
/** * @expectedException Sabre_CalDAV_Exception_InvalidICalendarObject * @depends testValidateICalendarObjectValid */ function testValidateICalendarObjectHasMethodProperty() { $in = array('BEGIN:VCALENDAR', 'VERSION:2.0', 'METHOD:blabla', 'PRODID:-//hacksw/handcal//NONSGML v1.0//EN', 'BEGIN:VEVENT', 'SUMMARY;LANGUAGE=nl-NL:meeting', 'X-SABRE;att1=val1;att2=val2:This is the property content', 'END:VEVENT', 'END:VCALENDAR'); Sabre_CalDAV_ICalendarUtil::validateICalendarObject(implode("\n", $in), array('VEVENT')); }
/** * Updates the ICalendar-formatted object * * @param string $calendarData * @return void */ public function put($calendarData) { if (is_resource($calendarData)) { $calendarData = stream_get_contents($calendarData); } // Converting to UTF-8, if needed $calendarData = Sabre_DAV_StringUtil::ensureUTF8($calendarData); $supportedComponents = $this->calendarInfo['{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}supported-calendar-component-set']; if ($supportedComponents) { $supportedComponents = $supportedComponents->getValue(); } else { $supportedComponents = null; } Sabre_CalDAV_ICalendarUtil::validateICalendarObject($calendarData, $supportedComponents); $this->caldavBackend->updateCalendarObject($this->calendarInfo['id'], $this->objectData['uri'], $calendarData); $this->objectData['calendardata'] = $calendarData; }
/** * Creates a new file * * The contents of the new file must be a valid ICalendar string. * * @param string $name * @param resource $calendarData * @return void */ public function createFile($name, $calendarData = null) { if (!$this->hasPrivilege()) { throw new Sabre_DAV_Exception_Forbidden('Permission denied to access this calendar'); } $calendarData = stream_get_contents($calendarData); $supportedComponents = $this->calendarInfo['{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}supported-calendar-component-set']->getValue(); Sabre_CalDAV_ICalendarUtil::validateICalendarObject($calendarData, $supportedComponents); $this->caldavBackend->createCalendarObject($this->calendarInfo['id'], $name, $calendarData); }
/** * Creates a new file * * The contents of the new file must be a valid ICalendar string. * * @param string $name * @param resource $calendarData * @return void */ public function createFile($name, $calendarData = null) { $calendarData = stream_get_contents($calendarData); $supportedComponents = $this->calendarInfo['{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}supported-calendar-component-set']->getValue(); Sabre_CalDAV_ICalendarUtil::validateICalendarObject($calendarData, $supportedComponents); $this->caldavBackend->createCalendarObject($this->calendarInfo['id'], $name, $calendarData); }
/** * Creates a new file * * The contents of the new file must be a valid ICalendar string. * * @param string $name * @param resource $calendarData * @return void */ public function createFile($name, $calendarData = null) { $calendarData = stream_get_contents($calendarData); // Converting to UTF-8, if needed $calendarData = Sabre_DAV_StringUtil::ensureUTF8($calendarData); $supportedComponents = $this->calendarInfo['{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}supported-calendar-component-set']; if ($supportedComponents) { $supportedComponents = $supportedComponents->getValue(); } else { $supportedComponents = null; } Sabre_CalDAV_ICalendarUtil::validateICalendarObject($calendarData, $supportedComponents); $this->caldavBackend->createCalendarObject($this->calendarInfo['id'], $name, $calendarData); }
/** * Updates the VCard-formatted object * * @param string $cardData * @return void */ public function put($cardData) { if (get_class($this->_converter) == 'Calendar_Convert_Event_VCalendar_Generic') { if (Tinebase_Core::isLogLevel(Zend_Log::WARN)) { Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . " update by generic client not allowed. See Calendat_Convert_Event_VCalendar_Factory for supported clients."); } throw new Sabre_DAV_Exception_Forbidden('Update denied for unknow client'); } if (is_resource($cardData)) { $cardData = stream_get_contents($cardData); } // Converting to UTF-8, if needed $cardData = Sabre_DAV_StringUtil::ensureUTF8($cardData); Sabre_CalDAV_ICalendarUtil::validateICalendarObject($cardData, array('VEVENT', 'VFREEBUSY')); $vobject = Calendar_Convert_Event_VCalendar_Abstract::getVcal($cardData); foreach ($vobject->children() as $component) { if (isset($component->{'X-TINE20-CONTAINER'})) { $xContainerId = $component->{'X-TINE20-CONTAINER'}; break; } } // keep old record for reference $recordBeforeUpdate = clone $this->getRecord(); $event = $this->_converter->toTine20Model($vobject, $this->getRecord()); // iCal does sends back an old value, because it does not refresh the vcalendar after // update. Therefor we must reapply the value of last_modified_time after the convert $event->last_modified_time = $recordBeforeUpdate->last_modified_time; $currentContainer = Tinebase_Container::getInstance()->getContainerById($this->getRecord()->container_id); $ownAttendee = Calendar_Model_Attender::getOwnAttender($this->getRecord()->attendee); // event 'belongs' current user -> allow container move if ($currentContainer->isPersonalOf(Tinebase_Core::getUser())) { $event->container_id = $this->_container->getId(); } else { if (isset($xContainerId)) { if ($xContainerId == $currentContainer->getId()) { $event->container_id = $this->_container->getId(); } else { // @TODO allow organizer to move original cal when he edits the displaycal event? if ($ownAttendee && $this->_container->type == Tinebase_Model_Container::TYPE_PERSONAL) { $ownAttendee->displaycontainer_id = $this->_container->getId(); } } } else { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " X-TINE20-CONTAINER not present -> restrict container moves"); } if ($ownAttendee && $this->_container->type == Tinebase_Model_Container::TYPE_PERSONAL) { if ($ownAttendee->displaycontainer_id == $currentContainer->getId()) { $event->container_id = $this->_container->getId(); } $ownAttendee->displaycontainer_id = $this->_container->getId(); } } } self::enforceEventParameters($event); // don't allow update of alarms for non organizer if oganizer is Tine 2.0 user if ($event->organizer !== Tinebase_Core::getUser()->contact_id) { $organizerContact = Addressbook_Controller_Contact::getInstance()->get($event->organizer); // reset alarms if organizer is Tine 2.0 user if (!empty($organizerContact->account_id)) { $this->_resetAlarms($event, $recordBeforeUpdate); } } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . " " . print_r($event->toArray(), true)); } try { $this->_event = Calendar_Controller_MSEventFacade::getInstance()->update($event); } catch (Tinebase_Timemachine_Exception_ConcurrencyConflict $ttecc) { throw new Sabre_DAV_Exception_PreconditionFailed('An If-Match header was specified, but none of the specified the ETags matched.', 'If-Match'); } // avoid sending headers during unit tests if (php_sapi_name() != 'cli') { // @todo this belong to DAV_Server, but it currently not supported header('ETag: ' . $this->getETag()); } }