function testGeneratorBaseObject()
 {
     $obj = new Sabre_VObject_Component('VCALENDAR');
     $obj->METHOD = 'PUBLISH';
     $gen = new Sabre_VObject_FreeBusyGenerator();
     $gen->setObjects(array());
     $gen->setBaseObject($obj);
     $result = $gen->getResult();
     $this->assertEquals('PUBLISH', $result->METHOD->value);
 }
Example #2
0
 /**
  * Returns free-busy information for a specific address. The returned 
  * data is an array containing the following properties:
  *
  * calendar-data : A VFREEBUSY VObject
  * request-status : an iTip status code.
  * href: The principal's email address, as requested
  *
  * The following request status codes may be returned:
  *   * 2.0;description
  *   * 3.7;description
  *
  * @param string $email address
  * @param DateTime $start
  * @param DateTime $end
  * @param Sabre_VObject_Component $request 
  * @return Sabre_VObject_Component 
  */
 protected function getFreeBusyForEmail($email, DateTime $start, DateTime $end, Sabre_VObject_Component $request)
 {
     $caldavNS = '{' . Sabre_CalDAV_Plugin::NS_CALDAV . '}';
     $aclPlugin = $this->server->getPlugin('acl');
     if (substr($email, 0, 7) === 'mailto:') {
         $email = substr($email, 7);
     }
     $result = $aclPlugin->principalSearch(array('{http://sabredav.org/ns}email-address' => $email), array('{DAV:}principal-URL', $caldavNS . 'calendar-home-set', '{http://sabredav.org/ns}email-address'));
     if (!count($result)) {
         return array('request-status' => '3.7;Could not find principal', 'href' => 'mailto:' . $email);
     }
     if (!isset($result[0][200][$caldavNS . 'calendar-home-set'])) {
         return array('request-status' => '3.7;No calendar-home-set property found', 'href' => 'mailto:' . $email);
     }
     $homeSet = $result[0][200][$caldavNS . 'calendar-home-set']->getHref();
     $calendars = array();
     // Grabbing the calendar list
     $props = array('{DAV:}resourcetype');
     $objects = array();
     foreach ($this->server->tree->getNodeForPath($homeSet)->getChildren() as $node) {
         if (!$node instanceof Sabre_CalDAV_ICalendar) {
             continue;
         }
         $aclPlugin->checkPrivileges($homeSet . $node->getName(), $caldavNS . 'read-free-busy');
         $calObjects = array_map(function ($child) {
             $obj = $child->get();
             return $obj;
         }, $node->getChildren());
         $objects = array_merge($objects, $calObjects);
     }
     $vcalendar = new Sabre_VObject_Component('VCALENDAR');
     $vcalendar->VERSION = '2.0';
     $vcalendar->METHOD = 'REPLY';
     $vcalendar->CALSCALE = 'GREGORIAN';
     $vcalendar->PRODID = '-//SabreDAV//SabreDAV ' . Sabre_DAV_Version::VERSION . '//EN';
     $generator = new Sabre_VObject_FreeBusyGenerator();
     $generator->setObjects($objects);
     $generator->setTimeRange($start, $end);
     $generator->setBaseObject($vcalendar);
     $result = $generator->getResult();
     $vcalendar->VFREEBUSY->ATTENDEE = 'mailto:' . $email;
     $vcalendar->VFREEBUSY->UID = (string) $request->VFREEBUSY->UID;
     return array('calendar-data' => $result, 'request-status' => '2.0;Success', 'href' => 'mailto:' . $email);
 }