diff --git a/Classes/Controller/ModuleController.php b/Classes/Controller/ModuleController.php
index 92e214d..d64cb76 100644
--- a/Classes/Controller/ModuleController.php
+++ b/Classes/Controller/ModuleController.php
@@ -5,12 +5,15 @@
namespace In2code\Alternative\Controller;
use In2code\Alternative\Domain\Service\AlternativeService;
+use In2code\Alternative\Utility\FileUtility;
use Psr\Http\Message\ResponseInterface;
use TYPO3\CMS\Backend\Routing\UriBuilder;
use TYPO3\CMS\Core\Messaging\FlashMessage;
use TYPO3\CMS\Core\Messaging\FlashMessageService;
use TYPO3\CMS\Core\Resource\File;
use TYPO3\CMS\Core\Resource\FileRepository;
+use TYPO3\CMS\Core\Resource\Folder;
+use TYPO3\CMS\Core\Resource\ResourceFactory;
use TYPO3\CMS\Core\Type\ContextualFeedbackSeverity;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
@@ -23,6 +26,7 @@ public function __construct(
readonly protected FileRepository $fileRepository,
readonly protected FlashMessageService $flashMessageService,
readonly protected UriBuilder $uriBuilderCore,
+ readonly protected ResourceFactory $resourceFactory,
) {
}
@@ -44,6 +48,13 @@ public function addMetadataAction(int $file): ResponseInterface
}
return $this->openFileList($file);
}
+ public function addMetadataFromFolderAction(string $folderName): ResponseInterface
+ {
+ $folder = $this->resourceFactory->getFolderObjectFromCombinedIdentifier($folderName);
+ $this->addMetaDataToFolder($folder);
+
+ return $this->redirectToUri($this->uriBuilderCore->buildUriFromRoute('media_management', ['id' => $folder->getParentFolder()->getCombinedIdentifier()]));
+ }
protected function openFileList(File $file): ResponseInterface
{
@@ -58,4 +69,23 @@ protected function addMessage(string $message, ContextualFeedbackSeverity $sever
$messageQueue = $this->flashMessageService->getMessageQueueByIdentifier();
$messageQueue->addMessage($message);
}
+
+ protected function addMetaDataToFolder(Folder $folder): void
+ {
+ $successes = 0;
+ foreach ($folder->getFiles() as $file) {
+ if (FileUtility::isImage($file)) {
+ if ($this->alternativeService->setImageMetadata($file, false)) {
+ $successes++;
+ }
+ }
+ }
+
+ if ($successes) {
+ $key = $successes === 1 ? 'bulk_action_singular.finished' : 'bulk_action.finished';
+ $this->addMessage(LocalizationUtility::translate(
+ 'LLL:EXT:alternative/Resources/Private/Language/Backend/locallang.xlf:' . $key, 'alternative', [$successes]
+ ));
+ }
+ }
}
diff --git a/Classes/EventListeners/AddFileButtonListener.php b/Classes/EventListeners/AddFileButtonListener.php
index 70ec6c2..54a250a 100644
--- a/Classes/EventListeners/AddFileButtonListener.php
+++ b/Classes/EventListeners/AddFileButtonListener.php
@@ -1,6 +1,6 @@
setTitle(LocalizationUtility::translate(
+ 'LLL:EXT:alternative/Resources/Private/Language/Backend/locallang.xlf:button.translate')
+ )
+ ->setIcon($this->iconFactory->getIcon('extension-alternative-icon-magic', IconSize::SMALL))
+ ->setHref(
+ (string)$this->uriBuilder->buildUriFromRoute(
+ 'alternative_Module.Module_addMetadataFromFolder',
+ ['folderName' => $event->getResource()->getStorage()->getUid() . ':' . $event->getResource()->getIdentifier()]
+ )
+ );
+ }
+
/**
* Todo: Can be removed once TYPO3 13 support is dropped
*
@@ -73,10 +91,14 @@ protected function addButtonLegacy(ProcessFileListActionsEvent $event): void
{
if ((new Typo3Version())->getMajorVersion() === 13) {
$actionItems = $event->getActionItems();
- $actionItems = $this->insertArrayIntoArray(
- $actionItems,
- ['metadata2' => $this->getButton($event, $actionItems['metadata'])]
- );
+ if ($actionItems['metadata'] !== null) {
+ $actionItems = $this->insertArrayIntoArray(
+ $actionItems,
+ ['metadata2' => $this->getButton($event, $actionItems['metadata'])]
+ );
+ } else {
+ $actionItems['metadata'] = $this->createFolderButton($event);
+ }
$event->setActionItems($actionItems);
}
}
@@ -100,10 +122,12 @@ protected function insertArrayIntoArray(array $existingArray, array $addArray, s
return array_merge($firstPart, $addArray, $lastPart);
}
- protected function isActivated(ResourceInterface $file): bool
+ protected function isActivated(ResourceInterface $resource): bool
{
- return is_a($file, File::class, true)
- && FileUtility::isImage($file)
+ return (
+ (is_a($resource, File::class, true) && FileUtility::isImage($resource))
+ || is_a($resource, Folder::class, true)
+ )
&& $this->hasAccessToModule()
&& ConfigurationUtility::getConfigurationByKey('showButtonInFileList') === '1';
}
diff --git a/Configuration/Backend/Modules.php b/Configuration/Backend/Modules.php
index 412192e..dd11c80 100644
--- a/Configuration/Backend/Modules.php
+++ b/Configuration/Backend/Modules.php
@@ -14,6 +14,7 @@
'controllerActions' => [
ModuleController::class => [
'addMetadata',
+ 'addMetadataFromFolder',
],
],
],
diff --git a/Resources/Private/Language/Backend/de.locallang.xlf b/Resources/Private/Language/Backend/de.locallang.xlf
index 82eea25..5850c3d 100644
--- a/Resources/Private/Language/Backend/de.locallang.xlf
+++ b/Resources/Private/Language/Backend/de.locallang.xlf
@@ -1,6 +1,7 @@
-
+
@@ -15,6 +16,14 @@
Metadata could not be added
Metadaten konnten nicht gesetzt werden
+
+ Metadata successfully added for %1$s file
+ Metadaten erfolgreich für %1$s Datei gesetzt
+
+
+ Metadata successfully added for %1$s files
+ Metadaten erfolgreich für %1$s Dateien gesetzt
+
diff --git a/Resources/Private/Language/Backend/locallang.xlf b/Resources/Private/Language/Backend/locallang.xlf
index 8e6850e..1c84bac 100644
--- a/Resources/Private/Language/Backend/locallang.xlf
+++ b/Resources/Private/Language/Backend/locallang.xlf
@@ -12,6 +12,12 @@
Metadata could not be added
+
+ Metadata successfully added for %1$s file
+
+
+ Metadata successfully added for %1$s files
+