This commit is contained in:
Dirk 2020-08-17 14:26:38 +02:00
commit 552986b2aa
35 changed files with 1076 additions and 431 deletions

View file

@ -23,29 +23,23 @@ class DestinationDataImportCommand extends Command {
'storage-pid',
InputArgument::OPTIONAL,
'What is the storage pid?',
'281'
'284'
);
$this->addArgument(
'region-uid',
InputArgument::OPTIONAL,
'What is the region uid?',
'3'
);
$this->addArgument(
'category-parent-uid',
InputArgument::OPTIONAL,
'What is the default category parent uid?',
'6'
);
$this->addArgument('rest-experience',
InputArgument::OPTIONAL,
'What is the rest experience?',
'arnstadt'
'stadtmarketing-erfurt'
);
$this->addArgument('files-folder',
InputArgument::OPTIONAL,
'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('storage-pid'),
$input->getArgument('region-uid'),
$input->getArgument('category-parent-uid'),
$input->getArgument('files-folder')
);
}

View file

@ -1,6 +1,7 @@
<?php
namespace Wrm\Events\Controller;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use Wrm\Events\Domain\Model\Dto\DateDemand;
use Wrm\Events\Domain\Repository\DateRepository;
use Wrm\Events\Domain\Repository\RegionRepository;
@ -63,8 +64,17 @@ class DateController extends ActionController
*/
public function listAction()
{
$demand = $this->createDemandFromSettings();
$dates = $this->dateRepository->findByDemand($demand);
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();
$dates = $this->dateRepository->findByDemand($demand);
}
$this->view->assign('dates', $dates);
}
@ -73,42 +83,21 @@ class DateController extends ActionController
*/
public function searchAction()
{
$searchword = null;
$regions = null;
$selRegion = null;
$dates = null;
$start = null;
$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);
$arguments = GeneralUtility::_GET('tx_events_datelist');
$searchword = $arguments['searchword'];
$selRegion = $arguments['region'];
$start = $arguments['start'];
$end = $arguments['end'];
$considerDate = $arguments['considerDate'];
$regions = $this->regionRepository->findAll();
$this->view->assign('regions', $regions);
$this->view->assign('searchword', $searchword);
$this->view->assign('regions', $regions);
$this->view->assign('selRegion', $selRegion);
$this->view->assign('dates', $dates);
$this->view->assign('start', $start);
$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') != '')
$demand->setSearchword((string)$this->request->getArgument('searchword'));
if ($this->request->hasArgument('start') && $this->request->getArgument('start') != '') {
$demand->setStart(date( "Y-m-d", strtotime( $this->request->getArgument('start'))));
}
if ($this->request->hasArgument('start') && $this->request->getArgument('start') != '')
$demand->setStart(strtotime($this->request->getArgument('start') . ' 00:00'));
if ($this->request->hasArgument('end') && $this->request->getArgument('end') != '') {
$demand->setEnd(date( "Y-m-d", strtotime( $this->request->getArgument('end'))));
}
if ($this->request->hasArgument('end') && $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->setSortOrder((string)$this->settings['sortOrder']);

View file

@ -49,10 +49,10 @@ class Date extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity
}
/**
* @param string $end
* @param \DateTime $end
* @return void
*/
public function setEnd($end)
public function setEnd(\DateTime $end)
{
$this->end = $end;
}

View file

@ -59,6 +59,11 @@ class DateDemand {
*/
protected $searchword = '';
/**
* @var bool
*/
protected $considerDate = 0;
/**
* @return string
*/
@ -235,4 +240,20 @@ class DateDemand {
$this->end = $end;
}
/**
* @return bool
*/
public function getConsiderDate(): bool
{
return $this->considerDate;
}
/**
* @param bool $considerDate
*/
public function setConsiderDate(string $considerDate): void
{
$this->considerDate = $considerDate;
}
}

View file

@ -105,6 +105,13 @@ class Event extends AbstractEntity
*/
protected $country = '';
/**
* web
*
* @var string
*/
protected $phone = '';
/**
* web
*
@ -381,6 +388,22 @@ class Event extends AbstractEntity
$this->zip = $zip;
}
/**
* @return string
*/
public function getPhone()
{
return $this->phone;
}
/**
* @param string $phone
*/
public function setPhone($phone)
{
$this->phone = $phone;
}
/**
* @return string $web
*/

View file

@ -38,7 +38,7 @@ class DateRepository extends \TYPO3\CMS\Extbase\Persistence\Repository
// For testing purposes
// $query = $this->createDemandQueryViaBuilder($demand);
//return $query->execute()->fetchAll();
// return $query->execute()->fetchAll();
}
/**
@ -82,9 +82,12 @@ class DateRepository extends \TYPO3\CMS\Extbase\Persistence\Repository
$constraints['daterange'] = $query->logicalAnd(
[
$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() !== '') {

View file

@ -42,6 +42,10 @@ class DestinationDataImportService {
* @var
*/
protected $restLimit;
/**
* @var
*/
protected $restMode;
/**
* @var
*/
@ -185,27 +189,27 @@ class DestinationDataImportService {
);
// Set properties
$this->restUrl = $this->settings['destinationData']['restUrl'];
$this->restLicenseKey = $this->settings['destinationData']['license'];
$this->restType = $this->settings['destinationData']['restType'];
$this->restLimit = $this->settings['destinationData']['restLimit'];
$this->restTemplate = $this->settings['destinationData']['restTemplate'];
$this->sysCategoriesPid = $this->settings['destinationData']['categoriesPid'];
$this->restUrl = $this->settings['destinationData']['restUrl'];
$this->restLicenseKey = $this->settings['destinationData']['license'];
$this->restType = $this->settings['destinationData']['restType'];
$this->restLimit = $this->settings['destinationData']['restLimit'];
$this->restMode = $this->settings['destinationData']['restMode'];
$this->restTemplate = $this->settings['destinationData']['restTemplate'];
$this->sysCategoriesPid = $this->settings['destinationData']['categoriesPid'];
$this->categoryParentUid = $this->settings['destinationData']['categoryParentUid'];
}
/**
* @param $restExperience
* @param $storagePid
* @param $regionUid
* @param $categoryParentUid
* @param $filesFolder
*/
public function import($restExperience, $storagePid, $regionUid, $categoryParentUid, $filesFolder) {
public function import($restExperience, $storagePid, $regionUid, $filesFolder) {
$this->restExperience = $restExperience;
$this->storagePid = $storagePid;
$this->regionUid = $regionUid;
$this->categoryParentUid = $categoryParentUid;
$this->filesFolder = $filesFolder;
// Get configuration
@ -222,16 +226,14 @@ class DestinationDataImportService {
// Set Configuration
$this->configurationManager->setConfiguration(array_merge($frameworkConfiguration, $persistenceConfiguration));
$this->logger = GeneralUtility::makeInstance(LogManager::class)->getLogger(__CLASS__);
$this->logger->info('Starting Destination Data Import Service');
$restUrl = $this->restUrl . '?experience=' . $this->restExperience . '&licensekey=' . $this->restLicenseKey . '&type=' . $this->restType . '&limit=' . $this->restLimit . '&template=' . $this->restTemplate;
$restUrl = $this->restUrl . '?experience=' . $this->restExperience . '&licensekey=' . $this->restLicenseKey . '&type=' . $this->restType . '&mode=' . $this->restMode . '&limit=' . $this->restLimit . '&template=' . $this->restTemplate;
$this->logger->info('Try to get data from ' . $restUrl);
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);
} else {
$this->logger->error('Could not receive data.');
@ -246,7 +248,9 @@ class DestinationDataImportService {
*/
public function processData($data) {
// Get seleceted region
$this->logger->info('Processing json ' . count($data['items']));
// Get selected region
$selectedRegion = $this->regionRepository->findByUid($this->regionUid);
foreach ($data['items'] as $event) {
@ -271,8 +275,9 @@ class DestinationDataImportService {
$this->setTexts($event['texts']);
// 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
if($event['geo']['main']['latitude'] && $event['geo']['main']['longitude'])
@ -301,10 +306,12 @@ class DestinationDataImportService {
}
$this->doSlugUpdate();
$this->logger->info('Finished import');
return 0;
}
/**
*
* @param array $categories
*/
protected function setCategories(Array $categories) {
@ -331,7 +338,7 @@ class DestinationDataImportService {
*/
protected function setDates(Array $timeIntervals) {
// TODO: does not seem to work -->
// @TODO: does not seem to work -->
//$currentEventDates = $this->tmpCurrentEvent->getDates();
//$this->tmpCurrentEvent->removeAllDates($currentEventDates);
// <--
@ -341,19 +348,18 @@ class DestinationDataImportService {
$this->logger->info('Found ' . count($currentEventDates) . ' to delete');
foreach ($currentEventDates as $currentDate) {
//$this->logger->info('Delete ' . $currentDate->getStart()->format('Y-m-d'));
$this->dateRepository->remove($currentDate);
}
$now = new \DateTime();
$now = $now->getTimestamp();
$today = new \DateTime('today');
$today = $today->getTimestamp();
foreach ($timeIntervals as $date) {
// Check if dates are given as interval or not
if (empty($date['interval'])) {
if (strtotime($date['start']) > $now) {
if (strtotime($date['start']) > $today) {
$this->logger->info('Setup single date');
$dateObj = $this->objectManager->get(\Wrm\Events\Domain\Model\Date::class);
$start = new \DateTime($date['start'], new \DateTimeZone($date['tz']));
@ -367,16 +373,16 @@ class DestinationDataImportService {
} else {
if ($date['freq'] == 'Daily' && empty($date['weekdays'])) {
if ($date['freq'] == 'Daily' && empty($date['weekdays']) && !empty($date['repeatUntil'])) {
$this->logger->info('Setup daily interval dates');
$this->logger->info('Start ' . $date['start']);
$this->logger->info('End ' . $date['repeatUntil']);
$start = new \DateTime($date['start'], 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)) {
if ($i > $now) {
if ($i >= $today) {
$eventStart = new \DateTime();
$eventStart->setTimestamp($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) {
$this->logger->info('Setup weekly interval dates for ' . $day);
$this->logger->info('Start ' . $date['start']);
@ -402,7 +407,7 @@ class DestinationDataImportService {
$until = new \DateTime($date['repeatUntil'], new \DateTimeZone($date['tz']));
for($i = strtotime($day, $start->getTimestamp()); $i <= $until->getTimestamp(); $i = strtotime('+1 week', $i)) {
if ($i > $now) {
if ($i >= $today) {
$eventStart = new \DateTime();
$eventStart->setTimestamp($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);
continue;
}
$tmpOrganizer = $this->objectManager->get(\Wrm\Events\Domain\Model\Organizer::class);
$tmpOrganizer->setName($address['name']);
$tmpOrganizer->setCity($address['city']);
$tmpOrganizer->setZip($address['zip']);
@ -447,27 +448,30 @@ class DestinationDataImportService {
$tmpOrganizer->setWeb($address['web']);
$tmpOrganizer->setEmail($address['email']);
$tmpOrganizer->setDistrict($address['district']);
$this->organizerRepository->add($tmpOrganizer);
$this->tmpCurrentEvent->setOrganizer($tmpOrganizer);
}
}
}
/**
* @param string $name
* @param string $street
* @param string $city
* @param string $zip
* @param string $country
* @param array $event
*/
protected function setAddress(String $name, String $street, String $city, String $zip, String $country) {
$this->tmpCurrentEvent->setName($name);
$this->tmpCurrentEvent->setStreet($street);
$this->tmpCurrentEvent->setCity($city);
$this->tmpCurrentEvent->setZip($zip);
$this->tmpCurrentEvent->setCountry($country);
protected function setAddress(Array $event) {
if (!empty($event['name']))
$this->tmpCurrentEvent->setName($event['name']);
if (!empty($event['street']))
$this->tmpCurrentEvent->setStreet($event['street']);
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") {
$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) {
$this->logger->info("Set assets");
$error = false;
foreach ($assets as $media_object)
@ -536,6 +545,11 @@ class DestinationDataImportService {
$this->storage = $this->resourceFactory->getDefaultStorage();
if ($this->storage == null) {
$this->logger->error('No default storage defined. Cancel import.');
die();
}
// Check if file already exists
if (file_exists($this->environment->getPublicPath() . '/fileadmin/' . $this->filesFolder . strtolower(basename($media_object['url'])))) {
$this->logger->info('File already exists');
@ -634,7 +648,6 @@ class DestinationDataImportService {
*/
protected function doSlugUpdate()
{
$this->logger->info('Update slugs');
$slugHelper = GeneralUtility::makeInstance(
@ -674,4 +687,4 @@ class DestinationDataImportService {
return true;
}
}
}

View file

@ -0,0 +1,9 @@
<?php
namespace Wrm\Events\ViewHelpers;
class FormViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\FormViewHelper {
protected function renderHiddenReferrerFields(){
return '';
}
}

View 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 &amp; 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>

View 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>

View 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>

View file

@ -20,5 +20,53 @@ call_user_func(function () {
'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'
);
});

View file

@ -120,7 +120,7 @@ return [
'exclude' => true,
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_date.start',
'config' => [
'dbType' => 'datetime',
//'dbType' => 'datetime',
'type' => 'input',
'renderType' => 'inputDateTime',
'size' => 12,
@ -132,7 +132,7 @@ return [
'exclude' => true,
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_date.end',
'config' => [
'dbType' => 'datetime',
//'dbType' => 'datetime',
'type' => 'input',
'renderType' => 'inputDateTime',
'size' => 12,
@ -141,14 +141,6 @@ return [
],
],
/*
'event' => [
'config' => [
'type' => 'passthrough',
],
],
*/
'event' => array(
'exclude' => 1,
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_date.event',

View file

@ -20,10 +20,10 @@ return [
'iconfile' => 'EXT:events/Resources/Public/Icons/tx_events_domain_model_event.gif'
],
'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' => [
'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' => [
'sys_language_uid' => [
@ -150,17 +150,6 @@ return [
'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' => [
'exclude' => true,
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_event.highlight',
@ -266,6 +255,15 @@ return [
'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' => [
'exclude' => true,
'label' => 'LLL:EXT:events/Resources/Private/Language/locallang_db.xlf:tx_events_domain_model_event.web',

View file

@ -13,6 +13,8 @@ plugin.tx_events {
storagePid =
}
settings {
# cat=plugin.tx_events//a; type=string; label=Default Image
defaultImagePath = typo3conf/ext/events/Resources/Public/Images/default.jpg
destinationData {
# cat=plugin.tx_events//a; type=string; label=Rest Url
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
restType = Event
# 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
restTemplate = ET2014A.json
# cat=plugin.tx_events//a; type=string; Label=Category Storage
categoriesPid = 54
# cat=plugin.tx_events//a; type=string; Label=Category Parent ID
categoryParentUid = 6
}
}
}

View file

@ -36,6 +36,7 @@ plugin.tx_events {
defaulDetailEventsPid =
defaultDetailDatesPid =
defaultImagePath = {$plugin.tx_events.settings.defaultImagePath}
paginate {
# can be overriden by plugin
@ -50,10 +51,12 @@ plugin.tx_events {
license = {$plugin.tx_events.settings.destinationData.license}
restType = {$plugin.tx_events.settings.destinationData.restType}
restLimit = {$plugin.tx_events.settings.destinationData.restLimit}
restMode = {$plugin.tx_events.settings.destinationData.restMode}
restTemplate = {$plugin.tx_events.settings.destinationData.restTemplate}
categoriesPid = {$plugin.tx_events.settings.destinationData.categoriesPid}
categoryParentUid = {$plugin.tx_events.settings.destinationData.categoryParentUid}
}
}
}
module.tx_events < plugin.tx_events
module.tx_events < plugin.tx_events

View file

@ -48,6 +48,9 @@
<trans-unit id="tx_events_domain_model_event.web">
<source>Web</source>
</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">
<source>Booking</source>
</trans-unit>
@ -125,4 +128,4 @@
</trans-unit>
</body>
</file>
</xliff>
</xliff>

View file

@ -51,6 +51,9 @@
<trans-unit id="tx_events_domain_model_event.web">
<source>Web</source>
</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">
<source>Booking</source>
</trans-unit>
@ -137,4 +140,4 @@
</trans-unit>
</body>
</file>
</xliff>
</xliff>

View file

@ -1,5 +1,5 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<div class="tx-events">
<f:render section="content" />
</div>
<div class="tx-events">
<f:render section="content" />
</div>
</html>

View file

@ -6,11 +6,13 @@
<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="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:then>
<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:if>
</div>
@ -19,14 +21,18 @@
{date.event.region.title} | <f:format.date format="d. m. Y - H:i">{date.start}</f:format.date>
<h4>{date.event.title}</h4>
<p>{date.event.teaser}</p>
<f:if condition="{date.event.highlight}">
<f:then>
<b>Hightlight</b>
</f:then>
</f:if>
<f:comment>
<!--
<f:if condition="{date.event.highlight}">
<f:then>
<b>Hightlight</b>
</f:then>
</f:if>
-->
</f:comment>
</div>
</div>
</div>
</f:for>
</div>
</html>
</html>

View file

@ -1,9 +1,9 @@
<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:for each="{paginatedDates}" as="date">
<div class="row mb-3">
<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" 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>
@ -11,29 +11,47 @@
{date.event.region.title}<br>
</div>
<div class="col-6">
<h4>{date.event.title}</h4>
<h5>{date.event.teaser}</h5>
<f:format.crop maxCharacters="150">{date.event.details}</f:format.crop>
<f:comment>
<!--
<f:if condition="{date.event.highlight}">
<f:then>
<b>Hightlight</b>
<b>Highlight</b>
</f:then>
</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 class="col-3">
<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="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:then>
<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:if>
</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:widget.paginate>
</html>
</html>

View file

@ -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">
<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="col">
@ -60,6 +61,5 @@
<f:form.submit value="Suchen" class="btn btn-primary" />
</div>
</f:form>
</div>
</div>

View file

@ -1,16 +1,16 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<f:layout name="Default" />
<f:section name="content">
<f:switch expression="{settings.template}">
<f:case value="table">
<f:render partial="Date/ListTable" arguments="{dates:dates}" />
</f:case>
<f:case value="grid">
<f:render partial="Date/ListDefault" arguments="{dates:dates}" />
</f:case>
<f:defaultCase>
<f:render partial="Date/ListDefault" arguments="{dates:dates}" />
</f:defaultCase>
</f:switch>
</f:section>
<f:layout name="Default" />
<f:section name="content">
<f:switch expression="{settings.template}">
<f:case value="table">
<f:render partial="Date/ListTable" arguments="{dates:dates}" />
</f:case>
<f:case value="grid">
<f:render partial="Date/ListDefault" arguments="{dates:dates}" />
</f:case>
<f:defaultCase>
<f:render partial="Date/ListDefault" arguments="{dates:dates}" />
</f:defaultCase>
</f:switch>
</f:section>
</html>

View file

@ -1,59 +1,75 @@
<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}"/>
<hr class="mt-2 mb-4">
<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" 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:for each="{regions}" as="region">
<div class="col-3">
<div class="form-check">
<f:form.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>
</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 class="form-group mt-3">
<f:form.submit value="Suchen" class="btn btn-primary" />
</div>
</f:form>
</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:widget.paginate>
</html>
</div>
</f:section>
</html>

View 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>

View file

@ -1,38 +1,70 @@
<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-6">
<f:if condition="{date.event.images}">
<f:then>
<f:image src="{date.event.images.originalResource.originalFile.uid}" alt="" width="480c" height="320c" class="img-fluid img-thumbnail"/>
</f:then>
<f:else>
<img src="https://dummyimage.com/480x320/ddd/ccc" alt="Dummy" width="480" height="320" class="img-fluid img-thumbnail"/>
</f:else>
</f:if>
</div>
<div class="col-6">
<h4>
<f:format.date format="%a">{date.start}</f:format.date>
<f:format.date format="d.m.">{date.start}</f:format.date>
<f:format.date format="H:i">{date.start}</f:format.date> Uhr
</h4>
<h2>{date.event.title}</h2>
<h3>{date.event.teaser}</h3>
<f:format.html>{date.event.details}</f:format.html>
<p>{event.price_info}</p>
<f:layout name="Default" />
<f:section name="content">
<div class="row">
<div class="col-6">
<f:if condition="{date.event.images}">
<f:then>
<f:image src="{date.event.images.originalResource.originalFile.uid}" alt="" width="480c" height="320c" class="img-fluid img-thumbnail"/>
</f:then>
<f:else>
<img src="{settings.defaultImagePath}" alt="Dummy" width="480c" height="320c" class="img-fluid img-thumbnail"/>
</f:else>
</f:if>
</div>
<div class="col-6">
<h4>
<f:format.date format="%a">{date.start}</f:format.date>
<f:format.date format="d.m.">{date.start}</f:format.date>
<f:format.date format="H:i">{date.start}</f:format.date> Uhr
</h4>
<h2>{date.event.title}</h2>
<h3>{date.event.teaser}</h3>
<f:format.html>{date.event.details}</f:format.html>
<p>{event.price_info}</p>
<div class="row">
<div class="col-4">
<p>Veranstaltungsort:<br>
{date.event.street}<br>
{date.event.zip} {date.event.city}<br>
</p>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col mt-3 mb-3">
</div>
</div>
</f:section>
</html>
</div>
</div>
<div class="row">
<div class="col-4">
<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.zip} {date.event.city}<br>
{date.event.phone}<br>
</p>
</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>
</f:section>
</html>

View file

@ -13,11 +13,13 @@
<f:if condition="{date.event.images}">
<f:then>
<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:then>
<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:if>
</div>

View file

@ -1,31 +1,33 @@
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<f:layout name="Default" />
<f:layout name="Default" />
<f:section name="content">
<div class="row">
<f:for each="{events}" as="event">
<div class="col-sm-12 col-md-6 col-lg-4 col-xl-4">
<div class="menu-tile">
<f:if condition="{event.images}">
<f:then>
<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:link.action>
</f:then>
<f:else>
<img src="https://dummyimage.com/480x320/ddd/ccc" alt="Dummy" width="480" height="320" class="img-fluid img-thumbnail"/>
</f:else>
</f:if>
</div>
<div class="caption">
<div class="caption-text mt-3">
{event.region.title}
<h4>{event.title}</h4>
<p>{event.teaser}</p>
</div>
</div>
</div>
</f:for>
</div>
</f:section>
<f:section name="content">
<div class="row">
<f:for each="{events}" as="event">
<div class="col-sm-12 col-md-6 col-lg-4 col-xl-4">
<div class="menu-tile">
<f:if condition="{event.images}">
<f:then>
<f:link.action pageUid="{settings.showPID}" action="show" controller="Event" arguments="{event: event}">
<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:then>
<f:else>
<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:if>
</div>
<div class="caption">
<div class="caption-text mt-3">
{event.region.title}
<h4>{event.title}</h4>
<p>{event.teaser}</p>
</div>
</div>
</div>
</f:for>
</div>
</f:section>
</html>

View file

@ -11,7 +11,9 @@
</f:link.action>
</f:then>
<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:if>
</div>

View file

@ -1,35 +1,37 @@
<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-6">
<f:if condition="{event.images}">
<f:then>
<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:link.action>
</f:then>
<f:else>
<img src="https://dummyimage.com/480x320/ddd/ccc" alt="Dummy" width="480" height="320" class="img-fluid img-thumbnail"/>
</f:else>
</f:if>
</div>
<div class="col-6">
<h2>{event.title}</h2>
<h3>{event.teaser}</h3>
<f:format.html>{event.details}</f:format.html>
<p>{event.price_info}</p>
<f:layout name="Default" />
<f:section name="content">
<div class="row">
<div class="col-6">
<f:if condition="{event.images}">
<f:then>
<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:link.action>
</f:then>
<f:else>
<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:if>
</div>
<div class="col-6">
<h2>{event.title}</h2>
<h3>{event.teaser}</h3>
<f:format.html>{event.details}</f:format.html>
<p>{event.price_info}</p>
<div class="row">
<div class="col-4">
<p>Veranstaltungsort:<br>
{event.street}<br>
{event.zip} {event.city}<br>
</p>
</div>
</div>
<div class="row">
<div class="col-4">
<p>Veranstaltungsort:<br>
{event.street}<br>
{event.zip} {event.city}<br>
</p>
</div>
</div>
</div>
</div>
</f:section>
</div>
</div>
</f:section>
</html>

View file

@ -9,11 +9,13 @@
<f:if condition="{event.images}">
<f:then>
<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:then>
<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:if>
</div>

View file

@ -1,91 +1,91 @@
<f:if condition="{configuration.insertAbove}">
<f:render section="paginator" arguments="{pagination: pagination, configuration: configuration}" />
<f:render section="paginator" arguments="{pagination: pagination, configuration: configuration}" />
</f:if>
<f:renderChildren arguments="{contentArguments}" />
<f:if condition="{configuration.insertBelow}">
<f:render section="paginator" arguments="{pagination: pagination, configuration: configuration}" />
<f:render section="paginator" arguments="{pagination: pagination, configuration: configuration}" />
</f:if>
<f:section name="paginator">
<nav>
<ul class="pagination">
<f:if condition="{pagination.previousPage}">
<li class="page-item">
<f:if condition="{pagination.previousPage} > 1">
<f:then>
<f:widget.link class="page-link" rel="prev"
arguments="{currentPage: pagination.previousPage}"
addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}"><span aria-hidden="true">&laquo;</span>
</f:widget.link>
</f:then>
<f:else>
<f:widget.link class="page-link" rel="prev"
addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}"><span aria-hidden="true">&laquo;</span>
</f:widget.link>
</f:else>
</f:if>
</li>
</f:if>
<f:if condition="{pagination.displayRangeStart} > 1">
<li class="page-item">
<f:widget.link class="page-link" addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}">1
</f:widget.link>
</li>
</f:if>
<f:if condition="{pagination.hasLessPages}">
<li class="page-item"><span class="page-link"></span></li>
</f:if>
<f:for each="{pagination.pages}" as="page">
<f:if condition="{page.isCurrent}">
<f:then>
<li class="page-item active">
<span class="page-link">{page.number}</span>
</li>
</f:then>
<f:else>
<li class="page-item">
<f:if condition="{page.number} > 1">
<f:then>
<f:widget.link class="page-link" arguments="{currentPage: page.number}"
addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}">{page.number}
</f:widget.link>
</f:then>
<f:else>
<f:widget.link class="page-link"
addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}">{page.number}
</f:widget.link>
</f:else>
</f:if>
</li>
</f:else>
</f:if>
</f:for>
<f:if condition="{pagination.hasMorePages}">
<li class="page-item"><span class="page-link"></span></li>
</f:if>
<f:if condition="{pagination.displayRangeEnd} < {pagination.numberOfPages}">
<li class="page-item">
<f:widget.link class="page-link" arguments="{currentPage: pagination.numberOfPages}"
addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}">{pagination.numberOfPages}
</f:widget.link>
</li>
</f:if>
<f:if condition="{pagination.nextPage}">
<li class="page-item">
<f:widget.link class="page-link" rel="next" arguments="{currentPage: pagination.nextPage}"
addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}"><span aria-hidden="true">&raquo;</span>
</f:widget.link>
</li>
</f:if>
</ul>
</nav>
<nav>
<ul class="pagination">
<f:if condition="{pagination.previousPage}">
<li class="page-item">
<f:if condition="{pagination.previousPage} > 1">
<f:then>
<f:widget.link class="page-link" rel="prev"
arguments="{currentPage: pagination.previousPage}"
addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}"><span aria-hidden="true">&laquo;</span>
</f:widget.link>
</f:then>
<f:else>
<f:widget.link class="page-link" rel="prev"
addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}"><span aria-hidden="true">&laquo;</span>
</f:widget.link>
</f:else>
</f:if>
</li>
</f:if>
<f:if condition="{pagination.displayRangeStart} > 1">
<li class="page-item">
<f:widget.link class="page-link" addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}">1
</f:widget.link>
</li>
</f:if>
<f:if condition="{pagination.hasLessPages}">
<li class="page-item"><span class="page-link"></span></li>
</f:if>
<f:for each="{pagination.pages}" as="page">
<f:if condition="{page.isCurrent}">
<f:then>
<li class="page-item active">
<span class="page-link">{page.number}</span>
</li>
</f:then>
<f:else>
<li class="page-item">
<f:if condition="{page.number} > 1">
<f:then>
<f:widget.link class="page-link" arguments="{currentPage: page.number}"
addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}">{page.number}
</f:widget.link>
</f:then>
<f:else>
<f:widget.link class="page-link"
addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}">{page.number}
</f:widget.link>
</f:else>
</f:if>
</li>
</f:else>
</f:if>
</f:for>
<f:if condition="{pagination.hasMorePages}">
<li class="page-item"><span class="page-link"></span></li>
</f:if>
<f:if condition="{pagination.displayRangeEnd} < {pagination.numberOfPages}">
<li class="page-item">
<f:widget.link class="page-link" arguments="{currentPage: pagination.numberOfPages}"
addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}">{pagination.numberOfPages}
</f:widget.link>
</li>
</f:if>
<f:if condition="{pagination.nextPage}">
<li class="page-item">
<f:widget.link class="page-link" rel="next" arguments="{currentPage: pagination.nextPage}"
addQueryStringMethod="{configuration.addQueryStringMethod}"
section="{configuration.section}"><span aria-hidden="true">&raquo;</span>
</f:widget.link>
</li>
</f:if>
</ul>
</nav>
</f:section>

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View file

@ -5,6 +5,7 @@ call_user_func(
function()
{
/*
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'Wrm.Events',
'Pi1',
@ -17,6 +18,49 @@ call_user_func(
'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
\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']
);
*/
}
);

View file

@ -28,8 +28,33 @@ CREATE TABLE tx_events_domain_model_event (
dates int(11) unsigned DEFAULT '0' NOT NULL,
organizer 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)
);
#
@ -37,30 +62,27 @@ CREATE TABLE tx_events_domain_model_event (
#
CREATE TABLE tx_events_domain_model_organizer (
name varchar(255) DEFAULT '' NOT NULL,
street varchar(255) DEFAULT '' NOT NULL,
district varchar(255) DEFAULT '' NOT NULL,
city varchar(255) DEFAULT '' NOT NULL,
zip varchar(255) DEFAULT '' NOT NULL,
phone varchar(255) DEFAULT '' NOT NULL,
web varchar(255) DEFAULT '' NOT NULL,
email varchar(255) DEFAULT '' NOT NULL,
name varchar(255) DEFAULT '' NOT NULL,
street varchar(255) DEFAULT '' NOT NULL,
district varchar(255) DEFAULT '' NOT NULL,
city varchar(255) DEFAULT '' NOT NULL,
zip varchar(255) DEFAULT '' NOT NULL,
phone varchar(255) DEFAULT '' NOT NULL,
web varchar(255) DEFAULT '' NOT NULL,
email varchar(255) DEFAULT '' NOT NULL,
KEY dataHandler (l10n_parent, sys_language_uid, deleted)
KEY dataHandler (l10n_parent, sys_language_uid, deleted)
);
#
# Table structure for table 'tx_events_domain_model_date'
#
CREATE TABLE tx_events_domain_model_date (
event int(11) unsigned DEFAULT '0' NOT NULL,
start datetime DEFAULT NULL,
end datetime DEFAULT NULL,
KEY event (event),
KEY dataHandler (event, t3ver_wsid, pid)
event int(11) unsigned DEFAULT '0' NOT NULL,
start int(11) DEFAULT NULL,
end int(11) DEFAULT NULL,
KEY event (event),
KEY dataHandler (event, t3ver_wsid, pid)
);
#
@ -68,7 +90,7 @@ CREATE TABLE tx_events_domain_model_date (
#
CREATE TABLE tx_events_domain_model_region (
title varchar(255) DEFAULT '' NOT NULL,
title varchar(255) DEFAULT '' NOT NULL,
);
@ -77,6 +99,6 @@ CREATE TABLE tx_events_domain_model_region (
#
CREATE TABLE tx_events_domain_model_date (
event int(11) unsigned DEFAULT '0' NOT NULL,
event int(11) unsigned DEFAULT '0' NOT NULL,
);