mirror of
https://github.com/werkraum-media/events.git
synced 2024-11-24 18:56:11 +01:00
Provide new "Event selected" plugin
Allow editors to select specific events to display. Therefore add new necessary demand and setting for events and respect them within repository. Relates: #8092
This commit is contained in:
parent
8da7284e1f
commit
17bd83eedf
8 changed files with 128 additions and 25 deletions
|
@ -3,6 +3,7 @@
|
|||
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;
|
||||
|
@ -122,6 +123,7 @@ class EventController extends ActionController
|
|||
|
||||
protected function createDemandFromSettings(): EventDemand
|
||||
{
|
||||
/** @var EventDemand $demand */
|
||||
$demand = $this->objectManager->get(EventDemand::class);
|
||||
|
||||
$demand->setRegion((string)$this->settings['region']);
|
||||
|
@ -138,6 +140,8 @@ class EventController extends ActionController
|
|||
|
||||
$demand->setHighlight((bool)$this->settings['highlight']);
|
||||
|
||||
$demand->setRecordUids(GeneralUtility::intExplode(',', $this->settings['selectedRecords'], true));
|
||||
|
||||
if (!empty($this->settings['limit'])) {
|
||||
$demand->setLimit($this->settings['limit']);
|
||||
}
|
||||
|
|
|
@ -45,6 +45,11 @@ class EventDemand
|
|||
*/
|
||||
protected $limit = '';
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $recordUids = [];
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
|
@ -172,4 +177,20 @@ class EventDemand
|
|||
{
|
||||
$this->limit = $limit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function getRecordUids(): array
|
||||
{
|
||||
return $this->recordUids;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $recordUids
|
||||
*/
|
||||
public function setRecordUids(array $recordUids): void
|
||||
{
|
||||
$this->recordUids = $recordUids;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ use TYPO3\CMS\Extbase\Persistence\QueryInterface;
|
|||
use TYPO3\CMS\Extbase\Persistence\QueryResultInterface;
|
||||
use TYPO3\CMS\Extbase\Persistence\Repository;
|
||||
use Wrm\Events\Domain\Model\Dto\EventDemand;
|
||||
use Wrm\Events\Domain\Model\Event;
|
||||
use Wrm\Events\Service\CategoryService;
|
||||
|
||||
class EventRepository extends Repository
|
||||
|
@ -56,6 +57,11 @@ class EventRepository extends Repository
|
|||
public function findByDemand(EventDemand $demand)
|
||||
{
|
||||
$query = $this->createDemandQuery($demand);
|
||||
|
||||
if ($demand->getRecordUids() !== [] && $demand->getSortBy() === 'default') {
|
||||
return $this->sortByDemand($query, $demand);
|
||||
}
|
||||
|
||||
return $query->execute();
|
||||
}
|
||||
|
||||
|
@ -70,7 +76,8 @@ class EventRepository extends Repository
|
|||
|
||||
// sorting
|
||||
$sortBy = $demand->getSortBy();
|
||||
if ($sortBy && $sortBy !== 'singleSelection' && $sortBy !== 'default') {
|
||||
$sortingsToIgnore = ['singleSelection', 'default'];
|
||||
if ($sortBy && in_array($sortBy, $sortingsToIgnore) === false) {
|
||||
$order = strtolower($demand->getSortOrder()) === 'desc' ? QueryInterface::ORDER_DESCENDING : QueryInterface::ORDER_ASCENDING;
|
||||
$query->setOrderings([$sortBy => $order]);
|
||||
}
|
||||
|
@ -88,6 +95,10 @@ class EventRepository extends Repository
|
|||
}
|
||||
}
|
||||
|
||||
if ($demand->getRecordUids() !== []) {
|
||||
$constraints['recordUids'] = $query->in('uid', $demand->getRecordUids());
|
||||
}
|
||||
|
||||
if ($demand->getRegion() !== '') {
|
||||
$constraints['region'] = $query->equals('region', $demand->getRegion());
|
||||
}
|
||||
|
@ -133,6 +144,20 @@ class EventRepository extends Repository
|
|||
return $constraints;
|
||||
}
|
||||
|
||||
private function sortByDemand(QueryInterface $query, EventDemand $demand): array
|
||||
{
|
||||
$result = $query->execute()->toArray();
|
||||
$expectedSorting = $demand->getRecordUids();
|
||||
|
||||
usort($result, function (Event $eventA, Event $eventB) use ($expectedSorting) {
|
||||
$positionOfA = array_search($eventA->getUid(), $expectedSorting);
|
||||
$positionOfB = array_search($eventB->getUid(), $expectedSorting);
|
||||
|
||||
return $positionOfA <=> $positionOfB;
|
||||
});
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function findSearchWord($search)
|
||||
{
|
||||
|
|
24
Configuration/FlexForms/Selected.xml
Normal file
24
Configuration/FlexForms/Selected.xml
Normal file
|
@ -0,0 +1,24 @@
|
|||
<T3DataStructure>
|
||||
<sheets>
|
||||
<sDEF>
|
||||
<ROOT>
|
||||
<type>array</type>
|
||||
<el>
|
||||
<settings.selectedRecords>
|
||||
<TCEforms>
|
||||
<exclude>1</exclude>
|
||||
<label>LLL:EXT:events/Resources/Private/Language/de.locallang_db.xlf:tx_events.flexform.selected.selectedRecords</label>
|
||||
<config>
|
||||
<type>group</type>
|
||||
<internal_type>db</internal_type>
|
||||
<allowed>tx_events_domain_model_event</allowed>
|
||||
<minitems>1</minitems>
|
||||
<show_thumbs>1</show_thumbs>
|
||||
</config>
|
||||
</TCEforms>
|
||||
</settings.selectedRecords>
|
||||
</el>
|
||||
</ROOT>
|
||||
</sDEF>
|
||||
</sheets>
|
||||
</T3DataStructure>
|
|
@ -69,4 +69,20 @@ call_user_func(function () {
|
|||
);
|
||||
|
||||
|
||||
/* Event Selected Plugin */
|
||||
|
||||
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
|
||||
'Events',
|
||||
'Selected',
|
||||
'Events: Show selected',
|
||||
'EXT:events/Resources/Public/Icons/user_plugin_events.svg'
|
||||
);
|
||||
|
||||
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist']['events_selected'] = 'pi_flexform';
|
||||
|
||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
|
||||
'events_selected',
|
||||
'FILE:EXT:events/Configuration/FlexForms/Selected.xml'
|
||||
);
|
||||
|
||||
});
|
||||
|
|
|
@ -11,6 +11,10 @@
|
|||
<source>Event Modul</source>
|
||||
<target>Veranstaltungs Modul</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="tx_events.flexform.selected.selectedRecords">
|
||||
<source>Records to show</source>
|
||||
<target>Anzuzeigende Veranstaltungen</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
<trans-unit id="tx_events.description">
|
||||
<source>Event Modul</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="tx_events.flexform.selected.selectedRecords">
|
||||
<source>Records to show</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||
|
|
|
@ -26,6 +26,12 @@ call_user_func(
|
|||
[\Wrm\Events\Controller\DateController::class => 'show']
|
||||
);
|
||||
|
||||
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
|
||||
'Events',
|
||||
'Selected',
|
||||
[\Wrm\Events\Controller\EventController::class => 'list']
|
||||
);
|
||||
|
||||
$iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class);
|
||||
$iconRegistry->registerIcon(
|
||||
'events-plugin',
|
||||
|
|
Loading…
Reference in a new issue