Exemplo n.º 1
0
 public function GetCalendarProperties(CDavResource $resource, $siteId, $account = null, $arPath = null, $options = 0)
 {
     $resource->AddProperty('resourcetype', array(array('collection', ''), array('calendar', '', CDavGroupDav::CALDAV)));
     $resource->AddProperty('component-set', 'VEVENT', CDavGroupDav::GROUPDAV);
     $resource->AddProperty('supported-calendar-component-set', array(array('comp', array('name' => 'VCALENDAR'), CDavGroupDav::CALDAV), array('comp', array('name' => 'VTIMEZONE'), CDavGroupDav::CALDAV), array('comp', array('name' => 'VEVENT'), CDavGroupDav::CALDAV)), CDavGroupDav::CALDAV);
     $resource->AddProperty('supported-report-set', array('supported-report', array(CDavResource::MakeProp('report', array(CDavResource::MakeProp('calendar-multiget', '', CDavGroupDav::CALDAV))))));
     $resource->AddProperty('supported-calendar-data', array(array('calendar-data', array('content-type' => 'text/calendar', 'version' => '2.0'), CDavGroupDav::CALDAV), array('calendar-data', array('content-type' => 'text/x-calendar', 'version' => '1.0'), CDavGroupDav::CALDAV)), CDavGroupDav::CALDAV);
     $calendarId = $this->GetCalendarId($siteId, $account, $arPath);
     $arCalendarList = CCalendar::GetCalendarList($calendarId);
     if (count($arCalendarList) > 0) {
         $resource->AddProperty('displayname', $arCalendarList[0]["NAME"], CDavGroupDav::DAV);
         $resource->AddProperty('calendar-description', $arCalendarList[0]["DESCRIPTION"], CDavGroupDav::CALDAV);
         $resource->AddProperty('calendar-color', $arCalendarList[0]["COLOR"], CDavGroupDav::ICAL);
     }
     $request = $this->groupdav->GetRequest();
     $resource->AddProperty('getctag', $this->GetCTag($siteId, $account, $arPath), CDavGroupDav::CALENDARSERVER);
     $arAccount = null;
     if ($account != null) {
         $arAccount = CDavAccount::GetAccountById($account);
         $resource->AddProperty('calendar-user-address-set', array(array('href', 'MAILTO:' . $arAccount['EMAIL']), array('href', $request->GetBaseUri() . '/principals/' . $arAccount["TYPE"] . '/' . $arAccount["CODE"] . '/'), array('href', 'urn:uuid:' . $arAccount["ID"])), CDavGroupDav::CALDAV);
     }
 }
Exemplo n.º 2
0
 public function GetAddressbookProperties(CDavResource $resource, $siteId, $account = null, $arPath = null, $options = 0)
 {
     $resource->AddProperty('resourcetype', array(array('collection', ''), array('vcard-collection', '', CDavGroupDav::GROUPDAV), array('addressbook', '', CDavGroupDav::CARDDAV)));
     $resource->AddProperty('component-set', 'VCARD', CDavGroupDav::GROUPDAV);
     $resource->AddProperty('supported-report-set', array(array('supported-report', array(CDavResource::MakeProp('report', array(CDavResource::MakeProp('addressbook-query', '', CDavGroupDav::CARDDAV))))), array('supported-report', array(CDavResource::MakeProp('report', array(CDavResource::MakeProp('addressbook-multiget', '', CDavGroupDav::CARDDAV)))))));
     $resource->AddProperty('getctag', $this->GetCTag($siteId, $account, $arPath), CDavGroupDav::CALENDARSERVER);
     $arAccount = null;
     if ($account != null) {
         $arAccount = CDavAccount::GetAccountById($account);
         $resource->AddProperty('addressbook-description', $arAccount["NAME"], CDavGroupDav::CARDDAV);
     }
 }
Exemplo n.º 3
0
 protected function AddUser(&$arResources, $siteId, $arUser)
 {
     $request = $this->groupdav->GetRequest();
     $resource = new CDavResource('/principals/user/' . $arUser['CODE'] . '/');
     $resource->AddProperty('displayname', $arUser["NAME"]);
     $resource->AddProperty('getetag', $this->GetETag($arUser));
     $resource->AddProperty('resourcetype', array(array('principal', '', CDavGroupDav::DAV)));
     $resource->AddProperty('alternate-URI-set', array(array('href', 'MAILTO:' . $arUser['EMAIL'])));
     $resource->AddProperty('principal-URL', array(array('href', $request->GetBaseUri() . '/principals/user/' . $arUser['CODE'] . '/')));
     $resource->AddProperty('calendar-home-set', array(array('href', $request->GetBaseUri() . "/" . $siteId . "/" . $arUser["CODE"] . "/calendar/")), CDavGroupDav::CALDAV);
     $resource->AddProperty('calendar-user-address-set', array(array('href', 'MAILTO:' . $arUser['EMAIL']), array('href', $request->GetBaseUri() . '/principals/user/' . $arUser['CODE'] . '/'), array('href', 'urn:uuid:' . $arUser['ID'])), CDavGroupDav::CALDAV);
     $resource->AddProperty('schedule-outbox-URL', array(array('href', $request->GetBaseUri() . "/" . $siteId . "/" . $arUser["CODE"] . "/calendar/", CDavGroupDav::DAV)), CDavGroupDav::CALDAV);
     $resource->AddProperty('email-address-set', array(array('email-address', $arUser['EMAIL'], CDavGroupDav::CALENDARSERVER)), CDavGroupDav::CALENDARSERVER);
     $resource->AddProperty('last-name', $arUser['LAST_NAME'], CDavGroupDav::CALENDARSERVER);
     $resource->AddProperty('first-name', $arUser['FIRST_NAME'], CDavGroupDav::CALENDARSERVER);
     $resource->AddProperty('record-type', 'user', CDavGroupDav::CALENDARSERVER);
     $resource->AddProperty('calendar-user-type', 'INDIVIDUAL', CDavGroupDav::CALDAV);
     $resource->AddProperty('addressbook-home-set', array(array('href', $request->GetBaseUri() . "/" . $siteId . "/" . $arUser["CODE"] . "/")), CDavGroupDav::CARDDAV);
     $resource->AddProperty('supported-report-set', array('supported-report', array(CDavResource::MakeProp('report', array(CDavResource::MakeProp('acl-principal-prop-set', ''))))));
     //$memberships = array();
     //$arUserGroups = CUser::GetUserGroup($arUser["ID"]);
     //foreach ($arUserGroups as $groupId)
     //	$memberships[] = CDavWebDav::MakeProp('href', $this->baseUri.'/principals/groups/'.$groupId);
     //$resource->AddProperty('group-member-ship', $memberships);
     $arResources[] = $resource;
 }
Exemplo n.º 4
0
 protected function PROPFINDWrapper($handler = 'PROPFIND')
 {
     /** @var CDavRequest $request */
     $request = $this->request;
     $response = $this->response;
     try {
         $requestDocument = $request->GetXmlDocument();
     } catch (CDavXMLParsingException $e) {
         $response->GenerateError("400 Error", $e->getMessage());
         return;
     } catch (Exception $e) {
         $response->SetHttpStatus("400 Error");
         return;
     }
     $arResources = array();
     $retVal = $this->{$handler}($arResources);
     if ($retVal === false) {
         if (method_exists($this, "CheckLock")) {
             $arLock = $this->CheckLock($request->GetPath());
             if (is_array($arLock) && count($arLock) > 0) {
                 $resource = new CDavResource();
                 $resource->ExtractFromLock($request->GetPath(), $arLock);
                 $arResources[] = $resource;
             }
         }
         if (count($arResources) == 0) {
             $response->SetHttpStatus("404 Not Found");
             return;
         }
     } elseif (is_string($retVal)) {
         $message = "";
         if (substr($retVal, 0, 3) == '501') {
             $message .= "The requested feature is not supported by this server.\n";
         }
         $response->GenerateError($retVal, $message);
         return;
     }
     $response->SetHttpStatus('207 Multi-Status');
     $dav = array(1);
     $allow = false;
     if (method_exists($this, 'OPTIONS')) {
         $this->OPTIONS($dav, $allow);
     }
     $response->AddHeader("DAV: " . join(",", $dav));
     $response->AddHeader('Content-Type: text/xml; charset="utf-8"');
     $response->AddLine("<D:multistatus xmlns:D=\"DAV:\"" . ($this instanceof CDavWebDavServer ? " xmlns:Office=\"urn:schemas-microsoft-com:office:office\" xmlns:Repl=\"http://schemas.microsoft.com/repl/\" xmlns:Z=\"urn:schemas-microsoft-com:\"" : "") . ">");
     $bRequestedAllProp = count($requestDocument->GetPath('/*/DAV::allprop')) > 0;
     if ($this instanceof CDavWebDavServer) {
         $bRequestedAllProp = true;
     }
     $bRequestedPropName = count($requestDocument->GetPath('/*/DAV::propname')) > 0;
     $arRequestedPropsList = array();
     if (!$bRequestedAllProp) {
         $ar = $requestDocument->GetPath('/*/DAV::prop/*');
         foreach ($ar as $pw) {
             $arRequestedPropsList[] = array("xmlns" => $pw->GetXmlNS(), "tagname" => $pw->GetTag());
         }
     }
     foreach ($arResources as $resource) {
         /** @var CDavResource $resource */
         $arResourceProps = $resource->GetProperties();
         $arRequestedProps =& $arRequestedPropsList;
         if ($bRequestedAllProp) {
             $arRequestedProps =& $arResourceProps;
         }
         $xmlnsHash = array('DAV:' => 'D');
         $xmlnsDefs = 'xmlns:ns0="urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/"';
         $arPropStat = array("200" => array(), "404" => array());
         foreach ($arRequestedProps as &$requestedProp) {
             $bFound = false;
             foreach ($arResourceProps as &$prop) {
                 if ($requestedProp["tagname"] == $prop["tagname"] && $requestedProp["xmlns"] == $prop["xmlns"]) {
                     $arPropStat["200"][] =& $prop;
                     $bFound = true;
                     break;
                 }
             }
             if (!$bFound) {
                 if ($requestedProp["xmlns"] === "DAV:" && $requestedProp["tagname"] === "lockdiscovery") {
                     $arPropStat["200"][] = CDavResource::MakeProp("lockdiscovery", $this->LockDiscovery($resource->GetPath()), "DAV:");
                     $bFound = true;
                 } elseif ($request->GetParameter('HTTP_BRIEF') != 't') {
                     $arPropStat["404"][] = CDavResource::MakeProp($requestedProp["tagname"], "", $requestedProp["xmlns"]);
                 }
             }
             if (!empty($requestedProp["xmlns"]) && ($bFound || $request->GetParameter('HTTP_BRIEF') != 't')) {
                 $xmlns = $requestedProp["xmlns"];
                 if (!isset($xmlnsHash[$xmlns])) {
                     $n = "ns" . (count($xmlnsHash) + 1);
                     $xmlnsHash[$xmlns] = $n;
                     $xmlnsDefs .= " xmlns:{$n}=\"{$xmlns}\"";
                 }
             }
         }
         $response->AddLine(" <D:response %s>", $xmlnsDefs);
         $href = $this->UrlEncode($response->Encode(rtrim($request->GetBaseUri(), '/') . "/" . ltrim($resource->GetPath(), '/')));
         $response->AddLine("  <D:href>%s</D:href>", $href);
         if (count($arPropStat["200"]) > 0) {
             $response->AddLine("   <D:propstat>");
             $response->AddLine("    <D:prop>");
             foreach ($arPropStat["200"] as &$p) {
                 CDavResource::RenderProperty($p, $xmlnsHash, $response, $request);
             }
             $response->AddLine("    </D:prop>");
             $response->AddLine("    <D:status>HTTP/1.1 200 OK</D:status>");
             $response->AddLine("   </D:propstat>");
         }
         if (count($arPropStat["404"]) > 0) {
             $response->AddLine("   <D:propstat>");
             $response->AddLine("    <D:prop>");
             foreach ($arPropStat["404"] as &$p) {
                 CDavResource::RenderProperty($p, $xmlnsHash, $response, $request);
             }
             $response->AddLine("    </D:prop>");
             $response->AddLine("    <D:status>HTTP/1.1 404 Not Found</D:status>");
             $response->AddLine("   </D:propstat>");
         }
         $response->AddLine(" </D:response>");
     }
     $response->AddLine("</D:multistatus>");
 }