Skip to content

Commit 75570b2

Browse files
committed
Update v14 version
1 parent 27973ed commit 75570b2

6 files changed

Lines changed: 74 additions & 24 deletions

File tree

Classes/Form/Element/RedirectElement.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
namespace Ayacoo\RedirectTab\Form\Element;
66

77
use Ayacoo\RedirectTab\Service\RedirectDemandService;
8+
use Ayacoo\RedirectTab\UserFunctions\RedirectAccessDisplayCondition;
89
use Psr\Http\Message\ServerRequestInterface;
910
use Psr\Http\Message\UriInterface;
1011
use TYPO3\CMS\Backend\Form\Element\AbstractFormElement;
@@ -34,7 +35,9 @@ public function render(): array
3435

3536
$this->prepareView($request);
3637

38+
$redirectAccess = GeneralUtility::makeInstance(RedirectAccessDisplayCondition::class);
3739
$this->view->assignMultiple([
40+
'canEditRedirects' => $redirectAccess->canEditRedirects(),
3841
'redirects' => $redirectDemandService->getRedirects((int)$currentPage),
3942
'demand' => $redirectDemandService->getDemand(),
4043
'pagination' => $redirectDemandService->preparePagination($redirectDemandService->getDemand()),

Classes/Service/RedirectDemandService.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public function preparePagination(?Demand $demand): array
5656
{
5757
$pagination = [];
5858
if ($demand !== null) {
59-
$count = $this->redirectRepository->countRedirectsByByDemand($demand);
59+
$count = $this->redirectRepository->countRedirectsByDemand($demand);
6060
$numberOfPages = ceil($count / $demand->getLimit());
6161
$endRecord = $demand->getOffset() + $demand->getLimit();
6262
if ($endRecord > $count) {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Ayacoo\RedirectTab\UserFunctions;
6+
7+
use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
8+
9+
class RedirectAccessDisplayCondition
10+
{
11+
private const TABLE_NAME = 'sys_redirect';
12+
13+
public function canListRedirects(): bool
14+
{
15+
return $this->getBackendUser()->isAdmin() || $this->getBackendUser()->check('tables_select', self::TABLE_NAME);
16+
}
17+
18+
public function canEditRedirects(): bool
19+
{
20+
return $this->getBackendUser()->isAdmin() || $this->getBackendUser()->check('tables_modify', self::TABLE_NAME);
21+
}
22+
23+
protected function getBackendUser(): BackendUserAuthentication
24+
{
25+
return $GLOBALS['BE_USER'];
26+
}
27+
}

Configuration/TCA/Overrides/pages.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?php
22

3+
use Ayacoo\RedirectTab\UserFunctions\RedirectAccessDisplayCondition;
34
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
45

56
defined('TYPO3') || die();
@@ -10,6 +11,7 @@
1011
'displayCond' => [
1112
'AND' => [
1213
'REC:NEW:false',
14+
'USER:' . RedirectAccessDisplayCondition::class . '->canListRedirects',
1315
],
1416
],
1517
'exclude' => true,

Resources/Private/Templates/Backend/List.html

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,16 @@
4141
<f:else><span><core:iconForRecord table="sys_redirect" row="{redirect}" /></span></f:else>
4242
</f:if>
4343
</f:alias>
44-
<be:link.editRecord returnUrl="{returnUrl}" table="sys_redirect" uid="{redirect.uid}" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:edit')}: {redirect.source_path}">
45-
{redirect.source_path -> f:format.crop(maxCharacters:100)}
46-
</be:link.editRecord>
44+
<f:if condition="{canEditRedirects}">
45+
<f:then>
46+
<be:link.editRecord returnUrl="{returnUrl}" table="sys_redirect" uid="{redirect.uid}" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:edit')}: {redirect.source_path}">
47+
{redirect.source_path -> f:format.crop(maxCharacters:100)}
48+
</be:link.editRecord>
49+
</f:then>
50+
<f:else>
51+
{redirect.source_path -> f:format.crop(maxCharacters:100)}
52+
</f:else>
53+
</f:if>
4754
</td>
4855

4956
<td>
@@ -64,26 +71,31 @@
6471
</f:link.external>
6572
</f:else>
6673
</f:if>
67-
<f:if condition="{redirect.disabled} == 1">
74+
75+
<f:if condition="{canEditRedirects}">
6876
<f:then>
69-
<a class="btn btn-default" href="{be:moduleLink(route:'tce_db', arguments:'{redirect: returnUrl}', query:'data[sys_redirect][{redirect.uid}][disabled]=0', currentUrlParameterName:'redirect')}" title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:unHide')}"><core:icon identifier="actions-edit-unhide" /></a>
77+
<f:if condition="{redirect.disabled} == 1">
78+
<f:then>
79+
<a class="btn btn-default" href="{be:moduleLink(route:'tce_db', arguments:'{redirect: returnUrl}', query:'data[sys_redirect][{redirect.uid}][disabled]=0', currentUrlParameterName:'redirect')}" title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:unHide')}"><core:icon identifier="actions-edit-unhide" /></a>
80+
</f:then>
81+
<f:else>
82+
<a class="btn btn-default" href="{be:moduleLink(route:'tce_db', arguments:'{redirect: returnUrl}', query:'data[sys_redirect][{redirect.uid}][disabled]=1', currentUrlParameterName:'redirect')}" title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:hide')}"><core:icon identifier="actions-edit-hide" /></a>
83+
</f:else>
84+
</f:if>
85+
<be:link.editRecord returnUrl="{returnUrl}" class="btn btn-default" table="sys_redirect" uid="{redirect.uid}" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:edit')}">
86+
<core:icon identifier="actions-open" />
87+
</be:link.editRecord>
88+
<a class="btn btn-default t3js-modal-trigger"
89+
href="{be:moduleLink(route:'tce_db', arguments:'{redirect: returnUrl}', query:'cmd[sys_redirect][{redirect.uid}][delete]=1', currentUrlParameterName:'redirect')}"
90+
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:delete')}"
91+
data-severity="warning"
92+
data-title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:label.confirm.delete_record.title')}"
93+
data-bs-content="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:deleteWarning')}"
94+
data-button-close-text="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_record.no')}">
95+
<core:icon identifier="actions-delete" />
96+
</a>
7097
</f:then>
71-
<f:else>
72-
<a class="btn btn-default" href="{be:moduleLink(route:'tce_db', arguments:'{redirect: returnUrl}', query:'data[sys_redirect][{redirect.uid}][disabled]=1', currentUrlParameterName:'redirect')}" title="{f:translate(key:'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:hide')}"><core:icon identifier="actions-edit-hide" /></a>
73-
</f:else>
7498
</f:if>
75-
<be:link.editRecord returnUrl="{returnUrl}" class="btn btn-default" table="sys_redirect" uid="{redirect.uid}" title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:edit')}">
76-
<core:icon identifier="actions-open" />
77-
</be:link.editRecord>
78-
<a class="btn btn-default t3js-modal-trigger"
79-
href="{be:moduleLink(route:'tce_db', arguments:'{redirect: returnUrl}', query:'cmd[sys_redirect][{redirect.uid}][delete]=1', currentUrlParameterName:'redirect')}"
80-
title="{f:translate(key: 'LLL:EXT:core/Resources/Private/Language/locallang_mod_web_list.xlf:delete')}"
81-
data-severity="warning"
82-
data-title="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:label.confirm.delete_record.title')}"
83-
data-bs-content="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:deleteWarning')}"
84-
data-button-close-text="{f:translate(key: 'LLL:EXT:backend/Resources/Private/Language/locallang_alt_doc.xlf:buttons.confirm.delete_record.no')}">
85-
<core:icon identifier="actions-delete" />
86-
</a>
8799
</div>
88100
</td>
89101
</tr>
@@ -96,9 +108,11 @@
96108
<f:else>
97109
<f:be.infobox state="-1" title="{f:translate(key: 'LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:redirect_not_found.title')}">
98110
<p><f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:redirect_not_found.message"/></p>
99-
<be:link.newRecord returnUrl="{returnUrl}" class="btn btn-primary" table="sys_redirect">
100-
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:redirect_create"/>
101-
</be:link.newRecord>
111+
<f:if condition="{canEditRedirects}">
112+
<be:link.newRecord returnUrl="{returnUrl}" class="btn btn-primary" table="sys_redirect">
113+
<f:translate key="LLL:EXT:redirects/Resources/Private/Language/locallang_module_redirect.xlf:redirect_create"/>
114+
</be:link.newRecord>
115+
</f:if>
102116
</f:be.infobox>
103117
</f:else>
104118
</f:if>

Tests/Functional/Service/RedirectDemandServiceTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
use Ayacoo\RedirectTab\Service\RedirectDemandService;
88
use PHPUnit\Framework\Attributes\Test;
9+
use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;
910
use TYPO3\CMS\Core\Cache\Frontend\FrontendInterface;
1011
use TYPO3\CMS\Core\Configuration\SiteConfiguration;
1112
use TYPO3\CMS\Core\Site\Entity\NullSite;
@@ -24,6 +25,9 @@ final class RedirectDemandServiceTest extends FunctionalTestCase
2425
protected function setUp(): void
2526
{
2627
parent::setUp();
28+
$backendUserAuthentication = $this->createMock(BackendUserAuthentication::class);
29+
$backendUserAuthentication->method('isAdmin')->withAnyParameters()->willReturn(true);
30+
$GLOBALS['BE_USER'] = $backendUserAuthentication;
2731

2832
$this->subject = $this->get(RedirectDemandService::class);
2933
}

0 commit comments

Comments
 (0)