setValue('sue@example.com') ->setName('Sue Jones') ->setSentBy('mary@example.com') ->setLanguage('en'); $attendee = new Attendee(new Formatter()); $attendee->setName('Jane Smith') ->setCalendarUserType('INDIVIDUAL') ->setParticipationStatus('ACCEPTED') ->setRole('REQ-PARTICIPANT') ->setSentBy('joe@example') ->addCalendarMember('list@example.com') ->setValue('jane-smith@example.com'); $event = new CalendarEvent(); $event->setUid('lLKjd89283oja89282lkjd8@example.com') ->setStart(new \DateTime('4 October 2013 12:00:00', $timezone)) ->setEnd(new \DateTime('4 October 2013 22:00:00', $timezone)) ->setSummary('Poker night at the South Pole') ->addAttendee($attendee) ->setOrganizer($organizer) ->setSequence(3) ->setTimestamp(new \DateTime('1 September 2013', $timezone)); $rrule = new RecurrenceRule(new Formatter()); $rrule->setFrequency(new Frequency(Frequency::MONTHLY)) ->setInterval(2) ->setCount(40) ->addByDay(new WeekdayNum(Weekday::SATURDAY, 1)) ->addByDay(new WeekdayNum(Weekday::SATURDAY, 2)) ->addByDay(new WeekdayNum(Weekday::SATURDAY, 3)) ->addByDay(new WeekdayNum(Weekday::SATURDAY, 4)) ->addByDay(new WeekdayNum(Weekday::FRIDAY, 1)); $event->setRecurrenceRule($rrule); //add an alarms to this event $alarmAudio = new CalendarAlarm(); $alarmAudio->setAction("audio"); $alarmAudio->setTrigger($event->getStart()); $alarmAudio->addAttachment("FMTTYPE=audio/basic:ftp://example.com/pub/sounds/bell-01.aud"); $event->addAlarm($alarmAudio); $alarmDisplay = new CalendarAlarm(); $alarmDisplay->setAction("display"); $alarmDisplay->setTrigger($event->getStart()); $alarmDisplay->setRepeat(3); $alarmDisplay->setDuration(new \DateInterval('PT15M')); $alarmDisplay->setDescription("DESCRIPTION"); $event->addAlarm($alarmDisplay); $alarmEmail = new CalendarAlarm(); $alarmEmail->setAction('email'); $alarmEmail->setTrigger($event->getStart()); $alarmEmail->addAttendee($attendee); $alarmEmail->setSummary("EMAIL SUBJECT"); $alarmEmail->setDescription("EMAIL BODY"); $alarmEmail->addAttachment("FMTTYPE=application/msword:http://example.com/agenda.docx"); $alarmEmail->addAttachment("FMTTYPE=application/pdf:http://example.com/agenda.pdf"); $event->addAlarm($alarmEmail); //test exception dates $eventTwo = new CalendarEvent(); $eventTwo->setUid('eventtwo@example.com') ->setStart(new \DateTime('2 October 2013', $timezone)) ->setSummary('Every Wednesday event') ->setTimestamp(new \DateTime('1 September 2013', $timezone)); $rrule = new RecurrenceRule(new Formatter()); $rrule->setFrequency(new Frequency(Frequency::WEEKLY)); $eventTwo->setRecurrenceRule($rrule); //add exception dates to the event recurrence $eventTwo->addExceptionDate(new \DateTime('16 October 2013', $timezone)) ->addExceptionDate(new \DateTime('30 October 2013', $timezone)); $cal = new Calendar(); $cal->setProdId('-//Jsvrcek//ICS//EN') ->setTimezone($timezone) ->addEvent($event) ->addEvent($eventTwo); //create second calendar using batch event provider $timezone = new \DateTimeZone('Arctic/Longyearbyen'); $calTwo = new Calendar(); $calTwo->setProdId('-//Jsvrcek//ICS//EN2') ->setTimezone($timezone); $calTwo->setEventsProvider(function($start) use ($timezone){ $eventOne = new CalendarEvent(); $eventOne->setUid('asdfasdf@example.com') ->setStart(new \DateTime('2016-01-01 01:01:01', $timezone)) ->setEnd(new \DateTime('2016-01-02 01:01:01', $timezone)) ->setSummary('A long day') ->setTimestamp(new \DateTime('1 September 2013', $timezone)); $eventTwo = new CalendarEvent(); $eventTwo->setUid('asdfasdf@example.com') ->setStart(new \DateTime('2016-01-02 01:01:01', $timezone)) ->setEnd(new \DateTime('2016-01-03 01:01:01', $timezone)) ->setSummary('Another long day') ->setTimestamp(new \DateTime('1 September 2013', $timezone)); return ($start > 0) ? array() : array($eventOne, $eventTwo); }); $ce = new CalendarExport(new CalendarStream(), new Formatter()); $ce->addCalendar($cal) ->addCalendar($calTwo); $stream = $ce->getStream(); //file_put_contents(__DIR__.'/test.ics', $stream); $expected = file_get_contents(__DIR__.'/test.ics'); $this->assertEquals($expected, $stream); } }