mirror of
https://github.com/werkraum-media/events.git
synced 2024-11-21 21:56:09 +01:00
Properly trigger 404 if date of unavailable event is requested (#39)
This commit is contained in:
parent
27ee70d0cf
commit
82df4ded99
9 changed files with 113 additions and 1 deletions
|
@ -21,8 +21,13 @@ namespace Wrm\Events\Controller;
|
||||||
* 02110-1301, USA.
|
* 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
use TYPO3\CMS\Core\Exception\Page\PageNotFoundException;
|
||||||
|
use TYPO3\CMS\Core\Http\ImmediateResponseException;
|
||||||
|
use TYPO3\CMS\Core\Http\PropagateResponseException;
|
||||||
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||||
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
|
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
|
||||||
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
|
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
|
||||||
|
use TYPO3\CMS\Frontend\Controller\ErrorController;
|
||||||
use Wrm\Events\Caching\CacheManager;
|
use Wrm\Events\Caching\CacheManager;
|
||||||
|
|
||||||
class AbstractController extends ActionController
|
class AbstractController extends ActionController
|
||||||
|
@ -66,4 +71,21 @@ class AbstractController extends ActionController
|
||||||
|
|
||||||
return $view;
|
return $view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function trigger404(string $message): void
|
||||||
|
{
|
||||||
|
$errorController = GeneralUtility::makeInstance(ErrorController::class);
|
||||||
|
|
||||||
|
if (class_exists(ImmediateResponseException::class)) {
|
||||||
|
throw new ImmediateResponseException(
|
||||||
|
$errorController->pageNotFoundAction($GLOBALS['TYPO3_REQUEST'], $message),
|
||||||
|
1695881164
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new PropagateResponseException(
|
||||||
|
$errorController->pageNotFoundAction($this->request, $message),
|
||||||
|
1695881170
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ namespace Wrm\Events\Controller;
|
||||||
use TYPO3\CMS\Core\EventDispatcher\EventDispatcher;
|
use TYPO3\CMS\Core\EventDispatcher\EventDispatcher;
|
||||||
use TYPO3\CMS\Extbase\Annotation as Extbase;
|
use TYPO3\CMS\Extbase\Annotation as Extbase;
|
||||||
use TYPO3\CMS\Extbase\Service\ExtensionService;
|
use TYPO3\CMS\Extbase\Service\ExtensionService;
|
||||||
|
use Throwable;
|
||||||
use Wrm\Events\Domain\Model\Date;
|
use Wrm\Events\Domain\Model\Date;
|
||||||
use Wrm\Events\Domain\Model\Dto\DateDemandFactory;
|
use Wrm\Events\Domain\Model\Dto\DateDemandFactory;
|
||||||
use Wrm\Events\Domain\Repository\CategoryRepository;
|
use Wrm\Events\Domain\Repository\CategoryRepository;
|
||||||
|
@ -155,6 +156,12 @@ class DateController extends AbstractController
|
||||||
*/
|
*/
|
||||||
public function showAction(Date $date): void
|
public function showAction(Date $date): void
|
||||||
{
|
{
|
||||||
|
try {
|
||||||
|
$date->getEvent();
|
||||||
|
} catch (Throwable $e) {
|
||||||
|
$this->trigger404('No event found for requested date.');
|
||||||
|
}
|
||||||
|
|
||||||
$this->view->assign('date', $date);
|
$this->view->assign('date', $date);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
31
Documentation/Changelog/3.5.1.rst
Normal file
31
Documentation/Changelog/3.5.1.rst
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
3.5.1
|
||||||
|
=====
|
||||||
|
|
||||||
|
Breaking
|
||||||
|
--------
|
||||||
|
|
||||||
|
Nothing
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
Nothing
|
||||||
|
|
||||||
|
Fixes
|
||||||
|
-----
|
||||||
|
|
||||||
|
* Properly trigger 404 if a date is requested where event is not available.
|
||||||
|
This might happen if an event is set to hidden.
|
||||||
|
The date record is still available and can be requested.
|
||||||
|
But the event is missing, which in turn should make dates also unavailable.
|
||||||
|
This situation is now properly handled and will result in a 404.
|
||||||
|
|
||||||
|
Tasks
|
||||||
|
-----
|
||||||
|
|
||||||
|
Nothing
|
||||||
|
|
||||||
|
Deprecation
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Nothing
|
|
@ -9,3 +9,9 @@ Remove fetching cached page stage from body from tests
|
||||||
|
|
||||||
We have different assertions based on TYPO3 version, due to how TYPO3 exposes the info.
|
We have different assertions based on TYPO3 version, due to how TYPO3 exposes the info.
|
||||||
We can remove the condition with its content once we drop v10.
|
We can remove the condition with its content once we drop v10.
|
||||||
|
|
||||||
|
Remove condition for page not found handling
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
The :php:`AbstractController->trigger404()` method has a condition to handle 404 differently for TYPO3 v10.
|
||||||
|
The condition can be removed.
|
||||||
|
|
|
@ -69,6 +69,11 @@ abstract class AbstractFunctionalTestCase extends FunctionalTestCase
|
||||||
]);
|
]);
|
||||||
|
|
||||||
ArrayUtility::mergeRecursiveWithOverrule($this->configurationToUseInTestInstance, [
|
ArrayUtility::mergeRecursiveWithOverrule($this->configurationToUseInTestInstance, [
|
||||||
|
'FE' => [
|
||||||
|
'cacheHash' => [
|
||||||
|
'enforceValidation' => false,
|
||||||
|
],
|
||||||
|
],
|
||||||
'GFX' => [
|
'GFX' => [
|
||||||
'processor_enabled' => true,
|
'processor_enabled' => true,
|
||||||
'processor_path' => '/usr/bin/',
|
'processor_path' => '/usr/bin/',
|
||||||
|
|
|
@ -153,6 +153,23 @@ class DatesTest extends AbstractFunctionalTestCase
|
||||||
self::assertStringContainsString('Event 9', $html);
|
self::assertStringContainsString('Event 9', $html);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function returns404IfEventIsHidden(): void
|
||||||
|
{
|
||||||
|
$this->importCSVDataSet(__DIR__ . '/DatesTestFixtures/Returns404IfEventIsHidden.csv');
|
||||||
|
|
||||||
|
$request = new InternalRequest();
|
||||||
|
$request = $request->withPageId(1);
|
||||||
|
$request = $request->withQueryParameters([
|
||||||
|
'tx_events_dateshow[date]' => '1',
|
||||||
|
]);
|
||||||
|
$response = $this->executeFrontendRequest($request);
|
||||||
|
|
||||||
|
self::assertSame(404, $response->getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
tt_content
|
||||||
|
,uid,pid,CType,list_type,header
|
||||||
|
,1,1,list,events_dateshow,Singleview
|
||||||
|
tx_events_domain_model_event
|
||||||
|
,uid,pid,title,hidden
|
||||||
|
,1,2,"Event 1 starts before search, ends before search",1
|
||||||
|
tx_events_domain_model_date
|
||||||
|
,uid,pid,event,start,end
|
||||||
|
,1,2,1,1676419200,1676484000
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
@ -9,7 +9,7 @@ $EM_CONF['events'] = [
|
||||||
'state' => 'alpha',
|
'state' => 'alpha',
|
||||||
'createDirs' => '',
|
'createDirs' => '',
|
||||||
'clearCacheOnLoad' => 0,
|
'clearCacheOnLoad' => 0,
|
||||||
'version' => '3.5.0',
|
'version' => '3.5.1',
|
||||||
'constraints' => [
|
'constraints' => [
|
||||||
'depends' => [
|
'depends' => [
|
||||||
'typo3' => '10.4.00-11.5.99',
|
'typo3' => '10.4.00-11.5.99',
|
||||||
|
|
|
@ -1,5 +1,20 @@
|
||||||
parameters:
|
parameters:
|
||||||
ignoreErrors:
|
ignoreErrors:
|
||||||
|
-
|
||||||
|
message: "#^Instantiated class TYPO3\\\\CMS\\\\Core\\\\Http\\\\PropagateResponseException not found\\.$#"
|
||||||
|
count: 1
|
||||||
|
path: Classes/Controller/AbstractController.php
|
||||||
|
|
||||||
|
-
|
||||||
|
message: "#^Parameter \\#1 \\$request of method TYPO3\\\\CMS\\\\Frontend\\\\Controller\\\\ErrorController\\:\\:pageNotFoundAction\\(\\) expects Psr\\\\Http\\\\Message\\\\ServerRequestInterface, TYPO3\\\\CMS\\\\Extbase\\\\Mvc\\\\Request given\\.$#"
|
||||||
|
count: 1
|
||||||
|
path: Classes/Controller/AbstractController.php
|
||||||
|
|
||||||
|
-
|
||||||
|
message: "#^Throwing object of an unknown class TYPO3\\\\CMS\\\\Core\\\\Http\\\\PropagateResponseException\\.$#"
|
||||||
|
count: 1
|
||||||
|
path: Classes/Controller/AbstractController.php
|
||||||
|
|
||||||
-
|
-
|
||||||
message: "#^Cannot call method typoLink_URL\\(\\) on TYPO3\\\\CMS\\\\Frontend\\\\ContentObject\\\\ContentObjectRenderer\\|null\\.$#"
|
message: "#^Cannot call method typoLink_URL\\(\\) on TYPO3\\\\CMS\\\\Frontend\\\\ContentObject\\\\ContentObjectRenderer\\|null\\.$#"
|
||||||
count: 1
|
count: 1
|
||||||
|
|
Loading…
Reference in a new issue