From b951f43fd536ddf40576eada8058f187cf6c2619 Mon Sep 17 00:00:00 2001 From: Cyperghost Date: Wed, 19 Jun 2024 11:09:45 +0200 Subject: [PATCH] Load the file(s) when `$this->value` is set --- .../shared_fileProcessorFormField.tpl | 11 +--- .../Builder/Field/Controller/FileProcessor.ts | 4 ++ .../Builder/Field/Controller/FileProcessor.js | 3 + .../field/FileProcessorFormField.class.php | 59 ++++++++++++++++++- 4 files changed, 67 insertions(+), 10 deletions(-) diff --git a/com.woltlab.wcf/templates/shared_fileProcessorFormField.tpl b/com.woltlab.wcf/templates/shared_fileProcessorFormField.tpl index ea9c174bdb..110fb7ac77 100644 --- a/com.woltlab.wcf/templates/shared_fileProcessorFormField.tpl +++ b/com.woltlab.wcf/templates/shared_fileProcessorFormField.tpl @@ -1,14 +1,9 @@ +{assign var="files" value=$field->getFiles()} {if $maxUploads === 1 && $imageOnly}
{if $field->getValue()} - {*…*} - + {assign var="file" value=$files|reset} + {unsafe:$file->toHtmlElement()} {/if}
{else} diff --git a/ts/WoltLabSuite/Core/Form/Builder/Field/Controller/FileProcessor.ts b/ts/WoltLabSuite/Core/Form/Builder/Field/Controller/FileProcessor.ts index b1113cfd4e..889b17533f 100644 --- a/ts/WoltLabSuite/Core/Form/Builder/Field/Controller/FileProcessor.ts +++ b/ts/WoltLabSuite/Core/Form/Builder/Field/Controller/FileProcessor.ts @@ -29,6 +29,10 @@ export class FileProcessor { void this.#registerFile(event.detail); }); this.#fileInput = this.#uploadButton.shadowRoot!.querySelector('input[type="file"]')!; + + this.#container.querySelectorAll("woltlab-core-file").forEach((element) => { + void this.#registerFile(element); + }); } get isSingleFileUpload(): boolean { diff --git a/wcfsetup/install/files/js/WoltLabSuite/Core/Form/Builder/Field/Controller/FileProcessor.js b/wcfsetup/install/files/js/WoltLabSuite/Core/Form/Builder/Field/Controller/FileProcessor.js index 0bec3cb7bc..1dd15ec25d 100644 --- a/wcfsetup/install/files/js/WoltLabSuite/Core/Form/Builder/Field/Controller/FileProcessor.js +++ b/wcfsetup/install/files/js/WoltLabSuite/Core/Form/Builder/Field/Controller/FileProcessor.js @@ -25,6 +25,9 @@ define(["require", "exports", "WoltLabSuite/Core/Language", "WoltLabSuite/Core/A void this.#registerFile(event.detail); }); this.#fileInput = this.#uploadButton.shadowRoot.querySelector('input[type="file"]'); + this.#container.querySelectorAll("woltlab-core-file").forEach((element) => { + void this.#registerFile(element); + }); } get isSingleFileUpload() { // TODO check if only images are allowed diff --git a/wcfsetup/install/files/lib/system/form/builder/field/FileProcessorFormField.class.php b/wcfsetup/install/files/lib/system/form/builder/field/FileProcessorFormField.class.php index 9251ecedd1..9ee31e5037 100644 --- a/wcfsetup/install/files/lib/system/form/builder/field/FileProcessorFormField.class.php +++ b/wcfsetup/install/files/lib/system/form/builder/field/FileProcessorFormField.class.php @@ -2,9 +2,12 @@ namespace wcf\system\form\builder\field; +use wcf\data\file\File; +use wcf\data\file\FileList; use wcf\system\file\processor\FileProcessor; use wcf\system\file\processor\IFileProcessor; use wcf\system\form\builder\TObjectTypeFormNode; +use wcf\util\ArrayUtil; use wcf\util\ImageUtil; /** @@ -25,13 +28,31 @@ final class FileProcessorFormField extends AbstractFormField private array $context = []; + /** + * @var File[] + */ + private array $files = []; + #[\Override] public function readValue() { - \wcfDebug($this->getDocument()->getRequestData()); if ($this->getDocument()->hasRequestData($this->getPrefixedId())) { - $this->context = $this->getDocument()->getRequestData($this->getPrefixedId()); + $value = $this->getDocument()->getRequestData($this->getPrefixedId()); + + if ($this->isSingleFileUpload()) { + $this->value(\intval($value)); + } else { + $this->value(ArrayUtil::toIntegerArray($value)); + } } + + return $this; + } + + #[\Override] + public function hasSaveValue() + { + return $this->isSingleFileUpload(); } #[\Override] @@ -55,12 +76,46 @@ final class FileProcessorFormField extends AbstractFormField return $this->getObjectType()->getProcessor(); } + private function isSingleFileUpload(): bool + { + return $this->getFileProcessor()->getMaximumCount($this->context) === 1; + } + #[\Override] public function getObjectTypeDefinition() { return 'com.woltlab.wcf.file'; } + public function getFiles(): array + { + return $this->files; + } + + #[\Override] + public function value($value) + { + if ($this->isSingleFileUpload()) { + $file = new File($value); + if ($file->fileID === $value) { + $this->files = [$file]; + } + + return parent::value($value); + } else { + if (!\is_array($value)) { + $value = [$value]; + } + + $fileList = new FileList(); + $fileList->setObjectIDs($value); + $fileList->readObjects(); + $this->files = $fileList->getObjects(); + + return parent::value($value); + } + } + /** * Returns the context for the file processor. */ -- 2.20.1