mapper->find( $this->getUid(), (int)$name ), $this->principalUri, $this->getACL() ); } catch (DoesNotExistException $ex) { throw new NotFound('Contact does not exist: ' . $ex->getMessage(), 0, $ex); } } /** * @inheritDoc */ public function getChildren(): array { return array_map( function (RecentContact $contact) { return new Card( $contact, $this->principalUri, $this->getACL() ); }, $this->mapper->findAll($this->getUid()) ); } /** * @inheritDoc */ public function childExists($name): bool { try { $this->mapper->find( $this->getUid(), (int)$name ); return true; } catch (DoesNotExistException $e) { return false; } } /** * @inheritDoc */ public function getLastModified(): ?int { return $this->mapper->findLastUpdatedForUserId($this->getUid()); } /** * @inheritDoc * @throws Exception */ public function propPatch(PropPatch $propPatch) { throw new Exception('This addressbook is immutable'); } /** * @inheritDoc */ public function getProperties($properties): array { return [ 'principaluri' => $this->principalUri, '{DAV:}displayname' => $this->l10n->t('Recently contacted'), '{' . Plugin::NS_OWNCLOUD . '}read-only' => true, '{' . \OCA\DAV\CalDAV\Plugin::NS_CALENDARSERVER . '}getctag' => 'http://sabre.io/ns/sync/' . ($this->getLastModified() ?? 0), ]; } public function getOwner(): string { return $this->principalUri; } /** * @inheritDoc */ public function getACL(): array { return [ [ 'privilege' => '{DAV:}read', 'principal' => $this->getOwner(), 'protected' => true, ], ]; } private function getUid(): string { [, $uid] = \Sabre\Uri\split($this->principalUri); return $uid; } }