/**
  * converts events to calendar objects
  * 
  * @param Calendar_Model_Event $event (from MSFacade atm.)
  */
 protected function _convertCalendarObject($event)
 {
     $eventId = $event->getId();
     $lastModified = $event->last_modified_time ? $event->last_modified_time : $event->creation_time;
     // we always use a event set to return exdates at once
     $eventSet = new Tinebase_Record_RecordSet('Calendar_Model_Event', array($event));
     if ($event->rrule) {
         foreach ($event->exdate as $exEvent) {
             if (!$exEvent->is_deleted) {
                 $eventSet->addRecord($exEvent);
                 $event->exdate->removeRecord($exEvent);
             }
         }
         // remaining exdates are fallouts
         $event->exdate = $event->exdate->getOriginalDtStart();
     }
     $exporter = new Calendar_Export_Ical();
     $ics = $exporter->eventToIcal($eventSet);
     // work arround broken exdate handling in apple ical
     // -> not neccesary at the moment this is done generally in ics export
     return array('id' => $eventId, 'uri' => $eventId, 'lastmodified' => $lastModified->getTimeStamp(), 'calendardata' => $ics);
 }
 public function testExportAlarm()
 {
     // alarm handling is ugly...
     $alarmTime = clone $this->_testEvent->dtstart;
     $alarmTime->sub(15, Tinebase_DateTime::MODIFIER_MINUTE);
     $this->_testEvent->alarms = new Tinebase_Record_RecordSet('Tinebase_Model_Alarm', array(new Tinebase_Model_Alarm(array('minutes_before' => 15, 'alarm_time' => $alarmTime), TRUE)));
     $exporter = new Calendar_Export_Ical();
     $ics = $exporter->eventToIcal($this->_testEvent);
     // assert organizer
     $this->assertEquals(1, preg_match("/TRIGGER:-PT15M\r\n/", $ics), 'TRIGGER missing/broken');
 }