mirror of
https://github.com/werkraum-media/events.git
synced 2024-11-25 02:36:10 +01:00
Daniel Siepmann
713bc4b697
A new class is added which will add meta tags for dates and events. The class has an interface which allows it to be replaced via DI to alter behaviour. Refactor import regarding data handler. We now also need to add a new column "keywords". We use the new DataHandler approach. But that approach only covered relations so far. We therefore refactor that area to be more generic and use that one for new keywords column. Relates: #10642
156 lines
3.4 KiB
PHP
156 lines
3.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace WerkraumMedia\Events\Domain\Model;
|
|
|
|
use DateTime;
|
|
use DateTimeImmutable;
|
|
use DateTimeZone;
|
|
use TYPO3\CMS\Extbase\DomainObject\AbstractEntity;
|
|
|
|
/**
|
|
* Date
|
|
*/
|
|
class Date extends AbstractEntity
|
|
{
|
|
protected DateTime $start;
|
|
|
|
protected ?DateTime $end = null;
|
|
|
|
protected string $canceled = 'no';
|
|
|
|
protected ?Date $postponedDate = null;
|
|
|
|
protected ?Date $originalDate = null;
|
|
|
|
/**
|
|
* Can not be null in theory.
|
|
* But editors might disable an event.
|
|
* The date might still be available by Extbase, but without event.
|
|
* This needs to be handled properly by consuming code for now.
|
|
*/
|
|
protected ?Event $event;
|
|
|
|
protected string $canceledLink = '';
|
|
|
|
public function getStart(): DateTime
|
|
{
|
|
return $this->start;
|
|
}
|
|
|
|
public function setStart(DateTime $start): void
|
|
{
|
|
$this->start = $start;
|
|
}
|
|
|
|
public function getHasUsefulStartTime(): bool
|
|
{
|
|
return $this->getStart()->format('H:i') !== '00:00';
|
|
}
|
|
|
|
public function getEnd(): ?DateTime
|
|
{
|
|
return $this->end;
|
|
}
|
|
|
|
public function setEnd(?DateTime $end): void
|
|
{
|
|
$this->end = $end;
|
|
}
|
|
|
|
public function getHasUsefulEndTime(): bool
|
|
{
|
|
$end = $this->getEnd();
|
|
return $end && $end->format('H:i') !== '23:59';
|
|
}
|
|
|
|
public function getEndsOnSameDay(): bool
|
|
{
|
|
$end = $this->getEnd();
|
|
return $end && $this->getStart()->format('Y-m-d') === $end->format('Y-m-d');
|
|
}
|
|
|
|
public function getEvent(): ?Event
|
|
{
|
|
return $this->event;
|
|
}
|
|
|
|
public function setEvent(Event $event): self
|
|
{
|
|
$this->event = $event;
|
|
return $this;
|
|
}
|
|
|
|
public function setLanguageUid(int $languageUid): void
|
|
{
|
|
$this->_languageUid = $languageUid;
|
|
}
|
|
|
|
public function getLanguageUid(): int
|
|
{
|
|
return $this->_languageUid;
|
|
}
|
|
|
|
public function getCanceled(): string
|
|
{
|
|
return $this->canceled;
|
|
}
|
|
|
|
public function setCanceled(string $canceled): void
|
|
{
|
|
$this->canceled = $canceled;
|
|
}
|
|
|
|
public function getPostponedDate(): ?Date
|
|
{
|
|
if ($this->getCanceled() === 'postponed') {
|
|
return $this->postponedDate;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
public function getOriginalDate(): ?Date
|
|
{
|
|
return $this->originalDate;
|
|
}
|
|
|
|
public function getCanceledLink(): string
|
|
{
|
|
if ($this->getCanceled() === 'canceled') {
|
|
return $this->canceledLink;
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
public static function createFromDestinationDataDate(
|
|
array $date,
|
|
bool $canceled
|
|
): self {
|
|
return self::createFromDestinationData(
|
|
new DateTimeImmutable($date['start'], new DateTimeZone($date['tz'])),
|
|
new DateTimeImmutable($date['end'], new DateTimeZone($date['tz'])),
|
|
$canceled
|
|
);
|
|
}
|
|
|
|
public static function createFromDestinationData(
|
|
DateTimeImmutable $start,
|
|
DateTimeImmutable $end,
|
|
bool $canceled
|
|
): self {
|
|
$date = new Date();
|
|
$date->setLanguageUid(-1);
|
|
|
|
$date->setStart(new DateTime($start->format(DateTime::W3C), $start->getTimezone()));
|
|
$date->setEnd(new DateTime($end->format(DateTime::W3C), $end->getTimezone()));
|
|
|
|
if ($canceled) {
|
|
$date->setCanceled('canceled');
|
|
}
|
|
|
|
return $date;
|
|
}
|
|
}
|