/**
  * This method is called when properties are retrieved.
  *
  * Here we add all the default properties.
  *
  * @param PropFind $propFind
  * @param INode $node
  * @return void
  */
 function propFind(PropFind $propFind, INode $node)
 {
     $propFind->handle('{DAV:}getlastmodified', function () use($node) {
         $lm = $node->getLastModified();
         if ($lm) {
             return new Property\GetLastModified($lm);
         }
     });
     if ($node instanceof IFile) {
         $propFind->handle('{DAV:}getcontentlength', [$node, 'getSize']);
         $propFind->handle('{DAV:}getetag', [$node, 'getETag']);
         $propFind->handle('{DAV:}getcontenttype', [$node, 'getContentType']);
     }
     if ($node instanceof IQuota) {
         $quotaInfo = null;
         $propFind->handle('{DAV:}quota-used-bytes', function () use(&$quotaInfo, $node) {
             $quotaInfo = $node->getQuotaInfo();
             return $quotaInfo[0];
         });
         $propFind->handle('{DAV:}quota-available-bytes', function () use(&$quotaInfo, $node) {
             if (!$quotaInfo) {
                 $quotaInfo = $node->getQuotaInfo();
             }
             return $quotaInfo[1];
         });
     }
     $propFind->handle('{DAV:}supported-report-set', function () use($propFind) {
         $reports = [];
         foreach ($this->server->getPlugins() as $plugin) {
             $reports = array_merge($reports, $plugin->getSupportedReportSet($propFind->getPath()));
         }
         return new Property\SupportedReportSet($reports);
     });
     $propFind->handle('{DAV:}resourcetype', function () use($node) {
         return new Property\ResourceType($this->server->getResourceTypeForNode($node));
     });
     $propFind->handle('{DAV:}supported-method-set', function () use($propFind) {
         return new Property\SupportedMethodSet($this->server->getAllowedMethods($propFind->getPath()));
     });
 }