From 91bd6f5863d5f0134adcd475473107a8120302bf Mon Sep 17 00:00:00 2001 From: "marcus@schwemer.de" <marcus.schwemer@in2code.de> Date: Thu, 10 Nov 2022 17:04:13 +0100 Subject: [PATCH] [FEATURE] Add submodule for filemounts Adds a submodule to the beuser module, which provides an overview over all filemounts and allows them to modify, hide, delete and add those. Resolves: #99038 Releases: main Change-Id: I2769ad34562c0428226da4abe1ab79077fc52475 Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/76547 Tested-by: core-ci <typo3@b13.com> Tested-by: Susanne Moog <look@susi.dev> Reviewed-by: Susanne Moog <look@susi.dev> Tested-by: Benni Mack <benni@typo3.org> Reviewed-by: Benni Mack <benni@typo3.org> --- .../Controller/BackendUserController.php | 46 +++++- .../beuser/Classes/Domain/Model/FileMount.php | 155 ++++++++++++++++++ .../Domain/Repository/FileMountRepository.php | 37 +++++ .../beuser/Configuration/Backend/Modules.php | 1 + .../Extbase/Persistence/Classes.php | 3 + typo3/sysext/beuser/README.rst | 3 + .../Resources/Private/Language/locallang.xlf | 24 +++ .../Partials/Filemount/IndexListRow.html | 68 ++++++++ .../Partials/Filemount/NoFilemounts.html | 28 ++++ .../Partials/Filemount/PaginatedList.html | 29 ++++ .../Partials/Filemount/TotalFilemounts.html | 15 ++ .../Templates/BackendUser/Filemounts.html | 17 ++ .../Repository/FileMountRepositoryTest.php | 32 ++++ ...8-SubmoduleForFilemountsInBeUsermodule.rst | 25 +++ 14 files changed, 480 insertions(+), 3 deletions(-) create mode 100644 typo3/sysext/beuser/Classes/Domain/Model/FileMount.php create mode 100644 typo3/sysext/beuser/Classes/Domain/Repository/FileMountRepository.php create mode 100644 typo3/sysext/beuser/Resources/Private/Partials/Filemount/IndexListRow.html create mode 100644 typo3/sysext/beuser/Resources/Private/Partials/Filemount/NoFilemounts.html create mode 100644 typo3/sysext/beuser/Resources/Private/Partials/Filemount/PaginatedList.html create mode 100644 typo3/sysext/beuser/Resources/Private/Partials/Filemount/TotalFilemounts.html create mode 100644 typo3/sysext/beuser/Resources/Private/Templates/BackendUser/Filemounts.html create mode 100644 typo3/sysext/beuser/Tests/Unit/Domain/Repository/FileMountRepositoryTest.php create mode 100644 typo3/sysext/core/Documentation/Changelog/12.1/Feature-99038-SubmoduleForFilemountsInBeUsermodule.rst diff --git a/typo3/sysext/beuser/Classes/Controller/BackendUserController.php b/typo3/sysext/beuser/Classes/Controller/BackendUserController.php index 43883716803a..2e15522fddd1 100644 --- a/typo3/sysext/beuser/Classes/Controller/BackendUserController.php +++ b/typo3/sysext/beuser/Classes/Controller/BackendUserController.php @@ -29,6 +29,7 @@ use TYPO3\CMS\Beuser\Domain\Model\Demand; use TYPO3\CMS\Beuser\Domain\Repository\BackendUserGroupRepository; use TYPO3\CMS\Beuser\Domain\Repository\BackendUserRepository; use TYPO3\CMS\Beuser\Domain\Repository\BackendUserSessionRepository; +use TYPO3\CMS\Beuser\Domain\Repository\FileMountRepository; use TYPO3\CMS\Beuser\Service\UserInformationService; use TYPO3\CMS\Core\Authentication\BackendUserAuthentication; use TYPO3\CMS\Core\Context\Context; @@ -64,7 +65,8 @@ class BackendUserController extends ActionController protected readonly ModuleTemplateFactory $moduleTemplateFactory, protected readonly BackendUriBuilder $backendUriBuilder, protected readonly IconFactory $iconFactory, - protected readonly PageRenderer $pageRenderer + protected readonly PageRenderer $pageRenderer, + protected readonly FileMountRepository $fileMountRepository ) { } @@ -78,7 +80,7 @@ class BackendUserController extends ActionController $moduleData = $request->getAttribute('moduleData'); if ( isset($arguments['action']) - && in_array((string)$arguments['action'], ['index', 'groups', 'online']) + && in_array((string)$arguments['action'], ['index', 'groups', 'online', 'filemounts']) && (string)$moduleData->get('defaultAction') !== (string)$arguments['action'] ) { $moduleData->set('defaultAction', (string)$arguments['action']); @@ -86,7 +88,7 @@ class BackendUserController extends ActionController } elseif ( !isset($arguments['action']) && $moduleData->has('defaultAction') - && in_array((string)$moduleData->get('defaultAction'), ['index', 'groups', 'online']) + && in_array((string)$moduleData->get('defaultAction'), ['index', 'groups', 'online', 'filemounts']) ) { $request = $request->withControllerActionName((string)$moduleData->get('defaultAction')); } @@ -481,6 +483,38 @@ class BackendUserController extends ActionController return $this->redirect('groups'); } + protected function filemountsAction(int $currentPage = 1): ResponseInterface + { + /** @var QueryResultInterface $filemounts */ + $filemounts = $this->fileMountRepository->findAll(); + + $this->addMainMenu('filemounts'); + + $paginator = new QueryResultPaginator($filemounts, $currentPage, 50); + $pagination = new SimplePagination($paginator); + $this->moduleTemplate->assignMultiple( + [ + 'paginator' => $paginator, + 'pagination' => $pagination, + 'totalAmountOfFilemounts' => $filemounts->count(), + ] + ); + + $buttonBar = $this->moduleTemplate->getDocHeaderComponent()->getButtonBar(); + + $addFilemountButton = $buttonBar->makeLinkButton() + ->setIcon($this->iconFactory->getIcon('actions-add', Icon::SIZE_SMALL)) + ->setTitle(LocalizationUtility::translate('LLL:EXT:beuser/Resources/Private/Language/locallang.xlf:filemount.create')) + ->setShowLabelText(true) + ->setHref((string)$this->backendUriBuilder->buildUriFromRoute('record_edit', [ + 'edit' => ['sys_filemounts' => [0 => 'new']], + 'returnUrl' => $this->request->getAttribute('normalizedParams')->getRequestUri(), + ])); + $buttonBar->addButton($addFilemountButton); + + return $this->moduleTemplate->renderResponse('BackendUser/Filemounts'); + } + /** * Create an array with the uids of online users as the keys * [ @@ -551,6 +585,12 @@ class BackendUserController extends ActionController ->setHref($this->uriBuilder->uriFor('online')) ->setActive($currentAction === 'online') ); + $menu->addMenuItem( + $menu->makeMenuItem() + ->setTitle(LocalizationUtility::translate('filemounts', 'beuser')) + ->setHref($this->uriBuilder->uriFor('filemounts')) + ->setActive($currentAction === 'filemounts') + ); $this->moduleTemplate->getDocHeaderComponent()->getMenuRegistry()->addMenu($menu); } diff --git a/typo3/sysext/beuser/Classes/Domain/Model/FileMount.php b/typo3/sysext/beuser/Classes/Domain/Model/FileMount.php new file mode 100644 index 000000000000..52bb4ec1b462 --- /dev/null +++ b/typo3/sysext/beuser/Classes/Domain/Model/FileMount.php @@ -0,0 +1,155 @@ +<?php + +declare(strict_types=1); + +/* + * This file is part of the TYPO3 CMS project. + * + * It is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, either version 2 + * of the License, or any later version. + * + * For the full copyright and license information, please read the + * LICENSE.txt file that was distributed with this source code. + * + * The TYPO3 project - inspiring people to share! + */ + +namespace TYPO3\CMS\Beuser\Domain\Model; + +use TYPO3\CMS\Core\Resource\ResourceStorage; +use TYPO3\CMS\Core\Resource\StorageRepository; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Annotation as Extbase; +use TYPO3\CMS\Extbase\DomainObject\AbstractEntity; + +/** + * @internal This class is a TYPO3 Backend implementation and is not considered part of the Public TYPO3 API. + */ +class FileMount extends AbstractEntity +{ + /** + * Title of the file mount. + * + * @Extbase\Validate("NotEmpty") + */ + protected string $title = ''; + + /** + * Description of the file mount. + */ + protected string $description; + + /** + * Identifier of the filemount + */ + protected string $identifier = ''; + + /** + * Status of the filemount + */ + protected bool $hidden = false; + + /** + * Determines whether this file mount should be read only. + */ + protected bool $readOnly = false; + + /** + * Getter for the title of the file mount. + */ + public function getTitle(): string + { + return $this->title; + } + + /** + * Setter for the title of the file mount. + */ + public function setTitle(string $value): void + { + $this->title = $value; + } + + /** + * Getter for the description of the file mount. + */ + public function getDescription(): string + { + return $this->description; + } + + /** + * Setter for the description of the file mount. + */ + public function setDescription(string $description): void + { + $this->description = $description; + } + + /** + * Setter for the readOnly property of the file mount. + */ + public function setReadOnly(bool $readOnly): void + { + $this->readOnly = $readOnly; + } + + /** + * Getter for the readOnly property of the file mount. + */ + public function isReadOnly(): bool + { + return $this->readOnly; + } + + /** + * @return string + */ + public function getIdentifier(): string + { + return $this->identifier; + } + + /** + * @param string $identifier + */ + public function setIdentifier(string $identifier): void + { + $this->identifier = $identifier; + } + + /** + * @return bool + */ + public function isHidden(): bool + { + return $this->hidden; + } + + /** + * @param bool $hidden + */ + public function setHidden(bool $hidden): void + { + $this->hidden = $hidden; + } + + /** + * returns the path segment of the filemount (without the storage id) + * @return string + */ + public function getPath(): string + { + $segments = preg_split('#:/#', $this->identifier); + return $segments[1] ?? ''; + } + + /** + * @return ResourceStorage + */ + public function getStorage(): ResourceStorage + { + return GeneralUtility::makeInstance(StorageRepository::class)->findByCombinedIdentifier($this->identifier); + } +} diff --git a/typo3/sysext/beuser/Classes/Domain/Repository/FileMountRepository.php b/typo3/sysext/beuser/Classes/Domain/Repository/FileMountRepository.php new file mode 100644 index 000000000000..65e31e90ee1f --- /dev/null +++ b/typo3/sysext/beuser/Classes/Domain/Repository/FileMountRepository.php @@ -0,0 +1,37 @@ +<?php + +declare(strict_types=1); + +/* + * This file is part of the TYPO3 CMS project. + * + * It is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, either version 2 + * of the License, or any later version. + * + * For the full copyright and license information, please read the + * LICENSE.txt file that was distributed with this source code. + * + * The TYPO3 project - inspiring people to share! + */ + +namespace TYPO3\CMS\Beuser\Domain\Repository; + +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings; +use TYPO3\CMS\Extbase\Persistence\Repository; + +/** + * Repository for \TYPO3\CMS\Extbase\Domain\Model\FileMount. + */ +class FileMountRepository extends Repository +{ + public function initializeObject() + { + /** @var Typo3QuerySettings $querySettings */ + $querySettings = GeneralUtility::makeInstance(Typo3QuerySettings::class); + $querySettings->setRespectStoragePage(false); + $querySettings->setIgnoreEnableFields(true); + $this->setDefaultQuerySettings($querySettings); + } +} diff --git a/typo3/sysext/beuser/Configuration/Backend/Modules.php b/typo3/sysext/beuser/Configuration/Backend/Modules.php index c5c40076a9c2..a4c364dc7633 100644 --- a/typo3/sysext/beuser/Configuration/Backend/Modules.php +++ b/typo3/sysext/beuser/Configuration/Backend/Modules.php @@ -44,6 +44,7 @@ return [ 'removeGroupFromCompareList', 'removeAllGroupsFromCompareList', 'compareGroups', + 'filemounts', ], ], ], diff --git a/typo3/sysext/beuser/Configuration/Extbase/Persistence/Classes.php b/typo3/sysext/beuser/Configuration/Extbase/Persistence/Classes.php index 9ba52a9d75b1..b1b754710141 100644 --- a/typo3/sysext/beuser/Configuration/Extbase/Persistence/Classes.php +++ b/typo3/sysext/beuser/Configuration/Extbase/Persistence/Classes.php @@ -49,4 +49,7 @@ return [ ], ], ], + \TYPO3\CMS\Beuser\Domain\Model\FileMount::class => [ + 'tableName' => 'sys_filemounts', + ], ]; diff --git a/typo3/sysext/beuser/README.rst b/typo3/sysext/beuser/README.rst index d77cb99f51f7..cce02a0053ee 100644 --- a/typo3/sysext/beuser/README.rst +++ b/typo3/sysext/beuser/README.rst @@ -9,6 +9,9 @@ It allows you to add / delete / modify backend users and groups, configure and compare the settings of backend users and verify their permissions. This module also displays any backend users who are currently logged in. +Additionally it is possible to display a list / add / delete / modify +filemounts in a separate submodule. + :Repository: https://github.com/typo3/typo3 :Issues: https://forge.typo3.org/ :Read online: https://docs.typo3.org/ diff --git a/typo3/sysext/beuser/Resources/Private/Language/locallang.xlf b/typo3/sysext/beuser/Resources/Private/Language/locallang.xlf index 5c66b4f244f8..0e57d604b758 100644 --- a/typo3/sysext/beuser/Resources/Private/Language/locallang.xlf +++ b/typo3/sysext/beuser/Resources/Private/Language/locallang.xlf @@ -291,6 +291,30 @@ <trans-unit id="pagination.refresh" resname="pagination.refresh"> <source>Refresh</source> </trans-unit> + <trans-unit id="filemounts"> + <source>Filemounts</source> + </trans-unit> + <trans-unit id="filemount.listing"> + <source>Available filemounts</source> + </trans-unit> + <trans-unit id="filemount.confirm.deletion"> + <source>Are you sure, that you wand to delete the filemount "%s"?</source> + </trans-unit> + <trans-unit id="filemount.create"> + <source>Create new filemount</source> + </trans-unit> + <trans-unit id="filemount.none"> + <source>There are no filemounts available.</source> + </trans-unit> + <trans-unit id="filemount.storage"> + <source>Storage</source> + </trans-unit> + <trans-unit id="filemount.amount.multiple"> + <source>Total: %s filemounts</source> + </trans-unit> + <trans-unit id="filemount.amount.singular"> + <source>Total: 1 filemount</source> + </trans-unit> </body> </file> </xliff> diff --git a/typo3/sysext/beuser/Resources/Private/Partials/Filemount/IndexListRow.html b/typo3/sysext/beuser/Resources/Private/Partials/Filemount/IndexListRow.html new file mode 100644 index 000000000000..388292fc5edb --- /dev/null +++ b/typo3/sysext/beuser/Resources/Private/Partials/Filemount/IndexListRow.html @@ -0,0 +1,68 @@ +<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" + xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers" + xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers" + xmlns:bu="http://typo3.org/ns/TYPO3/CMS/Beuser/ViewHelpers"> + +<f:section name="list_row"> + <tr> + <td class="col-icon"> + <a href="#" class="t3js-contextmenutrigger" data-table="sys_filemounts" data-uid="{fileMount.uid}" title="{f:if(condition: '{fileMount.title}', then: '{fileMount.title} ')}(id={fileMount.uid})"> + <bu:spriteIconForRecord table="sys_filemounts" object="{fileMount}" /> + </a> + </td> + <td class="col-title">{fileMount.title}</td> + <td>{fileMount.description}</td> + <td> + <a href="{be:moduleLink(route: 'file_FilelistList', query: 'id={fileMount.storage.uid}:/')}'"> + {fileMount.storage.name} <code>[{fileMount.storage.uid}]</code> + </a> + </td> + <td> + <a href="{be:moduleLink(route: 'file_FilelistList', query: 'id={fileMount.storage.uid}:{fileMount.path}')}'"> + {fileMount.storage.configuration.basePath}{fileMount.path} + </a> + </td> + <td> + <div class="btn-group" role="group"> + <f:if condition="{fileMount.readOnly} == true"> + <core:icon identifier="actions-check-square-alt" /> + </f:if> + </div> + </td> + <td class="col-control"> + <div class="btn-group" role="group"> + <be:link.editRecord class="btn btn-default" table="sys_filemounts" uid="{fileMount.uid}" title="{f:translate(key:'edit')}"> + <core:icon identifier="actions-open" /> + </be:link.editRecord> + + <f:if condition="{fileMount.hidden} == true"> + <f:then> + <a class="btn btn-default" href="{be:moduleLink(route:'tce_db', query:'data[sys_filemounts][{fileMount.uid}][hidden]=0', currentUrlParameterName:'redirect')}" title="{f:translate(key:'visibility.unhide')}"><core:icon identifier="actions-edit-unhide" /></a> + </f:then> + <f:else> + <a class="btn btn-default" href="{be:moduleLink(route:'tce_db', query:'data[sys_filemounts][{fileMount.uid}][hidden]=1', currentUrlParameterName:'redirect')}" title="{f:translate(key:'visibility.hide')}"><core:icon identifier="actions-edit-hide" /></a> + </f:else> + </f:if> + + <a + class="btn btn-default t3js-modal-trigger" + href="{be:moduleLink(route:'tce_db', query:'cmd[sys_filemounts][{fileMount.uid}][delete]=1', currentUrlParameterName:'redirect')}" + title="{f:translate(key:'delete')}" + data-severity="warning" + data-title="{f:translate(key:'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:label.confirm.delete_record.title')}" + data-bs-content="{f:translate(key:'filemount.confirm.deletion',arguments:'{0:fileMount.title}')}" + data-button-close-text="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_common.xlf:cancel')}" + > + <core:icon identifier="actions-edit-delete" /> + </a> + </div> + <div class="btn-group" role="group"> + <a class="btn btn-default" href="#" title="{f:translate(key:'info')}" data-dispatch-action="TYPO3.InfoWindow.showItem" data-dispatch-args-list="sys_filemounts,{fileMount.uid}"> + <core:icon identifier="actions-document-info" /> + </a> + </div> + </td> + </tr> + +</f:section> +</html> diff --git a/typo3/sysext/beuser/Resources/Private/Partials/Filemount/NoFilemounts.html b/typo3/sysext/beuser/Resources/Private/Partials/Filemount/NoFilemounts.html new file mode 100644 index 000000000000..2e57c59eb7b0 --- /dev/null +++ b/typo3/sysext/beuser/Resources/Private/Partials/Filemount/NoFilemounts.html @@ -0,0 +1,28 @@ +<html + xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" + xmlns:be="http://typo3.org/ns/TYPO3/CMS/Backend/ViewHelpers" + data-namespace-typo3-fluid="true"> + +<div class="callout callout-info"> + <div class="media"> + <div class="media-left"> + <core:icon identifier="content-info" size="small" /> + </div> + <div class="media-body"> + <div class="callout-body"> + <p><f:translate key="filemount.none" /></p> + <p> + <be:link.newRecord + table="sys_filemounts" + returnUrl="{f:be.uri(route: 'system_BeuserTxBeuser')}" + class="btn btn-primary" + > + <f:translate key="filemount.create" /> + </be:link.newRecord> + </p> + </div> + </div> + </div> +</div> + +</html> diff --git a/typo3/sysext/beuser/Resources/Private/Partials/Filemount/PaginatedList.html b/typo3/sysext/beuser/Resources/Private/Partials/Filemount/PaginatedList.html new file mode 100644 index 000000000000..5024b53f6503 --- /dev/null +++ b/typo3/sysext/beuser/Resources/Private/Partials/Filemount/PaginatedList.html @@ -0,0 +1,29 @@ +<html + xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" + data-namespace-typo3-fluid="true"> + +<div class="table-fit"> + <table id="typo3-filemount-list" class="table table-striped table-hover"> + <thead> + <tr> + <th class="col-icon"></th> + <th class="col-title"><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.title" /></th> + <th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.description" /></th> + <th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_file_storage" /> (Uid)</th> + <th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.identifier" /></th> + <th><f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_tca.xlf:sys_filemounts.read_only" /></th> + <th class="col-control"></th> + </tr> + </thead> + <tbody> + <f:for each="{paginator.paginatedItems}" as="fileMount"> + <f:render partial="Filemount/IndexListRow" section="list_row" arguments="{fileMount: fileMount}" /> + </f:for> + </tbody> + </table> +</div> + +<f:render partial="SimplePagination" arguments="{paginator:paginator, pagination:pagination}" /> +<f:render partial="Filemount/TotalFilemounts" arguments="{_all}" /> + +</html> diff --git a/typo3/sysext/beuser/Resources/Private/Partials/Filemount/TotalFilemounts.html b/typo3/sysext/beuser/Resources/Private/Partials/Filemount/TotalFilemounts.html new file mode 100644 index 000000000000..7cdab06aec5e --- /dev/null +++ b/typo3/sysext/beuser/Resources/Private/Partials/Filemount/TotalFilemounts.html @@ -0,0 +1,15 @@ +<html + xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" + data-namespace-typo3-fluid="true"> + +<f:if condition="{totalAmountOfFilemounts} > 1" > + <f:then> + <f:translate key="filemount.amount.multiple" arguments="{0:totalAmountOfFilemounts}" /> + </f:then> + <f:else> + <f:translate key="filemount.amount.singular" /> + </f:else> +</f:if> + + +</html> diff --git a/typo3/sysext/beuser/Resources/Private/Templates/BackendUser/Filemounts.html b/typo3/sysext/beuser/Resources/Private/Templates/BackendUser/Filemounts.html new file mode 100644 index 000000000000..86547f6d8029 --- /dev/null +++ b/typo3/sysext/beuser/Resources/Private/Templates/BackendUser/Filemounts.html @@ -0,0 +1,17 @@ +<html + xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" + data-namespace-typo3-fluid="true"> + +<f:layout name="Module" /> + +<f:section name="Content"> + <h1><f:translate key="filemount.listing" /></h1> + <f:if condition="{totalAmountOfFilemounts} > 0"> + <f:then> + <f:render partial="Filemount/PaginatedList" arguments="{_all}" /> + </f:then> + <f:else> + <f:render partial="Filemount/NoFilemounts" arguments="{_all}" /> + </f:else> + </f:if> +</f:section> diff --git a/typo3/sysext/beuser/Tests/Unit/Domain/Repository/FileMountRepositoryTest.php b/typo3/sysext/beuser/Tests/Unit/Domain/Repository/FileMountRepositoryTest.php new file mode 100644 index 000000000000..2a70341b8db2 --- /dev/null +++ b/typo3/sysext/beuser/Tests/Unit/Domain/Repository/FileMountRepositoryTest.php @@ -0,0 +1,32 @@ +<?php + +declare(strict_types=1); + +/* + * This file is part of the TYPO3 CMS project. + * + * It is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License, either version 2 + * of the License, or any later version. + * + * For the full copyright and license information, please read the + * LICENSE.txt file that was distributed with this source code. + * + * The TYPO3 project - inspiring people to share! + */ + +namespace TYPO3\CMS\Beuser\Tests\Unit\Domain\Repository; + +use TYPO3\CMS\Beuser\Domain\Repository\FileMountRepository; +use TYPO3\TestingFramework\Core\Unit\UnitTestCase; + +class FileMountRepositoryTest extends UnitTestCase +{ + /** + * @test + */ + public function classCanBeInstantiated(): void + { + new FileMountRepository(); + } +} diff --git a/typo3/sysext/core/Documentation/Changelog/12.1/Feature-99038-SubmoduleForFilemountsInBeUsermodule.rst b/typo3/sysext/core/Documentation/Changelog/12.1/Feature-99038-SubmoduleForFilemountsInBeUsermodule.rst new file mode 100644 index 000000000000..df8cff73e10c --- /dev/null +++ b/typo3/sysext/core/Documentation/Changelog/12.1/Feature-99038-SubmoduleForFilemountsInBeUsermodule.rst @@ -0,0 +1,25 @@ +.. include:: /Includes.rst.txt + +.. _feature-99038-1668093242: + +========================================= +Feature: #99038 - Overview for filemounts +========================================= + +See :issue:`99038` + +Description +=========== + +A new submodule was added to the beusers module. It provides an overview over +all available filemounts with detailed data. Additionally an info window +displays also the references to the filemount. + + +Impact +====== + +It is now easily possible to get an overview about available filemounts +without switching to the list module on PID=0. + +.. index:: Database, TCA, Backend -- GitLab