Add original date to dates if available

This is not possible via native API.
We therefore use the event to fetch and add the relation.

Relates: #8857
This commit is contained in:
Daniel Siepmann 2021-06-17 12:08:09 +02:00
parent 36ecc9bbe8
commit 97bcbe2065
3 changed files with 92 additions and 1 deletions

View file

@ -26,10 +26,15 @@ class Date extends AbstractEntity
protected $canceled = "no"; protected $canceled = "no";
/** /**
* @var Date * @var null|Date
*/ */
protected $postponedDate; protected $postponedDate;
/**
* @var null|Date
*/
protected $originalDate;
/** /**
* @var \Wrm\Events\Domain\Model\Event * @var \Wrm\Events\Domain\Model\Event
*/ */
@ -141,6 +146,11 @@ class Date extends AbstractEntity
return null; return null;
} }
public function getOriginalDate(): ?Date
{
return $this->originalDate;
}
public function getCanceledLink(): string public function getCanceledLink(): string
{ {
if ($this->getCanceled() === 'canceled') { if ($this->getCanceled() === 'canceled') {

View file

@ -0,0 +1,75 @@
<?php
namespace Wrm\Events\Extbase;
/*
* Copyright (C) 2021 Daniel Siepmann <coding@daniel-siepmann.de>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*/
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Extbase\Event\Persistence\AfterObjectThawedEvent;
use TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper;
use Wrm\Events\Domain\Model\Date;
class AddSpecialProperties
{
/**
* @var ConnectionPool
*/
private $connectionPool;
/**
* @var DataMapper
*/
private $dataMapper;
public function __construct(
ConnectionPool $connectionPool,
DataMapper $dataMapper
) {
$this->connectionPool = $connectionPool;
$this->dataMapper = $dataMapper;
}
public function __invoke(AfterObjectThawedEvent $event): void
{
if ($event->getObject() instanceof Date) {
/** @var Date $date */
$date = $event->getObject();
$date->_setProperty('originalDate', $this->getOriginalDate($date->_getProperty('_localizedUid')));
}
}
private function getOriginalDate(int $uidOfReferencedDate): ?Date
{
$qb = $this->connectionPool->getQueryBuilderForTable('tx_events_domain_model_date');
$qb->select('*');
$qb->from('tx_events_domain_model_date');
$qb->where($qb->expr()->eq('postponed_date', $uidOfReferencedDate));
$qb->setMaxResults(1);
$result = $qb->execute()->fetch();
if ($result === false) {
return null;
}
$dates = $this->dataMapper->map(Date::class, [$result]);
return $dates[0] ?? null;
}
}

View file

@ -21,3 +21,9 @@ services:
tags: tags:
- name: 'console.command' - name: 'console.command'
command: 'events:removePast' command: 'events:removePast'
Wrm\Events\Extbase\AddSpecialProperties:
tags:
- name: event.listener
identifier: 'WrmEventsAddSpecialPropertiesToDate'
event: TYPO3\CMS\Extbase\Event\Persistence\AfterObjectThawedEvent