calendar->getOwner(); } public function getGroup(): ?string { return null; } public function getACL(): array { return $this->calendar->getACL(); } public function setACL(array $acl): void { throw new Forbidden('Setting ACL is not supported'); } public function getSupportedPrivilegeSet(): ?array { return null; } public function put($data): void { throw new Forbidden('Updating events is not supported'); } public function get(): string { return $this->calendarData->serialize(); } public function getContentType(): string { return 'text/calendar; charset=utf-8'; } public function getETag(): string { return '"' . sha1($this->get()) . '"'; } public function getSize(): int { return strlen($this->get()); } public function delete(): void { throw new Forbidden('Deleting events is not supported'); } public function setName($name): void { throw new Forbidden('Renaming events is not supported'); } public function getLastModified(): ?int { return null; } public function getName(): string { $base = $this->calendarData->getBaseComponent(); if ($base === null || !isset($base->UID)) { throw new NotFound('Calendar event is missing a UID'); } return isset($base->{'X-FILENAME'}) ? (string)$base->{'X-FILENAME'} : (string)$base->UID . '.ics'; } }