20
20
use Psr \Http \Message \ResponseInterface ;
21
21
use Psr \Http \Message \ServerRequestInterface ;
22
22
use TYPO3 \CMS \Backend \Attribute \AsController ;
23
+ use TYPO3 \CMS \Backend \Domain \Model \Element \ImmediateActionElement ;
23
24
use TYPO3 \CMS \Backend \Routing \UriBuilder ;
24
25
use TYPO3 \CMS \Backend \Template \ModuleTemplateFactory ;
25
26
use TYPO3 \CMS \Core \Authentication \BackendUserAuthentication ;
27
+ use TYPO3 \CMS \Core \Http \AllowedMethodsTrait ;
28
+ use TYPO3 \CMS \Core \Http \HtmlResponse ;
26
29
use TYPO3 \CMS \Core \Http \RedirectResponse ;
27
30
use TYPO3 \CMS \Core \Localization \LanguageService ;
28
31
use TYPO3 \CMS \Core \Page \PageRenderer ;
40
43
#[AsController]
41
44
class DashboardController
42
45
{
46
+ use AllowedMethodsTrait;
47
+
43
48
protected Dashboard $ currentDashboard ;
44
49
45
50
public function __construct (
@@ -90,6 +95,7 @@ protected function mainAction(ServerRequestInterface $request): ResponseInterfac
90
95
91
96
protected function configureDashboardAction (ServerRequestInterface $ request ): ResponseInterface
92
97
{
98
+ $ this ->assertAllowedHttpMethod ($ request , 'POST ' );
93
99
$ parameters = $ request ->getParsedBody ();
94
100
$ currentDashboard = $ parameters ['currentDashboard ' ] ?? '' ;
95
101
$ route = $ this ->uriBuilder ->buildUriFromRoute ('dashboard ' , ['action ' => 'main ' ], UriBuilder::ABSOLUTE_URL );
@@ -101,13 +107,15 @@ protected function configureDashboardAction(ServerRequestInterface $request): Re
101
107
102
108
protected function setActiveDashboardAction (ServerRequestInterface $ request ): ResponseInterface
103
109
{
104
- $ this ->saveCurrentDashboard ((string )($ request ->getQueryParams ()['currentDashboard ' ] ?? '' ));
110
+ $ this ->assertAllowedHttpMethod ($ request , 'POST ' );
111
+ $ this ->saveCurrentDashboard ((string )($ request ->getParsedBody ()['currentDashboard ' ] ?? '' ));
105
112
$ route = $ this ->uriBuilder ->buildUriFromRoute ('dashboard ' , ['action ' => 'main ' ]);
106
113
return new RedirectResponse ($ route );
107
114
}
108
115
109
116
protected function addDashboardAction (ServerRequestInterface $ request ): ResponseInterface
110
117
{
118
+ $ this ->assertAllowedHttpMethod ($ request , 'POST ' );
111
119
$ parameters = $ request ->getParsedBody ();
112
120
$ dashboardIdentifier = (string )($ parameters ['dashboard ' ] ?? '' );
113
121
$ dashboardPreset = $ this ->dashboardPresetRepository ->getDashboardPresets ()[$ dashboardIdentifier ] ?? null ;
@@ -124,14 +132,16 @@ protected function addDashboardAction(ServerRequestInterface $request): Response
124
132
return new RedirectResponse ($ this ->uriBuilder ->buildUriFromRoute ('dashboard ' , ['action ' => 'main ' ]));
125
133
}
126
134
127
- protected function deleteDashboardAction (): ResponseInterface
135
+ protected function deleteDashboardAction (ServerRequestInterface $ request ): ResponseInterface
128
136
{
137
+ $ this ->assertAllowedHttpMethod ($ request , 'POST ' );
129
138
$ this ->dashboardRepository ->delete ($ this ->currentDashboard );
130
139
return new RedirectResponse ($ this ->uriBuilder ->buildUriFromRoute ('dashboard ' , ['action ' => 'main ' ]));
131
140
}
132
141
133
142
protected function addWidgetAction (ServerRequestInterface $ request ): ResponseInterface
134
143
{
144
+ $ this ->assertAllowedHttpMethod ($ request , 'POST ' );
135
145
$ widgetKey = (string )($ request ->getQueryParams ()['widget ' ] ?? '' );
136
146
if ($ widgetKey === '' ) {
137
147
throw new RequiredArgumentMissingException ('Argument "widget" not set. ' , 1624436360 );
@@ -140,13 +150,13 @@ protected function addWidgetAction(ServerRequestInterface $request): ResponseInt
140
150
$ hash = sha1 ($ widgetKey . '- ' . time ());
141
151
$ widgets [$ hash ] = ['identifier ' => $ widgetKey ];
142
152
$ this ->dashboardRepository ->updateWidgetConfig ($ this ->currentDashboard , $ widgets );
143
- $ route = $ this ->uriBuilder ->buildUriFromRoute ('dashboard ' , ['action ' => 'main ' ]);
144
- return new RedirectResponse ($ route );
153
+ return new HtmlResponse ((string )ImmediateActionElement::dispatchCustomEvent ('typo3.dashboard.addWidgetDone ' ));
145
154
}
146
155
147
156
protected function removeWidgetAction (ServerRequestInterface $ request ): ResponseInterface
148
157
{
149
- $ parameters = $ request ->getQueryParams ();
158
+ $ this ->assertAllowedHttpMethod ($ request , 'POST ' );
159
+ $ parameters = $ request ->getParsedBody ();
150
160
$ widgetHash = $ parameters ['widgetHash ' ] ?? '' ;
151
161
$ widgets = $ this ->currentDashboard ->getWidgetConfig ();
152
162
if ($ widgetHash !== '' && array_key_exists ($ widgetHash , $ widgets )) {
0 commit comments