Пример #1
0
 /**
  * Convert an event object to be used on the client
  */
 private function _client_event($event, $addcss = false)
 {
     // compose a human readable strings for alarms_text and recurrence_text
     if ($event['valarms']) {
         $event['alarms_text'] = libcalendaring::alarms_text($event['valarms']);
         $event['valarms'] = libcalendaring::to_client_alarms($event['valarms']);
     }
     if ($event['recurrence']) {
         $event['recurrence_text'] = $this->lib->recurrence_text($event['recurrence']);
         $event['recurrence'] = $this->lib->to_client_recurrence($event['recurrence'], $event['allday']);
         unset($event['recurrence_date']);
     }
     foreach ((array) $event['attachments'] as $k => $attachment) {
         $event['attachments'][$k]['classname'] = rcube_utils::file2class($attachment['mimetype'], $attachment['name']);
     }
     // convert link URIs references into structs
     if (array_key_exists('links', $event)) {
         foreach ((array) $event['links'] as $i => $link) {
             if (strpos($link, 'imap://') === 0 && ($msgref = $this->driver->get_message_reference($link))) {
                 $event['links'][$i] = $msgref;
             }
         }
     }
     // check for organizer in attendees list
     $organizer = null;
     foreach ((array) $event['attendees'] as $i => $attendee) {
         if ($attendee['role'] == 'ORGANIZER') {
             $organizer = $attendee;
         }
         if ($attendee['status'] == 'DELEGATED' && $attendee['rsvp'] == false) {
             $event['attendees'][$i]['noreply'] = true;
         } else {
             unset($event['attendees'][$i]['noreply']);
         }
     }
     if ($organizer === null && !empty($event['organizer'])) {
         $organizer = $event['organizer'];
         $organizer['role'] = 'ORGANIZER';
         if (!is_array($event['attendees'])) {
             $event['attendees'] = array();
         }
         array_unshift($event['attendees'], $organizer);
     }
     // Convert HTML description into plain text
     if ($this->is_html($event)) {
         $h2t = new rcube_html2text($event['description'], false, true, 0);
         $event['description'] = trim($h2t->get_text());
     }
     // mapping url => vurl because of the fullcalendar client script
     $event['vurl'] = $event['url'];
     unset($event['url']);
     return array('_id' => $event['calendar'] . ':' . $event['id'], 'start' => $this->lib->adjust_timezone($event['start'], $event['allday'])->format('c'), 'end' => $this->lib->adjust_timezone($event['end'], $event['allday'])->format('c'), 'changed' => $event['changed'] ? $this->lib->adjust_timezone($event['changed'])->format('c') : null, 'created' => $event['created'] ? $this->lib->adjust_timezone($event['created'])->format('c') : null, 'title' => strval($event['title']), 'description' => strval($event['description']), 'location' => strval($event['location']), 'className' => ($addcss ? 'fc-event-cal-' . asciiwords($event['calendar'], true) . ' ' : '') . 'fc-event-cat-' . asciiwords(strtolower(join('-', (array) $event['categories'])), true) . rtrim(' ' . $event['className']), 'allDay' => $event['allday'] == 1) + $event;
 }
 /**
  * Prepare the given task record before sending it to the client
  */
 private function encode_task(&$rec)
 {
     $rec['mask'] = $this->filter_mask($rec);
     $rec['flagged'] = intval($rec['flagged']);
     $rec['complete'] = floatval($rec['complete']);
     if (is_object($rec['created'])) {
         $rec['created_'] = $this->rc->format_date($rec['created']);
         $rec['created'] = $rec['created']->format('U');
     }
     if (is_object($rec['changed'])) {
         $rec['changed_'] = $this->rc->format_date($rec['changed']);
         $rec['changed'] = $rec['changed']->format('U');
     } else {
         $rec['changed'] = null;
     }
     if ($rec['date']) {
         try {
             $date = new DateTime($rec['date'] . ' ' . $rec['time'], $this->timezone);
             $rec['datetime'] = intval($date->format('U'));
             $rec['date'] = $date->format($this->rc->config->get('date_format', 'Y-m-d'));
             $rec['_hasdate'] = 1;
         } catch (Exception $e) {
             $rec['date'] = $rec['datetime'] = null;
         }
     } else {
         $rec['date'] = $rec['datetime'] = null;
         $rec['_hasdate'] = 0;
     }
     if ($rec['startdate']) {
         try {
             $date = new DateTime($rec['startdate'] . ' ' . $rec['starttime'], $this->timezone);
             $rec['startdatetime'] = intval($date->format('U'));
             $rec['startdate'] = $date->format($this->rc->config->get('date_format', 'Y-m-d'));
         } catch (Exception $e) {
             $rec['startdate'] = $rec['startdatetime'] = null;
         }
     }
     if ($rec['valarms']) {
         $rec['alarms_text'] = libcalendaring::alarms_text($rec['valarms']);
         $rec['valarms'] = libcalendaring::to_client_alarms($rec['valarms']);
     }
     if ($rec['recurrence']) {
         $rec['recurrence_text'] = $this->lib->recurrence_text($rec['recurrence']);
         $rec['recurrence'] = $this->lib->to_client_recurrence($rec['recurrence'], $rec['time'] || $rec['starttime']);
     }
     foreach ((array) $rec['attachments'] as $k => $attachment) {
         $rec['attachments'][$k]['classname'] = rcube_utils::file2class($attachment['mimetype'], $attachment['name']);
     }
     // convert link URIs references into structs
     if (array_key_exists('links', $rec)) {
         foreach ((array) $rec['links'] as $i => $link) {
             if (strpos($link, 'imap://') === 0 && ($msgref = $this->driver->get_message_reference($link))) {
                 $rec['links'][$i] = $msgref;
             }
         }
     }
     // Convert HTML description into plain text
     if ($this->is_html($rec)) {
         $h2t = new rcube_html2text($rec['description'], false, true, 0);
         $rec['description'] = $h2t->get_text();
     }
     if (!is_array($rec['tags'])) {
         $rec['tags'] = (array) $rec['tags'];
     }
     sort($rec['tags'], SORT_LOCALE_STRING);
     if (in_array($rec['id'], $this->collapsed_tasks)) {
         $rec['collapsed'] = true;
     }
     if (empty($rec['parent_id'])) {
         $rec['parent_id'] = null;
     }
     $this->task_titles[$rec['id']] = $rec['title'];
 }