mirror of
https://github.com/werkraum-media/events.git
synced 2024-12-27 07:06:10 +01:00
Daniel Siepmann
c65ae5023f
Respect start and end when creating demand from settings. That way integrator can configure it via TypoScript, or provide an FlexForm. Also the query was adjusted. It now respects a single value and doesn't need start and end. That way upcoming events can be created. Relates: #8581
196 lines
5.8 KiB
PHP
196 lines
5.8 KiB
PHP
<?php
|
|
|
|
namespace Wrm\Events\Controller;
|
|
|
|
use TYPO3\CMS\Core\Database\QueryGenerator;
|
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
|
use TYPO3\CMS\Extbase\Annotation as Extbase;
|
|
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
|
|
use TYPO3\CMS\Extbase\Mvc\Controller\ActionController;
|
|
use Wrm\Events\Domain\Model\Date;
|
|
use Wrm\Events\Domain\Model\Dto\DateDemand;
|
|
use Wrm\Events\Domain\Repository\CategoryRepository;
|
|
use Wrm\Events\Domain\Repository\DateRepository;
|
|
use Wrm\Events\Domain\Repository\RegionRepository;
|
|
use Wrm\Events\Service\DataProcessingForModels;
|
|
|
|
/**
|
|
* DateController
|
|
*/
|
|
class DateController extends ActionController
|
|
{
|
|
|
|
/**
|
|
* @var dateRepository
|
|
*/
|
|
protected $dateRepository;
|
|
|
|
/**
|
|
* @var regionRepository
|
|
*/
|
|
protected $regionRepository;
|
|
|
|
/**
|
|
* @var CategoryRepository
|
|
*/
|
|
protected $categoryRepository;
|
|
|
|
/**
|
|
* @var QueryGenerator
|
|
*/
|
|
protected $queryGenerator;
|
|
|
|
/**
|
|
* @var DataProcessingForModels
|
|
*/
|
|
protected $dataProcessing;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
protected $pluginSettings;
|
|
|
|
/*
|
|
* @param RegionRepository $regionRepository
|
|
* @param DateRepository $dateRepository
|
|
* @param CategoryRepository $categoryRepository
|
|
*/
|
|
public function __construct(
|
|
RegionRepository $regionRepository,
|
|
DateRepository $dateRepository,
|
|
CategoryRepository $categoryRepository
|
|
) {
|
|
$this->regionRepository = $regionRepository;
|
|
$this->dateRepository = $dateRepository;
|
|
$this->categoryRepository = $categoryRepository;
|
|
}
|
|
|
|
/**
|
|
* @param DataProcessingForModels $dataProcessing
|
|
*/
|
|
public function injectDataProcessingForModels(DataProcessingForModels $dataProcessing)
|
|
{
|
|
$this->dataProcessing = $dataProcessing;
|
|
}
|
|
|
|
/**
|
|
* Action initializer
|
|
*/
|
|
protected function initializeAction()
|
|
{
|
|
$this->dataProcessing->setConfigurationManager($this->configurationManager);
|
|
$this->pluginSettings = $this->configurationManager->getConfiguration(
|
|
ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK
|
|
);
|
|
}
|
|
|
|
/**
|
|
* action list
|
|
*
|
|
* @return void
|
|
*/
|
|
public function listAction()
|
|
{
|
|
if (
|
|
($this->request->hasArgument('searchword') && $this->request->getArgument('searchword') != '')
|
|
|| ($this->request->hasArgument('region') && $this->request->getArgument('region') != '')
|
|
|| ($this->request->hasArgument('start') && $this->request->getArgument('start') != '')
|
|
|| ($this->request->hasArgument('end') && $this->request->getArgument('end') != '')
|
|
|| ($this->request->hasArgument('events_search') && $this->request->getArgument('events_search') != [])
|
|
) {
|
|
$demand = $this->createDemandFromSearch();
|
|
} else {
|
|
$demand = $this->createDemandFromSettings();
|
|
}
|
|
$this->view->assign('dates', $this->dateRepository->findByDemand($demand));
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
public function searchAction()
|
|
{
|
|
$arguments = GeneralUtility::_GET('tx_events_datelist') ?? [];
|
|
if (isset($arguments['events_search'])) {
|
|
$arguments += $arguments['events_search'];
|
|
unset($arguments['events_search']);
|
|
}
|
|
|
|
$this->view->assignMultiple([
|
|
'searchword' => $arguments['searchword'] ?? '',
|
|
'selRegion' => $arguments['region'] ?? '',
|
|
'start' => $arguments['start'] ?? '',
|
|
'end' => $arguments['end'] ?? '',
|
|
'considerDate' => $arguments['considerDate'] ?? '',
|
|
'demand' => DateDemand::createFromRequestValues($arguments, $this->settings),
|
|
'regions' => $this->regionRepository->findAll(),
|
|
'categories' => $this->categoryRepository->findAllCurrentlyAssigned(),
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* action teaser
|
|
*
|
|
* @return void
|
|
*/
|
|
public function teaserAction()
|
|
{
|
|
$dates = $this->dateRepository->findByUids($this->settings['eventUids']);
|
|
$this->view->assign('dates', $dates);
|
|
}
|
|
|
|
/**
|
|
* action show
|
|
*
|
|
* @Extbase\IgnoreValidation("date")
|
|
*
|
|
* @param \Wrm\Events\Domain\Model\Date $date
|
|
* @return void
|
|
*/
|
|
public function showAction(Date $date)
|
|
{
|
|
$this->view->assign('date', $date);
|
|
}
|
|
|
|
/**
|
|
* @return DateDemand
|
|
*/
|
|
protected function createDemandFromSettings(): DateDemand
|
|
{
|
|
$demand = $this->objectManager->get(DateDemand::class);
|
|
|
|
$demand->setRegion((string)$this->settings['region']);
|
|
$demand->setCategories((string)$this->settings['categories']);
|
|
$categoryCombination = (int)$this->settings['categoryCombination'] === 1 ? 'or' : 'and';
|
|
$demand->setCategoryCombination($categoryCombination);
|
|
$demand->setIncludeSubCategories((bool)$this->settings['includeSubcategories']);
|
|
$demand->setSortBy((string)$this->settings['sortByDate']);
|
|
$demand->setSortOrder((string)$this->settings['sortOrder']);
|
|
$demand->setHighlight((int)$this->settings['highlight']);
|
|
$demand->setStart((string)$this->settings['start'] ?? '');
|
|
$demand->setEnd((string)$this->settings['end'] ?? '');
|
|
|
|
if (!empty($this->settings['limit'])) {
|
|
$demand->setLimit($this->settings['limit']);
|
|
}
|
|
|
|
return $demand;
|
|
}
|
|
|
|
/**
|
|
* @return DateDemand
|
|
*/
|
|
protected function createDemandFromSearch(): DateDemand
|
|
{
|
|
$arguments = $this->request->getArguments() ?? [];
|
|
if (isset($arguments['events_search'])) {
|
|
$arguments += $arguments['events_search'];
|
|
unset($arguments['events_search']);
|
|
}
|
|
|
|
return DateDemand::createFromRequestValues(
|
|
$arguments,
|
|
$this->settings
|
|
);
|
|
}
|
|
}
|