/** * testXMozSnooze * * @see 0007682: CalDav - Tine - Thunderbird - Palm Pre */ public function testXMozSnooze() { $vcalendarStream = Calendar_Frontend_WebDAV_EventTest::getVCalendar(dirname(__FILE__) . '/../../../Import/files/lightning_snooze.ics'); $converter = Tasks_Convert_Task_VCalendar_Factory::factory(Tasks_Convert_Task_VCalendar_Factory::CLIENT_THUNDERBIRD); $event = $converter->toTine20Model($vcalendarStream); $this->assertTrue(isset($event->attendee[0]->alarm_snooze_time)); $this->assertEquals('2013-04-12 06:24:46', $event->attendee[0]->alarm_snooze_time->toString()); }
/** * test converting vtodo without trigger valarm */ public function testConvertToTine20Model() { $vcalendarStream = fopen(dirname(__FILE__) . '/../../../Import/files/apple_valarm.ics', 'r'); $converter = Tasks_Convert_Task_VCalendar_Factory::factory(Tasks_Convert_Task_VCalendar_Factory::CLIENT_MACOSX); $task = $converter->toTine20Model($vcalendarStream); $this->assertEquals('Stundenaufstellung Heinz Walter', $task->summary, print_r($task->toArray(), true)); $this->assertEquals(1, count($task->alarms), print_r($task->toArray(), true)); $this->assertEquals('2014-09-12 06:00:00', $task->alarms->getFirstRecord()->alarm_time->toString(), print_r($task->toArray(), true)); }
/** * this function creates a Tasks_Model_Task and stores it in the database * * @param Tinebase_Model_Container $container * @param stream|string $vobjectData */ public static function create(Tinebase_Model_Container $container, $name, $vobjectData, $onlyCurrentUserOrganizer = 'unused') { 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('VTODO', 'VFREEBUSY')); list($backend, $version) = Tasks_Convert_Task_VCalendar_Factory::parseUserAgent($_SERVER['HTTP_USER_AGENT']); try { $task = Tasks_Convert_Task_VCalendar_Factory::factory($backend, $version)->toTine20Model($vobjectData); } catch (Exception $e) { Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' ' . $e); Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . " " . $vobjectData); throw new Sabre\DAV\Exception\PreconditionFailed($e->getMessage()); } $task->container_id = $container->getId(); $id = ($pos = strpos($name, '.')) === false ? $name : substr($name, 0, $pos); $task->setId($id); self::enforceEventParameters($task); // check if there is already an existing task with this ID // this can happen when the invitation email is faster then the caldav update or // or when an task gets moved to another container $filter = new Tasks_Model_TaskFilter(array(array('field' => 'is_deleted', 'operator' => 'equals', 'value' => Tinebase_Model_Filter_Bool::VALUE_NOTSET), array('condition' => 'OR', 'filters' => array(array('field' => 'id', 'operator' => 'equals', 'value' => $id), array('field' => 'uid', 'operator' => 'equals', 'value' => $id))))); $existingEvent = Tasks_Controller_Task::getInstance()->search($filter, null, false, false, 'sync')->getFirstRecord(); if ($existingEvent === null) { try { $task = Tasks_Controller_Task::getInstance()->create($task); } catch (Exception $e) { Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . ' ' . $e); Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . " " . $vobjectData); Tinebase_Core::getLogger()->err(__METHOD__ . '::' . __LINE__ . " " . print_r($task->toArray(), true)); throw new Sabre\DAV\Exception\PreconditionFailed($e->getMessage()); } $vevent = new self($container, $task); } else { if ($existingEvent->is_deleted) { if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' recovering already deleted task'); } // @TODO have a undelete/recover workflow beginning in controller $existingEvent->is_deleted = 0; $existingEvent->deleted_by = NULL; $existingEvent->deleted_time = NULL; $be = new Tasks_Backend_Sql(); $be->updateMultiple($existingEvent->getId(), array('is_deleted' => 0, 'deleted_by' => NULL, 'deleted_time' => NULL)); } if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) { Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' update existing task with id: ' . $existingEvent->getId()); } $vevent = new self($container, $existingEvent); $vevent->put($vobjectData); } return $vevent; }
public function testConvertToTine20ModelWithCustomAlarm() { $this->markTestSkipped(); $vcalendar = Tasks_Frontend_WebDAV_TaskTest::getVCalendar(dirname(__FILE__) . '/../../../Import/files/event_with_custom_alarm.ics'); $converter = Tasks_Convert_Task_VCalendar_Factory::factory(Tasks_Convert_Task_VCalendar_Factory::CLIENT_GENERIC); $task = $converter->toTine20Model($vcalendar); $this->assertTrue($task->alarms instanceof Tinebase_Record_RecordSet); $this->assertEquals(1, count($task->alarms)); $alarm = $task->alarms->getFirstRecord(); $this->assertEquals(Tinebase_Model_Alarm::OPTION_CUSTOM, $alarm->minutes_before); $this->assertEquals('2012-02-14 17:00:00', $alarm->alarm_time->toString()); }
/** * @depends testConvertToTine20Model */ public function testConvertFromTine20Model() { $task = $this->testConvertToTine20Model(); $task->creation_time = new Tinebase_DateTime('2011-11-11 11:11', 'UTC'); $task->last_modified_time = new Tinebase_DateTime('2011-11-11 12:12', 'UTC'); $task->attendee = new Tinebase_Record_RecordSet('Calendar_Model_Attender'); $converter = Tasks_Convert_Task_VCalendar_Factory::factory(Tasks_Convert_Task_VCalendar_Factory::CLIENT_EMCLIENT); $vcalendar = $converter->fromTine20Model($task)->serialize(); // var_dump($vcalendar); // required fields $this->assertContains('VERSION:2.0', $vcalendar, $vcalendar); $this->assertContains('PRODID:-//tine20.com//Tine 2.0 Tasks V', $vcalendar, $vcalendar); $this->assertContains('CREATED:20111111T111100Z', $vcalendar, $vcalendar); $this->assertContains('LAST-MODIFIED:20111111T121200Z', $vcalendar, $vcalendar); $this->assertContains('DTSTAMP:', $vcalendar, $vcalendar); $this->assertContains('TZID:Europe/Berlin', $vcalendar, $vcalendar); $this->assertContains('UID:' . $task->uid, $vcalendar, $vcalendar); $this->assertContains('LOCATION:' . $task->location, $vcalendar, $vcalendar); $this->assertContains('CLASS:PUBLIC', $vcalendar, $vcalendar); $this->assertContains('TZOFFSETFROM:+0100', $vcalendar, $vcalendar); $this->assertContains('TZOFFSETTO:+0200', $vcalendar, $vcalendar); $this->assertContains('TZNAME:CEST', $vcalendar, $vcalendar); $this->assertContains('TZOFFSETFROM:+0200', $vcalendar, $vcalendar); $this->assertContains('TZOFFSETTO:+0100', $vcalendar, $vcalendar); $this->assertContains('TZNAME:CET', $vcalendar, $vcalendar); }
/** * test factory with useragent string from thunderbird */ public function testUserAgentIceowl() { list($backend, $version) = Tasks_Convert_Task_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(Tasks_Convert_Task_VCalendar_Factory::CLIENT_THUNDERBIRD, $backend); $this->assertEquals('1.0b1', $version); }