public function testConvertToTine20ModelXCalendarAccess()
 {
     $converter = Calendar_Convert_Event_VCalendar_Factory::factory(Calendar_Convert_Event_VCalendar_Factory::CLIENT_MACOSX, '10.10.2');
     $vcalendarStream = fopen(dirname(__FILE__) . '/../../../Import/files/apple_calendar_lion_access_private.ics', 'r');
     $event = $converter->toTine20Model($vcalendarStream);
     $this->assertEquals(Calendar_Model_Event::CLASS_PRIVATE, $event->class);
     $vcalendarStream = fopen(dirname(__FILE__) . '/../../../Import/files/apple_calendar_lion_access_attendee.ics', 'r');
     $event = $converter->toTine20Model($vcalendarStream);
     $this->assertEquals(Calendar_Model_Event::CLASS_PUBLIC, $event->class);
     $iosPrivateIcs = dirname(__FILE__) . '/../../../Import/files/ios_private.ics';
     $vcalendarStream = fopen($iosPrivateIcs, 'r');
     $event = $converter->toTine20Model($vcalendarStream);
     $this->assertEquals(Calendar_Model_Event::CLASS_PRIVATE, $event->class);
     // try again with ios user agent
     $iosUserAgent = 'iOS/8.2 (12D508) dataaccessd/1.0';
     list($backend, $version) = Calendar_Convert_Event_VCalendar_Factory::parseUserAgent($iosUserAgent);
     $converter = Calendar_Convert_Event_VCalendar_Factory::factory($backend, $version);
     $vcalendarStream = fopen($iosPrivateIcs, 'r');
     $event = $converter->toTine20Model($vcalendarStream);
     $this->assertEquals(Calendar_Model_Event::CLASS_PRIVATE, $event->class);
 }
Beispiel #2
0
 /**
  * this function creates a Calendar_Model_Event and stores it in the database
  * 
  * @todo the header handling does not belong here. It should be moved to the DAV_Server class when supported
  * 
  * @param  Tinebase_Model_Container  $container
  * @param  stream|string             $vobjectData
  */
 public static function create(Tinebase_Model_Container $container, $name, $vobjectData)
 {
     if (is_resource($vobjectData)) {
         $vobjectData = stream_get_contents($vobjectData);
     }
     // Converting to UTF-8, if needed
     $vobjectData = Sabre_DAV_StringUtil::ensureUTF8($vobjectData);
     Sabre_CalDAV_ICalendarUtil::validateICalendarObject($vobjectData, array('VEVENT', 'VFREEBUSY'));
     list($backend, $version) = Calendar_Convert_Event_VCalendar_Factory::parseUserAgent($_SERVER['HTTP_USER_AGENT']);
     $event = Calendar_Convert_Event_VCalendar_Factory::factory($backend, $version)->toTine20Model($vobjectData);
     $event->container_id = $container->getId();
     $id = ($pos = strpos($name, '.')) === false ? $name : substr($name, 0, $pos);
     $event->setId($id);
     self::enforceEventParameters($event);
     if ($event->exdate instanceof Tinebase_Record_RecordSet) {
         foreach ($event->exdate as $exdate) {
             if ($exdate->is_deleted == false && $exdate->organizer != $event->organizer) {
                 throw new Sabre_DAV_Exception_PreconditionFailed('Organizer for exdate must be the same like base event');
             }
         }
     }
     // check if there is already an existing event with this ID
     // this can happen when the invitation email is faster then the caldav update or
     // or when an event gets moved to another container
     $filter = new Calendar_Model_EventFilter(array(array('field' => 'containerType', 'operator' => 'equals', 'value' => 'all'), array('field' => 'dtstart', 'operator' => 'equals', 'value' => $event->dtstart), array('field' => 'dtend', 'operator' => 'equals', 'value' => $event->dtend), array('condition' => 'OR', 'filters' => array(array('field' => 'id', 'operator' => 'equals', 'value' => $id), array('field' => 'uid', 'operator' => 'equals', 'value' => $id)))));
     $existingEvent = Calendar_Controller_MSEventFacade::getInstance()->search($filter, null, false, false, 'sync')->getFirstRecord();
     if ($existingEvent === null) {
         $event = Calendar_Controller_MSEventFacade::getInstance()->create($event);
         $vevent = new self($container, $event);
     } else {
         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
             Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' update existing event');
         }
         $vevent = new self($container, $existingEvent);
         $vevent->put($vobjectData);
     }
     return $vevent;
 }
 /**
  * checks if client supports delegations
  * 
  * @return boolean
  * 
  * @todo don't use $_SERVER to fetch user agent
  * @todo move user agent parsing to Tinebase
  */
 protected function _clientSupportsDelegations()
 {
     if (isset($_SERVER['HTTP_USER_AGENT'])) {
         list($backend, $version) = Calendar_Convert_Event_VCalendar_Factory::parseUserAgent($_SERVER['HTTP_USER_AGENT']);
         $clientSupportsDelegations = $backend === Calendar_Convert_Event_VCalendar_Factory::CLIENT_MACOSX;
     } else {
         $clientSupportsDelegations = false;
     }
     return $clientSupportsDelegations;
 }
Beispiel #4
0
 /**
  * get ics converter
  * 
  * @return Calendar_Convert_Event_VCalendar_Abstract
  */
 protected function _getConverter()
 {
     if (!$this->_converter) {
         list($backend, $version) = Calendar_Convert_Event_VCalendar_Factory::parseUserAgent($this->userAgent);
         $this->_converter = Calendar_Convert_Event_VCalendar_Factory::factory($backend, $version);
     }
     return $this->_converter;
 }
 /**
  * test factory with useragent string from thunderbird 
  */
 public function testUserAgentIceowl()
 {
     list($backend, $version) = Calendar_Convert_Event_VCalendar_Factory::parseUserAgent('Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.16) Gecko/20111110 Iceowl/1.0b1 Icedove/3.0.11');
     $this->assertEquals(Calendar_Convert_Event_VCalendar_Factory::CLIENT_THUNDERBIRD, $backend);
     $this->assertEquals('1.0b1', $version);
 }
 /**
  * create instance of Calendar_Convert_Event_VCalendar_*
  * 
  * @return Calendar_Convert_Event_VCalendar_Abstract
  */
 public function _getConverter()
 {
     list($backend, $version) = Calendar_Convert_Event_VCalendar_Factory::parseUserAgent($_SERVER['HTTP_USER_AGENT']);
     if (!$this->_converter) {
         $this->_converter = Calendar_Convert_Event_VCalendar_Factory::factory($backend, $version);
     }
     return $this->_converter;
 }