Example #1
0
 /**
  * Get this event as a VObject. This can be turned into a vcalendar file data.
  * 
  * @param string $method REQUEST, REPLY or CANCEL
  * @param Participant $updateByParticipant The participant that is generating this ICS for a response.
  * @param int $recurrenceTime Export for a specific recurrence time for the recurrence-id. 
  * @param boolean $includeExdatesForMovedEvents Funambol need EXDATE lines even for appointments that have been moved. CalDAV doesn't need those lines.
  * 
  * If this event is an occurence and has a exception_for_event_id it will automatically determine this value. 
  * This option is only useful for cancelling a single occurence. Because in that case there is no event model for the occurrence. There's just an exception.
  * 
  * @return Sabre\VObject\Component 
  */
 public function toVObject($method = 'REQUEST', $updateByParticipant = false, $recurrenceTime = false, $includeExdatesForMovedEvents = false)
 {
     $calendar = new Sabre\VObject\Component\VCalendar();
     $e = $calendar->createComponent('VEVENT');
     if (empty($this->uuid)) {
         $this->uuid = \GO\Base\Util\UUID::create('event', $this->id);
         $this->save(true);
     }
     $e->uid = $this->uuid;
     if (isset($this->sequence)) {
         $e->sequence = $this->sequence;
     }
     $e->add('dtstamp', new \DateTime("now", new \DateTimeZone('UTC')));
     $mtimeDateTime = new \DateTime('@' . $this->mtime);
     $mtimeDateTime->setTimezone(new \DateTimeZone('UTC'));
     $e->add('LAST-MODIFIED', $mtimeDateTime);
     $ctimeDateTime = new \DateTime('@' . $this->mtime);
     $ctimeDateTime->setTimezone(new \DateTimeZone('UTC'));
     $e->add('created', $ctimeDateTime);
     $e->summary = (string) $this->name;
     //		switch($this->owner_status){
     //			case Participant::STATUS_ACCEPTED:
     //				$e->status = "CONFIRMED";
     //				break;
     //			case Participant::STATUS_DECLINED:
     //				$e->status = "CANCELLED";
     //				break;
     //			default:
     //				$e->status = "TENTATIVE";
     //				break;
     //		}
     $e->status = $this->status;
     $dateType = $this->all_day_event ? "DATE" : "DATETIME";
     //		if($this->all_day_event){
     //			$e->{"X-FUNAMBOL-ALLDAY"}=1;
     //		}
     if ($this->exception_for_event_id > 0) {
         //this is an exception
         $exception = $this->recurringEventException();
         //get master event from relation
         if ($exception) {
             $recurrenceTime = $exception->getStartTime();
         }
     }
     if ($recurrenceTime) {
         $dt = \GO\Base\Util\Date\DateTime::fromUnixtime($recurrenceTime);
         $rId = $e->add('recurrence-id', $dt);
         if ($this->_exceptionEvent->all_day_event) {
             $rId['VALUE'] = 'DATE';
         }
     }
     $dtstart = $e->add('dtstart', \GO\Base\Util\Date\DateTime::fromUnixtime($this->start_time));
     if ($this->all_day_event) {
         $dtstart['VALUE'] = 'DATE';
     }
     if ($this->all_day_event) {
         $end_time = \GO\Base\Util\Date::clear_time($this->end_time);
         $end_time = \GO\Base\Util\Date::date_add($end_time, 1);
     } else {
         $end_time = $this->end_time;
     }
     $dtend = $e->add('dtend', \GO\Base\Util\Date\DateTime::fromUnixtime($end_time));
     if ($this->all_day_event) {
         $dtend['VALUE'] = 'DATE';
     }
     if (!empty($this->description)) {
         $e->description = $this->description;
     }
     if (!empty($this->location)) {
         $e->location = $this->location;
     }
     if (!empty($this->rrule)) {
         $rRule = $this->getRecurrencePattern();
         $rRule->shiftDays(false);
         $e->add('rrule', str_replace('RRULE:', '', $rRule->createRrule()));
         $findParams = \GO\Base\Db\FindParams::newInstance();
         if (!$includeExdatesForMovedEvents) {
             $findParams->getCriteria()->addCondition('exception_event_id', 0);
         }
         $stmt = $this->exceptions($findParams);
         while ($exception = $stmt->fetch()) {
             $dt = \GO\Base\Util\Date\DateTime::fromUnixtime($exception->getStartTime());
             $exdate = $e->add('exdate', $dt);
             if ($this->all_day_event) {
                 $exdate['VALUE'] = 'DATE';
             }
         }
     }
     $stmt = $this->participants();
     while ($participant = $stmt->fetch()) {
         if ($participant->is_organizer || $method == 'REQUEST' || $updateByParticipant && $updateByParticipant->id == $participant->id) {
             //If this is a meeting REQUEST then we must send all participants.
             //For a CANCEL or REPLY we must send the organizer and the current user.
             $e->add($participant->is_organizer ? 'organizer' : 'attendee', 'mailto:' . $participant->email, array('cn' => $participant->name, 'rsvp' => 'true', 'partstat' => $this->_exportVObjectStatus($participant->status)));
         }
     }
     if ($this->category) {
         $e->categories = $this->category->name;
     }
     if ($this->reminder > 0) {
         $a = $calendar->createComponent('VALARM');
         //			BEGIN:VALARM
         //ACTION:DISPLAY
         //TRIGGER;VALUE=DURATION:-PT5M
         //DESCRIPTION:Default Mozilla Description
         //END:VALARM
         $a->action = 'DISPLAY';
         $a->add('trigger', '-PT' . $this->reminder / 60 . 'M', array('value' => 'DURATION'));
         $a->description = "Alarm";
         //for funambol compatibility, the \GO\Base\VObject\Reader class use this to convert it to a vcalendar 1.0 aalarm tag.
         $e->{"X-GO-REMINDER-TIME"} = date('Ymd\\THis', $this->start_time - $this->reminder);
         $e->add($a);
     }
     if ($this->private) {
         $e->class = 'PRIVATE';
     }
     return $e;
 }
Example #2
0
 /**
  * Get this task as a VObject. This can be turned into a vcalendar file data.
  * 
  * @return Sabre\VObject\Component 
  */
 public function toVObject()
 {
     $calendar = new Sabre\VObject\Component\VCalendar();
     $e = $calendar->createComponent('VTODO');
     $e->uid = $this->uuid;
     $e->add('dtstamp', new \DateTime("now", new \DateTimeZone('UTC')));
     $mtimeDateTime = new \DateTime('@' . $this->mtime);
     $mtimeDateTime->setTimezone(new \DateTimeZone('UTC'));
     $e->add('LAST-MODIFIED', $mtimeDateTime);
     $ctimeDateTime = new \DateTime('@' . $this->mtime);
     $ctimeDateTime->setTimezone(new \DateTimeZone('UTC'));
     $e->add('created', $ctimeDateTime);
     $e->summary = $this->name;
     $e->status = $this->status;
     $dateType = "DATE";
     if (!empty($this->start_time)) {
         $e->add('dtstart', \GO\Base\Util\Date\DateTime::fromUnixtime($this->start_time), array('VALUE' => $dateType));
     }
     $e->add('due', \GO\Base\Util\Date\DateTime::fromUnixtime($this->due_time), array('VALUE' => $dateType));
     if ($this->completion_time > 0) {
         $e->add('completed', \GO\Base\Util\Date\DateTime::fromUnixtime($this->completion_time), array('VALUE' => $dateType));
     }
     if (!empty($this->percentage_complete)) {
         $e->add('percent-complete', $this->percentage_complete);
     }
     if (!empty($this->description)) {
         $e->description = $this->description;
     }
     //todo exceptions
     if (!empty($this->rrule)) {
         $e->rrule = str_replace('RRULE:', '', $this->rrule);
     }
     switch ($this->priority) {
         case self::PRIORITY_LOW:
             $e->priority = 9;
             break;
         case self::PRIORITY_HIGH:
             $e->priority = 1;
             break;
         default:
             $e->priority = 5;
     }
     if ($this->reminder > 0) {
         $a = $calendar->createComponent('VALARM');
         //			BEGIN:VALARM
         //ACTION:DISPLAY
         //TRIGGER;VALUE=DURATION:-PT5M
         //DESCRIPTION:Default Mozilla Description
         //END:VALARM
         $a->action = 'DISPLAY';
         $a->add('trigger', date('Ymd\\THis', $this->reminder), array('value' => 'DATE-TIME'));
         $a->description = "Alarm";
         //for funambol compatibility, the \GO\Base\VObject\Reader class use this to convert it to a vcalendar 1.0 aalarm tag.
         $e->{"X-GO-REMINDER-TIME"} = date('Ymd\\THis', $this->reminder);
         $e->add($a);
     }
     return $e;
 }
 /**
  * Render the event row in the PDF
  * 
  * @param \GO\Calendar\Model\Event $event
  */
 private function _renderEventRow(\GO\Calendar\Model\LocalEvent $event)
 {
     $html = '';
     $html .= '<tcpdf method="renderLine" />';
     $html .= '<b><font style="font-size:' . $this->_timeFontSize . 'px">' . \GO\Base\Util\Date\DateTime::fromUnixtime($event->getAlternateStartTime())->format('H:i') . ' - ' . \GO\Base\Util\Date\DateTime::fromUnixtime($event->getAlternateEndTime())->format('H:i') . '</font> <font style="font-size:' . $this->_nameFontSize . 'px">' . \GO\Base\Util\String::text_to_html($event->getName(), true) . '</font></b>';
     $realEvent = $event->getEvent();
     if (!empty($realEvent->description)) {
         $html .= '<br /><font style="font-size:' . $this->_descriptionFontSize . 'px">' . $realEvent->getAttribute('description', 'html') . '</font>';
     }
     $this->writeHTML($html, true, false, false, false, 'L');
 }