Update to TYPO3 8.7 LTS

This commit is contained in:
Björn Fromme
2018-09-19 14:55:28 +02:00
parent af44d29340
commit f20c91846a
161 changed files with 3236 additions and 2705 deletions
@@ -79,7 +79,11 @@ class SliderProcessor implements DataProcessorInterface
foreach ($slides as $slide)
{
$processedData['slides'][$slide['uid']] = $slide;
$processedData['slides'][$slide['uid']]['image'] = $fileRepository->findByRelation('tx_eptheme_domain_model_slide', 'images', $slide['uid']);
$processedData['slides'][$slide['uid']]['image'] = $fileRepository->findByRelation(
'tx_eptheme_domain_model_slide',
'images',
$slide['uid']
);
}
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -28,22 +28,39 @@ namespace EP\EpTheme\ViewHelpers;
***************************************************************/
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class ArgumentPrefixViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('pluginName', 'string', 'Plugin name');
$this->registerArgument('extensionName', 'string', 'Extension name');
}
/**
* @param string $pluginName
* @param string $extensionName
*
* @return string
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public function render($pluginName = null, $extensionName = null)
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$request = $this->controllerContext->getRequest();
$request = $renderingContext->getControllerContext()->getRequest();
$pluginName = $arguments['pluginName'];
if ($pluginName === null) {
$pluginName = $request->getPluginName();
}
$extensionName = $arguments['extensionName'];
if ($extensionName === null) {
$extensionName = $request->getControllerExtensionName();
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers\Calendar;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -32,22 +32,54 @@ use CalendR\Period\Day;
use CalendR\Period\Month;
use EP\EpProducts\Domain\Model\Contingent;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class ContingentViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* @var bool
*/
protected $escapeOutput = false;
const LEVEL_GREEN = 1;
const LEVEL_YELLOW = 2;
const LEVEL_RED = 3;
public function render(Month $month, Day $day, Basic $events)
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('month', Month::class, 'The month', true);
$this->registerArgument('day', Day::class, 'The day', true);
$this->registerArgument('events', Basic::class, 'The calendar events', true);
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$month = $arguments['month'];
$day = $arguments['day'];
$events = $arguments['events'];
if (!$month->includes($day)) {
return '';
}
$now = new \DateTime('now');
if ($now > $day->getBegin()) {
$class = [ 'text-muted' ];
return $this->getHtml($class, $day->format('d'));
return static::getHtml($class, $day->format('d'));
}
$contingents = $events->find($day);
if (count($contingents) === 0) {
@@ -57,7 +89,7 @@ class ContingentViewHelper extends AbstractViewHelper
$contingent = reset($contingents);
$percentage = $contingent->getPercentageAvailable();
$status = $contingent->getStatus();
$level = $this->getOccupancyLevel($percentage, $status);
$level = static::getOccupancyLevel($percentage, $status);
}
$previousDay = $day->getPrevious();
$previousContingents = $events->find($previousDay);
@@ -67,16 +99,16 @@ class ContingentViewHelper extends AbstractViewHelper
$previousContingent = reset($previousContingents);
$previousPercentage = $previousContingent->getPercentageAvailable();
$previousStatus = $previousContingent->getStatus();
$previousLevel = $this->getOccupancyLevel($previousPercentage, $previousStatus);
$previousLevel = static::getOccupancyLevel($previousPercentage, $previousStatus);
}
if ($previousLevel !== $level) {
$class = $this->getTransientLabelClasses($previousLevel, $level);
$class = static::getTransientLabelClasses($previousLevel, $level);
} else {
$class = $this->getLabelClasses($percentage, $level);
$class = static::getLabelClasses($percentage, $level);
}
return $this->getHtml($class, $day->format('d'));
return static::getHtml($class, $day->format('d'));
}
/**
@@ -85,9 +117,9 @@ class ContingentViewHelper extends AbstractViewHelper
*
* @return array
*/
protected function getLabelClasses($percentage, $level)
protected static function getLabelClasses($percentage, $level)
{
$classes = $this->getTransientLabelClasses($level);
$classes = static::getTransientLabelClasses($level);
$classes[] = 'available-' . $percentage;
return $classes;
}
@@ -98,7 +130,7 @@ class ContingentViewHelper extends AbstractViewHelper
*
* @return array
*/
protected function getTransientLabelClasses($levelFrom, $levelTo = null)
protected static function getTransientLabelClasses($levelFrom, $levelTo = null)
{
$classes = [ 'label' ];
if ($levelFrom === static::LEVEL_RED) {
@@ -125,7 +157,7 @@ class ContingentViewHelper extends AbstractViewHelper
*
* @return int
*/
protected function getOccupancyLevel($percentage, $status)
protected static function getOccupancyLevel($percentage, $status)
{
if ($percentage <= 20 || $status === Contingent::STATUS_BLOCKED) {
return static::LEVEL_RED;
@@ -141,7 +173,7 @@ class ContingentViewHelper extends AbstractViewHelper
* @param string $label
* @return string
*/
protected function getHtml(array $class, $label)
protected static function getHtml(array $class, $label)
{
$cssClass = ' class="' . implode(' ', $class) . '"';
return sprintf('<span%s>%s</span>', $cssClass, $label);
@@ -34,6 +34,7 @@ class IncludesViewHelper extends AbstractConditionViewHelper
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('range', 'object', 'Range to check against', true);
$this->registerArgument('period', 'object', 'Period to check if it is included in range', true);
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -29,17 +29,35 @@ namespace EP\EpTheme\ViewHelpers;
use EP\EpProducts\Domain\Model\Hotel;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class ComfortCategoryViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('hotel', Hotel::class, 'The hotel');
}
/**
* @param Hotel $hotel
*
* @return string
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public function render(Hotel $hotel)
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
/** @var Hotel $hotel */
$hotel = $arguments['hotel'];
$flag = '<span class="category-flag" data-toggle="tooltip" title="%s">%s</span>';
switch ($hotel->getCategory())
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -28,38 +28,63 @@ namespace EP\EpTheme\ViewHelpers;
***************************************************************/
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class ContainerViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* @var bool
*/
protected $escapeOutput = false;
/**
* @var array
*/
protected $columnsWithoutContainers = [ 0, 1, 3 ];
protected static $columnsWithoutContainers = [ 0, 1, 3 ];
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('content', 'string', 'The content');
$this->registerArgument('cssClasses', 'string', 'Additional css classes');
$this->registerArgument('data', 'Array', 'The data', true);
}
/**
* @param array $data
* @param string $content
* @param string $cssClasses
*
* @return string
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public function render(array $data, $content = null, $cssClasses = null)
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$content = $renderChildrenClosure();
if ($content === null) {
$content = $this->renderChildren();
$content = $arguments['content'];
}
$classes = [];
if (in_array($data['colPos'], $this->columnsWithoutContainers, false)) {
if (in_array($arguments['data']['colPos'], static::$columnsWithoutContainers, false)) {
$classes[] = 'container';
} else {
$classes[] = 'in-column';
}
if ($cssClasses !== null) {
$classes[] = $cssClasses;
if ($arguments['cssClasses'] !== null) {
$classes[] = $arguments['cssClasses'];
}
if (count($classes) > 0) {
return '<div class="' . implode(' ', $classes) . '">' . $content . '</div>';
}
return $content;
}
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -28,23 +28,38 @@ namespace EP\EpTheme\ViewHelpers;
***************************************************************/
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class ContextClassesViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('context', 'Array', 'The context', true);
}
/**
* @param array $context
*
* @return string
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public function render(array $context)
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$classes = [];
if (isset($context['country'])) {
$classes[] = mb_strtolower($context['country']['name']);
if (isset($arguments['context']['country'])) {
$classes[] = mb_strtolower($arguments['context']['country']['name']);
}
if (isset($context['region'])) {
$classes[] = mb_strtolower($context['region']['name']);
if (isset($arguments['context']['region'])) {
$classes[] = mb_strtolower($arguments['context']['region']['name']);
}
$classesString = implode(' ', $classes);
@@ -53,5 +68,4 @@ class ContextClassesViewHelper extends AbstractViewHelper
return $classesString;
}
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -29,21 +29,40 @@ namespace EP\EpTheme\ViewHelpers;
use EP\EpProducts\Utility\DateUtility;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class DateRangeViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* @param \DateTime $dateFrom
* @param \DateTime $dateTo
* @param bool $includeLabel
* @param string $format
*
* @return string
*/
public function render(\DateTime $dateFrom = null, \DateTime $dateTo = null, $includeLabel = true, $format = 'd.m.Y')
public function initializeArguments()
{
return DateUtility::formatDateRange($dateFrom, $dateTo, $includeLabel, $format);
parent::initializeArguments();
$this->registerArgument('dateFrom', \DateTime::class, 'Date range start');
$this->registerArgument('dateTo', \DateTime::class, 'Date range end');
$this->registerArgument('includeLabel', 'Bool', 'Whether to include a label', false, true);
$this->registerArgument('format', 'String', 'The date format', false, 'd.m.Y');
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
return DateUtility::formatDateRange(
$arguments['dateFrom'],
$arguments['dateTo'],
$arguments['includeLabel'],
$arguments['format']
);
}
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -30,24 +30,47 @@ namespace EP\EpTheme\ViewHelpers;
use EP\EpProducts\Service\FilterSettingsEncoder;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class FilterSettingsEncoderViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* @param string $argument
*
* @return string
* @var bool
*/
public function render($argument = null)
protected $escapeOutput = false;
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('argument', 'string', 'The argument string to encode');
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$argument = $renderChildrenClosure();
if ($argument === null) {
$argument = $this->renderChildren();
$argument = $arguments['argument'];
}
if ($argument === null) {
return '';
}
/** @var \EP\EpProducts\Service\FilterSettingsEncoder $encoder */
$encoder = GeneralUtility::makeInstance(FilterSettingsEncoder::class);
return $encoder->encode($argument);
return $encoder::encode($argument);
}
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -29,26 +29,41 @@ namespace EP\EpTheme\ViewHelpers;
use EP\EpProducts\Domain\Model\Country;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class FlagiconSourceViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('countryCode', 'string', 'Country code to return a flag icon source for.');
$this->registerArgument('country', 'object', 'Country entity to return a flag icon source for.');
$this->registerArgument('country', 'mixed', 'Country entity to return a flag icon source for.');
}
public function render()
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$code = null;
if (is_object($this->arguments['country']) && $this->arguments['country'] instanceof Country) {
if (\is_object($arguments['country']) && $arguments['country'] instanceof Country) {
/** @var \EP\EpProducts\Domain\Model\Country $country */
$country = $this->arguments['country'];
$country = $arguments['country'];
$code = strtolower($country->getCode());
} elseif (!empty($this->arguments['countryCode'])) {
$code = strtolower($this->arguments['countryCode']);
} elseif (!empty($arguments['countryCode'])) {
$code = strtolower($arguments['countryCode']);
}
if ($code !== null) {
@@ -57,5 +72,4 @@ class FlagiconSourceViewHelper extends AbstractViewHelper
return '';
}
}
@@ -1,89 +0,0 @@
<?php
namespace EP\EpTheme\ViewHelpers;
/***************************************************************
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
use EP\EpProducts\Domain\Model\Hotel;
use EP\EpProducts\Domain\Model\Region;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
class GmapsStaticMapViewHelper extends AbstractViewHelper
{
const URLBASE = '%s&center=%s,%s&zoom=%d&size=%dx%d';
/**
* @var ConfigurationManagerInterface
*/
protected $configurationManager;
/**
* @var array
*/
protected $settings = [];
/**
* @param ConfigurationManagerInterface $manager
* @return void
*/
public function injectConfigurationManager(ConfigurationManagerInterface $manager)
{
$this->configurationManager = $manager;
$settings = GeneralUtility::removeDotsFromTS(
$this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT)
);
$this->settings = $settings['plugin']['tx_eptheme']['settings'];
}
/**
* @param Hotel $hotel
* @param Region $region
* @param int $zoom
* @param int $width
* @param int $height
*
* @return string
*/
public function render(Hotel $hotel = null, Region $region = null, $zoom = 10, $width = 0, $height = 0)
{
if ($hotel !== null && $hotel->getLatitude() && $hotel->getLongitude()) {
$source = $hotel;
} elseif ($hotel !== null && $hotel->getRegion()->getLatitude() && $hotel->getRegion()->getLongitude()) {
$source = $hotel->getRegion();
} elseif ($region !== null) {
$source = $region;
} else {
return '';
}
$staticMapsBaseUrl = $this->settings['googleStaticMapsBaseUrl'];
$url = sprintf(static::URLBASE, $staticMapsBaseUrl, $source->getLatitude(), $source->getLongitude(), $zoom, $width, $height);
$tag = sprintf('<img class="scale" src="%s" alt="%s" title="%s"/>', $url, $source->getName(), $source->getName());
return $tag;
}
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -30,21 +30,44 @@ namespace EP\EpTheme\ViewHelpers;
use EP\EpProducts\Domain\Model\Hotel;
use EP\EpProducts\Domain\Model\Region;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class GmapsUrlViewHelper extends AbstractViewHelper
{
const URLBASE = 'http://maps.google.com/maps?q=%s,%s&t=%s&z=%d';
use CompileWithRenderStatic;
/**
* @param Hotel $hotel
* @param Region $region
* @param string $type
* @param int $zoom
*
* @return string
* @var bool
*/
public function render(Hotel $hotel = null, Region $region = null, $type = 'p', $zoom = 10)
protected $escapeOutput = false;
const URLBASE = 'http://maps.google.com/maps?q=%s,%s&t=%s&z=%d';
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('hotel', Hotel::class, 'The hotel');
$this->registerArgument('region', Region::class, 'The region');
$this->registerArgument('type', 'string', 'The map type', false, 'p');
$this->registerArgument('zoom', 'int', 'The zoom level', false, 10);
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$hotel = $arguments['hotel'];
$region = $arguments['region'];
if ($hotel !== null && $hotel->getLatitude() && $hotel->getLongitude()) {
$source = $hotel;
} elseif ($hotel !== null && $hotel->getRegion()->getLatitude() && $hotel->getRegion()->getLongitude()) {
@@ -54,6 +77,7 @@ class GmapsUrlViewHelper extends AbstractViewHelper
} else {
return 'http://www.google.de/maps';
}
return sprintf(static::URLBASE, $source->getLatitude(), $source->getLongitude(), $type, $zoom);
return sprintf(static::URLBASE, $source->getLatitude(), $source->getLongitude(), $arguments['type'], $arguments['zoom']);
}
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -27,19 +27,35 @@ namespace EP\EpTheme\ViewHelpers;
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
use EP\EpProducts\Domain\Model\Hotel;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class HotelCategoriesViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('categories', 'array', 'The categories', true);
}
/**
* @param array $categories
*
* @return string
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public function render($categories)
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$categories = $arguments['categories'];
switch (count($categories)) {
case 1:
$label = reset($categories);
@@ -52,4 +68,5 @@ class HotelCategoriesViewHelper extends AbstractViewHelper
return $label;
}
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -29,9 +29,13 @@ namespace EP\EpTheme\ViewHelpers;
use EP\EpProducts\Domain\Model\Hotel;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class HotelCategoryViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* @var array
*/
@@ -42,13 +46,28 @@ class HotelCategoryViewHelper extends AbstractViewHelper
Hotel::CATEGORY_SUPER_DELUXE => 'Super Deluxe',
];
/**
* @param int $category
*
* @return string
*/
public function render($category)
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('category', 'int', 'The category id', true);
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$category = $arguments['category'];
return static::$categoryLabels[$category];
}
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -28,17 +28,33 @@ namespace EP\EpTheme\ViewHelpers;
***************************************************************/
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class NightsOptionsViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('options', 'array', 'The options');
}
/**
* @param array $options
*
* @return string
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public function render(array $options = null)
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$options = $arguments['options'];
if ($options === null) {
return '';
}
@@ -54,6 +70,7 @@ class NightsOptionsViewHelper extends AbstractViewHelper
$output = $lastOption;
}
$output .= (int) $lastOption > 1 ? ' Nächte' : ' Nacht';
return $output;
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -29,17 +29,41 @@ namespace EP\EpTheme\ViewHelpers;
use EP\EpProducts\Domain\Model\Product;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class RatingViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* @param Product $product
*
* @return string
* @var bool
*/
public function render(Product $product)
protected $escapeOutput = false;
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('product', Product::class, 'The product', true);
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$product = $renderChildrenClosure();
if ($product === null) {
$product = $arguments['product'];
}
$ratingAverage = $product->getRatingAverage();
$ratingVotesCount = $product->getRatingVotesCount();
$fullStars = floor($ratingAverage);
@@ -55,6 +79,7 @@ class RatingViewHelper extends AbstractViewHelper
$content .= '<i class="fa fa-star-half-o" aria-hidden="true"></i>';
}
$content .= sprintf('%s Sterne (%d)', $ratingAverageLabel, $ratingVotesCount);
return $content;
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -28,27 +28,48 @@ namespace EP\EpTheme\ViewHelpers;
***************************************************************/
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class TopnavItemViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* @param string $item
*
* @return string
* @var bool
*/
public function render($item = null)
{
if ($item === null) {
$item = $this->renderChildren();
}
protected $escapeOutput = false;
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('item', 'string', 'The navigation item');
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$item = $renderChildrenClosure();
if ($item === null) {
$item = $arguments['item'];
}
$parts = explode(' ', $item);
if (count($parts) === 1) {
return $item;
}
$hiddenMobileText = array_shift($parts);
$linkText = implode(' ', $parts);
return '<span class="hidden-md">' . $hiddenMobileText . '</span> ' . $linkText;
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers\Uri;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -27,9 +27,8 @@ namespace EP\EpTheme\ViewHelpers\Uri;
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
use TYPO3\CMS\Fluid\ViewHelpers\Uri\ActionViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
class AjaxViewHelper extends ActionViewHelper
{
@@ -37,58 +36,40 @@ class AjaxViewHelper extends ActionViewHelper
const PAGE_TYPE_JSON = 1701;
const PAGE_TYPE_HTML = 1702;
/**
* @var array
*/
protected $settings;
/**
* @param ConfigurationManagerInterface $manager
*/
public function injectConfigurationManager(ConfigurationManagerInterface $manager)
public function initializeArguments()
{
$configurationManager = $manager;
$settings = GeneralUtility::removeDotsFromTS($configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT));
$this->settings = $settings['plugin']['tx_eptheme']['settings'];
parent::initializeArguments();
$this->overrideArgument('extensionName', 'string', 'Target extension name', false, 'epproducts');
$this->overrideArgument('pluginName', 'string', 'Target plugin name', false, 'Ajax');
$this->overrideArgument('format', 'string', 'The requested format', false, 'json');
}
/**
* @param string $action Target action
* @param array $arguments Arguments
* @param string $controller Target controller. If NULL current controllerName is used
* @param string $extensionName Target Extension Name (without "tx_" prefix and no underscores). If NULL the current extension name is used
* @param string $pluginName Target plugin. If empty, the current plugin name is used
* @param int $pageUid target page. See TypoLink destination
* @param int $pageType type of the target page. See typolink.parameter
* @param bool $noCache set this to disable caching for the target page. You should not need this.
* @param bool $noCacheHash set this to suppress the cHash query parameter created by TypoLink. You should not need this.
* @param string $section the anchor to be added to the URI
* @param string $format The requested format, e.g. ".html
* @param bool $linkAccessRestrictedPages If set, links pointing to access restricted pages will still link to the page even though the page cannot be accessed.
* @param array $additionalParams additional query parameters that won't be prefixed like $arguments (overrule $arguments)
* @param bool $absolute If set, an absolute URI is rendered
* @param bool $addQueryString If set, the current query parameters will be kept in the URI
* @param array $argumentsToBeExcludedFromQueryString arguments to be removed from the URI. Only active if $addQueryString = TRUE
* @param string $addQueryStringMethod Set which parameters will be kept. Only active if $addQueryString = TRUE
*
* @return string Rendered link
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return string
*/
public function render($action = null, array $arguments = array(), $controller = null, $extensionName = 'epproducts', $pluginName = 'Ajax', $pageUid = null, $pageType = 0, $noCache = false, $noCacheHash = true, $section = '', $format = 'json', $linkAccessRestrictedPages = false, array $additionalParams = array(), $absolute = false, $addQueryString = false, array $argumentsToBeExcludedFromQueryString = array(), $addQueryStringMethod = null)
public static function renderStatic
(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
if (array_key_exists('defaultAjaxUid', $this->settings)) {
$pageUid = $this->settings['defaultAjaxUid'];
}
if (strtolower(trim($format)) === 'json') {
$pageType = self::PAGE_TYPE_JSON;
if (strtolower(trim($arguments['format'])) === 'json') {
$arguments['pageType'] = self::PAGE_TYPE_JSON;
} else {
$pageType = self::PAGE_TYPE_HTML;
$arguments['pageType'] = self::PAGE_TYPE_HTML;
}
if ($pageUid === null) {
if ($arguments['pageUid'] === null) {
$rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($GLOBALS['TSFE']->id);
$rootPage = array_pop($rootLine);
$pageUid = $rootPage['uid'];
$arguments['pageUid'] = $rootPage['uid'];
}
return parent::render($action, $arguments, $controller, $extensionName, $pluginName, $pageUid, $pageType, $noCache, $noCacheHash, $section, '', $linkAccessRestrictedPages, $additionalParams, $absolute, $addQueryString, $argumentsToBeExcludedFromQueryString, $addQueryStringMethod);
return parent::renderStatic($arguments, $renderChildrenClosure, $renderingContext);
}
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers\Uri;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -31,47 +31,62 @@ use EP\EpProducts\Utility\BookingUrlUtility;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class BookingViewHelper extends AbstractViewHelper
{
/**
* @var ConfigurationManagerInterface
*/
protected $configurationManager;
use CompileWithRenderStatic;
/**
* @var array
*/
protected $settings = [];
protected static $settings = [];
/**
* @param ConfigurationManagerInterface $manager
* @return void
* @param ConfigurationManagerInterface $configurationManager
*/
public function injectConfigurationManager(ConfigurationManagerInterface $manager)
public function __construct(ConfigurationManagerInterface $configurationManager)
{
$this->configurationManager = $manager;
$settings = GeneralUtility::removeDotsFromTS($this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT));
$this->settings = $settings['plugin']['tx_theme'];
$settings = GeneralUtility::removeDotsFromTS(
$configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT)
);
static::$settings = $settings['plugin']['tx_theme'];
}
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('bookingId', 'string', 'The booking id', true);
$this->registerArgument('hotelId', 'string', 'The hotel id', true);
$this->registerArgument('template', 'string', 'The booking template');
}
/**
* @param int $bookingId
* @param int $hotelId
* @param string $template
*
* @return string
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public function render($bookingId, $hotelId, $template = null)
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$template = $arguments['template'];
if ($template === null) {
$template = $this->settings['bpnBookingUrlTemplateCode'];
$template = static::$settings['bpnBookungUrlTemplateCode'];
}
$options = [
'bookingId' => $bookingId,
'hotelId' => $hotelId,
'bookingId' => $arguments['bookingId'],
'hotelId' => $arguments['hotelId'],
'template' => $template,
];
return BookingUrlUtility::generateUrl($options);
}
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers\Uri;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -28,18 +28,44 @@ namespace EP\EpTheme\ViewHelpers\Uri;
***************************************************************/
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class ExternalImageViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* @param string $url
*
* @return string
* @var bool
*/
public function render($url)
protected $escapeOutput = false;
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('url', 'string', 'The url');
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$url = $renderChildrenClosure();
if ($url === null) {
$url = $arguments['url'];
}
$encryptionKey = $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'];
$token = sha1($url . $encryptionKey);
return 'https://www.ep-reisen.de/typo3conf/ext/ep_theme/extimg.php?url=' . urlencode($url) . '&token=' . $token;
}
}
@@ -6,7 +6,7 @@ namespace EP\EpTheme\ViewHelpers\Uri;
*
* Copyright notice
*
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
* (c) 2018 Björn Fromme <[email protected]>, dreipunktnull
*
* All rights reserved
*
@@ -29,71 +29,66 @@ namespace EP\EpTheme\ViewHelpers\Uri;
use EP\EpProducts\Domain\Model\Hotel;
use EP\EpProducts\Domain\Model\Product;
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class ProductViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* @var ConfigurationManagerInterface
*/
protected $configurationManager;
/**
* @var array
*/
protected $settings = [];
/**
* @param ConfigurationManagerInterface $manager
* @return void
*/
public function injectConfigurationManager(ConfigurationManagerInterface $manager)
public function initializeArgument()
{
$this->configurationManager = $manager;
$settings = GeneralUtility::removeDotsFromTS($this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT));
$this->settings = $settings['plugin']['tx_epproducts'];
parent::initializeArguments();
$this->registerArgument('product', Product::class, 'The product', true);
$this->registerArgument('hotel', Hotel::class, 'The hotel');
$this->registerArgument('linkHotel', 'bool', 'Whether to link the hotel', false, false);
$this->registerArgument('referringPageUid', 'int', 'Uid of the referring page');
$this->registerArgument('defaultDetailPageUid', 'int', 'Uid of default page for product details');
$this->registerArgument('origin', 'string', 'Origin of the link');
}
/**
* @param Product $product
* @param Hotel|null $hotel
* @param bool $linkHotel
* @param int $referringPageUid
* @param string $origin
*
* @return string
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public function render(Product $product, Hotel $hotel = null, $linkHotel = false, $referringPageUid = null, $origin = null)
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
$product = $arguments['product'];
if ($product->getDetailPage()) {
return $this
->controllerContext
return $renderingContext
->getControllerContext()
->getUriBuilder()
->reset()
->setTargetPageUid($product->getDetailPage())
->build()
;
;
}
$pageUid = $this->settings['defaultDetailPageUid'];
$arguments = [ 'product' => $product ];
if ((int) $referringPageUid > 0) {
$arguments['referringPageUid'] = $referringPageUid;
$pageUid = $arguments['defaultDetailPageUid'];
$uriArguments = [ 'product' => $product ];
if ((int) $arguments['referringPageUid'] > 0) {
$uriArguments['referringPageUid'] = $arguments['referringPageUid'];
}
if ($origin !== null) {
$arguments['origin'] = $origin;
if ($arguments['origin'] !== null) {
$uriArguments['origin'] = $arguments['origin'];
}
if ((bool) $linkHotel && $hotel !== null) {
$arguments['hotel'] = $hotel;
if ((bool) $arguments['linkHotel'] && $arguments['hotel'] !== null) {
$uriArguments['hotel'] = $arguments['hotel'];
}
return $this
->controllerContext
return $renderingContext
->getControllerContext()
->getUriBuilder()
->reset()
->setTargetPageUid($pageUid)
->uriFor('detail', $arguments, 'Product', 'epproducts', 'product_detail')
->uriFor('detail', $uriArguments, 'Product', 'epproducts', 'product_detail')
;
}
@@ -28,24 +28,48 @@ namespace EP\EpTheme\ViewHelpers\Uri;
***************************************************************/
use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
class VideoViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* @param string $value
* @param int $layout
* @return string
* @var bool
*/
public function render($value, $layout = 1)
protected $escapeOutput = false;
public function initializeArguments()
{
parent::initializeArguments();
$this->registerArgument('value', 'string', 'The video url', true);
$this->registerArgument('layout', 'int', 'The layout', false, 1);
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return mixed
*/
public static function renderStatic(
array $arguments,
\Closure $renderChildrenClosure,
RenderingContextInterface $renderingContext
)
{
// YouTube
if ((int) $layout === 0) {
return $value . '?rel=0&amp;controls=0&amp;showinfo=0';
if ((int) $arguments['layout'] === 0) {
return $arguments['value'] . '?rel=0&amp;controls=0&amp;showinfo=0';
}
// Vimeo
if ((int) $layout === 1) {
return sprintf('https://player.vimeo.com/video/%d?html5=1', $value);
if ((int) $arguments['layout'] === 1) {
return sprintf('https://player.vimeo.com/video/%d?html5=1', $arguments['value']);
}
return '';
}
}
@@ -1,5 +1,5 @@
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/PageTS/Mod/WebLayout/BackendLayouts.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/PageTS/Mod/Wizards/NewContentElement.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/PageTS/Extensions/GridElements.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/PageTS/RTE.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/PageTS/TCEFORM.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/PageTS/Mod/WebLayout/BackendLayouts.tsconfig">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/PageTS/Mod/Wizards/NewContentElement.tsconfig">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/PageTS/Extensions/GridElements.tsconfig">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/PageTS/RTE.tsconfig">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/PageTS/TCEFORM.tsconfig">
@@ -1,46 +1,50 @@
mod {
wizards.newContentElement.wizardItems {
common.show := removeFromList(table,bullets,uploads)
menu.show := removeFromList(menu_abstract,menu_categorized_content,menu_categorized_pages,menu_recently_updated,menu_related_pages,menu_section_pages,menu_sitemap,menu_sitemap_pages)
special.show = div,shortcut,html
forms.show =
teaser {
header = Teaser
elements {
teaser {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Teaser allgemein
description = Teaser mit konfigurierbarem Kontext
tt_content_defValues.CType = teaser
}
teaser_country {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Teaser Land
description = Teaser für ein auswählbares Land
tt_content_defValues.CType = teaser_country
}
teaser_region {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Teaser Gebiet
description = Teaser für ein auswählbares Gebiet
tt_content_defValues.CType = teaser_region
}
teaser_city {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Teaser Ort
description = Teaser für einen auswählbaren Ort
tt_content_defValues.CType = teaser_city
}
teaser_hotel {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Teaser Hotel
description = Teaser für ein auswählbares Hotel
tt_content_defValues.CType = teaser_hotel
}
teaser_concept {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Teaser Konzept
description = Teaser für ein auswählbares Konzept
tt_content_defValues.CType = teaser_concept
}
teaser_product {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Teaser Produkt
description = Teaser für ein auswählbares Produkt
tt_content_defValues.CType = teaser_product
@@ -52,13 +56,13 @@ mod {
header = Störer
elements {
disturber {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Störer
description = Störer mit Bild, mehreren Buttons und Kontaktinfo
tt_content_defValues.CType = disturber
}
deal_of_the_week {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Deal der Woche
description = Störer 'Deal der Woche' mit link auf Produkt
tt_content_defValues.CType = deal_of_the_week
@@ -69,19 +73,19 @@ mod {
special {
elements {
lineup {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Lineup
description = Links/rechts alternierende Boxen
tt_content_defValues.CType = lineup
}
event_pricetable {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Event Preistabelle
description = Preistabelle nach Verfügbarkeit
tt_content_defValues.CType = event_pricetable
}
nlform {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Newsletter Anmeldung
description = Anmeldeformular
tt_content_defValues.CType = nlform
@@ -92,31 +96,31 @@ mod {
common {
elements {
gmap {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Google Map
description = Google Map für Hotel oder Gebiet
tt_content_defValues.CType = gmap
}
contact {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Ansprechpartner
description = Kontaktbox mit Ansprechpartner für Sidebar
tt_content_defValues.CType = contact
}
calendar {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Belegungskalender
description = Belegungskalender zu einem ausgewählten Vertragspartner
tt_content_defValues.CType = calendar
}
ytvideo {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = YouTube Video
description = Responsiv eingebettetes Video
tt_content_defValues.CType = ytvideo
}
button {
iconIdentifier = content-image
iconIdentifier = content-ep_theme-ce
title = Button
description = Button mit Referrer Übertragung
tt_content_defValues.CType = button
@@ -1,42 +0,0 @@
RTE {
default {
contentCSS = EXT:ep_theme/Resources/Public/css/rte.min.css
showButtons (
blockstylelabel, blockstyle, textstylelabel, textstyle, linebreak,
formatblock, bar, bold, italic, bar, orderedlist, unorderedlist,
indent, bar, link, unlink, removeformat, linebreak,
table, toggleborders, tableproperties, rowproperties, rowinsertabove,
rowinsertunder, rowdelete, rowsplit, columninsertbefore, columninsertafter,
columndelete, columnsplit, cellproperties, cellinsertbefore, cellinsertafter,
celldelete, cellsplit, cellmerge, image, insertcharacter, chMode, pastetoggle
)
keepButtonGroupTogether = 1
proc {
allowedClasses =
entryHTMLparser_db {
tags {
span.fixAttrib.style.unset = 1
span.rmTagIfNoAttrib = 1
}
}
}
buttons {
formatblock.removeItems = h1,h6,section,div,footer,header,nav,aside,blockquote,pre,address,article
link.properties.class.allowedClasses =
pastetoggle.setActiveOnRteOpen = 1
link.properties.class.allowedClasses = button,button--full
}
}
classes {
button {
name = Button
}
button--full {
name = Button (volle Breite)
requires = button
}
}
}
@@ -0,0 +1,16 @@
RTE {
config {
tt_content {
bodytext {
types {
text {
preset = dpn
}
textmedia {
preset = dpn
}
}
}
}
}
}
@@ -0,0 +1,35 @@
imports:
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Processing.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml" }
- { resource: "EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml" }
editor:
config:
contentsCss:
- "EXT:ep_theme/Resources/Public/css/rte.css"
stylesSet:
- { name: "Button", element: "a", attributes: { 'class': 'button' } }
- { name: "Button (volle Breite)", element: "a", attributes: { 'class': 'button button--full' } }
toolbarGroups:
- { name: styles, groups: [ format, styles ] }
- { name: basicstyles, groups: [ basicstyles ] }
- { name: paragraph, groups: [ list] }
- "/"
- { name: links, groups: [ links ] }
- { name: clipboard, groups: [ clipboard, cleanup, undo ] }
- { name: editing, groups: [ spellchecker ] }
- { name: insert, groups: [ insert ] }
- { name: tools, groups: [ table, specialchar ] }
- { name: document, groups: [ mode ] }
format_tags: "p;h1;h2;h3;h4"
removePlugins:
- image
removeButtons:
- Anchor
- Underline
- Strike
@@ -1,20 +1,58 @@
<?php
$GLOBALS['TCA']['sys_file_reference']['columns']['crop']['config'] = [
'type' => 'imageManipulation',
'allowedExtensions' => 'jpg',
'ratios' => [
'1.3333333333333334' => 'EP Reisen: Teaser gerade',
'2.0555555555555556' => 'EP Reisen: Teaser ungerade',
'2.3333333333333334' => 'EP Reisen: Header groß',
'3.3333333333333334' => 'EP Reisen: Header klein',
'1.59' => 'EP Reisen: Content Slider',
'1.79069767' => 'EP Reisen: Content Slider Produkttexte',
'1.625' => 'EP Reisen: Slider Produkt Header',
'1' => 'EP Events: Teaser Slider Desktop',
'1.7857' => 'EP Events: Teaser Slider Mobile',
'2.0571' => 'EP Events: Header groß',
'2.63333333333333' => 'EP Events: Header Beispielangebot',
'NaN' => 'Free',
$GLOBALS['TCA']['sys_file_reference']['columns']['crop']['config']['cropVariants'] = [
'default' => [
'title' => 'Default',
'allowedAspectRatios' => [
'teaserEven' => [
'title' => 'EP Reisen: Teaser gerade',
'value' => 1.3333333333333334,
],
'teaserOdd' => [
'title' => 'EP Reisen: Teaser ungerade',
'value' => 2.0555555555555556,
],
'headerLarge' => [
'title' => 'EP Reisen: Header groß',
'value' => 2.3333333333333334,
],
'headerSmall' => [
'title' => 'EP Reisen: Header klein',
'value' => 3.3333333333333334,
],
'contentSlider' => [
'title' => 'EP Reisen: Content Slider',
'value' => 1.59,
],
'contentSliderProduct' => [
'title' => 'EP Reisen: Content Slider Produkttexte',
'value' => 1.79069767,
],
'sliderProductHeader' => [
'title' => 'EP Reisen: Slider Produkt Header',
'value' => 1.625,
],
'epEventsTeaserSliderDesktop' => [
'title' => 'EP Events: Teaser Slider Desktop',
'value' => 1,
],
'epEventsTeaserSliderMobile' => [
'title' => 'EP Events: Teaser Slider Mobile',
'value' => 1.7857
],
'epEventsHeaderLarge' => [
'title' => 'EP Events: Header groß',
'value' => 2.0571,
],
'epEventsHeaderOffer' => [
'title' => 'EP Events: Header Beispielangebot',
'value' => 2.63333333333333,
],
'free' => [
'title' => 'Frei',
'value' => 'NaN',
],
],
],
];
@@ -2,8 +2,12 @@
defined('TYPO3_MODE') or die();
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
'ep_theme',
'Configuration/TypoScript',
'EP Theme'
);
call_user_func(function () {
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
'ep_theme',
'Configuration/TypoScript',
'EP Theme'
);
});
@@ -2,7 +2,8 @@
defined('TYPO3_MODE') or die();
call_user_func(function() {
call_user_func(function () {
$ttContentColumns = [
'tx_eptheme_context_country' => [
'exclude' => 0,
@@ -101,6 +102,7 @@ call_user_func(function() {
'type' => 'input',
'size' => 12,
'eval' => 'date',
'renderType' => 'inputDateTime',
]
],
'tx_eptheme_context_date_to' => [
@@ -110,6 +112,7 @@ call_user_func(function() {
'type' => 'input',
'size' => 12,
'eval' => 'date',
'renderType' => 'inputDateTime',
]
],
'button' => [
@@ -166,4 +169,16 @@ call_user_func(function() {
'after:header_layout'
);
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'EP.EpTheme',
'SimpleForm',
'Kurzformular'
);
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'EP.EpTheme',
'FullForm',
'Anfrageformular Gruppen'
);
});
@@ -44,7 +44,9 @@ call_user_func(function() {
'columnsOverrides' => [
'bodytext' => [
'label' => 'Text',
'defaultExtras' => 'richtext:rte_transform[mode=ts_css]'
'config' => [
'enableRichtext' => true,
]
],
'assets' => [
'label' => 'Bild',
@@ -106,7 +106,9 @@ call_user_func(function() {
'columnsOverrides' => [
'bodytext' => [
'label' => 'Teasertext',
'defaultExtras' => 'richtext:rte_transform[mode=ts_css]'
'config' => [
'enableRichtext' => true,
],
],
'header' => [
'config' => [
@@ -7,10 +7,9 @@ return [
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'dividers2tabs' => TRUE,
'versioningWS' => 2,
'versioning_followPages' => TRUE,
'hideTable' => TRUE,
'dividers2tabs' => true,
'versioningWS' => true,
'hideTable' => true,
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
@@ -21,7 +20,7 @@ return [
'endtime' => 'endtime',
],
'searchFields' => 'headline,subline',
'iconfile' => 'EXT:ep_theme/Resources/Public/images/tx_eptheme_domain_model_lineup.gif'
'iconfile' => 'EXT:ep_theme/Resources/Public/images/icon_ce.svg',
],
'interface' => [
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, description, image,
@@ -30,11 +29,6 @@ return [
'types' => [
'1' => [
'showitem' => 'hidden, name, description, image, --palette--;;social',
'columnsOverrides' => [
'description' => [
'defaultExtras' => 'richtext[]',
],
],
],
],
'palettes' => [
@@ -94,34 +88,38 @@ return [
],
'starttime' => [
'exclude' => 0,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.starttime',
'config' => [
'type' => 'input',
'size' => 13,
'max' => 20,
'eval' => 'datetime',
'checkbox' => 0,
'default' => 0,
'range' => [
'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
],
'behaviour' => [
'allowLanguageSynchronization' => true,
],
'renderType' => 'inputDateTime',
],
],
'endtime' => [
'exclude' => 0,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.endtime',
'config' => [
'type' => 'input',
'size' => 13,
'max' => 20,
'eval' => 'datetime',
'checkbox' => 0,
'default' => 0,
'range' => [
'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
],
'behaviour' => [
'allowLanguageSynchronization' => true,
],
'renderType' => 'inputDateTime',
],
],
'sorting' => [
@@ -147,6 +145,7 @@ return [
'cols' => 40,
'rows' => 10,
'eval' => 'trim',
'enableRichtext' => true,
],
],
'image' => [
@@ -159,18 +158,15 @@ return [
'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference',
'useSortable' => false,
],
'foreign_types' => [
'0' => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
],
'overrideChildTca' => [
'types' => [
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette',
],
],
],
'maxitems' => 1
],
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
@@ -1,16 +1,15 @@
<?php
return [
'ctrl' => [
'title' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_slide',
'title' => 'Slide',
'default_sortby' => 'ORDER BY headline',
'label' => 'headline',
'tstamp' => 'tstamp',
'crdate' => 'crdate',
'cruser_id' => 'cruser_id',
'dividers2tabs' => TRUE,
'versioningWS' => 2,
'versioning_followPages' => TRUE,
'hideTable' => TRUE,
'dividers2tabs' => true,
'versioningWS' => true,
'hideTable' => true,
'languageField' => 'sys_language_uid',
'transOrigPointerField' => 'l10n_parent',
'transOrigDiffSourceField' => 'l10n_diffsource',
@@ -21,7 +20,7 @@ return [
'endtime' => 'endtime',
],
'searchFields' => 'headline,subline',
'iconfile' => 'EXT:ep_theme/Resources/Public/images/tx_eptheme_domain_model_slide.gif'
'iconfile' => 'EXT:ep_theme/Resources/Public/images/icon_ce.svg',
],
'interface' => [
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, headline, subline, button,
@@ -89,34 +88,38 @@ return [
],
'starttime' => [
'exclude' => 0,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.starttime',
'config' => [
'type' => 'input',
'size' => 13,
'max' => 20,
'eval' => 'datetime',
'checkbox' => 0,
'default' => 0,
'range' => [
'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
],
'behaviour' => [
'allowLanguageSynchronization' => true,
],
'renderType' => 'inputDateTime',
],
],
'endtime' => [
'exclude' => 0,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.endtime',
'config' => [
'type' => 'input',
'size' => 13,
'max' => 20,
'eval' => 'datetime',
'checkbox' => 0,
'default' => 0,
'range' => [
'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
],
'behaviour' => [
'allowLanguageSynchronization' => true,
],
'renderType' => 'inputDateTime',
],
],
'sorting' => [
@@ -159,48 +162,32 @@ return [
'type' => 'input',
'size' => 4,
'eval' => 'int',
'wizards' => [
'link' => [
'type' => 'popup',
'title' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel',
'icon' => 'EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_link.gif',
'module' => [
'name' => 'wizard_link',
'urlParameters' => [
'mode' => 'wizard'
]
],
'JSopenParams' => 'height=300,width=500,status=0,menubar=0,scrollbars=1'
]
],
'renderType' => 'inputLink',
]
],
'image' => [
'exclude' => 0,
'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_slide.image',
'label' => 'Bild',
'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig(
'images',
[
'appearance' => [
'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference',
'useSortable' => false,
],
'foreign_types' => [
'0' => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
'showitem' => '
--palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
],
'minitems' => 1,
'maxitems' => 1,
],
$GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext']
[
'appearance' => [
'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference',
'fileUploadAllowed' => false,
],
'overrideChildTca' => [
'types' => [
\TYPO3\CMS\Core\Resource\File::FILETYPE_IMAGE => [
'showitem' => '
--palette--;LLL:EXT:lang/Resources/Private/Language/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette,
--palette--;;filePalette'
],
],
],
'maxitems' => 1,
'minitems' => 1,
],
'jpg,jpeg'
),
],
'page' => [
@@ -1,4 +1,4 @@
tt_content.button =< lib.fluidContent
tt_content.button =< lib.contentElement
tt_content.button {
templateName = Button
variables {
@@ -1,4 +1,4 @@
tt_content.calendar =< lib.fluidContent
tt_content.calendar =< lib.contentElement
tt_content.calendar {
templateName = Calendar
dataProcessing {
@@ -1,4 +1,4 @@
tt_content.contact =< lib.fluidContent
tt_content.contact =< lib.contentElement
tt_content.contact {
templateName = Contact
dataProcessing {
@@ -1,4 +1,4 @@
tt_content.deal_of_the_week =< lib.fluidContent
tt_content.deal_of_the_week =< lib.contentElement
tt_content.deal_of_the_week {
templateName = DealOfTheWeek
dataProcessing {
@@ -6,7 +6,7 @@ tt_content.deal_of_the_week {
}
}
tt_content.disturber =< lib.fluidContent
tt_content.disturber =< lib.contentElement
tt_content.disturber {
templateName = Disturber
dataProcessing {
@@ -1,4 +1,4 @@
tt_content.event_pricetable =< lib.fluidContent
tt_content.event_pricetable =< lib.contentElement
tt_content.event_pricetable {
templateName = EventPricetable
variables {
@@ -1,4 +1,4 @@
tt_content.lineup =< lib.fluidContent
tt_content.lineup =< lib.contentElement
tt_content.lineup {
templateName = Lineup
dataProcessing {
@@ -1,4 +1,4 @@
tt_content.nlform =< lib.fluidContent
tt_content.nlform =< lib.contentElement
tt_content.nlform {
templateName = NewsletterForm
}
@@ -1,4 +1,4 @@
tt_content.teaser =< lib.fluidContent
tt_content.teaser =< lib.contentElement
tt_content.teaser {
templateName = Teaser
dataProcessing {
@@ -8,7 +8,7 @@ tt_content.teaser {
settings.teaserTextMaxChars = {$plugin.tx_eptheme.settings.teaserTextMaxChars}
}
tt_content.teaser_country < lib.fluidContent
tt_content.teaser_country < lib.contentElement
tt_content.teaser_country {
templateName = TeaserCountry
dataProcessing {
@@ -1,4 +1,4 @@
tt_content.ytvideo =< lib.fluidContent
tt_content.ytvideo =< lib.contentElement
tt_content.ytvideo {
templateName = YoutubeVideo
}
@@ -9,6 +9,7 @@ plugin.tx_epproducts {
settings {
teaserTextMaxChars = {$plugin.tx_eptheme.settings.teaserTextMaxChars}
infoPageUid = {$plugin.tx_eptheme.settings.infoPageUid}
defaultAjaxUid = {$plugin.tx_eptheme.settings.defaultAjaxUid}
defaultContactFormPageUid = {$plugin.tx_eptheme.settings.defaultContactFormPageUid}
phoneNumber = {$plugin.tx_eptheme.settings.phoneNumber}
bpnBookingUrlTemplateCode = {$plugin.tx_eptheme.settings.bpnBookingUrlTemplateCode}
@@ -1,6 +1,6 @@
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/Static/setup.txt">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/setup.txt">
lib.fluidContent {
lib.contentElement {
layoutRootPaths.20 = EXT:ep_theme/Resources/Private/Layouts/FluidStyledContent
templateRootPaths.20 = EXT:ep_theme/Resources/Private/Templates/FluidStyledContent
partialRootPaths.20 = EXT:ep_theme/Resources/Private/Partials
@@ -1,4 +1,4 @@
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:form/Configuration/TypoScript/setup.txt">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:form_legacy/Configuration/TypoScript/setup.txt">
plugin.tx_form {
view {
@@ -149,4 +149,4 @@ plugin.tx_eptheme {
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_products/Configuration/TypoScript/constants.txt">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:gridelements/Configuration/TypoScript/constants.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:pb_social/Configuration/TypoScript/constants.txt">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:form/Configuration/TypoScript/constants.txt">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:form_legacy/Configuration/TypoScript/constants.txt">
@@ -1,32 +1,32 @@
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/FluidStyledContent.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/Form.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/News.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/GridElements.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/Mailform.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/PbSocial.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/EpProducts.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/FluidStyledContent.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/Form.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/News.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/GridElements.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/Mailform.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/PbSocial.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Extensions/EpProducts.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Library/SearchBar.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Library/SearchBox.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Library/SearchResult.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Library/Sitemap.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Library/DynamicContent.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Library/ParseFunc.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Library/SearchBar.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Library/SearchBox.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Library/SearchResult.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Library/Sitemap.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Library/DynamicContent.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Library/ParseFunc.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/calendar.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/contact.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/disturber.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/event_pricetable.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/gmap.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/lineup.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/list.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/nlform.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/teaser.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/ytvideo.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/button.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/calendar.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/contact.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/disturber.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/event_pricetable.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/gmap.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/lineup.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/list.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/nlform.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/teaser.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/ytvideo.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/ContentElements/button.typoscript">
plugin.tx_eptheme {
settings < lib.fluidContent.settings
settings < lib.contentElement.settings
settings {
footerNavPid = {$plugin.tx_eptheme.settings.footerNavPid}
mainNavPid = {$plugin.tx_eptheme.settings.mainNavPid}
@@ -96,10 +96,10 @@ plugin.tx_eptheme {
tt_content.stdWrap.innerWrap >
lib.stdheader.3.headerClass >
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Page/Main.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Page/Ajax.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Page/XMLSitemap.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Page/Export.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Page/Main.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Page/Ajax.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Page/XMLSitemap.typoscript">
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:ep_theme/Configuration/TypoScript/Page/Export.typoscript">
config {
doctype = html5
@@ -1,25 +0,0 @@
table {
border: 1px solid #ccc;
border-collapse: collapse;
font-size: inherit;
}
a.button {
border: 1px solid #999;
padding: 0.25em;
}
a.button--full {
border: 1px solid #999;
padding: 0.25em;
display: block;
width: 95%;
}
td, th {
border: 1px solid #ccc;
border-collapse: collapse;
vertical-align: top;
text-align: left;
padding: 3px;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
<rect x="1" y="3" fill="#CCCCCC" width="14" height="10"/>
<path fill="#999999" d="M14,4v8H2V4H14 M15,3H1v10h14V3L15,3z"/>
<rect x="3" y="2" fill="#FFFFFF" width="10" height="12"/>
<path fill="#666666" d="M12,3v10H4V3H12 M13,2H3v12h10V2L13,2z"/>
<rect x="5" y="7" fill="#CCCCCC" width="6" height="1"/>
<rect x="5" y="9" fill="#CCCCCC" width="6" height="1"/>
<rect x="5" y="11" fill="#CCCCCC" width="6" height="1"/>
<rect x="5" y="4" fill="#666666" width="6" height="2"/>
</svg>

After

Width:  |  Height:  |  Size: 815 B

@@ -1,6 +1,7 @@
'use strict';
// Require images
require('../images/bg_login.jpg');
require('../images/logo.svg');
require('../images/logo_wide.svg');
require('../images/favicon_ep.ico');
@@ -12,6 +13,9 @@ require('../images/gb.png');
require('../images/badge_skipass.png');
require('../images/polygon.jpg');
require('../images/icons/icon_ce.svg');
require('../images/icons/tx_eptheme_domain_model_lineup.gif');
require('../images/icons/tx_eptheme_domain_model_slide.gif');
require('../images/icons/tx_eptheme_gridelements_half_and_two_quarters.png');
require('../images/icons/tx_eptheme_gridelements_halves.png');
require('../images/icons/tx_eptheme_gridelements_quarters.png');
@@ -0,0 +1,39 @@
$output-bourbon-deprecation-warnings: false;
@import "~bourbon/app/assets/stylesheets/bourbon";
@include font-face('Lato', '../fonts/lato-v14-latin-300', 300);
@include font-face('Lato', '../fonts/lato-v14-latin-regular', 400);
@include font-face('Lato', '../fonts/lato-v14-latin-700', 700);
@include font-face('Lato', '../fonts/lato-v14-latin-900', 900);
body {
font-family: "Lato", $helvetica;
font-size: 16px;
line-height: 26px;
}
table {
border: 1px solid #ccc;
border-collapse: collapse;
font-size: inherit;
}
a.button {
border: 1px solid #999;
padding: 0.25em;
}
a.button--full {
border: 1px solid #999;
padding: 0.25em;
display: block;
width: 95%;
}
td, th {
border: 1px solid #ccc;
border-collapse: collapse;
vertical-align: top;
text-align: left;
padding: 3px;
}
@@ -1,17 +0,0 @@
<html data-namespace-typo3-fluid="true" lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:v="http://typo3.org/ns/FluidTYPO3/Vhs/ViewHelpers"
xmlns:ce="http://typo3.org/ns/TYPO3/CMS/FluidStyledContent/ViewHelpers"
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
<v:menu.list pages="{pageUids}" useShortcutUid="true">
<ul class="list-unstyled">
<f:for each="{menu}" as="page">
<li>
<f:link.page pageUid="{page.uid}" class="btn btn-warning ep-sidebar{f:if(condition: '{page.active}', then: ' active')}">{page.title}</f:link.page>
</li>
</f:for>
</ul>
</v:menu.list>
</html>
@@ -1,17 +0,0 @@
<html data-namespace-typo3-fluid="true" lang="en"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:v="http://typo3.org/ns/FluidTYPO3/Vhs/ViewHelpers"
xmlns:ce="http://typo3.org/ns/TYPO3/CMS/FluidStyledContent/ViewHelpers"
xmlns:f="http://typo3.org/ns/fluid/ViewHelpers">
<v:menu pageUid="{pageUids -> v:iterator.first()}" useShortcutUid="true">
<ul class="list-unstyled">
<f:for each="{menu}" as="page">
<li>
<f:link.page pageUid="{page.uid}" class="btn btn-warning ep-sidebar{f:if(condition: '{page.active}', then: ' active')}">{page.title}</f:link.page>
</li>
</f:for>
</ul>
</v:menu>
</html>
@@ -9,7 +9,7 @@
<f:section name="Content">
<div class="container">
<calendar
uri="{ep:uri.ajax(action: 'range', controller: 'AjaxCalendar', extensionName: 'epproducts', arguments: '{hotel: data.tx_eptheme_context_hotel}', noCacheHash: 1, format: 'html')}"
uri="{ep:uri.ajax(action: 'range', controller: 'AjaxCalendar', extensionName: 'epproducts', pageUid: settings.defaultAjaxUid, arguments: '{hotel: data.tx_eptheme_context_hotel}', noCacheHash: 1, format: 'html')}"
loader-uri="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/ajax-loader-white.gif')}"
hotel-uid="{hotel.0.data.uid}"
hotel-name="{hotel.0.data.name}"
@@ -8,7 +8,7 @@
<f:section name="Content">
<event-pricetable
uri="{ep:uri.ajax(extensionName: 'epproducts', action: 'eventPricetable', controller: 'AjaxTable', arguments: '{product: data.tx_eptheme_context_product}', format: 'html')}"
uri="{ep:uri.ajax(extensionName: 'epproducts', action: 'eventPricetable', controller: 'AjaxTable', pageUid: settings.defaultAjaxUid, arguments: '{product: data.tx_eptheme_context_product}', format: 'html')}"
loader-uri="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/ajax-loader-white.gif')}"
:force-partnerid-select="{forcePartnerIdSelect}"
:partner-ids='{
@@ -102,9 +102,9 @@
</ep:container>
</f:case>
<f:comment>Default</f:comment>
<f:case default="1">
<f:defaultCase>
<f:cObject typoscriptObjectPath="tt_content.list.20.{data.list_type}" data="{data}"/>
</f:case>
</f:defaultCase>
</f:switch>
</f:section>
@@ -1,9 +0,0 @@
<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:render partial="Menu/Type-{data.menu_type}" arguments="{_all}" />
</f:section>
</html>
@@ -0,0 +1,27 @@
<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:spaceless>
<f:if condition="{menu}">
<ul class="list-unstyled">
<f:for each="{menu}" as="page">
<f:if condition="{page.content}">
<f:for each="{page.content}" as="element">
<f:if condition="{element.data.header}">
<li>
<a href="{f:uri.page(pageUid: page.uid, section: 'c{element.data.uid}')}"
class="btn btn-warning ep-sidebar"
v-on:click.prevent="scrollTo('#c{element.data.uid}')">{element.data.header}</a>
</li>
</f:if>
</f:for>
</f:if>
</f:for>
</ul>
</f:if>
</f:spaceless>
</f:section>
</html>
@@ -0,0 +1,32 @@
<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:if condition="{menu}">
<ul>
<f:for each="{menu}" as="page">
<li>
<a href="{page.link}"{f:if(condition: page.target, then: ' target="{page.target}"')} title="{page.title}">
<span>{page.title}</span>
</a>
<f:if condition="{page.content}">
<ul>
<f:for each="{page.content}" as="element">
<li>
<a href="{page.link}#c{element.data.uid}"{f:if(condition: page.target, then: ' target="{page.target}"')} title="{element.data.header}">
<span>{element.data.header}</span>
</a>
</li>
</f:for>
</ul>
</f:if>
</li>
</f:for>
</ul>
</f:if>
</f:section>
</html>
@@ -0,0 +1,21 @@
<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:if condition="{menu}">
<ul class="list-unstyled">
<f:for each="{menu}" as="page">
<li>
<f:link.page pageUid="{page.data.uid}" class="btn btn-warning ep-sidebar{f:if(condition: '{page.active}', then: ' active')}">
{page.title}
</f:link.page>
</li>
</f:for>
</ul>
</f:if>
</f:section>
</html>
@@ -15,9 +15,9 @@
<f:case value="3">
{v:variable.set(name: 'partial', value: 'Product/TeaserWide')}
</f:case>
<f:case default="1">
<f:defaultCase>
{v:variable.set(name: 'partial', value: 'Product/Teaser')}
</f:case>
</f:defaultCase>
</f:switch>
<f:render partial="{partial}" section="Teaser" arguments="{teaser: teaser}"/>
</f:if>
@@ -19,11 +19,11 @@
<f:case value="5">
<f:render partial="Textmedia/Partnerlogos" section="Content" arguments="{_all}"/>
</f:case>
<f:case default="1">
<f:defaultCase>
<ep:container data="{data}">
<f:render partial="Textmedia/Default" section="Content" arguments="{_all}"/>
</ep:container>
</f:case>
</f:defaultCase>
</f:switch>
</f:section>
@@ -24,7 +24,7 @@
<div class="col-xs-12">
<h2>Buchungsoptionen</h2>
<ajax-content
uri="{ep:uri.ajax(action: 'pricetableHtml', controller: 'AjaxTable', arguments: '{product: product, hotel: hotel}', format: 'html')}"
uri="{ep:uri.ajax(action: 'pricetableHtml', controller: 'AjaxTable', pageUid: settings.defaultAjaxUid, arguments: '{product: product, hotel: hotel}', format: 'html')}"
loader-uri="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/ajax-loader-white.gif')}"
></ajax-content>
</div>
@@ -35,9 +35,9 @@
<f:case value="register_existing">
<div class="alert alert-danger">Diese E-Mail-Adresse ist bereits für unseren Newsletter registriert.</div>
</f:case>
<f:case default="1">
<f:defaultCase>
<div class="alert alert-danger">Ein Problem ist aufgetreten. Bitte versuche es erneut.</div>
</f:case>
</f:defaultCase>
</f:switch>
</f:section>
@@ -8,7 +8,7 @@
<f:section name="Main">
<event-pricetable
uri="{ep:uri.ajax(extensionName: 'epproducts', action: 'eventPricetable', controller: 'AjaxTable', arguments: '{product: productUid}', format: 'html')}"
uri="{ep:uri.ajax(extensionName: 'epproducts', action: 'eventPricetable', controller: 'AjaxTable', pageUid: settings.defaultAjaxUid, arguments: '{product: productUid}', format: 'html')}"
loader-uri="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/ajax-loader-white.gif')}"
:force-partnerid-select="{settings.forcePartnerIdSelect}"
:partner-ids='{settings.partnerIds -> v:format.json.encode()}'
@@ -13,8 +13,8 @@
<product-detail
:filter-settings='<v:format.json.encode>{filterSettings}</v:format.json.encode>'
:uris='{
dates: "<f:format.raw>{ep:uri.ajax(action: 'dates', controller: 'AjaxDate', arguments: '{product: product, hotel: hotel}', format: 'json', noCacheHash: 1)}</f:format.raw>",
pricetable: "<f:format.raw>{ep:uri.ajax(action: 'pricetable', controller: 'AjaxTable', arguments: '{product: product, hotel: hotel}', format: 'json', noCacheHash: 1)}</f:format.raw>"
dates: "<f:format.raw>{ep:uri.ajax(action: 'dates', controller: 'AjaxDate', pageUid: settings.defaultAjaxUid, arguments: '{product: product, hotel: hotel}', format: 'json')}</f:format.raw>",
pricetable: "<f:format.raw>{ep:uri.ajax(action: 'pricetable', controller: 'AjaxTable', pageUid: settings.defaultAjaxUid, arguments: '{product: product, hotel: hotel}', format: 'json')}</f:format.raw>"
}'
argument-prefix='<ep:argumentPrefix pluginName="Ajax" />'
:hotel-first="{f:if(condition: settings.hotelOnTop, then: 'true', else: 'false')}"
@@ -34,13 +34,13 @@
<f:if condition="{settings.hotelOnTop}">
<f:then>
<button class="button button--light button--sidebar"
v-bind:class="{ 'button--active': activeSection === 'hotel'}"
v-on:click.prevent="showHtml('hotel')">Unterkunft</button>
:class="{ 'button--active': activeSection === 'hotel'}"
@click.prevent="showHtml('hotel')">Unterkunft</button>
</f:then>
<f:else>
<button class="button button--light button--sidebar"
v-bind:class="{ 'button--active': activeSection === 'dates'}"
v-on:click.prevent="loadDatesView()">Termine/Preise</button>
:class="{ 'button--active': activeSection === 'dates'}"
@click.prevent="loadDatesView()">Termine/Preise</button>
</f:else>
</f:if>
</div>
@@ -50,27 +50,27 @@
<f:if condition="{settings.hotelOnTop}">
<f:then>
<button class="button button--light button--sidebar"
v-bind:class="{ 'button--active': activeSection === 'dates'}"
v-on:click.prevent="loadDatesView()">Termine/Preise</button>
:class="{ 'button--active': activeSection === 'dates'}"
@click.prevent="loadDatesView()">Termine/Preise</button>
</f:then>
<f:else>
<button class="button button--light button--sidebar"
v-bind:class="{ 'button--active': activeSection === 'hotel'}"
v-on:click.prevent="showHtml('hotel')">Unterkunft</button>
:class="{ 'button--active': activeSection === 'hotel'}"
@click.prevent="showHtml('hotel')">Unterkunft</button>
</f:else>
</f:if>
<button class="button button--light button--sidebar"
v-bind:class="{ 'button--active': activeSection === 'region'}"
v-on:click.prevent="showHtml('region')">Gebiet</button>
:class="{ 'button--active': activeSection === 'region'}"
@click.prevent="showHtml('region')">Gebiet</button>
</div>
<div class="col-xs-6 col-md-12">
<button class="button button--light button--sidebar"
v-bind:class="{ 'button--active': activeSection === 'city'}"
v-on:click.prevent="showHtml('city')">Ort</button>
:class="{ 'button--active': activeSection === 'city'}"
@click.prevent="showHtml('city')">Ort</button>
<f:if condition="{product.journey}">
<button class="button button--light button--sidebar"
v-bind:class="{ 'button--active': activeSection === 'journey'}"
v-on:click.prevent="showHtml('journey')">Anreise</button>
:class="{ 'button--active': activeSection === 'journey'}"
@click.prevent="showHtml('journey')">Anreise</button>
</f:if>
</div>
<div class="col-xs-12">
@@ -226,7 +226,7 @@
<div class="ep-sidebar ep-facts">
<p><strong>Belegungskalender</strong></p>
<calendar
uri="{ep:uri.ajax(action: 'range', controller: 'AjaxCalendar', extensionName: 'epproducts', arguments: '{hotel: product.calendarHotel}', noCacheHash: 1, format: 'html')}"
uri="{ep:uri.ajax(action: 'range', controller: 'AjaxCalendar', extensionName: 'epproducts', pageUid: settings.defaultAjaxUid, arguments: '{hotel: product.calendarHotel}', noCacheHash: 1, format: 'html')}"
loader-uri="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/ajax-loader-white.gif')}"
hotel-uid="{product.calendarHotel.uid}"
hotel-name="{product.calendarHotel.name}"
@@ -240,9 +240,3 @@
</f:section>
</html>
<script>
import WatchlistToggle from "../../Assets/js/components/WatchlistToggle";
export default {
components: {WatchlistToggle}
}
</script>
@@ -8,8 +8,8 @@
<f:section name="Main">
<div id="searchbar">
<search-bar
options-uri='<ep:uri.ajax controller="AjaxSearchbar" action="options" noCacheHash="1" />'
reset-uri='<ep:uri.ajax controller="AjaxSearchbar" action="reset" noCacheHash="1" />'
options-uri='<ep:uri.ajax controller="AjaxSearchbar" action="options" noCacheHash="1" pageUid="{settings.defaultAjaxUid}" />'
reset-uri='<ep:uri.ajax controller="AjaxSearchbar" action="reset" noCacheHash="1" pageUid="{settings.defaultAjaxUid}" />'
argument-prefix='<ep:argumentPrefix pluginName="ajax" />'
:initial-search-params='<v:format.json.encode>{searchParams}</v:format.json.encode>'
:initial-filter-options='<v:format.json.encode>{filterOptions}</v:format.json.encode>'
@@ -18,7 +18,7 @@
<div class="container searchbar affix{f:if(condition: fixed, else: '-top')}"{f:if(condition: fixed, else: ' data-spy="affix" data-offset-top="650" data-offset-bottom="200"')}>
<div class="container">
<f:form action="searchresult" controller="Search" method="post" name="searchParams"
object="{searchParams}" pluginName="searchresult" extensionName="epproducts" noCacheHash="1"
object="{searchParams}" pluginName="searchresult" extensionName="epproducts"
pageUid="{settings.defaultSearchPageUid}" additionalAttributes="{ref: 'form'}">
<f:form.hidden property="destinationUid" additionalAttributes="{v-model: 'searchParams.destinationUid', number: 'number'}"/>
<f:form.hidden property="destinationType" additionalAttributes="{v-model: 'searchParams.destinationType'}"/>
@@ -33,7 +33,7 @@
<div class="col-sm-3">
<daterange-select
class="form-group"
v-on:selected="updateDateRange"
@selected="updateDateRange"
:presets="datePresets"
:min-date="filterOptions.dateFrom"
:max-date="filterOptions.dateTo"
@@ -41,7 +41,7 @@
</div>
<div class="col-sm-1">
<pax-select
v-on:selected="updatePax"
@selected="updatePax"
:pax-options="filterOptions.pax"
:pax="searchParams.pax"
groups-uri="{f:uri.page(pageUid: settings.groupsPageUid)}"
@@ -50,15 +50,15 @@
<div class="col-sm-4">
<destination-select
class="form-group"
v-on:selected="updateDestination"
v-on:reset="resetDestination"
@selected="updateDestination"
@reset="resetDestination"
:destination-options="filterOptions.destinations"
:concept-options="filterOptions.concepts"
></destination-select>
</div>
<div class="col-sm-2">
<price-range-select
v-on:selected="updatePriceRange"
@selected="updatePriceRange"
:range-options="filterOptions.priceRanges"
:range="searchParams.priceRange"
></price-range-select>
@@ -8,8 +8,8 @@
<f:section name="Main">
<div id="ep-navbar-searchbox" class="searchbox hidden-lg" v-show="searchBoxVisible" v-cloak>
<search-box
options-uri='<ep:uri.ajax controller="AjaxSearchbar" action="options" noCacheHash="1" />'
reset-uri='<ep:uri.ajax controller="AjaxSearchbar" action="reset" noCacheHash="1" />'
options-uri='<ep:uri.ajax controller="AjaxSearchbar" action="options" noCacheHash="1" pageUid="{settings.defaultAjaxUid}" />'
reset-uri='<ep:uri.ajax controller="AjaxSearchbar" action="reset" noCacheHash="1" pageUid="{settings.defaultAjaxUid}" />'
argument-prefix='<ep:argumentPrefix pluginName="ajax" />'
:initial-search-params='<v:format.json.encode>{searchParams}</v:format.json.encode>'
:initial-filter-options='<v:format.json.encode>{filterOptions}</v:format.json.encode>'
@@ -17,7 +17,7 @@
inline-template>
<div class="container">
<f:form action="searchresult" controller="Search" method="post" name="searchParams"
object="{searchParams}" pluginName="searchresult" extensionName="epproducts" noCacheHash="1"
object="{searchParams}" pluginName="searchresult" extensionName="epproducts"
pageUid="{settings.defaultSearchPageUid}" class="form-horizontal">
<f:form.hidden property="destinationUid" additionalAttributes="{v-model: 'searchParams.destinationUid', number: 'number'}"/>
<f:form.hidden property="destinationType" additionalAttributes="{v-model: 'searchParams.destinationType'}"/>
@@ -33,7 +33,7 @@
<label>Früheste Anreise</label>
<input
type="date"
v-on:change="updateOptions"
@change="updateOptions"
v-model="searchParams.dateFrom"
:min="filterOptions.dateFrom"
:max="filterOptions.dateTo"
@@ -44,7 +44,7 @@
<label>Späteste Abreise</label>
<input
type="date"
v-on:change="updateOptions"
@change="updateOptions"
v-model="searchParams.dateTo"
:min="filterOptions.dateFrom"
:max="filterOptions.dateTo"
@@ -59,7 +59,7 @@
<label>Personen</label>
<input
type="number"
v-on:change="updateOptions"
@change="updateOptions"
min="1"
max="20"
v-model="searchParams.pax"
@@ -72,8 +72,8 @@
<div class="col-md-12">
<destination-select
class="form-group"
v-on:selected="updateDestination"
v-on:reset="resetDestination"
@selected="updateDestination"
@reset="resetDestination"
:destination-options="filterOptions.destinations"
:concept-options="filterOptions.concepts"
></destination-select>
@@ -83,7 +83,7 @@
<div class="col-md-12">
<price-range-select
class="form-group"
v-on:selected="updatePriceRange"
@selected="updatePriceRange"
:range-options="filterOptions.priceRanges"
:range="searchParams.priceRange"
></price-range-select>
@@ -8,13 +8,13 @@
<f:section name="Main">
<div id="search">
<search-result
results-uri="{ep:uri.ajax(action: 'searchresult', controller: 'AjaxSearch', format: 'json', noCacheHash: 1)}"
v-bind:initial-filter-settings='<v:format.json.encode>{filterSettings}</v:format.json.encode>'
v-bind:initial-filter-options='<v:format.json.encode>{filterOptions}</v:format.json.encode>'
v-bind:referring-page-uid="{referringPageUid}"
results-uri="{ep:uri.ajax(action: 'searchresult', controller: 'AjaxSearch', pageUid: settings.defaultAjaxUid, format: 'json')}"
:initial-filter-settings='<v:format.json.encode>{filterSettings}</v:format.json.encode>'
:initial-filter-options='<v:format.json.encode>{filterOptions}</v:format.json.encode>'
:referring-page-uid="{referringPageUid}"
argument-prefix="{ep:argumentPrefix(pluginName: 'ajax')}"
v-bind:date-presets='{settings.datePickerPresets -> v:format.json.encode()}'
v-bind:watchlist="watchlist"
:date-presets='{settings.datePickerPresets -> v:format.json.encode()}'
:watchlist="watchlist"
inline-template>
<div class="searchresult-wrapper">
<div class="pagehead pagehead--searchresult">
@@ -34,7 +34,7 @@
<a v-if="filterCount > 0"
class="button button--sidebar button--small"
href="#"
v-on:click.prevent="resetFilterSettings">Filter zurücksetzen</a>
@click.prevent="resetFilterSettings">Filter zurücksetzen</a>
<form class="border">
<div class="panel-group" id="filteroptions" role="tablist" aria-multiselectable="true">
<div class="panel panel-default">
@@ -52,11 +52,11 @@
<div class="form-group">
<destination-autocomplete
class="form-group form-control"
v-on:selected="updateDestination"
@selected="updateDestination"
:show-label="false"
:initial-filter-settings="filterSettings"
argument-prefix="{ep:argumentPrefix(pluginName: 'ajax', extensionName: 'epproducts')}"
ajax-uri="{ep:uri.ajax(controller: 'AjaxFilterpanel', action: 'autocomplete', extensionName: 'epproducts', noCacheHash: '1')}"
ajax-uri="{ep:uri.ajax(controller: 'AjaxFilterpanel', action: 'autocomplete', pageUid: settings.defaultAjaxUid, extensionName: 'epproducts', noCacheHash: '1')}"
></destination-autocomplete>
</div>
</div>
@@ -78,7 +78,7 @@
:country-uids="filterSettings.countryUids"
:region-uids="filterSettings.regionUids"
:show-label="false"
v-on:selected="updateDestinations"
@selected="updateDestinations"
></destination-checkboxes>
</div>
</div>
@@ -98,7 +98,7 @@
<concept-select
:concept-options="filterOptions.concepts"
:concepts="filterSettings.conceptUids"
v-on:selected="updateConcepts"
@selected="updateConcepts"
></concept-select>
</div>
</div>
@@ -112,7 +112,7 @@
</h4>
</div>
<div id="collapsePeriod" class="panel-collapse collapse" role="tabpanel"
v-bind:class="{ in: filterSettings.dateFrom || filterSettings.dateTo }"
:class="{ in: filterSettings.dateFrom || filterSettings.dateTo }"
aria-labelledby="headingPeriod">
<div class="panel-body">
<div class="form-group hidden-xs hidden-sm">
@@ -124,14 +124,14 @@
:min-date="filterOptions.dateFrom"
:max-date="filterOptions.dateTo"
:show-label="false"
v-on:selected="updateDateRange"
@selected="updateDateRange"
></daterange-select>
</div>
<div class="form-group hidden-md hidden-lg">
<label>Früheste Anreise</label>
<input
type="date"
v-on:change="updateDateSelectMobile"
@change="updateDateSelectMobile"
v-model="filterSettings.dateFrom"
class="form-control"
>
@@ -140,7 +140,7 @@
<label>Späteste Abreise</label>
<input
type="date"
v-on:change="updateDateSelectMobile"
@change="updateDateSelectMobile"
v-model="filterSettings.dateTo"
class="form-control"
>
@@ -164,7 +164,7 @@
:range-options="filterOptions.priceRanges"
:range="filterSettings.priceRange"
:show-label="false"
v-on:selected="updatePriceRange"
@selected="updatePriceRange"
></price-range-select>
</div>
</div>
@@ -186,7 +186,7 @@
:pax-options="filterOptions.pax"
:pax="filterSettings.pax"
:show-label="false"
v-on:selected="updatePax"
@selected="updatePax"
></pax-select>
</div>
</div>
@@ -206,7 +206,7 @@
<hotel-types-select
:hotel-types-options="filterOptions.hotelTypes"
:hotel-types="filterSettings.hotelTypes"
v-on:selected="updateHotelTypes"
@selected="updateHotelTypes"
></hotel-types-select>
</div>
</div>
@@ -226,7 +226,7 @@
<board-types-select
:board-types-options="filterOptions.boardTypes"
:board-types="filterSettings.boardTypes"
v-on:selected="updateBoardTypes"
@selected="updateBoardTypes"
></board-types-select>
</div>
</div>
@@ -246,7 +246,7 @@
<room-types-select
:room-types-options="filterOptions.roomTypes"
:room-types="filterSettings.roomTypes"
v-on:selected="updateRoomTypes"
@selected="updateRoomTypes"
></room-types-select>
</div>
</div>
@@ -260,14 +260,14 @@
</h4>
</div>
<div id="collapseBus" class="panel-collapse collapse" role="tabpanel"
v-bind:class="{ in: filterSettings.bus }"
:class="{ in: filterSettings.bus }"
aria-labelledby="headingBus">
<div class="panel-body">
<div class="form-group">
<bus-select
:bus-available="filterOptions.busAvailable"
:bus="filterSettings.bus"
v-on:selected="updateBus"
@selected="updateBus"
></bus-select>
</div>
</div>
@@ -284,15 +284,15 @@
<div class="searchresult__info alert alert-info" v-html="resultInfo"></div>
<div class="searchresult__content">
<template v-for="section in resultData">
<a v-bind:id="'concept-' + section.concept.uid" class="anchor"></a>
<a :id="'concept-' + section.concept.uid" class="anchor"></a>
<h2 class="headline headline--secondary headline--underlined">{{ section.concept.name }}</h2>
<div class="searchresult-section" v-bind:class="'searchresult-section--' + section.concept.code">
<div class="searchresult-section" :class="'searchresult-section--' + section.concept.code">
<search-result-item
v-for="item in section.items"
v-bind:key="item.key"
v-bind:item="item"
v-bind:section="section"
v-bind:watchlist="watchlist"></search-result-item>
:key="item.key"
:item="item"
:section="section"
:watchlist="watchlist"></search-result-item>
</div>
</template>
</div>
@@ -8,7 +8,7 @@
<watchlist :watchlist="watchlist" :referring-page-uid="{referringPageUid}"
loader-uri="{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/ajax-loader-white.gif')}"
watchlist-uri="{ep:uri.ajax(action: 'list', controller: 'AjaxWatchlist', format: 'json', noCacheHash: 1)}"></watchlist>
watchlist-uri="{ep:uri.ajax(action: 'list', controller: 'AjaxWatchlist', pageUid: settings.defaultAjaxUid)}"></watchlist>
</f:section>
</html>
@@ -8,6 +8,10 @@ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php'][
\EP\EpTheme\Hook\PageLayoutView::class;
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'ref';
$GLOBALS['TYPO3_CONF_VARS']['FE']['addRootLineFields'] = 'tx_eptheme_slides';
$GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['default'] = 'EXT:ep_theme/Configuration/RTE/Default.yaml';
$GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['dpn'] = 'EXT:ep_theme/Configuration/RTE/Default.yaml';
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'EP.EpTheme',
+38 -18
View File
@@ -2,25 +2,45 @@
defined('TYPO3_MODE') or die();
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
'ep_theme',
'Configuration/TypoScript',
'E&P Theme'
);
call_user_func(function () {
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_eptheme_domain_model_slide');
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_eptheme_domain_model_lineup');
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_eptheme_domain_model_badge');
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_eptheme_domain_model_slide');
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_eptheme_domain_model_lineup');
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::allowTableOnStandardPages('tx_eptheme_domain_model_badge');
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'EP.' . $_EXTKEY,
'SimpleForm',
'Kurzformular'
);
if (TYPO3_MODE === 'BE') {
$iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class);
$iconRegistry->registerIcon(
'content-ep_theme-ce',
\TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class,
['source' => 'EXT:ep_theme/Resources/Public/images/logo.svg']
);
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin(
'EP.' . $_EXTKEY,
'FullForm',
'Anfrageformular Gruppen'
);
if (!is_array($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend'])) {
$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend'] = unserialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']);
}
if (!isset($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']['loginLogo'])
|| empty(trim($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']['loginLogo']))
) {
$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']['loginLogo'] = 'EXT:ep_theme/Resources/Public/images/logo_wide.svg';
}
if (!isset($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']['loginBackgroundImage'])
|| empty(trim($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']['loginBackgroundImage']))
) {
$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']['loginBackgroundImage'] = 'EXT:ep_theme/Resources/Public/images/bg_login.jpg';
}
if (!isset($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']['loginHighlightColor'])
|| empty(trim($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']['loginHighlightColor']))
) {
$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']['loginHighlightColor'] = '#f9cb0d';
}
if (is_array($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend'])) {
$GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend'] = serialize($GLOBALS['TYPO3_CONF_VARS']['EXT']['extConf']['backend']);
}
}
});
+12
View File
@@ -103,6 +103,18 @@ CREATE TABLE pages (
tx_eptheme_badge int(11) unsigned DEFAULT '0'
);
CREATE TABLE pages_language_overlay (
tx_eptheme_context_country_code char(2) DEFAULT '',
tx_eptheme_context_country int(11) unsigned DEFAULT '0',
tx_eptheme_context_region int(11) unsigned DEFAULT '0',
tx_eptheme_context_concept int(11) unsigned DEFAULT '0',
tx_eptheme_context_product int(11) unsigned DEFAULT '0',
tx_eptheme_hide_searchbar tinyint(4) unsigned DEFAULT '0' NOT NULL,
tx_eptheme_bodyclass varchar(255) DEFAULT '' NOT NULL,
tx_eptheme_slides int(11) unsigned DEFAULT '0',
tx_eptheme_badge int(11) unsigned DEFAULT '0'
);
CREATE TABLE tt_content (
tx_eptheme_context_country int(11) unsigned DEFAULT '0',
tx_eptheme_context_region int(11) unsigned DEFAULT '0',