mirror of
https://github.com/werkraum-media/events.git
synced 2024-11-25 23:56:10 +01:00
Merge
This commit is contained in:
commit
552986b2aa
35 changed files with 1076 additions and 431 deletions
|
@ -23,29 +23,23 @@ class DestinationDataImportCommand extends Command {
|
||||||
'storage-pid',
|
'storage-pid',
|
||||||
InputArgument::OPTIONAL,
|
InputArgument::OPTIONAL,
|
||||||
'What is the storage pid?',
|
'What is the storage pid?',
|
||||||
'281'
|
'284'
|
||||||
);
|
);
|
||||||
$this->addArgument(
|
$this->addArgument(
|
||||||
'region-uid',
|
'region-uid',
|
||||||
InputArgument::OPTIONAL,
|
InputArgument::OPTIONAL,
|
||||||
'What is the region uid?',
|
'What is the region uid?',
|
||||||
'3'
|
|
||||||
);
|
|
||||||
$this->addArgument(
|
|
||||||
'category-parent-uid',
|
|
||||||
InputArgument::OPTIONAL,
|
|
||||||
'What is the default category parent uid?',
|
|
||||||
'6'
|
'6'
|
||||||
);
|
);
|
||||||
$this->addArgument('rest-experience',
|
$this->addArgument('rest-experience',
|
||||||
InputArgument::OPTIONAL,
|
InputArgument::OPTIONAL,
|
||||||
'What is the rest experience?',
|
'What is the rest experience?',
|
||||||
'arnstadt'
|
'stadtmarketing-erfurt'
|
||||||
);
|
);
|
||||||
$this->addArgument('files-folder',
|
$this->addArgument('files-folder',
|
||||||
InputArgument::OPTIONAL,
|
InputArgument::OPTIONAL,
|
||||||
'Where to save the image files?',
|
'Where to save the image files?',
|
||||||
'redaktion/arnstadt/events/'
|
'staedte/erfurt/events/'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +53,6 @@ class DestinationDataImportCommand extends Command {
|
||||||
$input->getArgument('rest-experience'),
|
$input->getArgument('rest-experience'),
|
||||||
$input->getArgument('storage-pid'),
|
$input->getArgument('storage-pid'),
|
||||||
$input->getArgument('region-uid'),
|
$input->getArgument('region-uid'),
|
||||||
$input->getArgument('category-parent-uid'),
|
|
||||||
$input->getArgument('files-folder')
|
$input->getArgument('files-folder')
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
namespace Wrm\Events\Controller;
|
namespace Wrm\Events\Controller;
|
||||||
|
|
||||||
|
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||||
use Wrm\Events\Domain\Model\Dto\DateDemand;
|
use Wrm\Events\Domain\Model\Dto\DateDemand;
|
||||||
use Wrm\Events\Domain\Repository\DateRepository;
|
use Wrm\Events\Domain\Repository\DateRepository;
|
||||||
use Wrm\Events\Domain\Repository\RegionRepository;
|
use Wrm\Events\Domain\Repository\RegionRepository;
|
||||||
|
@ -63,8 +64,17 @@ class DateController extends ActionController
|
||||||
*/
|
*/
|
||||||
public function listAction()
|
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') != ''))
|
||||||
|
{
|
||||||
|
$demand = $this->createDemandFromSearch();
|
||||||
|
$dates = $this->dateRepository->findByDemand($demand);
|
||||||
|
} else {
|
||||||
$demand = $this->createDemandFromSettings();
|
$demand = $this->createDemandFromSettings();
|
||||||
$dates = $this->dateRepository->findByDemand($demand);
|
$dates = $this->dateRepository->findByDemand($demand);
|
||||||
|
}
|
||||||
$this->view->assign('dates', $dates);
|
$this->view->assign('dates', $dates);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,42 +83,21 @@ class DateController extends ActionController
|
||||||
*/
|
*/
|
||||||
public function searchAction()
|
public function searchAction()
|
||||||
{
|
{
|
||||||
|
$arguments = GeneralUtility::_GET('tx_events_datelist');
|
||||||
$searchword = null;
|
$searchword = $arguments['searchword'];
|
||||||
$regions = null;
|
$selRegion = $arguments['region'];
|
||||||
$selRegion = null;
|
$start = $arguments['start'];
|
||||||
$dates = null;
|
$end = $arguments['end'];
|
||||||
$start = null;
|
$considerDate = $arguments['considerDate'];
|
||||||
$end = null;
|
|
||||||
|
|
||||||
if ($this->request->hasArgument('searchword') && $this->request->getArgument('searchword') != '') {
|
|
||||||
$searchword = $this->request->getArgument('searchword');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->request->hasArgument('region') && $this->request->getArgument('region') != '') {
|
|
||||||
$selRegion = $this->request->getArgument('region');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->request->hasArgument('start') && $this->request->getArgument('start') != '') {
|
|
||||||
$start = date( "d.m.y", strtotime( $this->request->getArgument('start')));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->request->hasArgument('end') && $this->request->getArgument('end') != '') {
|
|
||||||
$end = date( "d.m.y", strtotime( $this->request->getArgument('end')));
|
|
||||||
}
|
|
||||||
|
|
||||||
$demand = $this->createDemandFromSearch();
|
|
||||||
$dates = $this->dateRepository->findByDemand($demand);
|
|
||||||
|
|
||||||
$regions = $this->regionRepository->findAll();
|
$regions = $this->regionRepository->findAll();
|
||||||
|
$this->view->assign('regions', $regions);
|
||||||
|
|
||||||
$this->view->assign('searchword', $searchword);
|
$this->view->assign('searchword', $searchword);
|
||||||
$this->view->assign('regions', $regions);
|
|
||||||
$this->view->assign('selRegion', $selRegion);
|
$this->view->assign('selRegion', $selRegion);
|
||||||
$this->view->assign('dates', $dates);
|
|
||||||
$this->view->assign('start', $start);
|
$this->view->assign('start', $start);
|
||||||
$this->view->assign('end', $end);
|
$this->view->assign('end', $end);
|
||||||
|
$this->view->assign('considerDate', $considerDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -172,13 +161,14 @@ class DateController extends ActionController
|
||||||
if ($this->request->hasArgument('searchword') && $this->request->getArgument('searchword') != '')
|
if ($this->request->hasArgument('searchword') && $this->request->getArgument('searchword') != '')
|
||||||
$demand->setSearchword((string)$this->request->getArgument('searchword'));
|
$demand->setSearchword((string)$this->request->getArgument('searchword'));
|
||||||
|
|
||||||
if ($this->request->hasArgument('start') && $this->request->getArgument('start') != '') {
|
if ($this->request->hasArgument('start') && $this->request->getArgument('start') != '')
|
||||||
$demand->setStart(date( "Y-m-d", strtotime( $this->request->getArgument('start'))));
|
$demand->setStart(strtotime($this->request->getArgument('start') . ' 00:00'));
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->request->hasArgument('end') && $this->request->getArgument('end') != '') {
|
if ($this->request->hasArgument('end') && $this->request->getArgument('end') != '')
|
||||||
$demand->setEnd(date( "Y-m-d", strtotime( $this->request->getArgument('end'))));
|
$demand->setEnd(strtotime($this->request->getArgument('end') . ' 23:59'));
|
||||||
}
|
|
||||||
|
if ($this->request->hasArgument('considerDate') && $this->request->getArgument('considerDate') != '')
|
||||||
|
$demand->setConsiderDate(strtotime($this->request->getArgument('considerDate')));
|
||||||
|
|
||||||
$demand->setSortBy((string)$this->settings['sortByDate']);
|
$demand->setSortBy((string)$this->settings['sortByDate']);
|
||||||
$demand->setSortOrder((string)$this->settings['sortOrder']);
|
$demand->setSortOrder((string)$this->settings['sortOrder']);
|
||||||
|
|
|
@ -49,10 +49,10 @@ class Date extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $end
|
* @param \DateTime $end
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function setEnd($end)
|
public function setEnd(\DateTime $end)
|
||||||
{
|
{
|
||||||
$this->end = $end;
|
$this->end = $end;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,11 @@ class DateDemand {
|
||||||
*/
|
*/
|
||||||
protected $searchword = '';
|
protected $searchword = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool
|
||||||
|
*/
|
||||||
|
protected $considerDate = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
|
@ -235,4 +240,20 @@ class DateDemand {
|
||||||
$this->end = $end;
|
$this->end = $end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public function getConsiderDate(): bool
|
||||||
|
{
|
||||||
|
return $this->considerDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param bool $considerDate
|
||||||
|
*/
|
||||||
|
public function setConsiderDate(string $considerDate): void
|
||||||
|
{
|
||||||
|
$this->considerDate = $considerDate;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -105,6 +105,13 @@ class Event extends AbstractEntity
|
||||||
*/
|
*/
|
||||||
protected $country = '';
|
protected $country = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* web
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
protected $phone = '';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* web
|
* web
|
||||||
*
|
*
|
||||||
|
@ -381,6 +388,22 @@ class Event extends AbstractEntity
|
||||||
$this->zip = $zip;
|
$this->zip = $zip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getPhone()
|
||||||
|
{
|
||||||
|
return $this->phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $phone
|
||||||
|
*/
|
||||||
|
public function setPhone($phone)
|
||||||
|
{
|
||||||
|
$this->phone = $phone;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return string $web
|
* @return string $web
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -82,9 +82,12 @@ class DateRepository extends \TYPO3\CMS\Extbase\Persistence\Repository
|
||||||
$constraints['daterange'] = $query->logicalAnd(
|
$constraints['daterange'] = $query->logicalAnd(
|
||||||
[
|
[
|
||||||
$query->greaterThanOrEqual('start', $demand->getStart()),
|
$query->greaterThanOrEqual('start', $demand->getStart()),
|
||||||
$query->lessThanOrEqual('start', $demand->getEnd())
|
$query->lessThanOrEqual('end', $demand->getEnd())
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
$now = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
|
||||||
|
$constraints['untilnow'] = $query->greaterThanOrEqual('start', $now);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($demand->getLimit() !== '') {
|
if ($demand->getLimit() !== '') {
|
||||||
|
|
|
@ -42,6 +42,10 @@ class DestinationDataImportService {
|
||||||
* @var
|
* @var
|
||||||
*/
|
*/
|
||||||
protected $restLimit;
|
protected $restLimit;
|
||||||
|
/**
|
||||||
|
* @var
|
||||||
|
*/
|
||||||
|
protected $restMode;
|
||||||
/**
|
/**
|
||||||
* @var
|
* @var
|
||||||
*/
|
*/
|
||||||
|
@ -189,23 +193,23 @@ class DestinationDataImportService {
|
||||||
$this->restLicenseKey = $this->settings['destinationData']['license'];
|
$this->restLicenseKey = $this->settings['destinationData']['license'];
|
||||||
$this->restType = $this->settings['destinationData']['restType'];
|
$this->restType = $this->settings['destinationData']['restType'];
|
||||||
$this->restLimit = $this->settings['destinationData']['restLimit'];
|
$this->restLimit = $this->settings['destinationData']['restLimit'];
|
||||||
|
$this->restMode = $this->settings['destinationData']['restMode'];
|
||||||
$this->restTemplate = $this->settings['destinationData']['restTemplate'];
|
$this->restTemplate = $this->settings['destinationData']['restTemplate'];
|
||||||
$this->sysCategoriesPid = $this->settings['destinationData']['categoriesPid'];
|
$this->sysCategoriesPid = $this->settings['destinationData']['categoriesPid'];
|
||||||
|
$this->categoryParentUid = $this->settings['destinationData']['categoryParentUid'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $restExperience
|
* @param $restExperience
|
||||||
* @param $storagePid
|
* @param $storagePid
|
||||||
* @param $regionUid
|
* @param $regionUid
|
||||||
* @param $categoryParentUid
|
|
||||||
* @param $filesFolder
|
* @param $filesFolder
|
||||||
*/
|
*/
|
||||||
public function import($restExperience, $storagePid, $regionUid, $categoryParentUid, $filesFolder) {
|
public function import($restExperience, $storagePid, $regionUid, $filesFolder) {
|
||||||
|
|
||||||
$this->restExperience = $restExperience;
|
$this->restExperience = $restExperience;
|
||||||
$this->storagePid = $storagePid;
|
$this->storagePid = $storagePid;
|
||||||
$this->regionUid = $regionUid;
|
$this->regionUid = $regionUid;
|
||||||
$this->categoryParentUid = $categoryParentUid;
|
|
||||||
$this->filesFolder = $filesFolder;
|
$this->filesFolder = $filesFolder;
|
||||||
|
|
||||||
// Get configuration
|
// Get configuration
|
||||||
|
@ -222,16 +226,14 @@ class DestinationDataImportService {
|
||||||
|
|
||||||
// Set Configuration
|
// Set Configuration
|
||||||
$this->configurationManager->setConfiguration(array_merge($frameworkConfiguration, $persistenceConfiguration));
|
$this->configurationManager->setConfiguration(array_merge($frameworkConfiguration, $persistenceConfiguration));
|
||||||
|
|
||||||
$this->logger = GeneralUtility::makeInstance(LogManager::class)->getLogger(__CLASS__);
|
$this->logger = GeneralUtility::makeInstance(LogManager::class)->getLogger(__CLASS__);
|
||||||
|
|
||||||
$this->logger->info('Starting Destination Data Import Service');
|
$this->logger->info('Starting Destination Data Import Service');
|
||||||
|
$restUrl = $this->restUrl . '?experience=' . $this->restExperience . '&licensekey=' . $this->restLicenseKey . '&type=' . $this->restType . '&mode=' . $this->restMode . '&limit=' . $this->restLimit . '&template=' . $this->restTemplate;
|
||||||
$restUrl = $this->restUrl . '?experience=' . $this->restExperience . '&licensekey=' . $this->restLicenseKey . '&type=' . $this->restType . '&limit=' . $this->restLimit . '&template=' . $this->restTemplate;
|
|
||||||
|
|
||||||
$this->logger->info('Try to get data from ' . $restUrl);
|
$this->logger->info('Try to get data from ' . $restUrl);
|
||||||
|
|
||||||
if ($jsonResponse = json_decode(file_get_contents($restUrl),true)) {
|
if ($jsonResponse = json_decode(file_get_contents($restUrl),true)) {
|
||||||
$this->logger->info('Received data with ' . count($jsonResponse) . 'items');
|
$this->logger->info('Received data with ' . count($jsonResponse['items']) . ' items');
|
||||||
return $this->processData($jsonResponse);
|
return $this->processData($jsonResponse);
|
||||||
} else {
|
} else {
|
||||||
$this->logger->error('Could not receive data.');
|
$this->logger->error('Could not receive data.');
|
||||||
|
@ -246,7 +248,9 @@ class DestinationDataImportService {
|
||||||
*/
|
*/
|
||||||
public function processData($data) {
|
public function processData($data) {
|
||||||
|
|
||||||
// Get seleceted region
|
$this->logger->info('Processing json ' . count($data['items']));
|
||||||
|
|
||||||
|
// Get selected region
|
||||||
$selectedRegion = $this->regionRepository->findByUid($this->regionUid);
|
$selectedRegion = $this->regionRepository->findByUid($this->regionUid);
|
||||||
|
|
||||||
foreach ($data['items'] as $event) {
|
foreach ($data['items'] as $event) {
|
||||||
|
@ -271,8 +275,9 @@ class DestinationDataImportService {
|
||||||
$this->setTexts($event['texts']);
|
$this->setTexts($event['texts']);
|
||||||
|
|
||||||
// Set address and geo data
|
// Set address and geo data
|
||||||
if($event['name'] && $event['street'] && $event['city'] && $event['zip'] && $event['country'])
|
|
||||||
$this->setAddress($event['name'], $event['street'], $event['city'], $event['zip'], $event['country']);
|
if($event['name'] || $event['street'] || $event['city'] || $event['zip'] || $event['country'])
|
||||||
|
$this->setAddress($event);
|
||||||
|
|
||||||
// Set LatLng
|
// Set LatLng
|
||||||
if($event['geo']['main']['latitude'] && $event['geo']['main']['longitude'])
|
if($event['geo']['main']['latitude'] && $event['geo']['main']['longitude'])
|
||||||
|
@ -301,10 +306,12 @@ class DestinationDataImportService {
|
||||||
|
|
||||||
}
|
}
|
||||||
$this->doSlugUpdate();
|
$this->doSlugUpdate();
|
||||||
|
$this->logger->info('Finished import');
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
*
|
||||||
* @param array $categories
|
* @param array $categories
|
||||||
*/
|
*/
|
||||||
protected function setCategories(Array $categories) {
|
protected function setCategories(Array $categories) {
|
||||||
|
@ -331,7 +338,7 @@ class DestinationDataImportService {
|
||||||
*/
|
*/
|
||||||
protected function setDates(Array $timeIntervals) {
|
protected function setDates(Array $timeIntervals) {
|
||||||
|
|
||||||
// TODO: does not seem to work -->
|
// @TODO: does not seem to work -->
|
||||||
//$currentEventDates = $this->tmpCurrentEvent->getDates();
|
//$currentEventDates = $this->tmpCurrentEvent->getDates();
|
||||||
//$this->tmpCurrentEvent->removeAllDates($currentEventDates);
|
//$this->tmpCurrentEvent->removeAllDates($currentEventDates);
|
||||||
// <--
|
// <--
|
||||||
|
@ -341,19 +348,18 @@ class DestinationDataImportService {
|
||||||
$this->logger->info('Found ' . count($currentEventDates) . ' to delete');
|
$this->logger->info('Found ' . count($currentEventDates) . ' to delete');
|
||||||
|
|
||||||
foreach ($currentEventDates as $currentDate) {
|
foreach ($currentEventDates as $currentDate) {
|
||||||
//$this->logger->info('Delete ' . $currentDate->getStart()->format('Y-m-d'));
|
|
||||||
$this->dateRepository->remove($currentDate);
|
$this->dateRepository->remove($currentDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
$now = new \DateTime();
|
$today = new \DateTime('today');
|
||||||
$now = $now->getTimestamp();
|
$today = $today->getTimestamp();
|
||||||
|
|
||||||
foreach ($timeIntervals as $date) {
|
foreach ($timeIntervals as $date) {
|
||||||
|
|
||||||
// Check if dates are given as interval or not
|
// Check if dates are given as interval or not
|
||||||
if (empty($date['interval'])) {
|
if (empty($date['interval'])) {
|
||||||
|
|
||||||
if (strtotime($date['start']) > $now) {
|
if (strtotime($date['start']) > $today) {
|
||||||
$this->logger->info('Setup single date');
|
$this->logger->info('Setup single date');
|
||||||
$dateObj = $this->objectManager->get(\Wrm\Events\Domain\Model\Date::class);
|
$dateObj = $this->objectManager->get(\Wrm\Events\Domain\Model\Date::class);
|
||||||
$start = new \DateTime($date['start'], new \DateTimeZone($date['tz']));
|
$start = new \DateTime($date['start'], new \DateTimeZone($date['tz']));
|
||||||
|
@ -367,16 +373,16 @@ class DestinationDataImportService {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
if ($date['freq'] == 'Daily' && empty($date['weekdays']) && !empty($date['repeatUntil'])) {
|
||||||
if ($date['freq'] == 'Daily' && empty($date['weekdays'])) {
|
|
||||||
|
|
||||||
$this->logger->info('Setup daily interval dates');
|
$this->logger->info('Setup daily interval dates');
|
||||||
$this->logger->info('Start ' . $date['start']);
|
$this->logger->info('Start ' . $date['start']);
|
||||||
$this->logger->info('End ' . $date['repeatUntil']);
|
$this->logger->info('End ' . $date['repeatUntil']);
|
||||||
$start = new \DateTime($date['start'], new \DateTimeZone($date['tz']));
|
$start = new \DateTime($date['start'], new \DateTimeZone($date['tz']));
|
||||||
$until = new \DateTime($date['repeatUntil'], new \DateTimeZone($date['tz']));
|
$until = new \DateTime($date['repeatUntil'], new \DateTimeZone($date['tz']));
|
||||||
|
|
||||||
for($i = strtotime($start->format('l'), $start->getTimestamp()); $i <= $until->getTimestamp(); $i = strtotime('+1 day', $i)) {
|
for($i = strtotime($start->format('l'), $start->getTimestamp()); $i <= $until->getTimestamp(); $i = strtotime('+1 day', $i)) {
|
||||||
if ($i > $now) {
|
if ($i >= $today) {
|
||||||
$eventStart = new \DateTime();
|
$eventStart = new \DateTime();
|
||||||
$eventStart->setTimestamp($i);
|
$eventStart->setTimestamp($i);
|
||||||
$eventStart->setTime($start->format('H'), $start->format('i'));
|
$eventStart->setTime($start->format('H'), $start->format('i'));
|
||||||
|
@ -392,8 +398,7 @@ class DestinationDataImportService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ($date['freq'] == 'Weekly' && !empty($date['weekdays'])) {
|
else if ($date['freq'] == 'Weekly' && !empty($date['weekdays']) && !empty($date['repeatUntil'])) {
|
||||||
|
|
||||||
foreach ($date['weekdays'] as $day) {
|
foreach ($date['weekdays'] as $day) {
|
||||||
$this->logger->info('Setup weekly interval dates for ' . $day);
|
$this->logger->info('Setup weekly interval dates for ' . $day);
|
||||||
$this->logger->info('Start ' . $date['start']);
|
$this->logger->info('Start ' . $date['start']);
|
||||||
|
@ -402,7 +407,7 @@ class DestinationDataImportService {
|
||||||
$until = new \DateTime($date['repeatUntil'], new \DateTimeZone($date['tz']));
|
$until = new \DateTime($date['repeatUntil'], new \DateTimeZone($date['tz']));
|
||||||
|
|
||||||
for($i = strtotime($day, $start->getTimestamp()); $i <= $until->getTimestamp(); $i = strtotime('+1 week', $i)) {
|
for($i = strtotime($day, $start->getTimestamp()); $i <= $until->getTimestamp(); $i = strtotime('+1 week', $i)) {
|
||||||
if ($i > $now) {
|
if ($i >= $today) {
|
||||||
$eventStart = new \DateTime();
|
$eventStart = new \DateTime();
|
||||||
$eventStart->setTimestamp($i);
|
$eventStart->setTimestamp($i);
|
||||||
$eventStart->setTime($start->format('H'), $start->format('i'));
|
$eventStart->setTime($start->format('H'), $start->format('i'));
|
||||||
|
@ -416,12 +421,10 @@ class DestinationDataImportService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
$this->logger->info('Finished setup dates');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -436,9 +439,7 @@ class DestinationDataImportService {
|
||||||
$this->tmpCurrentEvent->setOrganizer($tmpOrganizer);
|
$this->tmpCurrentEvent->setOrganizer($tmpOrganizer);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$tmpOrganizer = $this->objectManager->get(\Wrm\Events\Domain\Model\Organizer::class);
|
$tmpOrganizer = $this->objectManager->get(\Wrm\Events\Domain\Model\Organizer::class);
|
||||||
|
|
||||||
$tmpOrganizer->setName($address['name']);
|
$tmpOrganizer->setName($address['name']);
|
||||||
$tmpOrganizer->setCity($address['city']);
|
$tmpOrganizer->setCity($address['city']);
|
||||||
$tmpOrganizer->setZip($address['zip']);
|
$tmpOrganizer->setZip($address['zip']);
|
||||||
|
@ -447,27 +448,30 @@ class DestinationDataImportService {
|
||||||
$tmpOrganizer->setWeb($address['web']);
|
$tmpOrganizer->setWeb($address['web']);
|
||||||
$tmpOrganizer->setEmail($address['email']);
|
$tmpOrganizer->setEmail($address['email']);
|
||||||
$tmpOrganizer->setDistrict($address['district']);
|
$tmpOrganizer->setDistrict($address['district']);
|
||||||
|
|
||||||
$this->organizerRepository->add($tmpOrganizer);
|
$this->organizerRepository->add($tmpOrganizer);
|
||||||
$this->tmpCurrentEvent->setOrganizer($tmpOrganizer);
|
$this->tmpCurrentEvent->setOrganizer($tmpOrganizer);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $name
|
* @param array $event
|
||||||
* @param string $street
|
|
||||||
* @param string $city
|
|
||||||
* @param string $zip
|
|
||||||
* @param string $country
|
|
||||||
*/
|
*/
|
||||||
protected function setAddress(String $name, String $street, String $city, String $zip, String $country) {
|
protected function setAddress(Array $event) {
|
||||||
$this->tmpCurrentEvent->setName($name);
|
if (!empty($event['name']))
|
||||||
$this->tmpCurrentEvent->setStreet($street);
|
$this->tmpCurrentEvent->setName($event['name']);
|
||||||
$this->tmpCurrentEvent->setCity($city);
|
if (!empty($event['street']))
|
||||||
$this->tmpCurrentEvent->setZip($zip);
|
$this->tmpCurrentEvent->setStreet($event['street']);
|
||||||
$this->tmpCurrentEvent->setCountry($country);
|
if (!empty($event['city']))
|
||||||
|
$this->tmpCurrentEvent->setCity($event['city']);
|
||||||
|
if (!empty($event['zip']))
|
||||||
|
$this->tmpCurrentEvent->setZip($event['zip']);
|
||||||
|
if (!empty($event['country']))
|
||||||
|
$this->tmpCurrentEvent->setCountry($event['country']);
|
||||||
|
if (!empty($event['phone']))
|
||||||
|
$this->tmpCurrentEvent->setPhone($event['phone']);
|
||||||
|
if (!empty($event['web']))
|
||||||
|
$this->tmpCurrentEvent->setWeb($event['web']);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -492,6 +496,9 @@ class DestinationDataImportService {
|
||||||
if ($text['rel'] == "teaser" && $text['type'] == "text/plain") {
|
if ($text['rel'] == "teaser" && $text['type'] == "text/plain") {
|
||||||
$this->tmpCurrentEvent->setTeaser($text['value']);
|
$this->tmpCurrentEvent->setTeaser($text['value']);
|
||||||
}
|
}
|
||||||
|
if ($text['rel'] == "PRICE_INFO" && $text['type'] == "text/plain") {
|
||||||
|
$this->tmpCurrentEvent->setPriceInfo($text['value']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -528,6 +535,8 @@ class DestinationDataImportService {
|
||||||
*/
|
*/
|
||||||
protected function setAssets(Array $assets) {
|
protected function setAssets(Array $assets) {
|
||||||
|
|
||||||
|
$this->logger->info("Set assets");
|
||||||
|
|
||||||
$error = false;
|
$error = false;
|
||||||
|
|
||||||
foreach ($assets as $media_object)
|
foreach ($assets as $media_object)
|
||||||
|
@ -536,6 +545,11 @@ class DestinationDataImportService {
|
||||||
|
|
||||||
$this->storage = $this->resourceFactory->getDefaultStorage();
|
$this->storage = $this->resourceFactory->getDefaultStorage();
|
||||||
|
|
||||||
|
if ($this->storage == null) {
|
||||||
|
$this->logger->error('No default storage defined. Cancel import.');
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
// Check if file already exists
|
// Check if file already exists
|
||||||
if (file_exists($this->environment->getPublicPath() . '/fileadmin/' . $this->filesFolder . strtolower(basename($media_object['url'])))) {
|
if (file_exists($this->environment->getPublicPath() . '/fileadmin/' . $this->filesFolder . strtolower(basename($media_object['url'])))) {
|
||||||
$this->logger->info('File already exists');
|
$this->logger->info('File already exists');
|
||||||
|
@ -634,7 +648,6 @@ class DestinationDataImportService {
|
||||||
*/
|
*/
|
||||||
protected function doSlugUpdate()
|
protected function doSlugUpdate()
|
||||||
{
|
{
|
||||||
|
|
||||||
$this->logger->info('Update slugs');
|
$this->logger->info('Update slugs');
|
||||||
|
|
||||||
$slugHelper = GeneralUtility::makeInstance(
|
$slugHelper = GeneralUtility::makeInstance(
|
||||||
|
|
9
Classes/ViewHelpers/FormViewHelper.php
Normal file
9
Classes/ViewHelpers/FormViewHelper.php
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Wrm\Events\ViewHelpers;
|
||||||
|
|
||||||
|
class FormViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper {
|
||||||
|
protected function renderHiddenReferrerFields(){
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
236
Configuration/FlexForms/DateList.xml
Normal file
236
Configuration/FlexForms/DateList.xml
Normal file
|
@ -0,0 +1,236 @@
|
||||||
|
<T3DataStructure>
|
||||||
|
<sheets>
|
||||||
|
<sDEF>
|
||||||
|
<ROOT>
|
||||||
|
<TCEforms>
|
||||||
|
<sheetTitle>Options</sheetTitle>
|
||||||
|
</TCEforms>
|
||||||
|
<type>array</type>
|
||||||
|
<el>
|
||||||
|
<settings.sortByDate>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Sort By</label>
|
||||||
|
<config>
|
||||||
|
<type>select</type>
|
||||||
|
<items type="array">
|
||||||
|
<numIndex index="0" type="array">
|
||||||
|
<numIndex index="0">Start</numIndex>
|
||||||
|
<numIndex index="1">start</numIndex>
|
||||||
|
</numIndex>
|
||||||
|
<numIndex index="1" type="array">
|
||||||
|
<numIndex index="0">End</numIndex>
|
||||||
|
<numIndex index="1">end</numIndex>
|
||||||
|
</numIndex>
|
||||||
|
</items>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.sortByDate>
|
||||||
|
|
||||||
|
<settings.sortOrder>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Sort Order</label>
|
||||||
|
<config>
|
||||||
|
<type>select</type>
|
||||||
|
<items type="array">
|
||||||
|
<numIndex index="0" type="array">
|
||||||
|
<numIndex index="0">
|
||||||
|
Ascending
|
||||||
|
</numIndex>
|
||||||
|
<numIndex index="1">ASC</numIndex>
|
||||||
|
</numIndex>
|
||||||
|
<numIndex index="1" type="array">
|
||||||
|
<numIndex index="0">
|
||||||
|
Descending
|
||||||
|
</numIndex>
|
||||||
|
<numIndex index="1">DESC</numIndex>
|
||||||
|
</numIndex>
|
||||||
|
</items>
|
||||||
|
<default>ASC</default>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.sortOrder>
|
||||||
|
|
||||||
|
<settings.limit>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Max Items</label>
|
||||||
|
<config>
|
||||||
|
<type>input</type>
|
||||||
|
<size>10</size>
|
||||||
|
<max>30</max>
|
||||||
|
<eval>trim</eval>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.limit>
|
||||||
|
|
||||||
|
<settings.highlight>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Highlights only</label>
|
||||||
|
<config>
|
||||||
|
<type>check</type>
|
||||||
|
<default>0</default>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.highlight>
|
||||||
|
|
||||||
|
<settings.todayOnly>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Today only</label>
|
||||||
|
<config>
|
||||||
|
<type>check</type>
|
||||||
|
<default>0</default>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.todayOnly>
|
||||||
|
|
||||||
|
<settings.pagination>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Show pagination</label>
|
||||||
|
<config>
|
||||||
|
<type>check</type>
|
||||||
|
<default>0</default>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.pagination>
|
||||||
|
|
||||||
|
<settings.showPID>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Detail page</label>
|
||||||
|
<config>
|
||||||
|
<type>group</type>
|
||||||
|
<internal_type>db</internal_type>
|
||||||
|
<allowed>pages</allowed>
|
||||||
|
<size>1</size>
|
||||||
|
<maxitems>1</maxitems>
|
||||||
|
<minitems>0</minitems>
|
||||||
|
<show_thumbs>1</show_thumbs>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.showPID>
|
||||||
|
</el>
|
||||||
|
</ROOT>
|
||||||
|
</sDEF>
|
||||||
|
<sTemplate>
|
||||||
|
<ROOT>
|
||||||
|
<TCEforms>
|
||||||
|
<sheetTitle>Template</sheetTitle>
|
||||||
|
</TCEforms>
|
||||||
|
<type>array</type>
|
||||||
|
<el>
|
||||||
|
<settings.template>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Layout option</label>
|
||||||
|
<config>
|
||||||
|
<type>select</type>
|
||||||
|
<items type="array">
|
||||||
|
<numIndex index="0" type="array">
|
||||||
|
<numIndex index="0">Default</numIndex>
|
||||||
|
<numIndex index="1">default</numIndex>
|
||||||
|
</numIndex>
|
||||||
|
<numIndex index="1" type="array">
|
||||||
|
<numIndex index="0">Costum</numIndex>
|
||||||
|
<numIndex index="1">costum</numIndex>
|
||||||
|
</numIndex>
|
||||||
|
<numIndex index="2" type="array">
|
||||||
|
<numIndex index="0">Table</numIndex>
|
||||||
|
<numIndex index="1">table</numIndex>
|
||||||
|
</numIndex>
|
||||||
|
<numIndex index="3" type="array">
|
||||||
|
<numIndex index="0">Grid</numIndex>
|
||||||
|
<numIndex index="1">grid</numIndex>
|
||||||
|
</numIndex>
|
||||||
|
</items>
|
||||||
|
<default>default</default>
|
||||||
|
</config>
|
||||||
|
</settings.template>
|
||||||
|
</el>
|
||||||
|
</ROOT>
|
||||||
|
</sTemplate>
|
||||||
|
<sConstrains>
|
||||||
|
<ROOT>
|
||||||
|
<TCEforms>
|
||||||
|
<sheetTitle>Regions & Categories</sheetTitle>
|
||||||
|
</TCEforms>
|
||||||
|
<type>array</type>
|
||||||
|
<el>
|
||||||
|
<settings.region>
|
||||||
|
<TCEforms>
|
||||||
|
<label>Region</label>
|
||||||
|
<config>
|
||||||
|
<type>select</type>
|
||||||
|
<foreign_table>tx_events_domain_model_region</foreign_table>
|
||||||
|
<foreign_table_where>AND tx_events_domain_model_region.deleted = 0 AND tx_events_domain_model_region.hidden = 0</foreign_table_where>
|
||||||
|
<size>3</size>
|
||||||
|
<minitems>0</minitems>
|
||||||
|
<maxitems>2</maxitems>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.region>
|
||||||
|
|
||||||
|
<settings.categoryCombination>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Combination</label>
|
||||||
|
<config>
|
||||||
|
<type>select</type>
|
||||||
|
<items type="array">
|
||||||
|
<numIndex index="0" type="array">
|
||||||
|
<numIndex index="0">And</numIndex>
|
||||||
|
<numIndex index="1">0</numIndex>
|
||||||
|
</numIndex>
|
||||||
|
<numIndex index="1" type="array">
|
||||||
|
<numIndex index="0">Or</numIndex>
|
||||||
|
<numIndex index="1">1</numIndex>
|
||||||
|
</numIndex>
|
||||||
|
</items>
|
||||||
|
<default>0</default>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.categoryCombination>
|
||||||
|
|
||||||
|
<settings.categories>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>
|
||||||
|
Category
|
||||||
|
</label>
|
||||||
|
<config>
|
||||||
|
<type>select</type>
|
||||||
|
<autoSizeMax>20</autoSizeMax>
|
||||||
|
<foreign_table>sys_category</foreign_table>
|
||||||
|
<foreign_table_where> AND sys_category.sys_language_uid IN (-1, 0) ORDER BY sys_category.title ASC</foreign_table_where>
|
||||||
|
<maxitems>1</maxitems>
|
||||||
|
<renderMode>tree</renderMode>
|
||||||
|
<size>8</size>
|
||||||
|
<treeConfig>
|
||||||
|
<appearance>
|
||||||
|
<expandAll>1</expandAll>
|
||||||
|
<showHeader>1</showHeader>
|
||||||
|
</appearance>
|
||||||
|
<parentField>parent</parentField>
|
||||||
|
</treeConfig>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.categories>
|
||||||
|
|
||||||
|
<settings.includeSubcategories>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Include Subcategories</label>
|
||||||
|
<config>
|
||||||
|
<type>check</type>
|
||||||
|
<default>0</default>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.includeSubcategories>
|
||||||
|
</el>
|
||||||
|
</ROOT>
|
||||||
|
</sConstrains>
|
||||||
|
</sheets>
|
||||||
|
</T3DataStructure>
|
39
Configuration/FlexForms/DateSearch.xml
Normal file
39
Configuration/FlexForms/DateSearch.xml
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
<T3DataStructure>
|
||||||
|
<sheets>
|
||||||
|
<sSearch>
|
||||||
|
<ROOT>
|
||||||
|
<TCEforms>
|
||||||
|
<sheetTitle>Options</sheetTitle>
|
||||||
|
</TCEforms>
|
||||||
|
<type>array</type>
|
||||||
|
<el>
|
||||||
|
<settings.pageUid>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Results page</label>
|
||||||
|
<config>
|
||||||
|
<type>group</type>
|
||||||
|
<internal_type>db</internal_type>
|
||||||
|
<allowed>pages</allowed>
|
||||||
|
<size>1</size>
|
||||||
|
<maxitems>1</maxitems>
|
||||||
|
<minitems>0</minitems>
|
||||||
|
<show_thumbs>1</show_thumbs>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.pageUid>
|
||||||
|
<settings.showRegions>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Show Regions</label>
|
||||||
|
<config>
|
||||||
|
<type>check</type>
|
||||||
|
<default>0</default>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.showRegions>
|
||||||
|
</el>
|
||||||
|
</ROOT>
|
||||||
|
</sSearch>
|
||||||
|
</sheets>
|
||||||
|
</T3DataStructure>
|
57
Configuration/FlexForms/DateShow.xml
Normal file
57
Configuration/FlexForms/DateShow.xml
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
<T3DataStructure>
|
||||||
|
<sheets>
|
||||||
|
<sDEF>
|
||||||
|
<ROOT>
|
||||||
|
<TCEforms>
|
||||||
|
<sheetTitle>Options</sheetTitle>
|
||||||
|
</TCEforms>
|
||||||
|
<type>array</type>
|
||||||
|
<el>
|
||||||
|
<settings.backPID>
|
||||||
|
<TCEforms>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Back page</label>
|
||||||
|
<config>
|
||||||
|
<type>group</type>
|
||||||
|
<internal_type>db</internal_type>
|
||||||
|
<allowed>pages</allowed>
|
||||||
|
<size>1</size>
|
||||||
|
<maxitems>1</maxitems>
|
||||||
|
<minitems>0</minitems>
|
||||||
|
<show_thumbs>1</show_thumbs>
|
||||||
|
</config>
|
||||||
|
</TCEforms>
|
||||||
|
</settings.backPID>
|
||||||
|
</el>
|
||||||
|
</ROOT>
|
||||||
|
</sDEF>
|
||||||
|
<sTemplate>
|
||||||
|
<ROOT>
|
||||||
|
<TCEforms>
|
||||||
|
<sheetTitle>Template</sheetTitle>
|
||||||
|
</TCEforms>
|
||||||
|
<type>array</type>
|
||||||
|
<el>
|
||||||
|
<settings.template>
|
||||||
|
<exclude>1</exclude>
|
||||||
|
<label>Layout option</label>
|
||||||
|
<config>
|
||||||
|
<type>select</type>
|
||||||
|
<items type="array">
|
||||||
|
<numIndex index="0" type="array">
|
||||||
|
<numIndex index="0">Default</numIndex>
|
||||||
|
<numIndex index="1">default</numIndex>
|
||||||
|
</numIndex>
|
||||||
|
<numIndex index="1" type="array">
|
||||||
|
<numIndex index="0">Costum</numIndex>
|
||||||
|
<numIndex index="1">costum</numIndex>
|
||||||
|
</numIndex>
|
||||||
|
</items>
|
||||||
|
<default>default</default>
|
||||||
|
</config>
|
||||||
|
</settings.template>
|
||||||
|
</el>
|
||||||
|
</ROOT>
|
||||||
|
</sTemplate>
|
||||||
|
</sheets>
|
||||||
|
</T3DataStructure>
|
|
@ -20,5 +20,53 @@ call_user_func(function () {
|
||||||
'FILE:EXT:events/Configuration/FlexForms/Pi1.xml'
|
'FILE:EXT:events/Configuration/FlexForms/Pi1.xml'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Search Plugin */
|
||||||
|
|
||||||
|
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
|
||||||
|
'Wrm.Events',
|
||||||
|
'DateSearch',
|
||||||
|
'Events: Date Search',
|
||||||
|
'EXT:events/Resources/Public/Icons/user_plugin_events.svg'
|
||||||
|
);
|
||||||
|
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist']['events_datesearch'] = 'pi_flexform';
|
||||||
|
|
||||||
|
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
|
||||||
|
'events_datesearch',
|
||||||
|
'FILE:EXT:events/Configuration/FlexForms/DateSearch.xml'
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Date List Plugin */
|
||||||
|
|
||||||
|
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
|
||||||
|
'Wrm.Events',
|
||||||
|
'DateList',
|
||||||
|
'Events: Date List',
|
||||||
|
'EXT:events/Resources/Public/Icons/user_plugin_events.svg'
|
||||||
|
);
|
||||||
|
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist']['events_datelist'] = 'pi_flexform';
|
||||||
|
|
||||||
|
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
|
||||||
|
'events_datelist',
|
||||||
|
'FILE:EXT:events/Configuration/FlexForms/DateList.xml'
|
||||||
|
);
|
||||||
|
|
||||||
|
/* Date Show Plugin */
|
||||||
|
|
||||||
|
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
|
||||||
|
'Wrm.Events',
|
||||||
|
'DateShow',
|
||||||
|
'Events: Date Show',
|
||||||
|
'EXT:events/Resources/Public/Icons/user_plugin_events.svg'
|
||||||
|
);
|
||||||
|
|
||||||
|
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist']['events_dateshow'] = 'pi_flexform';
|
||||||
|
|
||||||
|
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
|
||||||
|
'events_dateshow',
|
||||||
|
'FILE:EXT:events/Configuration/FlexForms/DateShow.xml'
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -120,7 +120,7 @@ return [
|
||||||
'exclude' => true,
|
'exclude' => true,
|
||||||
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_date.start',
|
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_date.start',
|
||||||
'config' => [
|
'config' => [
|
||||||
'dbType' => 'datetime',
|
//'dbType' => 'datetime',
|
||||||
'type' => 'input',
|
'type' => 'input',
|
||||||
'renderType' => 'inputDateTime',
|
'renderType' => 'inputDateTime',
|
||||||
'size' => 12,
|
'size' => 12,
|
||||||
|
@ -132,7 +132,7 @@ return [
|
||||||
'exclude' => true,
|
'exclude' => true,
|
||||||
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_date.end',
|
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_date.end',
|
||||||
'config' => [
|
'config' => [
|
||||||
'dbType' => 'datetime',
|
//'dbType' => 'datetime',
|
||||||
'type' => 'input',
|
'type' => 'input',
|
||||||
'renderType' => 'inputDateTime',
|
'renderType' => 'inputDateTime',
|
||||||
'size' => 12,
|
'size' => 12,
|
||||||
|
@ -141,14 +141,6 @@ return [
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
|
||||||
/*
|
|
||||||
'event' => [
|
|
||||||
'config' => [
|
|
||||||
'type' => 'passthrough',
|
|
||||||
],
|
|
||||||
],
|
|
||||||
*/
|
|
||||||
|
|
||||||
'event' => array(
|
'event' => array(
|
||||||
'exclude' => 1,
|
'exclude' => 1,
|
||||||
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_date.event',
|
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_date.event',
|
||||||
|
|
|
@ -20,10 +20,10 @@ return [
|
||||||
'iconfile' => 'EXT:events/Resources/Public/Icons/tx_events_domain_model_event.gif'
|
'iconfile' => 'EXT:events/Resources/Public/Icons/tx_events_domain_model_event.gif'
|
||||||
],
|
],
|
||||||
'interface' => [
|
'interface' => [
|
||||||
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, global_id, slug, highlight, teaser, details, price_info, name, street, district, city, zip, country, web, booking, ticket, facebook, youtube, latitude, longitude, images, categories, dates, organizer, region',
|
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, global_id, slug, highlight, teaser, details, price_info, name, street, district, city, zip, country, phone, web, booking, ticket, facebook, youtube, latitude, longitude, images, categories, dates, organizer, region',
|
||||||
],
|
],
|
||||||
'types' => [
|
'types' => [
|
||||||
'1' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, global_id, slug, highlight, teaser, details, price_info, name, street, district, city, zip, country, web, booking, ticket, facebook, youtube, latitude, longitude, images, categories, dates, organizer, region, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
|
'1' => ['showitem' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, global_id, slug, highlight, teaser, details, price_info, name, street, district, city, zip, country, phone, web, booking, ticket, facebook, youtube, latitude, longitude, images, categories, dates, organizer, region, --div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime'],
|
||||||
],
|
],
|
||||||
'columns' => [
|
'columns' => [
|
||||||
'sys_language_uid' => [
|
'sys_language_uid' => [
|
||||||
|
@ -150,17 +150,6 @@ return [
|
||||||
'default' => '',
|
'default' => '',
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
/*
|
|
||||||
'slug' => [
|
|
||||||
'exclude' => true,
|
|
||||||
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_event.slug',
|
|
||||||
'config' => [
|
|
||||||
'type' => 'input',
|
|
||||||
'size' => 30,
|
|
||||||
'eval' => 'trim'
|
|
||||||
],
|
|
||||||
],
|
|
||||||
*/
|
|
||||||
'highlight' => [
|
'highlight' => [
|
||||||
'exclude' => true,
|
'exclude' => true,
|
||||||
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_event.highlight',
|
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_event.highlight',
|
||||||
|
@ -266,6 +255,15 @@ return [
|
||||||
'eval' => 'trim'
|
'eval' => 'trim'
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
|
'phone' => [
|
||||||
|
'exclude' => true,
|
||||||
|
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_event.phone',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'input',
|
||||||
|
'size' => 30,
|
||||||
|
'eval' => 'trim'
|
||||||
|
],
|
||||||
|
],
|
||||||
'web' => [
|
'web' => [
|
||||||
'exclude' => true,
|
'exclude' => true,
|
||||||
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_event.web',
|
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_event.web',
|
||||||
|
|
|
@ -13,6 +13,8 @@ plugin.tx_events {
|
||||||
storagePid =
|
storagePid =
|
||||||
}
|
}
|
||||||
settings {
|
settings {
|
||||||
|
# cat=plugin.tx_events//a; type=string; label=Default Image
|
||||||
|
defaultImagePath = typo3conf/ext/events/Resources/Public/Images/default.jpg
|
||||||
destinationData {
|
destinationData {
|
||||||
# cat=plugin.tx_events//a; type=string; label=Rest Url
|
# cat=plugin.tx_events//a; type=string; label=Rest Url
|
||||||
restUrl = http://meta.et4.de/rest.ashx/search/
|
restUrl = http://meta.et4.de/rest.ashx/search/
|
||||||
|
@ -21,11 +23,15 @@ plugin.tx_events {
|
||||||
# cat=plugin.tx_events//a; type=string; label=Data Type
|
# cat=plugin.tx_events//a; type=string; label=Data Type
|
||||||
restType = Event
|
restType = Event
|
||||||
# cat=plugin.tx_events//a; type=string; label=Data Limit
|
# cat=plugin.tx_events//a; type=string; label=Data Limit
|
||||||
restLimit = 200
|
restLimit = 500
|
||||||
|
# cat=plugin.tx_events//a; type=string; label=Mode
|
||||||
|
restMode = next_months,12
|
||||||
# cat=plugin.tx_events//a; type=string; label=Data Template
|
# cat=plugin.tx_events//a; type=string; label=Data Template
|
||||||
restTemplate = ET2014A.json
|
restTemplate = ET2014A.json
|
||||||
# cat=plugin.tx_events//a; type=string; Label=Category Storage
|
# cat=plugin.tx_events//a; type=string; Label=Category Storage
|
||||||
categoriesPid = 54
|
categoriesPid = 54
|
||||||
|
# cat=plugin.tx_events//a; type=string; Label=Category Parent ID
|
||||||
|
categoryParentUid = 6
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ plugin.tx_events {
|
||||||
|
|
||||||
defaulDetailEventsPid =
|
defaulDetailEventsPid =
|
||||||
defaultDetailDatesPid =
|
defaultDetailDatesPid =
|
||||||
|
defaultImagePath = {$plugin.tx_events.settings.defaultImagePath}
|
||||||
|
|
||||||
paginate {
|
paginate {
|
||||||
# can be overriden by plugin
|
# can be overriden by plugin
|
||||||
|
@ -50,8 +51,10 @@ plugin.tx_events {
|
||||||
license = {$plugin.tx_events.settings.destinationData.license}
|
license = {$plugin.tx_events.settings.destinationData.license}
|
||||||
restType = {$plugin.tx_events.settings.destinationData.restType}
|
restType = {$plugin.tx_events.settings.destinationData.restType}
|
||||||
restLimit = {$plugin.tx_events.settings.destinationData.restLimit}
|
restLimit = {$plugin.tx_events.settings.destinationData.restLimit}
|
||||||
|
restMode = {$plugin.tx_events.settings.destinationData.restMode}
|
||||||
restTemplate = {$plugin.tx_events.settings.destinationData.restTemplate}
|
restTemplate = {$plugin.tx_events.settings.destinationData.restTemplate}
|
||||||
categoriesPid = {$plugin.tx_events.settings.destinationData.categoriesPid}
|
categoriesPid = {$plugin.tx_events.settings.destinationData.categoriesPid}
|
||||||
|
categoryParentUid = {$plugin.tx_events.settings.destinationData.categoryParentUid}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,6 +48,9 @@
|
||||||
<trans-unit id="tx_events_domain_model_event.web">
|
<trans-unit id="tx_events_domain_model_event.web">
|
||||||
<source>Web</source>
|
<source>Web</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="tx_events_domain_model_event.phone">
|
||||||
|
<source>Phone</source>
|
||||||
|
</trans-unit>
|
||||||
<trans-unit id="tx_events_domain_model_event.booking">
|
<trans-unit id="tx_events_domain_model_event.booking">
|
||||||
<source>Booking</source>
|
<source>Booking</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|
|
@ -51,6 +51,9 @@
|
||||||
<trans-unit id="tx_events_domain_model_event.web">
|
<trans-unit id="tx_events_domain_model_event.web">
|
||||||
<source>Web</source>
|
<source>Web</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
<trans-unit id="tx_events_domain_model_event.phone">
|
||||||
|
<source>Phone</source>
|
||||||
|
</trans-unit>
|
||||||
<trans-unit id="tx_events_domain_model_event.booking">
|
<trans-unit id="tx_events_domain_model_event.booking">
|
||||||
<source>Booking</source>
|
<source>Booking</source>
|
||||||
</trans-unit>
|
</trans-unit>
|
||||||
|
|
|
@ -6,11 +6,13 @@
|
||||||
<f:if condition="{date.event.images}">
|
<f:if condition="{date.event.images}">
|
||||||
<f:then>
|
<f:then>
|
||||||
<f:link.action pageUid="{settings.showPID}" action="show" controller="Date" arguments="{date: date}">
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Date" arguments="{date: date}">
|
||||||
<f:image src="{date.event.images.originalResource.originalFile.uid}" alt="" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
<f:image src="{date.event.images.originalResource.originalFile.uid}" alt="{date.event.title}" title="{date.event.title}" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
</f:link.action>
|
</f:link.action>
|
||||||
</f:then>
|
</f:then>
|
||||||
<f:else>
|
<f:else>
|
||||||
<img src="https://dummyimage.com/480x320/ddd/ccc" alt="Dummy" width="480" height="320" class="img-fluid img-thumbnail"/>
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Date" arguments="{date: date}">
|
||||||
|
<f:image src="{settings.defaultImagePath}" alt="{date.event.title}" title="{date.event.title}" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
|
</f:link.action>
|
||||||
</f:else>
|
</f:else>
|
||||||
</f:if>
|
</f:if>
|
||||||
</div>
|
</div>
|
||||||
|
@ -19,11 +21,15 @@
|
||||||
{date.event.region.title} | <f:format.date format="d. m. Y - H:i">{date.start}</f:format.date>
|
{date.event.region.title} | <f:format.date format="d. m. Y - H:i">{date.start}</f:format.date>
|
||||||
<h4>{date.event.title}</h4>
|
<h4>{date.event.title}</h4>
|
||||||
<p>{date.event.teaser}</p>
|
<p>{date.event.teaser}</p>
|
||||||
|
<f:comment>
|
||||||
|
<!--
|
||||||
<f:if condition="{date.event.highlight}">
|
<f:if condition="{date.event.highlight}">
|
||||||
<f:then>
|
<f:then>
|
||||||
<b>Hightlight</b>
|
<b>Hightlight</b>
|
||||||
</f:then>
|
</f:then>
|
||||||
</f:if>
|
</f:if>
|
||||||
|
-->
|
||||||
|
</f:comment>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||||
|
|
||||||
|
|
||||||
<f:widget.paginate objects="{dates}" as="paginatedDates" configuration="{itemsPerPage: 25, insertAbove: 0, insertBelow: 1, maximumNumberOfLinks: 5}">
|
<f:widget.paginate objects="{dates}" as="paginatedDates" configuration="{itemsPerPage: 25, insertAbove: 0, insertBelow: 1, maximumNumberOfLinks: 5, addQueryStringMethod: 'POST,GET'}">
|
||||||
<f:for each="{paginatedDates}" as="date">
|
<f:for each="{paginatedDates}" as="date" iteration="index">
|
||||||
<div class="row mb-3">
|
<div class="row mt-3 mb-3 pb-3">
|
||||||
<div class="col-2">
|
<div class="col-2">
|
||||||
<b><f:format.date format="H:i">{date.start}</f:format.date></b><br>
|
<b><f:format.date format="H:i">{date.start}</f:format.date></b><br>
|
||||||
<b><f:format.date format="%a">{date.start}</f:format.date></b><br>
|
<b><f:format.date format="%a">{date.start}</f:format.date></b><br>
|
||||||
|
@ -11,28 +11,46 @@
|
||||||
{date.event.region.title}<br>
|
{date.event.region.title}<br>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-6">
|
<div class="col-6">
|
||||||
<h4>{date.event.title}</h4>
|
|
||||||
<h5>{date.event.teaser}</h5>
|
<f:comment>
|
||||||
<f:format.crop maxCharacters="150">{date.event.details}</f:format.crop>
|
<!--
|
||||||
<f:if condition="{date.event.highlight}">
|
<f:if condition="{date.event.highlight}">
|
||||||
<f:then>
|
<f:then>
|
||||||
<b>Hightlight</b>
|
<b>Highlight</b>
|
||||||
</f:then>
|
</f:then>
|
||||||
</f:if>
|
</f:if>
|
||||||
|
-->
|
||||||
|
</f:comment>
|
||||||
|
<h4>
|
||||||
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Date" arguments="{date: date}">
|
||||||
|
{date.event.title}
|
||||||
|
</f:link.action>
|
||||||
|
</h4>
|
||||||
|
<p><strong>{date.event.teaser}</strong></p>
|
||||||
|
<f:format.crop maxCharacters="150">{date.event.details}</f:format.crop>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-3">
|
<div class="col-4">
|
||||||
<f:if condition="{date.event.images}">
|
<f:if condition="{date.event.images}">
|
||||||
<f:then>
|
<f:then>
|
||||||
<f:link.action pageUid="{settings.showPID}" action="show" controller="Date" arguments="{date: date}">
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Date" arguments="{date: date}">
|
||||||
<f:image src="{date.event.images.originalResource.originalFile.uid}" alt="" width="480c" height="240c" class="img-fluid img-thumbnail"/>
|
<f:image src="{date.event.images.originalResource.originalFile.uid}" alt="" width="400c" height="280c" class="img-fluid img-thumbnail"/>
|
||||||
</f:link.action>
|
</f:link.action>
|
||||||
</f:then>
|
</f:then>
|
||||||
<f:else>
|
<f:else>
|
||||||
<img src="https://dummyimage.com/480x320/ddd/ccc" alt="Dummy" width="320" height="320" class="img-fluid img-thumbnail"/>
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Date" arguments="{date: date}">
|
||||||
|
<img src="{settings.defaultImagePath}" alt="Dummy" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
|
</f:link.action>
|
||||||
</f:else>
|
</f:else>
|
||||||
</f:if>
|
</f:if>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<f:if condition="{index.isLast}">
|
||||||
|
<f:then>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
<div class="mb-3 border-bottom"></div>
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
</f:for>
|
</f:for>
|
||||||
</f:widget.paginate>
|
</f:widget.paginate>
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
|
{namespace wrm=Wrm\Events\ViewHelpers}
|
||||||
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||||
<div class="row">
|
|
||||||
<div class="col-8 mb-5">
|
|
||||||
<!-- TODO bg color classes not loaded in scss -->
|
|
||||||
|
|
||||||
<f:form action="search" controller="Date" additionalAttributes="{role: 'form'}" method="get">
|
<div class="row">
|
||||||
|
<div class="col-12 mb-5">
|
||||||
|
<!-- TODO bg color classes not loaded in scss -->
|
||||||
|
<f:form action="list" controller="Date" pluginName="DateList" method="get" addQueryString="1" id="events_search" name="events_search">
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col">
|
<div class="col">
|
||||||
|
@ -60,6 +61,5 @@
|
||||||
<f:form.submit value="Suchen" class="btn btn-primary" />
|
<f:form.submit value="Suchen" class="btn btn-primary" />
|
||||||
</div>
|
</div>
|
||||||
</f:form>
|
</f:form>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -1,59 +1,75 @@
|
||||||
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||||
|
<f:layout name="Default" />
|
||||||
|
<f:section name="content">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 mb-5">
|
||||||
|
<f:form action="list" controller="Date" pluginName="DateList" method="get" id="events_search" name="events_search">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="searchword">Suchwort</label>
|
||||||
|
<f:form.textfield type="text" class="form-control" id="searchword" name="searchword" value="{searchword}" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<f:comment><!--
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="form-group form-check">
|
||||||
|
<f:form.checkbox class="form-check-input" id="considerDate" name="considerDate" value="1" checked="{considerDate} == 1" />
|
||||||
|
<label class="form-check-label" for="considerDate">Datum berücksichtigen?</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
--></f:comment>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="start">Datum von</label>
|
||||||
|
<div class="input-group date" id="date_start" data-target-input="nearest">
|
||||||
|
<f:form.textfield type="text" class="form-control datetimepicker-input" id="start" name="start" value="{start}" additionalAttributes="{data-target: '#date_start'}" />
|
||||||
|
<div class="input-group-append" data-target="#date_start" data-toggle="datetimepicker">
|
||||||
|
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col col-md-6">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="end">Datum bis</label>
|
||||||
|
<div class="input-group date" id="date_end" data-target-input="nearest">
|
||||||
|
<f:form.textfield type="text" class="form-control datetimepicker-input" id="start" name="end" value="{end}" additionalAttributes="{data-target: '#date_end'}" />
|
||||||
|
<div class="input-group-append" data-target="#date_end" data-toggle="datetimepicker">
|
||||||
|
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<f:if condition="{settings.showRegions}">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-4 col-md-3 col-lg-3">
|
||||||
|
<div class="form-check">
|
||||||
|
<f:form.radio class="form-check-input" name="region" value="{region.uid}" checked="{selRegion}==0" id="radio_0"/>
|
||||||
|
<label class="form-check-label" for="radio_0">Alle Städte</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<f:render partial="Date/SearchForm" arguments="{searchword: searchword, dates: dates, regions: regions, selRegion: selRegion, start: start, end: end}"/>
|
<f:for each="{regions}" as="region">
|
||||||
|
<div class="col-3">
|
||||||
<hr class="mt-2 mb-4">
|
<div class="form-check">
|
||||||
|
<f:form.radio class="form-check-input" name="region" value="{region.uid}" checked="{selRegion}=={region.uid}" id="radio_{region.uid}"/>
|
||||||
<f:widget.paginate objects="{dates}" as="paginatedDates" configuration="{itemsPerPage: 25, insertAbove: 0, insertBelow: 1, maximumNumberOfLinks: 5, addQueryStringMethod: 'POST,GET'}">
|
<label class="form-check-label" for="radio_{region.uid}">{region.title}</label>
|
||||||
<f:for each="{paginatedDates}" as="date" iteration="index">
|
|
||||||
<div class="row mt-3 mb-3 pb-3">
|
|
||||||
<div class="col-2">
|
|
||||||
<b><f:format.date format="H:i">{date.start}</f:format.date></b><br>
|
|
||||||
<b><f:format.date format="%a">{date.start}</f:format.date></b><br>
|
|
||||||
<b><f:format.date format="d.m.">{date.start}</f:format.date></b><br>
|
|
||||||
{date.event.region.title}<br>
|
|
||||||
</div>
|
|
||||||
<div class="col-6">
|
|
||||||
<f:if condition="{date.event.highlight}">
|
|
||||||
<f:then>
|
|
||||||
<b>Hightlight</b>
|
|
||||||
</f:then>
|
|
||||||
</f:if>
|
|
||||||
<h4>
|
|
||||||
<f:link.action pageUid="{settings.showPID}" action="show" controller="Date" arguments="{date: date}">
|
|
||||||
{date.event.title}
|
|
||||||
</f:link.action>
|
|
||||||
</h4>
|
|
||||||
<p><strong>{date.event.teaser}</strong></p>
|
|
||||||
<f:format.crop maxCharacters="150">{date.event.details}</f:format.crop>
|
|
||||||
<pre style="margin-top:15px; font-size:80%;">
|
|
||||||
DEBUGGING:
|
|
||||||
GLOBAL EVENT ID: {date.event.globalId}
|
|
||||||
</pre>
|
|
||||||
</div>
|
|
||||||
<div class="col-4">
|
|
||||||
<f:if condition="{date.event.images}">
|
|
||||||
<f:then>
|
|
||||||
<f:link.action pageUid="{settings.showPID}" action="show" controller="Date" arguments="{date: date}">
|
|
||||||
<f:image src="{date.event.images.originalResource.originalFile.uid}" alt="" width="400c" height="280c" class="img-fluid img-thumbnail"/>
|
|
||||||
</f:link.action>
|
|
||||||
</f:then>
|
|
||||||
<f:else>
|
|
||||||
<f:link.action pageUid="{settings.showPID}" action="show" controller="Date" arguments="{date: date}">
|
|
||||||
<img src="https://dummyimage.com/400x280/ddd/ccc" alt="Dummy" width="400" height="280" class="img-fluid img-thumbnail"/>
|
|
||||||
</f:link.action>
|
|
||||||
</f:else>
|
|
||||||
</f:if>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<f:if condition="{index.isLast}">
|
|
||||||
<f:then>
|
|
||||||
</f:then>
|
|
||||||
<f:else>
|
|
||||||
<div class="mb-3 border-bottom"></div>
|
|
||||||
</f:else>
|
|
||||||
</f:if>
|
|
||||||
</f:for>
|
</f:for>
|
||||||
</f:widget.paginate>
|
</div>
|
||||||
|
</f:if>
|
||||||
|
<div class="form-group mt-3">
|
||||||
|
<f:form.submit value="Suchen" class="btn btn-primary" />
|
||||||
|
</div>
|
||||||
|
</f:form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</f:section>
|
||||||
</html>
|
</html>
|
68
Resources/Private/Templates/Date/SearchHtml.html
Normal file
68
Resources/Private/Templates/Date/SearchHtml.html
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
|
||||||
|
<f:layout name="Default" />
|
||||||
|
<f:section name="content">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-12 mb-5">
|
||||||
|
<!-- TODO bg color classes not loaded in scss -->
|
||||||
|
<form action="{settings.resultPID}" controller="Date" extensionName="events" method="get" addQueryString="1" id="events_search" name="events_search">
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="searchword">Suchwort</label>
|
||||||
|
<input type="text" class="form-control" id="searchword" name="searchword" value="{searchword}" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="start">Datum von</label>
|
||||||
|
<div class="input-group date" id="date_start" data-target-input="nearest">
|
||||||
|
<input type="text" class="form-control datetimepicker-input" id="start" name="start" value="{start}" additionalAttributes="{data-target: '#date_start'}" />
|
||||||
|
<div class="input-group-append" data-target="#date_start" data-toggle="datetimepicker">
|
||||||
|
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="col">
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="end">Datum bis</label>
|
||||||
|
<div class="input-group date" id="date_end" data-target-input="nearest">
|
||||||
|
<input type="text" class="form-control datetimepicker-input" id="end" name="end" value="{end}" additionalAttributes="{data-target: '#date_end'}" />
|
||||||
|
<div class="input-group-append" data-target="#date_end" data-toggle="datetimepicker">
|
||||||
|
<div class="input-group-text"><i class="fa fa-calendar"></i></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-3">
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="radio" class="form-check-input" name="region" value="{region.uid}" checked="{selRegion}==0" id="radio_0"/>
|
||||||
|
<label class="form-check-label" for="radio_0">Alle Städte</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<f:for each="{regions}" as="region">
|
||||||
|
<div class="col-3">
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="radio" class="form-check-input" name="region" value="{region.uid}" checked="{selRegion}=={region.uid}" id="radio_{region.uid}"/>
|
||||||
|
<label class="form-check-label" for="radio_{region.uid}">{region.title}</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</f:for>
|
||||||
|
</div>
|
||||||
|
<div class="form-group mt-3">
|
||||||
|
<input type="submit" value="Suchen" class="btn btn-primary" />
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</f:section>
|
||||||
|
|
||||||
|
</html>
|
|
@ -8,7 +8,7 @@
|
||||||
<f:image src="{date.event.images.originalResource.originalFile.uid}" alt="" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
<f:image src="{date.event.images.originalResource.originalFile.uid}" alt="" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
</f:then>
|
</f:then>
|
||||||
<f:else>
|
<f:else>
|
||||||
<img src="https://dummyimage.com/480x320/ddd/ccc" alt="Dummy" width="480" height="320" class="img-fluid img-thumbnail"/>
|
<img src="{settings.defaultImagePath}" alt="Dummy" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
</f:else>
|
</f:else>
|
||||||
</f:if>
|
</f:if>
|
||||||
</div>
|
</div>
|
||||||
|
@ -23,15 +23,47 @@
|
||||||
<f:format.html>{date.event.details}</f:format.html>
|
<f:format.html>{date.event.details}</f:format.html>
|
||||||
<p>{event.price_info}</p>
|
<p>{event.price_info}</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col mt-3 mb-3">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-4">
|
<div class="col-4">
|
||||||
<p>Veranstaltungsort:<br>
|
<p><b>Preis:</b><br>
|
||||||
|
<f:if condition="{date.event.priceInfo}">
|
||||||
|
<f:then>
|
||||||
|
<f:format.nl2br>{date.event.priceInfo}</f:format.nl2br>
|
||||||
|
</f:then>
|
||||||
|
<f:else>
|
||||||
|
Keine Information
|
||||||
|
</f:else>
|
||||||
|
</f:if>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<f:if condition="{date.event.web}">
|
||||||
|
<p><b>Weitere Informationen:</b><br>
|
||||||
|
<a href="{date.event.web}" target="_blank">Website</a>
|
||||||
|
</p>
|
||||||
|
</f:if>
|
||||||
|
</div>
|
||||||
|
<div class="col-4">
|
||||||
|
<p><b>Veranstaltungsort:</b><br>
|
||||||
{date.event.street}<br>
|
{date.event.street}<br>
|
||||||
{date.event.zip} {date.event.city}<br>
|
{date.event.zip} {date.event.city}<br>
|
||||||
|
{date.event.phone}<br>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="col-4">
|
||||||
|
<p><b>Veranstalter:</b><br>
|
||||||
|
{date.event.organizer.name}<br>
|
||||||
|
{date.event.organizer.street}<br>
|
||||||
|
{date.event.organizer.zip} {date.event.organizer.city}<br>
|
||||||
|
{date.event.organizer.phone}<br>
|
||||||
|
<a href="{date.event.organizer.web}" target="_blank">Website</a>
|
||||||
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</f:section>
|
</f:section>
|
||||||
|
|
|
@ -13,11 +13,13 @@
|
||||||
<f:if condition="{date.event.images}">
|
<f:if condition="{date.event.images}">
|
||||||
<f:then>
|
<f:then>
|
||||||
<f:link.action pageUid="{settings.showPID}" action="show" controller="Event" arguments="{event: event}">
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Event" arguments="{event: event}">
|
||||||
<f:image src="{date.event.images.originalResource.originalFile.uid}" alt="" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
<f:image src="{date.event.images.originalResource.originalFile.uid}" alt="{date.event.title}" title="{date.event.title}" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
</f:link.action>
|
</f:link.action>
|
||||||
</f:then>
|
</f:then>
|
||||||
<f:else>
|
<f:else>
|
||||||
<img src="https://dummyimage.com/480x320/ddd/ccc" alt="Dummy" width="480" height="320" class="img-fluid img-thumbnail"/>
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Event" arguments="{event: event}">
|
||||||
|
<f:image src="{settings.defaultImagePath}" alt="{date.event.title}" title="{date.event.title}" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
|
</f:link.action>
|
||||||
</f:else>
|
</f:else>
|
||||||
</f:if>
|
</f:if>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -9,11 +9,13 @@
|
||||||
<f:if condition="{event.images}">
|
<f:if condition="{event.images}">
|
||||||
<f:then>
|
<f:then>
|
||||||
<f:link.action pageUid="{settings.showPID}" action="show" controller="Event" arguments="{event: event}">
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Event" arguments="{event: event}">
|
||||||
<f:image src="{event.images.originalResource.originalFile.uid}" alt="" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
<f:image src="{event.images.originalResource.originalFile.uid}" alt="{date.event.title}" title="{date.event.title}" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
</f:link.action>
|
</f:link.action>
|
||||||
</f:then>
|
</f:then>
|
||||||
<f:else>
|
<f:else>
|
||||||
<img src="https://dummyimage.com/480x320/ddd/ccc" alt="Dummy" width="480" height="320" class="img-fluid img-thumbnail"/>
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Event" arguments="{event: event}">
|
||||||
|
<f:image src="{settings.defaultImagePath}" alt="{date.event.title}" title="{date.event.title}" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
|
</f:link.action>
|
||||||
</f:else>
|
</f:else>
|
||||||
</f:if>
|
</f:if>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -11,7 +11,9 @@
|
||||||
</f:link.action>
|
</f:link.action>
|
||||||
</f:then>
|
</f:then>
|
||||||
<f:else>
|
<f:else>
|
||||||
<img src="https://dummyimage.com/480x320/ddd/ccc" alt="Dummy" width="480" height="320" class="img-fluid img-thumbnail"/>
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Event" arguments="{event: event}">
|
||||||
|
<img src="{settings.defaultImagePath}" alt="Dummy" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
|
</f:link.action>
|
||||||
</f:else>
|
</f:else>
|
||||||
</f:if>
|
</f:if>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -10,7 +10,9 @@
|
||||||
</f:link.action>
|
</f:link.action>
|
||||||
</f:then>
|
</f:then>
|
||||||
<f:else>
|
<f:else>
|
||||||
<img src="https://dummyimage.com/480x320/ddd/ccc" alt="Dummy" width="480" height="320" class="img-fluid img-thumbnail"/>
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Event" arguments="{event: event}">
|
||||||
|
<img src="{settings.defaultImagePath}" alt="Dummy" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
|
</f:link.action>
|
||||||
</f:else>
|
</f:else>
|
||||||
</f:if>
|
</f:if>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -9,11 +9,13 @@
|
||||||
<f:if condition="{event.images}">
|
<f:if condition="{event.images}">
|
||||||
<f:then>
|
<f:then>
|
||||||
<f:link.action pageUid="{settings.showPID}" action="show" controller="Event" arguments="{event: event}">
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Event" arguments="{event: event}">
|
||||||
<f:image src="{event.images.originalResource.originalFile.uid}" alt="" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
<f:image src="{event.images.originalResource.originalFile.uid}" alt="{date.event.title}" title="{date.event.title}" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
</f:link.action>
|
</f:link.action>
|
||||||
</f:then>
|
</f:then>
|
||||||
<f:else>
|
<f:else>
|
||||||
<img src="https://dummyimage.com/480x320/ddd/ccc" alt="Dummy" width="480" height="320" class="img-fluid img-thumbnail"/>
|
<f:link.action pageUid="{settings.showPID}" action="show" controller="Event" arguments="{event: event}">
|
||||||
|
<f:image src="{settings.defaultImagePath}" alt="{date.event.title}" title="{date.event.title}" width="480c" height="320c" class="img-fluid img-thumbnail"/>
|
||||||
|
</f:link.action>
|
||||||
</f:else>
|
</f:else>
|
||||||
</f:if>
|
</f:if>
|
||||||
</div>
|
</div>
|
||||||
|
|
BIN
Resources/Public/Images/default.jpg
Normal file
BIN
Resources/Public/Images/default.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
|
@ -5,6 +5,7 @@ call_user_func(
|
||||||
function()
|
function()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
|
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
|
||||||
'Wrm.Events',
|
'Wrm.Events',
|
||||||
'Pi1',
|
'Pi1',
|
||||||
|
@ -17,6 +18,49 @@ call_user_func(
|
||||||
'Date' => 'teaser, list, show, search'
|
'Date' => 'teaser, list, show, search'
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
*/
|
||||||
|
|
||||||
|
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
|
||||||
|
'Wrm.Events',
|
||||||
|
'DateSearch',
|
||||||
|
[
|
||||||
|
'Date' => 'search'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'Date' => 'search'
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
|
||||||
|
'Wrm.Events',
|
||||||
|
'DateList',
|
||||||
|
[
|
||||||
|
'Date' => 'list'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'Date' => 'list'
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
|
||||||
|
'Wrm.Events',
|
||||||
|
'DateShow',
|
||||||
|
[
|
||||||
|
'Date' => 'show'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'Date' => 'show'
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
/*
|
||||||
|
$iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class);
|
||||||
|
|
||||||
|
$iconRegistry->registerIcon(
|
||||||
|
'events-plugin',
|
||||||
|
\TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class,
|
||||||
|
['source' => 'EXT:events/Resources/Public/Icons/user_plugin_events.svg']
|
||||||
|
);
|
||||||
|
|
||||||
// wizards
|
// wizards
|
||||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig(
|
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig(
|
||||||
|
@ -37,14 +81,6 @@ call_user_func(
|
||||||
}
|
}
|
||||||
}'
|
}'
|
||||||
);
|
);
|
||||||
|
*/
|
||||||
$iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class);
|
|
||||||
|
|
||||||
$iconRegistry->registerIcon(
|
|
||||||
'events-plugin',
|
|
||||||
\TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class,
|
|
||||||
['source' => 'EXT:events/Resources/Public/Icons/user_plugin_events.svg']
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -28,6 +28,31 @@ CREATE TABLE tx_events_domain_model_event (
|
||||||
dates int(11) unsigned DEFAULT '0' NOT NULL,
|
dates int(11) unsigned DEFAULT '0' NOT NULL,
|
||||||
organizer int(11) unsigned DEFAULT '0',
|
organizer int(11) unsigned DEFAULT '0',
|
||||||
region int(11) unsigned DEFAULT '0',
|
region int(11) unsigned DEFAULT '0',
|
||||||
|
title varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
global_id varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
slug varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
highlight smallint(5) unsigned DEFAULT '0' NOT NULL,
|
||||||
|
teaser text,
|
||||||
|
details text,
|
||||||
|
price_info text,
|
||||||
|
street varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
district varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
city varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
zip varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
country varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
web varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
phone varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
booking varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
ticket varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
facebook varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
youtube varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
latitude varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
longitude varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
images int(11) unsigned NOT NULL default '0',
|
||||||
|
categories int(11) DEFAULT '0' NOT NULL,
|
||||||
|
dates int(11) unsigned DEFAULT '0' NOT NULL,
|
||||||
|
organizer int(11) unsigned DEFAULT '0',
|
||||||
|
region int(11) unsigned DEFAULT '0',
|
||||||
|
|
||||||
KEY dataHandler (l10n_parent, t3ver_oid, deleted, t3ver_wsid, t3ver_state)
|
KEY dataHandler (l10n_parent, t3ver_oid, deleted, t3ver_wsid, t3ver_state)
|
||||||
);
|
);
|
||||||
|
@ -53,12 +78,9 @@ CREATE TABLE tx_events_domain_model_organizer (
|
||||||
# Table structure for table 'tx_events_domain_model_date'
|
# Table structure for table 'tx_events_domain_model_date'
|
||||||
#
|
#
|
||||||
CREATE TABLE tx_events_domain_model_date (
|
CREATE TABLE tx_events_domain_model_date (
|
||||||
|
|
||||||
event int(11) unsigned DEFAULT '0' NOT NULL,
|
event int(11) unsigned DEFAULT '0' NOT NULL,
|
||||||
|
start int(11) DEFAULT NULL,
|
||||||
start datetime DEFAULT NULL,
|
end int(11) DEFAULT NULL,
|
||||||
end datetime DEFAULT NULL,
|
|
||||||
|
|
||||||
KEY event (event),
|
KEY event (event),
|
||||||
KEY dataHandler (event, t3ver_wsid, pid)
|
KEY dataHandler (event, t3ver_wsid, pid)
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in a new issue