Пример #1
0
 /**
  * Sends one or more iTip messages through email.
  * 
  * @param string $originator 
  * @param array $recipients 
  * @param Sabre_VObject_Component $vObject 
  * @return void
  */
 public function sendMessage($originator, array $recipients, Sabre_VObject_Component $vObject)
 {
     foreach ($recipients as $recipient) {
         $to = $recipient;
         $replyTo = $originator;
         $subject = 'SabreDAV iTIP message';
         switch (strtoupper($vObject->METHOD)) {
             case 'REPLY':
                 $subject = 'Response for: ' . $vObject->VEVENT->SUMMARY;
                 break;
             case 'REQUEST':
                 $subject = 'Invitation for: ' . $vObject->VEVENT->SUMMARY;
                 break;
             case 'CANCEL':
                 $subject = 'Cancelled event: ' . $vObject->VEVENT->SUMMARY;
                 break;
         }
         $headers = array();
         $headers[] = 'Reply-To: ' . $replyTo;
         $headers[] = 'From: ' . $this->senderEmail;
         $headers[] = 'Content-Type: text/calendar; method=' . (string) $vObject->method . '; charset=utf-8';
         $headers[] = 'X-Sabre-Version: ' . Sabre_DAV_Version::VERSION . '-' . Sabre_DAV_Version::STABILITY;
         $vcalBody = $vObject->serialize();
         $this->mail($to, $subject, $vcalBody, $headers);
     }
 }
Пример #2
0
 function testStuff()
 {
     $vcard = new Sabre_VObject_Component('VCARD');
     $vcard->VERSION = '3.0';
     $vcard->UID = 'foo-bar';
     $vcard->PHOTO = base64_encode('random_stuff');
     $vcard->PHOTO->add('BASE64', null);
     $result = $vcard->serialize();
     $expected = array("BEGIN:VCARD", "VERSION:3.0", "PHOTO;BASE64:" . base64_encode('random_stuff'), "UID:foo-bar", "END:VCARD", "");
     $this->assertEquals(implode("\r\n", $expected), $result);
 }
Пример #3
0
 /**
  * converts Addressbook_Model_Contact to vcard
  * 
  * @param  Addressbook_Model_Contact  $_record
  * @return string
  */
 public function fromTine20Model(Tinebase_Record_Abstract $_record)
 {
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' contact ' . print_r($_record->toArray(), true));
     }
     $card = new Sabre_VObject_Component('VCARD');
     // required vcard fields
     $card->add(new Sabre_VObject_Property('VERSION', '3.0'));
     $card->add(new Sabre_VObject_Property('FN', $_record->n_fileas));
     $card->add(new Sabre_VObject_Element_MultiValue('N', array($_record->n_family, $_record->n_given)));
     $card->add(new Sabre_VObject_Property('PRODID', '-//tine20.org//Tine 2.0//EN'));
     $card->add(new Sabre_VObject_Property('UID', $_record->getId()));
     // optional fields
     $card->add(new Sabre_VObject_Element_MultiValue('ORG', array($_record->org_name, $_record->org_unit)));
     $card->add(new Sabre_VObject_Property('TITLE', $_record->title));
     $tel = new Sabre_VObject_Property('TEL', $_record->tel_work);
     $tel->add('TYPE', 'WORK');
     $card->add($tel);
     $tel = new Sabre_VObject_Property('TEL', $_record->tel_home);
     $tel->add('TYPE', 'HOME');
     $card->add($tel);
     $tel = new Sabre_VObject_Property('TEL', $_record->tel_cell);
     $tel->add('TYPE', 'CELL');
     $card->add($tel);
     $tel = new Sabre_VObject_Property('TEL', $_record->tel_pager);
     $tel->add('TYPE', 'PAGER');
     $card->add($tel);
     $tel = new Sabre_VObject_Property('TEL', $_record->tel_fax);
     $tel->add('TYPE', 'FAX');
     $card->add($tel);
     #$tel = new Sabre_VObject_Property('TEL', $_record->tel_fax_home);
     #$tel->add('TYPE', 'FAX');
     #$tel->add('TYPE', 'HOME');
     #$card->add($tel);
     $adr = new Sabre_VObject_Element_MultiValue('ADR', array(null, $_record->adr_one_street2, $_record->adr_one_street, $_record->adr_one_locality, $_record->adr_one_region, $_record->adr_one_postalcode, $_record->adr_one_countryname));
     $adr->add('TYPE', 'WORK');
     $card->add($adr);
     $adr = new Sabre_VObject_Element_MultiValue('ADR', array(null, $_record->adr_two_street2, $_record->adr_two_street, $_record->adr_two_locality, $_record->adr_two_region, $_record->adr_two_postalcode, $_record->adr_two_countryname));
     $adr->add('TYPE', 'HOME');
     $card->add($adr);
     $card->add(new Sabre_VObject_Property('EMAIL;TYPE=work', $_record->email));
     $card->add(new Sabre_VObject_Property('EMAIL;TYPE=home', $_record->email_home));
     $card->add(new Sabre_VObject_Property('URL;TYPE=work', $_record->url));
     $card->add(new Sabre_VObject_Property('URL;TYPE=home', $_record->url_home));
     $card->add(new Sabre_VObject_Property('NOTE', $_record->note));
     if (!empty($_record->jpegphoto)) {
         try {
             $image = Tinebase_Controller::getInstance()->getImage('Addressbook', $_record->getId());
             $jpegData = $image->getBlob('image/jpeg');
             $photo = new Sabre_VObject_Property('PHOTO', $jpegData);
             $photo->add('ENCODING', 'b');
             $photo->add('TYPE', 'JPEG');
             $card->add($photo);
         } catch (Exception $e) {
             Tinebase_Core::getLogger()->info(__METHOD__ . '::' . __LINE__ . " Image for contact {$_record->getId()} not found or invalid");
         }
     }
     if (isset($_record->tags) && count($_record->tags) > 0) {
         $card->add(new Sabre_VObject_Property('CATEGORIES', Sabre_VObject_Element_List((array) $_record->tags->name)));
     }
     if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) {
         Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' card ' . $card->serialize());
     }
     return $card;
 }
Пример #4
0
 function testSerializeOrder()
 {
     $comp = new Sabre_VObject_Component('VCALENDAR');
     $comp->add(new Sabre_VObject_Component('VEVENT'));
     $comp->add('PROP1', 'BLABLA');
     $comp->add('VERSION', '2.0');
     $comp->add(new Sabre_VObject_Component('VTIMEZONE'));
     $str = $comp->serialize();
     $this->assertEquals("BEGIN:VCALENDAR\r\nVERSION:2.0\r\nPROP1:BLABLA\r\nBEGIN:VTIMEZONE\r\nEND:VTIMEZONE\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n", $str);
 }
Пример #5
0
 protected function _getCalendarVTimezone()
 {
     $timezone = Tinebase_Core::getPreference()->getValueForUser(Tinebase_Preference::TIMEZONE, Tinebase_Core::getUser()->getId());
     // create vcalendar object with timezone information
     $vcalendar = new Sabre_VObject_Component('CALENDAR');
     $vcalendar->add(new Sabre_VObject_Component_VTimezone($timezone));
     // Taking out \r to not screw up the xml output
     return str_replace("\r", "", $vcalendar->serialize());
 }
Пример #6
0
 /**
  * Merges all calendar objects, and builds one big ics export 
  * 
  * @param array $nodes 
  * @return void
  */
 public function generateICS(array $nodes)
 {
     $calendar = new Sabre_VObject_Component('vcalendar');
     $calendar->version = '2.0';
     $calendar->prodid = '-//SabreDAV//SabreDAV ' . Sabre_DAV_Version::VERSION . '//EN';
     $calendar->calscale = 'GREGORIAN';
     $collectedTimezones = array();
     $timezones = array();
     $objects = array();
     foreach ($nodes as $node) {
         $nodeData = $node->get();
         $nodeComp = Sabre_VObject_Reader::read($nodeData);
         foreach ($nodeComp->children() as $child) {
             switch ($child->name) {
                 case 'VEVENT':
                 case 'VTODO':
                 case 'VJOURNAL':
                     $objects[] = $child;
                     break;
                     // VTIMEZONE is special, because we need to filter out the duplicates
                 // VTIMEZONE is special, because we need to filter out the duplicates
                 case 'VTIMEZONE':
                     // Naively just checking tzid.
                     if (in_array((string) $child->TZID, $collectedTimezones)) {
                         continue;
                     }
                     $timezones[] = $child;
                     $collectedTimezones[] = $child->TZID;
                     break;
             }
         }
     }
     foreach ($timezones as $tz) {
         $calendar->add($tz);
     }
     foreach ($objects as $obj) {
         $calendar->add($obj);
     }
     return $calendar->serialize();
 }
Пример #7
0
 /**
  * As defined in Sabre_CalDAV_Backend_Abstract
  *
  * Retrieves a single Calendar object.
  *
  * @param string $calendarId The id of the calendar. Corresponds to the id of the user it belongs to.
  * @param string $objectUri  The uri of the calendarobject to retrieve.
  *
  * @return array As specified by SabreDAV.
  */
 public function getCalendarObject($calendarId, $objectUri)
 {
     $db = Phprojekt::getInstance()->getDb();
     $events = new Calendar2_Models_Calendar2();
     $events = $events->fetchAll($db->quoteInto('uri = ?', $objectUri));
     if (!is_array($events) || empty($events)) {
         return array();
     }
     $calendarData = new Sabre_VObject_Component('vcalendar');
     $calendarData->add('version', '2.0');
     $calendarData->add('prodid', 'Phprojekt ' . Phprojekt::getVersion());
     $lastModified = $events[0]->lastModified;
     foreach ($events as $e) {
         $calendarData->add($e->asVObject($events));
         $lastModified = max($lastModified, $e->lastModified);
     }
     $lastModified = new Datetime($lastModified);
     return array('id' => $events[0]->uid, 'uri' => $objectUri, 'lastmodified' => $lastModified->format('Ymd\\THis\\Z'), 'calendarid' => $calendarId, 'calendardata' => $calendarData->serialize());
 }
Пример #8
0
 /**
  * Converts a timecard join project join module row to a vobject string.
  *
  * @param array $entry
  *
  * @return string
  */
 private function _getDataForEntry(array $entry)
 {
     $v = new Sabre_VObject_Component('vevent');
     if (1 == $entry['project_id']) {
         $v->add('summary', Phprojekt::getInstance()->translate('Unassigned'));
     } else {
         $v->add('summary', $entry['title'] . ' [' . $entry['project_id'] . ']');
     }
     $notes = trim($entry['notes']);
     if (!is_null($entry['module_id'])) {
         if ($notes) {
             $notes .= "\n";
         }
         $notes .= Phprojekt::getInstance()->translate('There is an attachment of type ') . Phprojekt::getInstance()->translate($entry['label']);
     }
     if ($notes) {
         $v->add('description', $notes);
     }
     $start = new DateTime('@' . Phprojekt_Converter_Time::userToUtc($entry['start_datetime']));
     $end = substr($entry['start_datetime'], 0, 11) . $entry['end_time'];
     $end = new DateTime('@' . Phprojekt_Converter_Time::userToUtc($end));
     $v->add('dtstart', $start->format('Ymd\\THis\\Z'));
     $v->add('dtend', $end->format('Ymd\\THis\\Z'));
     $v->add('uid', 'phprojekt-timecard-entry' . $entry['uid']);
     $calendarData = new Sabre_VObject_Component('vcalendar');
     $calendarData->add('version', '2.0');
     $calendarData->add('prodid', 'Phprojekt ' . Phprojekt::getVersion());
     $calendarData->add($v);
     return $calendarData->serialize();
 }
Пример #9
0
 function testSerializeChildren()
 {
     $comp = new Sabre_VObject_Component('VCALENDAR');
     $comp->children = array(new Sabre_VObject_Component('VEVENT'), new Sabre_VObject_Component('VTODO'));
     $this->assertEquals("BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nEND:VEVENT\r\nBEGIN:VTODO\r\nEND:VTODO\r\nEND:VCALENDAR\r\n", $comp->serialize());
 }