fsManager = $fsManager; $this->query = $query; } /** * {@inheritdoc} */ public function getFilters() { return [ new TwigFilter('file_attribute', [$this, 'fileAttribute']), new TwigFilter('file_attributes', [$this, 'fileAttributes']), ]; } public function fileAttribute(string $file, string $label): ?string { $file = u($file); $pathUri = $this->fsManager->getPathUri(); $pathUri2 = '/'.$pathUri; if ($file->startsWith($pathUri) || $file->startsWith($pathUri2)) { $file = $file->replaceMatches('#^'.preg_quote($pathUri).'#', ''); $file = $file->replaceMatches('#^'.preg_quote($pathUri2).'#', ''); } $fileInfo = $this->fsManager->getFileInformation((string) $file); if ($fileInfo) { foreach ($fileInfo->getAttributes() as $attribute) { if ($attribute['label'] === $label) { return $attribute['value']; } } } return null; } public function fileAttributes(?string $content): ?string { preg_match_all('#\{\{\s*fattr://(?P[a-z0-9]+)\/(?P