diff --git a/lib/Listener/FileCreatedFromTemplateListener.php b/lib/Listener/FileCreatedFromTemplateListener.php index d929369429..0473f3e74e 100644 --- a/lib/Listener/FileCreatedFromTemplateListener.php +++ b/lib/Listener/FileCreatedFromTemplateListener.php @@ -9,6 +9,7 @@ namespace OCA\Richdocuments\Listener; +use OCA\Richdocuments\Service\CapabilitiesService; use OCA\Richdocuments\Service\TemplateFieldService; use OCA\Richdocuments\TemplateManager; use OCP\EventDispatcher\Event; @@ -17,17 +18,12 @@ /** @template-implements IEventListener */ class FileCreatedFromTemplateListener implements IEventListener { - /** @var TemplateManager */ - private $templateManager; - /** @var TemplateFieldService */ - private $templateFieldService; public function __construct( - TemplateManager $templateManager, - TemplateFieldService $templateFieldService + private TemplateManager $templateManager, + private TemplateFieldService $templateFieldService, + private CapabilitiesService $capabilitiesService, ) { - $this->templateManager = $templateManager; - $this->templateFieldService = $templateFieldService; } public function handle(Event $event): void { @@ -55,8 +51,10 @@ public function handle(Event $event): void { $this->templateManager->setTemplateSource($event->getTarget()->getId(), $templateFile->getId()); } - $filledTemplate = $this->templateFieldService->fillFields($templateFile, $event->getTemplateFields()); - $event->getTarget()->putContent($filledTemplate); + if ($this->capabilitiesService->hasFormFilling()) { + $filledTemplate = $this->templateFieldService->fillFields($templateFile, $event->getTemplateFields()); + $event->getTarget()->putContent($filledTemplate); + } // Avoid having the mimetype of the source file set $event->getTarget()->getStorage()->getCache()->update($event->getTarget()->getId(), [ diff --git a/lib/Service/CapabilitiesService.php b/lib/Service/CapabilitiesService.php index f61cf0f0c4..e15cc7a660 100644 --- a/lib/Service/CapabilitiesService.php +++ b/lib/Service/CapabilitiesService.php @@ -66,13 +66,11 @@ public function getServerProductName(): ?string { } public function hasNextcloudBranding(): bool { - $productVersion = $this->getCapabilities()['productVersion'] ?? '0.0.0.0'; - return version_compare($productVersion, '21.11', '>='); + return $this->isVersionAtLeast('21.11'); } public function hasDrawSupport(): bool { - $productVersion = $this->getCapabilities()['productVersion'] ?? '0.0.0.0'; - return version_compare($productVersion, '6.4.7', '>='); + return $this->isVersionAtLeast('6.4.7'); } public function hasTemplateSource(): bool { @@ -87,6 +85,15 @@ public function hasWASMSupport(): bool { return $this->getCapabilities()['hasWASMSupport'] ?? false; } + public function hasFormFilling(): bool { + return $this->isVersionAtLeast('24.04.5.2'); + } + + private function isVersionAtLeast(string $version): bool { + $productVersion = $this->getCapabilities()['productVersion'] ?? '0.0.0.0'; + return version_compare($productVersion, $version, '>='); + } + public function getProductName(): string { $theme = $this->config->getAppValue(Application::APPNAME, 'theme', 'nextcloud'); diff --git a/lib/Service/TemplateFieldService.php b/lib/Service/TemplateFieldService.php index 7bc511018c..6da335a428 100644 --- a/lib/Service/TemplateFieldService.php +++ b/lib/Service/TemplateFieldService.php @@ -18,6 +18,7 @@ class TemplateFieldService { public function __construct( private IClientService $clientService, + private CapabilitiesService $capabilitiesService, private AppConfig $appConfig, private IRootFolder $rootFolder, private LoggerInterface $logger @@ -29,6 +30,10 @@ public function __construct( * @return array|string */ public function extractFields(Node|int $file) { + if (!$this->capabilitiesService->hasFormFilling()) { + return []; + } + if (is_int($file)) { $file = $this->rootFolder->getFirstNodeById($file); } @@ -84,6 +89,10 @@ public function extractFields(Node|int $file) { * @return string|resource */ public function fillFields(Node|int $file, array $fields = []) { + if (!$this->capabilitiesService->hasFormFilling()) { + throw new \RuntimeException('Form filling not supported by the Collabora server'); + } + if (is_int($file)) { $file = $this->rootFolder->getFirstNodeById($file); }