commit da4db35be34bb119d14516395e1c91fcdd56aedb Author: Björn Fromme Date: Wed Apr 18 17:24:00 2018 +0200 Initial commit diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..eb2d0f70 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +root = true +charset = utf-8 +trim_trailing_whitespace = true +[*] +end_of_line = lf +insert_final_newline = true +[*.{html,js}] +indent_size = 4 +indent_style = space +[*.{css,scss}] +indent_size = 2 +indent_style = space diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..c1349edf --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +.DS_Store +.idea +.tmp +index.php +vendor +node_modules +bower_components +typo3 +web/fileadmin +web/typo3conf/ENABLE_INSTALL_TOOL +web/typo3conf/realurl_autoconf.php +web/typo3conf/deprecation* +web/typo3conf/ext/* +!web/typo3conf/ext/ep_events/ +!web/typo3conf/ext/ep_products/ +!web/typo3conf/ext/ep_theme/ +!web/typo3conf/ext/ep_track/ +web/typo3conf/ext/ep_events/Resources/Public/* +web/typo3conf/ext/ep_theme/Resources/Public/* +web/typo3conf/LocalConfiguration.php +web/typo3conf/AdditionalConfiguration.php +web/typo3conf/PackageStates.php +web/typo3conf/l10n +web/typo3temp +web/uploads diff --git a/composer.json b/composer.json new file mode 100644 index 00000000..085a76ca --- /dev/null +++ b/composer.json @@ -0,0 +1,104 @@ +{ + "repositories": [ + { "type": "composer", "url": "https://composer.typo3.org/" } + ], + "name": "dpn/ep-reisen-web", + "description" : "EP Reisen TYPO3 website package", + "license": "GPL-2.0+", + "type": "project", + "require": { + "php": "^5.6", + "typo3/cms": "^7.6", + "georgringer/news": "^6.1", + "dmitryd/typo3-realurl": "^2.3", + "helhum/typo3-console": "^4.9", + "typo3/cms-backend": "^7.6", + "typo3/cms-belog": "^7.6", + "typo3/cms-beuser": "^7.6", + "typo3/cms-context-help": "^7.6", + "typo3/cms-core": "^7.6", + "typo3/cms-extbase": "^7.6", + "typo3/cms-extensionmanager": "^7.6", + "typo3/cms-filelist": "^7.6", + "typo3/cms-filemetadata": "^7.6", + "typo3/cms-fluid": "^7.6", + "typo3/cms-fluid-styled-content": "^7.6", + "typo3/cms-form": "^7.6", + "typo3/cms-frontend": "^7.6", + "typo3/cms-func": "^7.6", + "typo3/cms-func-wizards": "^7.6", + "typo3/cms-info": "^7.6", + "typo3/cms-info-pagetsconfig": "^7.6", + "typo3/cms-install": "^7.6", + "typo3/cms-lang": "^7.6", + "typo3/cms-lowlevel": "^7.6", + "typo3/cms-opendocs": "^7.6", + "typo3/cms-recordlist": "^7.6", + "typo3/cms-recycler": "^7.6", + "typo3/cms-reports": "^7.6", + "typo3/cms-rsaauth": "^7.6", + "typo3/cms-rtehtmlarea": "^7.6", + "typo3/cms-saltedpasswords": "^7.6", + "typo3/cms-scheduler": "^7.6", + "typo3/cms-setup": "^7.6", + "typo3/cms-sv": "^7.6", + "typo3/cms-sys-action": "^7.6", + "typo3/cms-t3editor": "^7.6", + "typo3/cms-t3skin": "^7.6", + "typo3/cms-taskcenter": "^7.6", + "typo3/cms-tstemplate": "^7.6", + "typo3/cms-viewpage": "^7.6", + "typo3/cms-wizard-crpages": "^7.6", + "typo3/cms-wizard-sortpages": "^7.6", + "fluidtypo3/vhs": "^3.1", + "typo3-ter/gridelements": "7.2", + "typo3-ter/media": "^4.5", + "typo3-ter/metaseo": "2.1", + "typo3-ter/ods-redirects": "^1.3", + "typo3-ter/pagepath": "^1.1", + "typo3-ter/pb-social": "^1.3", + "typo3-ter/sourceopt": "^1.0", + "typo3-ter/html-compress": "^1.1", + "typo3-ter/imageoptimizer": "^1.0", + "typo3-ter/loginlimit": "^1.0", + "doctrine/dbal": "^2.5", + "yohang/calendr": "^2.1" + }, + "scripts": { + "typo3-cms-scripts": [ + "typo3cms install:fixfolderstructure", + "typo3cms install:generatepackagestates" + ], + "post-install-cmd": [ + "@typo3-cms-scripts" + ], + "post-update-cmd": [ + "@typo3-cms-scripts" + ] + }, + "extra": { + "typo3/cms": { + "cms-package-dir": "{$vendor-dir}/typo3/cms", + "web-dir": "web" + }, + "helhum/typo3-console": { + "install-extension-dummy": false + } + }, + "autoload": { + "psr-4": { + "EP\\EpEvents\\": "web/typo3conf/ext/ep_events/Classes", + "EP\\EpProducts\\": "web/typo3conf/ext/ep_products/Classes", + "EP\\EpTheme\\": "web/typo3conf/ext/ep_theme/Classes", + "EP\\EpTrack\\": "web/typo3conf/ext/ep_track/Classes" + } + }, + "require-dev": { + "deployer/deployer": "^4.3" + }, + "config": { + "platform": { + "php": "5.6.34" + } + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 00000000..9919f276 --- /dev/null +++ b/composer.lock @@ -0,0 +1,3800 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "28a53d656d95cf02c7990f31180b36a3", + "packages": [ + { + "name": "cogpowered/finediff", + "version": "0.3.1", + "source": { + "type": "git", + "url": "https://github.com/cogpowered/FineDiff.git", + "reference": "339ddc8c3afb656efed4f2f0a80e5c3d026f8ea8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cogpowered/FineDiff/zipball/339ddc8c3afb656efed4f2f0a80e5c3d026f8ea8", + "reference": "339ddc8c3afb656efed4f2f0a80e5c3d026f8ea8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "mockery/mockery": "*", + "phpunit/phpunit": "*" + }, + "type": "library", + "autoload": { + "psr-0": { + "cogpowered\\FineDiff": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rob Crowe", + "email": "rob@cogpowered.com" + }, + { + "name": "Raymond Hill" + } + ], + "description": "PHP implementation of a Fine granularity Diff engine", + "homepage": "https://github.com/cogpowered/FineDiff", + "keywords": [ + "diff", + "finediff", + "opcode", + "string", + "text" + ], + "time": "2014-05-19T10:25:02+00:00" + }, + { + "name": "dmitryd/typo3-realurl", + "version": "2.3.2", + "source": { + "type": "git", + "url": "https://github.com/dmitryd/typo3-realurl.git", + "reference": "185ab680429af42fe39b9f933476a3479e6271b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dmitryd/typo3-realurl/zipball/185ab680429af42fe39b9f933476a3479e6271b6", + "reference": "185ab680429af42fe39b9f933476a3479e6271b6", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.4.0,<7.2.0", + "typo3/cms-core": ">=6.2.0,<9.0.0" + }, + "conflict": { + "bednee/cooluri": ">0.0.1", + "helhum/realurl": ">0.0.1", + "typo3-ter/cooluri": ">=0.0.1", + "typo3-ter/simulatestatic": ">0.0.1" + }, + "replace": { + "realurl": "self.version", + "typo3-ter/realurl": "self.version" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.0" + }, + "suggest": { + "typo3-ter/static-info-tables": ">=6.2.0" + }, + "type": "typo3-cms-extension", + "extra": { + "typo3/cms": { + "cms-package-dir": "{$vendor-dir}/typo3/cms", + "web-dir": ".Build/Web" + } + }, + "autoload": { + "psr-4": { + "DmitryDulepov\\Realurl\\": "Classes" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-3.0+" + ], + "authors": [ + { + "name": "Dmitry Dulepov", + "email": "dmitry.dulepov@gmail.com", + "homepage": "http://www.dmitry-dulepov.com/" + } + ], + "description": "Speaking URLs for TYPO3", + "homepage": "https://github.com/dmitryd/typo3-realurl", + "keywords": [ + "RealURL", + "cms", + "typo3" + ], + "time": "2018-03-18T00:00:00+00:00" + }, + { + "name": "doctrine/annotations", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/54cacc9b81758b14e3ce750f205a393d52339e97", + "reference": "54cacc9b81758b14e3ce750f205a393d52339e97", + "shasum": "" + }, + "require": { + "doctrine/lexer": "1.*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/cache": "1.*", + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "time": "2017-02-24T16:22:25+00:00" + }, + { + "name": "doctrine/cache", + "version": "v1.6.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/cache.git", + "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/cache/zipball/eb152c5100571c7a45470ff2a35095ab3f3b900b", + "reference": "eb152c5100571c7a45470ff2a35095ab3f3b900b", + "shasum": "" + }, + "require": { + "php": "~5.5|~7.0" + }, + "conflict": { + "doctrine/common": ">2.2,<2.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.8|~5.0", + "predis/predis": "~1.0", + "satooshi/php-coveralls": "~0.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Caching library offering an object-oriented API for many cache backends", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "cache", + "caching" + ], + "time": "2017-07-22T12:49:21+00:00" + }, + { + "name": "doctrine/collections", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/collections.git", + "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/collections/zipball/1a4fb7e902202c33cce8c55989b945612943c2ba", + "reference": "1a4fb7e902202c33cce8c55989b945612943c2ba", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "doctrine/coding-standard": "~0.1@dev", + "phpunit/phpunit": "^5.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Collections\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Collections Abstraction library", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "array", + "collections", + "iterator" + ], + "time": "2017-01-03T10:49:41+00:00" + }, + { + "name": "doctrine/common", + "version": "v2.7.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/common.git", + "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/common/zipball/4acb8f89626baafede6ee5475bc5844096eba8a9", + "reference": "4acb8f89626baafede6ee5475bc5844096eba8a9", + "shasum": "" + }, + "require": { + "doctrine/annotations": "1.*", + "doctrine/cache": "1.*", + "doctrine/collections": "1.*", + "doctrine/inflector": "1.*", + "doctrine/lexer": "1.*", + "php": "~5.6|~7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Common\\": "lib/Doctrine/Common" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common Library for Doctrine projects", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "annotations", + "collections", + "eventmanager", + "persistence", + "spl" + ], + "time": "2017-07-22T08:35:12+00:00" + }, + { + "name": "doctrine/dbal", + "version": "v2.5.13", + "source": { + "type": "git", + "url": "https://github.com/doctrine/dbal.git", + "reference": "729340d8d1eec8f01bff708e12e449a3415af873" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/729340d8d1eec8f01bff708e12e449a3415af873", + "reference": "729340d8d1eec8f01bff708e12e449a3415af873", + "shasum": "" + }, + "require": { + "doctrine/common": ">=2.4,<2.8-dev", + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "4.*", + "symfony/console": "2.*||^3.0" + }, + "suggest": { + "symfony/console": "For helpful console commands such as SQL execution and import of files." + }, + "bin": [ + "bin/doctrine-dbal" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\DBAL\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + } + ], + "description": "Database Abstraction Layer", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "database", + "dbal", + "persistence", + "queryobject" + ], + "time": "2017-07-22T20:44:48+00:00" + }, + { + "name": "doctrine/inflector", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/90b2128806bfde671b6952ab8bea493942c1fdae", + "reference": "90b2128806bfde671b6952ab8bea493942c1fdae", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Inflector\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Common String Manipulations with regard to casing and singular/plural rules.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "inflection", + "pluralize", + "singularize", + "string" + ], + "time": "2015-11-06T14:35:42+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14T21:17:01+00:00" + }, + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" + }, + { + "name": "fluidtypo3/vhs", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/FluidTYPO3/vhs.git", + "reference": "8f0435a36f8141e15fca37d75b19bee1bce578f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FluidTYPO3/vhs/zipball/8f0435a36f8141e15fca37d75b19bee1bce578f3", + "reference": "8f0435a36f8141e15fca37d75b19bee1bce578f3", + "shasum": "" + }, + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "fluidtypo3/development": "*" + }, + "suggest": { + "ext-tidy": "Allows to make use of the tidy ViewHelper" + }, + "type": "typo3-cms-extension", + "autoload": { + "psr-4": { + "FluidTYPO3\\Vhs\\": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0+" + ], + "description": "The vhs package from FluidTYPO3", + "homepage": "https://fluidtypo3.org", + "keywords": [ + "TYPO3 CMS", + "fedext", + "fluid", + "templating", + "utility", + "viewhelper" + ], + "time": "2016-10-18T13:44:09+00:00" + }, + { + "name": "georgringer/news", + "version": "6.3.0", + "source": { + "type": "git", + "url": "https://github.com/georgringer/news.git", + "reference": "5d12b36e30cea3cd958e6efa1e5e6fd43d490390" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/georgringer/news/zipball/5d12b36e30cea3cd958e6efa1e5e6fd43d490390", + "reference": "5d12b36e30cea3cd958e6efa1e5e6fd43d490390", + "shasum": "" + }, + "require": { + "typo3/cms-core": "^7.6.13 || >=8.5.0 <9" + }, + "replace": { + "news": "self.version", + "typo3-ter/news": "self.version" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.0", + "nimut/testing-framework": "^1.0", + "phpunit/phpunit": "~4.8.0" + }, + "suggest": { + "dmitryd/typo3-dd-googlesitemap": "~2.0", + "reelworx/rx-shariff": "~10.0" + }, + "type": "typo3-cms-extension", + "extra": { + "branch-alias": { + "dev-master": "6.x-dev" + }, + "typo3/cms": { + "cms-package-dir": "{$vendor-dir}/typo3/cms", + "web-dir": ".Build/Web" + } + }, + "autoload": { + "psr-4": { + "GeorgRinger\\News\\": "Classes" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "Georg Ringer", + "homepage": "http://montagmorgen.at", + "role": "Developer" + } + ], + "description": "Versatile news extension, based on extbase & fluid for TYPO3 CMS", + "homepage": "http://montagmorgen.at", + "keywords": [ + "article", + "extension", + "news", + "typo3" + ], + "time": "2018-02-01T08:37:18+00:00" + }, + { + "name": "helhum/typo3-console", + "version": "4.9.3", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-Console/TYPO3-Console.git", + "reference": "cd5d9e2545484339e7f766bc2527721b6f476e0f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-Console/TYPO3-Console/zipball/cd5d9e2545484339e7f766bc2527721b6f476e0f", + "reference": "cd5d9e2545484339e7f766bc2527721b6f476e0f", + "shasum": "" + }, + "require": { + "ext-phar": "*", + "helhum/typo3-console-plugin": "^1.7.5 || ^2.0.2", + "php": ">=5.5.0 <7.2", + "symfony/console": "^2.7 || ^3.0", + "symfony/process": "^2.7 || ^3.0", + "typo3/cms-backend": "^7.6 || ^8.7", + "typo3/cms-core": "^7.6 || ^8.7", + "typo3/cms-extbase": "^7.6 || ^8.7", + "typo3/cms-extensionmanager": "^7.6 || ^8.7", + "typo3/cms-fluid": "^7.6 || ^8.7", + "typo3/cms-install": "^7.6 || ^8.7", + "typo3/cms-scheduler": "^7.6 || ^8.7" + }, + "replace": { + "typo3-ter/typo3-console": "self.version", + "typo3_console": "self.version" + }, + "require-dev": { + "mikey179/vfsstream": "~1.6.0", + "nimut/testing-framework": "^1.0", + "symfony/filesystem": "^3.2", + "typo3-console/create-reference-command": "^1.0", + "typo3/cms": "^8.7" + }, + "bin": [ + "Scripts/typo3cms" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + }, + "typo3/cms": { + "cms-package-dir": "{$vendor-dir}/typo3/cms", + "web-dir": ".Build/Web", + "Package": { + "partOfMinimalUsableSystem": true + } + } + }, + "autoload": { + "psr-4": { + "Helhum\\Typo3Console\\": [ + "Classes/", + "Resources/Private/ExtensionArtifacts/src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Helmut Hummel", + "email": "info@helhum.io", + "homepage": "http://helhum.io", + "role": "Developer" + } + ], + "description": "A reliable and powerful command line interface for TYPO3 CMS", + "homepage": "http://insight.helhum.io/post/104528981610/about-the-beauty-and-power-of-typo3-console", + "keywords": [ + "cli", + "command", + "commandline", + "console", + "typo3" + ], + "time": "2017-12-15T14:46:54+00:00" + }, + { + "name": "helhum/typo3-console-plugin", + "version": "1.7.5", + "source": { + "type": "git", + "url": "https://github.com/TYPO3-Console/typo3-console-plugin.git", + "reference": "7bb9122dd784b6c40bc681a593a5f3f36162c60f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3-Console/typo3-console-plugin/zipball/7bb9122dd784b6c40bc681a593a5f3f36162c60f", + "reference": "7bb9122dd784b6c40bc681a593a5f3f36162c60f", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0", + "php": ">=5.5.0", + "typo3/cms-composer-installers": "^1.3.1" + }, + "require-dev": { + "composer/composer": "^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Helhum\\Typo3ConsolePlugin\\Plugin", + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Helhum\\Typo3ConsolePlugin\\": "src/" + }, + "files": [ + "res/php/autoload-include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Helmut Hummel", + "email": "info@helhum.io" + } + ], + "description": "Installer plugin for helhum/typo3-console, to ease usage without the need to specify scripts in your root composer.json", + "homepage": "https://github.com/helhum/typo3-console-plugin", + "keywords": [ + "composer", + "plugin", + "typo3 console" + ], + "time": "2017-08-13T11:41:48+00:00" + }, + { + "name": "mso/idna-convert", + "version": "v0.9.1", + "source": { + "type": "git", + "url": "https://github.com/phlylabs/idna-convert.git", + "reference": "0a0a09e460e63739d82c3f0c3f0e5555567a6be3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phlylabs/idna-convert/zipball/0a0a09e460e63739d82c3f0c3f0e5555567a6be3", + "reference": "0a0a09e460e63739d82c3f0c3f0e5555567a6be3", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "php": ">=5.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.9.x-dev" + } + }, + "autoload": { + "classmap": [ + "idna_convert.class.php", + "uctc.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1+" + ], + "authors": [ + { + "name": "Matthias Sommerfeld", + "email": "mso@phlylabs.de", + "role": "Developer" + } + ], + "description": "A library for encoding and decoding internationalized domain names", + "homepage": "http://idnaconv.net/", + "keywords": [ + "idn", + "idna", + "php" + ], + "time": "2016-01-06T21:05:46+00:00" + }, + { + "name": "pear/http_request2", + "version": "v2.3.0", + "source": { + "type": "git", + "url": "https://github.com/pear/HTTP_Request2.git", + "reference": "3599cf0fe455a4e281da464f6510bfc5c2ce54c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/HTTP_Request2/zipball/3599cf0fe455a4e281da464f6510bfc5c2ce54c4", + "reference": "3599cf0fe455a4e281da464f6510bfc5c2ce54c4", + "shasum": "" + }, + "require": { + "pear/net_url2": "^2.2.0", + "pear/pear_exception": "^1.0.0", + "php": ">=5.2.0" + }, + "suggest": { + "ext-fileinfo": "Adds support for looking up mime-types using finfo.", + "ext-zlib": "Allows handling gzip compressed responses.", + "lib-curl": "Allows using cURL as a request backend.", + "lib-openssl": "Allows handling SSL requests when not using cURL." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-trunk": "2.2-dev" + } + }, + "autoload": { + "psr-0": { + "HTTP_Request2": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Alexey Borzov", + "email": "avb@php.net" + } + ], + "description": "Provides an easy way to perform HTTP requests.", + "homepage": "http://pear.php.net/package/HTTP_Request2", + "keywords": [ + "PEAR", + "curl", + "http", + "request" + ], + "time": "2016-02-13T20:20:39+00:00" + }, + { + "name": "pear/net_url2", + "version": "v2.2.2", + "source": { + "type": "git", + "url": "https://github.com/pear/Net_URL2.git", + "reference": "07fd055820dbf466ee3990abe96d0e40a8791f9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/Net_URL2/zipball/07fd055820dbf466ee3990abe96d0e40a8791f9d", + "reference": "07fd055820dbf466ee3990abe96d0e40a8791f9d", + "shasum": "" + }, + "require": { + "php": ">=5.1.4" + }, + "require-dev": { + "phpunit/phpunit": ">=3.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "Net/URL2.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "./" + ], + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "David Coallier", + "email": "davidc@php.net" + }, + { + "name": "Tom Klingenberg", + "email": "tkli@php.net" + }, + { + "name": "Christian Schmidt", + "email": "chmidt@php.net" + } + ], + "description": "Class for parsing and handling URL. Provides parsing of URLs into their constituent parts (scheme, host, path etc.), URL generation, and resolving of relative URLs.", + "homepage": "https://github.com/pear/Net_URL2", + "keywords": [ + "PEAR", + "net", + "networking", + "rfc3986", + "uri", + "url" + ], + "time": "2017-08-25T06:16:11+00:00" + }, + { + "name": "pear/pear_exception", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/pear/PEAR_Exception.git", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b", + "reference": "8c18719fdae000b690e3912be401c76e406dd13b", + "shasum": "" + }, + "require": { + "php": ">=4.4.0" + }, + "require-dev": { + "phpunit/phpunit": "*" + }, + "type": "class", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "PEAR": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "include-path": [ + "." + ], + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Helgi Thormar", + "email": "dufuz@php.net" + }, + { + "name": "Greg Beaver", + "email": "cellog@php.net" + } + ], + "description": "The PEAR Exception base class.", + "homepage": "https://github.com/pear/PEAR_Exception", + "keywords": [ + "exception" + ], + "time": "2015-02-10T20:07:52+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2016-10-10T12:19:37+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "v5.4.9", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/7ffc1ea296ed14bf8260b6ef11b80208dbadba91", + "reference": "7ffc1ea296ed14bf8260b6ef11b80208dbadba91", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "mockery/mockery": "~0.9.1", + "symfony/phpunit-bridge": "~3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.4-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "time": "2018-01-23T07:37:21+00:00" + }, + { + "name": "symfony/console", + "version": "v2.8.38", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "7f78892d900c72a40acd1fe793c856ef0c110f26" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/7f78892d900c72a40acd1fe793c856ef0c110f26", + "reference": "7f78892d900c72a40acd1fe793c856ef0c110f26", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "symfony/debug": "^2.7.2|~3.0.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.1|~3.0.0", + "symfony/process": "~2.1|~3.0.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2018-04-03T05:20:27+00:00" + }, + { + "name": "symfony/debug", + "version": "v2.8.38", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "4486d2be5e068b51fece4c8551c14e709f573c8d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/4486d2be5e068b51fece4c8551c14e709f573c8d", + "reference": "4486d2be5e068b51fece4c8551c14e709f573c8d", + "shasum": "" + }, + "require": { + "php": ">=5.3.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.2|~3.0.0", + "symfony/http-kernel": "~2.3.24|~2.5.9|^2.6.2|~3.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2018-04-03T05:20:27+00:00" + }, + { + "name": "symfony/finder", + "version": "v2.8.38", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "423746fc18ccf31f9abec43e4f078bb6e024b2d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/423746fc18ccf31f9abec43e4f078bb6e024b2d5", + "reference": "423746fc18ccf31f9abec43e4f078bb6e024b2d5", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2018-04-04T13:38:31+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v3.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/f3109a6aedd20e35c3a33190e932c2b063b7b50e", + "reference": "f3109a6aedd20e35c3a33190e932c2b063b7b50e", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "time": "2018-01-11T07:56:07+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "reference": "78be803ce01e55d3491c1397cf1c64beb9c1b63b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2018-01-30T19:27:44+00:00" + }, + { + "name": "symfony/process", + "version": "v3.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "4b7d64e852886319e93ddfdecff0d744ab87658b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/4b7d64e852886319e93ddfdecff0d744ab87658b", + "reference": "4b7d64e852886319e93ddfdecff0d744ab87658b", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2018-04-03T05:22:50+00:00" + }, + { + "name": "typo3-ter/gridelements", + "version": "7.2.0", + "dist": { + "type": "zip", + "url": "https://extensions.typo3.org/extension/download/gridelements/7.2.0/zip/", + "reference": null, + "shasum": null + }, + "require": { + "typo3/cms-core": ">= 7.6.0, <= 7.99.99" + }, + "conflict": { + "typo3-ter/jfmulticontent": "*", + "typo3-ter/templavoila": "*" + }, + "replace": { + "gridelements": "self.version" + }, + "type": "typo3-cms-extension", + "autoload": { + "psr-4": { + "GridElementsTeam\\Gridelements\\": "Classes/" + } + }, + "authors": [ + { + "name": "Grid Elements Team", + "email": "info@cybercraft.de", + "company": "", + "username": "cybercraft" + } + ], + "description": "This extension integrates the grid layout concept also to regular content elements - the grid elements.\r\nIt offers a lot of new features like advanced drag & drop or real references, that improve the usability of the page and list module to speed up the daily work with the backend.", + "time": "2017-12-23T18:15:17+00:00" + }, + { + "name": "typo3-ter/html-compress", + "version": "1.1.1", + "dist": { + "type": "zip", + "url": "https://extensions.typo3.org/extension/download/html_compress/1.1.1/zip/", + "reference": null, + "shasum": null + }, + "require": { + "typo3/cms-core": ">= 7.6.0, <= 8.9.99" + }, + "replace": { + "html_compress": "self.version", + "typo3-ter/html_compress": "self.version" + }, + "type": "typo3-cms-extension", + "autoload": { + "psr-4": { + "Markussom\\HtmlCompress\\": "Classes" + } + }, + "authors": [ + { + "name": "Markus Sommer", + "email": "info@creativeworkspace.de", + "company": "https://www.creativeworkspace.de", + "username": "delaramas" + } + ], + "description": "Compress/minify your HTML output", + "time": "2016-12-26T10:19:02+00:00" + }, + { + "name": "typo3-ter/imageoptimizer", + "version": "1.0.4", + "dist": { + "type": "zip", + "url": "https://extensions.typo3.org/extension/download/imageoptimizer/1.0.4/zip/", + "reference": null, + "shasum": null + }, + "require": { + "typo3/cms-core": ">= 6.2.0, <= 8.9.99" + }, + "replace": { + "imageoptimizer": "self.version" + }, + "type": "typo3-cms-extension", + "autoload": { + "classmap": [ + "Classes/" + ] + }, + "authors": [ + { + "name": "Christoph Lehmann", + "email": "post@christophlehmann.eu", + "company": "", + "username": "nwtlehmann" + } + ], + "description": "Optimize uploaded/processed images with binaries of your choice", + "time": "2017-03-11T11:37:47+00:00" + }, + { + "name": "typo3-ter/loginlimit", + "version": "1.0.3", + "dist": { + "type": "zip", + "url": "https://extensions.typo3.org/extension/download/loginlimit/1.0.3/zip/", + "reference": null, + "shasum": null + }, + "require": { + "typo3/cms-core": ">= 6.2.0, <= 8.7.99" + }, + "replace": { + "loginlimit": "self.version" + }, + "type": "typo3-cms-extension", + "autoload": { + "psr-4": { + "WebentwicklerAt\\Loginlimit\\": "Classes/" + } + }, + "authors": [ + { + "name": "Gernot Leitgab", + "email": "", + "company": "Webentwickler.at", + "username": "royalknight" + } + ], + "description": "Protect backend and/or frontend login against brute-force attacks.", + "time": "2017-09-23T10:40:00+00:00" + }, + { + "name": "typo3-ter/media", + "version": "4.5.0", + "dist": { + "type": "zip", + "url": "https://extensions.typo3.org/extension/download/media/4.5.0/zip/", + "reference": null, + "shasum": null + }, + "require": { + "typo3-ter/vidi": ">= 2.3.1, <= 2.99.99", + "typo3/cms-core": ">= 7.6.0, <= 8.99.99" + }, + "replace": { + "media": "self.version" + }, + "suggest": { + "typo3-ter/metadata": "*" + }, + "type": "typo3-cms-extension", + "autoload": { + "psr-4": { + "Fab\\Media\\": "Classes/" + } + }, + "authors": [ + { + "name": "Fabien Udriot", + "email": "fabien@ecodev.ch", + "company": "", + "username": "ecodev" + } + ], + "description": "Media management system for TYPO3 CMS.", + "time": "2017-11-02T13:08:04+00:00" + }, + { + "name": "typo3-ter/metaseo", + "version": "2.1.0", + "dist": { + "type": "zip", + "url": "https://extensions.typo3.org/extension/download/metaseo/2.1.0/zip/", + "reference": null, + "shasum": null + }, + "require": { + "php": ">= 5.3.0", + "typo3/cms-core": ">= 6.2.1, <= 7.6.99" + }, + "replace": { + "metaseo": "self.version" + }, + "type": "typo3-cms-extension", + "autoload": { + "psr-4": { + "Metaseo\\Metaseo\\": "Classes/" + } + }, + "authors": [ + { + "name": "MetaSEO Team", + "email": "", + "company": "", + "username": "mblaschke" + } + ], + "description": "Search Engine Optimization (SEO), Indexed Google-Sitemap (TXT- and XML-Sitemap) for all Extensions (pibase, extbase), Metatags, Canonical-URL, Pagetitle manipulations, Crawler verification, Piwik and Google Analytics support and some more... multi-language- and multi-tree-support", + "time": "2017-06-11T18:32:55+00:00" + }, + { + "name": "typo3-ter/ods-redirects", + "version": "1.3.4", + "dist": { + "type": "zip", + "url": "https://extensions.typo3.org/extension/download/ods_redirects/1.3.4/zip/", + "reference": null, + "shasum": null + }, + "require": { + "typo3/cms-core": ">= 7.0.0, <= 8.99.99" + }, + "replace": { + "ods_redirects": "self.version", + "typo3-ter/ods_redirects": "self.version" + }, + "type": "typo3-cms-extension", + "autoload": { + "classmap": [ + "" + ], + "exclude-from-classmap": [ + "Migrations", + "Tests", + "tests", + "class.ext_update.php" + ] + }, + "authors": [ + { + "name": "Robert Heel", + "email": "typo3@bobosch.de", + "company": "", + "username": "bobosch" + } + ], + "description": "Simply manage (permanent 301) redirects in the list view. The extension supports multidomain sites, count the redirect usage and shows the last referer. UPDATE! imports the records from realurl.", + "time": "2017-05-22T22:07:45+00:00" + }, + { + "name": "typo3-ter/pagepath", + "version": "1.1.6", + "dist": { + "type": "zip", + "url": "https://extensions.typo3.org/extension/download/pagepath/1.1.6/zip/", + "reference": null, + "shasum": null + }, + "require": { + "php": ">= 5.5.0, <= 7.0.99", + "typo3/cms-core": ">= 7.6.2, <= 8.6.99" + }, + "replace": { + "pagepath": "self.version" + }, + "type": "typo3-cms-extension", + "autoload": { + "classmap": [ + "Classes/" + ] + }, + "authors": [ + { + "name": "Sebastian Michaelsen", + "email": "sebastian@michaelsen.io", + "company": "", + "username": "phpprof" + } + ], + "description": "Provides API for Backend modules to get a proper path to the Frontend page (simulateStatic/RealURL/CoolURI-like)", + "time": "2017-02-15T15:40:25+00:00" + }, + { + "name": "typo3-ter/pb-social", + "version": "1.3.1", + "dist": { + "type": "zip", + "url": "https://extensions.typo3.org/extension/download/pb_social/1.3.1/zip/", + "reference": null, + "shasum": null + }, + "require": { + "php": ">= 5.6.0, <= 7.1.99", + "typo3/cms-core": ">= 6.2.0, <= 8.7.99" + }, + "replace": { + "pb_social": "self.version", + "typo3-ter/pb_social": "self.version" + }, + "type": "typo3-cms-extension", + "autoload": { + "psr-4": { + "PlusB\\PbSocial\\": "Classes" + }, + "classmap": [ + "Resources/Private/Libs" + ] + }, + "authors": [ + { + "name": "Mikolaj Jedrzejewski - plus B, Ramon Mohi - plus B, Kai Lorenz - plus B", + "email": "info@plusb.de", + "company": "", + "username": "plusb" + } + ], + "time": "2018-02-14T11:05:37+00:00" + }, + { + "name": "typo3-ter/sourceopt", + "version": "1.0.0", + "dist": { + "type": "zip", + "url": "https://extensions.typo3.org/extension/download/sourceopt/1.0.0/zip/", + "reference": null, + "shasum": null + }, + "require": { + "php": ">= 5.6.0", + "typo3/cms-core": ">= 7.6.0, <= 8.7.99" + }, + "replace": { + "sourceopt": "self.version" + }, + "type": "typo3-cms-extension", + "autoload": { + "psr-4": { + "HTML\\Sourceopt\\": "Classes/" + } + }, + "authors": [ + { + "name": "Dr. Ronald P. Steiner, Boris Nicolai, Tim Lochmueller", + "email": "ronald.steiner@googlemail.com, boris.nicolai@andavida.com, tim@fruit-lab.de", + "company": "", + "username": "spyker" + } + ], + "description": "Optimization of the final page: reformatting the (x)html output, removal of new lines, and quotes. Move development repository to https://github.com/lochmueller/sourceopt", + "time": "2017-06-15T17:25:53+00:00" + }, + { + "name": "typo3-ter/vidi", + "version": "2.6.0", + "dist": { + "type": "zip", + "url": "https://extensions.typo3.org/extension/download/vidi/2.6.0/zip/", + "reference": null, + "shasum": null + }, + "require": { + "typo3/cms-core": ">= 7.6.0, <= 8.99.99" + }, + "replace": { + "vidi": "self.version" + }, + "type": "typo3-cms-extension", + "autoload": { + "psr-4": { + "Fab\\Vidi\\": "Classes/" + } + }, + "authors": [ + { + "name": "Fabien Udriot", + "email": "fabien@ecodev.ch", + "company": "", + "username": "ecodev" + } + ], + "description": "Generic listing of records with versatile ways of interacting with the data, e.g. advanced filter, inline editing, mass editing, ... Veni, vidi, vici!", + "time": "2017-11-02T13:05:47+00:00" + }, + { + "name": "typo3/class-alias-loader", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/class-alias-loader.git", + "reference": "a9dd295c81ed0b51455644be420ab9210cad688f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/class-alias-loader/zipball/a9dd295c81ed0b51455644be420ab9210cad688f", + "reference": "a9dd295c81ed0b51455644be420ab9210cad688f", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0", + "php": ">=5.3.7" + }, + "replace": { + "helhum/class-alias-loader": "*" + }, + "require-dev": { + "composer/composer": "dev-master", + "mikey179/vfsstream": "1.4.*@dev", + "phpunit/phpunit": "~4.7.0" + }, + "type": "composer-plugin", + "extra": { + "class": "TYPO3\\ClassAliasLoader\\Plugin", + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\ClassAliasLoader\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Helmut Hummel", + "email": "info@helhum.io" + } + ], + "description": "Amends the composer class loader to support class aliases to provide backwards compatibility for packages", + "homepage": "http://github.com/TYPO3/class-alias-loader", + "keywords": [ + "alias", + "autoloader", + "classloader", + "composer" + ], + "time": "2015-10-06T10:25:44+00:00" + }, + { + "name": "typo3/cms", + "version": "v7.6.27", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/TYPO3.CMS.git", + "reference": "22d0da3af76bb7aa2cf1ce31851370be7c47acb2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/TYPO3.CMS/zipball/22d0da3af76bb7aa2cf1ce31851370be7c47acb2", + "reference": "22d0da3af76bb7aa2cf1ce31851370be7c47acb2", + "shasum": "" + }, + "require": { + "cogpowered/finediff": "~0.3.1", + "doctrine/instantiator": "~1.0.4", + "ext-json": "*", + "ext-pcre": "*", + "ext-session": "*", + "ext-xml": "*", + "mso/idna-convert": "^0.9.1", + "pear/http_request2": "~2.3.0", + "php": ">=5.5.0", + "psr/http-message": "~1.0", + "psr/log": "~1.0.0", + "swiftmailer/swiftmailer": "~5.4.5", + "symfony/console": "^2.7", + "symfony/debug": "^2.7", + "symfony/finder": "^2.7", + "typo3/class-alias-loader": "^1.0", + "typo3/cms-composer-installers": "^1.2.8" + }, + "conflict": { + "symfony/finder": "2.7.44 || 2.8.37" + }, + "replace": { + "typo3-ter/adodb": "*", + "typo3-ter/dbal": "*", + "typo3-ter/func": "*", + "typo3-ter/rtehtmlarea": "*", + "typo3/cms-about": "self.version", + "typo3/cms-aboutmodules": "self.version", + "typo3/cms-adodb": "self.version", + "typo3/cms-backend": "self.version", + "typo3/cms-belog": "self.version", + "typo3/cms-beuser": "self.version", + "typo3/cms-context-help": "self.version", + "typo3/cms-core": "self.version", + "typo3/cms-cshmanual": "self.version", + "typo3/cms-css-styled-content": "self.version", + "typo3/cms-dbal": "self.version", + "typo3/cms-documentation": "self.version", + "typo3/cms-extbase": "self.version", + "typo3/cms-extensionmanager": "self.version", + "typo3/cms-feedit": "self.version", + "typo3/cms-felogin": "self.version", + "typo3/cms-filelist": "self.version", + "typo3/cms-filemetadata": "self.version", + "typo3/cms-fluid": "self.version", + "typo3/cms-fluid-styled-content": "self.version", + "typo3/cms-form": "self.version", + "typo3/cms-frontend": "self.version", + "typo3/cms-func": "self.version", + "typo3/cms-func-wizards": "self.version", + "typo3/cms-impexp": "self.version", + "typo3/cms-indexed-search": "self.version", + "typo3/cms-indexed-search-mysql": "self.version", + "typo3/cms-info": "self.version", + "typo3/cms-info-pagetsconfig": "self.version", + "typo3/cms-install": "self.version", + "typo3/cms-lang": "self.version", + "typo3/cms-linkvalidator": "self.version", + "typo3/cms-lowlevel": "self.version", + "typo3/cms-opendocs": "self.version", + "typo3/cms-recordlist": "self.version", + "typo3/cms-recycler": "self.version", + "typo3/cms-reports": "self.version", + "typo3/cms-rsaauth": "self.version", + "typo3/cms-rtehtmlarea": "self.version", + "typo3/cms-saltedpasswords": "self.version", + "typo3/cms-scheduler": "self.version", + "typo3/cms-setup": "self.version", + "typo3/cms-sv": "self.version", + "typo3/cms-sys-action": "self.version", + "typo3/cms-sys-note": "self.version", + "typo3/cms-t3editor": "self.version", + "typo3/cms-t3skin": "self.version", + "typo3/cms-taskcenter": "self.version", + "typo3/cms-tstemplate": "self.version", + "typo3/cms-version": "self.version", + "typo3/cms-viewpage": "self.version", + "typo3/cms-wizard-crpages": "self.version", + "typo3/cms-wizard-sortpages": "self.version", + "typo3/cms-workspaces": "self.version" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.2", + "mikey179/vfsstream": "1.6.0", + "phpunit/phpunit": "~4.8.0", + "symfony/event-dispatcher": "^2.8", + "symfony/filesystem": "^2.8", + "symfony/options-resolver": "^2.8", + "symfony/polyfill-mbstring": "~1.0", + "symfony/process": "^2.8", + "symfony/stopwatch": "^2.8", + "symfony/yaml": "^2.8" + }, + "suggest": { + "ext-fileinfo": "Used for proper file type detection in the file abstraction layer", + "ext-gd": "GDlib/Freetype is required for building images with text (GIFBUILDER) and can also be used to scale images", + "ext-mysqli": "", + "ext-openssl": "", + "ext-soap": "", + "ext-zip": "", + "ext-zlib": "TYPO3 uses zlib for amongst others output compression and un/packing t3x extension files" + }, + "type": "typo3-cms-core", + "extra": { + "typo3/class-alias-loader": { + "always-add-alias-loader": true + }, + "branch-alias": { + "dev-TYPO3_7-6": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\About\\": "typo3/sysext/about/Classes/", + "TYPO3\\CMS\\Aboutmodules\\": "typo3/sysext/aboutmodules/Classes/", + "TYPO3\\CMS\\Backend\\": "typo3/sysext/backend/Classes/", + "TYPO3\\CMS\\Belog\\": "typo3/sysext/belog/Classes/", + "TYPO3\\CMS\\Beuser\\": "typo3/sysext/beuser/Classes/", + "TYPO3\\CMS\\ContextHelp\\": "typo3/sysext/context_help/Classes/", + "TYPO3\\CMS\\Core\\": "typo3/sysext/core/Classes/", + "TYPO3\\CMS\\Cshmanual\\": "typo3/sysext/cshmanual/Classes/", + "TYPO3\\CMS\\CssStyledContent\\": "typo3/sysext/css_styled_content/Classes/", + "TYPO3\\CMS\\Dbal\\": "typo3/sysext/dbal/Classes/", + "TYPO3\\CMS\\Documentation\\": "typo3/sysext/documentation/Classes/", + "TYPO3\\CMS\\Extbase\\": "typo3/sysext/extbase/Classes/", + "TYPO3\\CMS\\Extensionmanager\\": "typo3/sysext/extensionmanager/Classes/", + "TYPO3\\CMS\\Feedit\\": "typo3/sysext/feedit/Classes/", + "TYPO3\\CMS\\Felogin\\": "typo3/sysext/felogin/Classes/", + "TYPO3\\CMS\\Filelist\\": "typo3/sysext/filelist/Classes/", + "TYPO3\\CMS\\Fluid\\": "typo3/sysext/fluid/Classes/", + "TYPO3\\CMS\\FluidStyledContent\\": "typo3/sysext/fluid_styled_content/Classes/", + "TYPO3\\CMS\\Form\\": "typo3/sysext/form/Classes/", + "TYPO3\\CMS\\Frontend\\": "typo3/sysext/frontend/Classes/", + "TYPO3\\CMS\\Func\\": "typo3/sysext/func/Classes/", + "TYPO3\\CMS\\Impexp\\": "typo3/sysext/impexp/Classes/", + "TYPO3\\CMS\\IndexedSearch\\": "typo3/sysext/indexed_search/Classes/", + "TYPO3\\CMS\\IndexedSearchMysql\\": "typo3/sysext/indexed_search_mysql/Classes/", + "TYPO3\\CMS\\Info\\": "typo3/sysext/info/Classes/", + "TYPO3\\CMS\\InfoPagetsconfig\\": "typo3/sysext/info_pagetsconfig/Classes/", + "TYPO3\\CMS\\Install\\": "typo3/sysext/install/Classes/", + "TYPO3\\CMS\\Lang\\": "typo3/sysext/lang/Classes/", + "TYPO3\\CMS\\Linkvalidator\\": "typo3/sysext/linkvalidator/Classes/", + "TYPO3\\CMS\\Lowlevel\\": "typo3/sysext/lowlevel/Classes/", + "TYPO3\\CMS\\Opendocs\\": "typo3/sysext/opendocs/Classes/", + "TYPO3\\CMS\\Recordlist\\": "typo3/sysext/recordlist/Classes/", + "TYPO3\\CMS\\Recycler\\": "typo3/sysext/recycler/Classes/", + "TYPO3\\CMS\\Reports\\": "typo3/sysext/reports/Classes/", + "TYPO3\\CMS\\Rsaauth\\": "typo3/sysext/rsaauth/Classes/", + "TYPO3\\CMS\\Rtehtmlarea\\": "typo3/sysext/rtehtmlarea/Classes/", + "TYPO3\\CMS\\Saltedpasswords\\": "typo3/sysext/saltedpasswords/Classes/", + "TYPO3\\CMS\\Scheduler\\": "typo3/sysext/scheduler/Classes/", + "TYPO3\\CMS\\Setup\\": "typo3/sysext/setup/Classes/", + "TYPO3\\CMS\\Sv\\": "typo3/sysext/sv/Classes/", + "TYPO3\\CMS\\SysAction\\": "typo3/sysext/sys_action/Classes/", + "TYPO3\\CMS\\SysNote\\": "typo3/sysext/sys_note/Classes/", + "TYPO3\\CMS\\T3editor\\": "typo3/sysext/t3editor/Classes/", + "TYPO3\\CMS\\Taskcenter\\": "typo3/sysext/taskcenter/Classes/", + "TYPO3\\CMS\\Tstemplate\\": "typo3/sysext/tstemplate/Classes/", + "TYPO3\\CMS\\Version\\": "typo3/sysext/version/Classes/", + "TYPO3\\CMS\\Viewpage\\": "typo3/sysext/viewpage/Classes/", + "TYPO3\\CMS\\WizardCrpages\\": "typo3/sysext/wizard_crpages/Classes/", + "TYPO3\\CMS\\WizardSortpages\\": "typo3/sysext/wizard_sortpages/Classes/", + "TYPO3\\CMS\\Workspaces\\": "typo3/sysext/workspaces/Classes/" + }, + "classmap": [ + "typo3/sysext/core/Resources/PHP/", + "typo3/sysext/fluid/Resources/PHP/" + ], + "files": [ + "typo3/sysext/core/Resources/PHP/GlobalDebugFunctions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "The TYPO3 Community", + "homepage": "https://typo3.org/community/", + "role": "Contributor" + }, + { + "name": "TYPO3 CMS Core Team", + "homepage": "https://forge.typo3.org/projects/typo3cms-core", + "role": "Developer" + } + ], + "description": "TYPO3 CMS is a free open source Content Management Framework initially created by Kasper Skaarhoj and licensed under GNU/GPL.", + "homepage": "https://typo3.org/", + "keywords": [ + "Content management system", + "cms", + "extbase", + "typo3" + ], + "time": "2018-04-17T08:09:51+00:00" + }, + { + "name": "typo3/cms-composer-installers", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/TYPO3/CmsComposerInstallers.git", + "reference": "98fec6f650016c437b29e56487dd349ed062af93" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/TYPO3/CmsComposerInstallers/zipball/98fec6f650016c437b29e56487dd349ed062af93", + "reference": "98fec6f650016c437b29e56487dd349ed062af93", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0.0", + "php": ">=5.5 <7.3" + }, + "conflict": { + "composer/installers": "<1.0.24 || >1.0.24" + }, + "replace": { + "lw/typo3cms-installers": "*", + "netresearch/composer-installers": "*" + }, + "require-dev": { + "composer/composer": "1.*" + }, + "type": "composer-plugin", + "extra": { + "class": "TYPO3\\CMS\\Composer\\Installer\\Plugin", + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "psr-4": { + "TYPO3\\CMS\\Composer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "GPL-2.0+" + ], + "authors": [ + { + "name": "Christian Opitz", + "email": "christian.opitz@netresearch.de" + }, + { + "name": "Lars Peipmann", + "email": "lars@peipmann.de" + }, + { + "name": "Helmut Hummel", + "email": "info@helhum.io" + } + ], + "description": "TYPO3 CMS Installers", + "homepage": "https://github.com/TYPO3/CmsComposerInstallers", + "keywords": [ + "cms", + "core", + "extension", + "installer", + "typo3" + ], + "time": "2017-12-04T15:30:33+00:00" + }, + { + "name": "yohang/calendr", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/yohang/CalendR.git", + "reference": "1ae1da29ec9e633afb692cc763b6736c1def3f55" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/yohang/CalendR/zipball/1ae1da29ec9e633afb692cc763b6736c1def3f55", + "reference": "1ae1da29ec9e633afb692cc763b6736c1def3f55", + "shasum": "" + }, + "require": { + "php": "^5.5|^7.0", + "symfony/options-resolver": "^2.7|^3.0|^4.0" + }, + "require-dev": { + "doctrine/cache": "^1.5", + "doctrine/common": "^2.5", + "doctrine/orm": "^2.5", + "phpunit/phpunit": "^4.8.35|^5.4.0|^6.0|^7.0", + "silex/silex": "^1.3", + "twig/twig": "^1.23" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1.x-dev" + } + }, + "autoload": { + "psr-0": { + "CalendR": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Yohan GIARELLI", + "email": "yohan@giarel.li", + "homepage": "http://yohan.giarel.li" + } + ], + "description": "Object Oriented calendar management", + "homepage": "https://github.com/yohang/CalendR", + "keywords": [ + "calendar", + "date", + "events" + ], + "time": "2018-04-04T17:39:14+00:00" + } + ], + "packages-dev": [ + { + "name": "deployer/deployer", + "version": "v4.3.2", + "source": { + "type": "git", + "url": "https://github.com/deployphp/deployer.git", + "reference": "0fda27f124943bfcecf714f010c7747a4be66d04" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/deployphp/deployer/zipball/0fda27f124943bfcecf714f010c7747a4be66d04", + "reference": "0fda27f124943bfcecf714f010c7747a4be66d04", + "shasum": "" + }, + "require": { + "elfet/pure": "~2.0", + "monolog/monolog": "^1.21", + "php": ">=5.6.0", + "phpseclib/phpseclib": "~2.0", + "pimple/pimple": "~3.0", + "symfony/console": "~2.6|~3.0", + "symfony/finder": "~2.6|~3.0", + "symfony/process": "~2.6|~3.0", + "symfony/yaml": "~2.6|~3.0" + }, + "require-dev": { + "deployer/phar-update": "~2.0", + "phpunit/phpunit": "~5.7" + }, + "suggest": { + "ext-sockets": "For parallel deployment" + }, + "bin": [ + "bin/dep" + ], + "type": "library", + "autoload": { + "psr-4": { + "Deployer\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Medvedev", + "email": "anton@medv.io" + } + ], + "description": "Deployment Tool", + "homepage": "https://deployer.org", + "time": "2017-12-14T06:41:41+00:00" + }, + { + "name": "elfet/pure", + "version": "v2.0.0", + "source": { + "type": "git", + "url": "https://github.com/elfet/purephp.git", + "reference": "9d6422d31b89c4f79c322df2a7772936a8bc74a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/elfet/purephp/zipball/9d6422d31b89c4f79c322df2a7772936a8bc74a1", + "reference": "9d6422d31b89c4f79c322df2a7772936a8bc74a1", + "shasum": "" + }, + "require": { + "react/react": "~0.4", + "symfony/console": "~2.6|~3.0", + "symfony/debug": "~2.6|~3.0", + "symfony/expression-language": "~2.6|~3.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4", + "symfony/finder": "~2.6|~3.0", + "symfony/process": "~2.6|~3.0" + }, + "bin": [ + "pure" + ], + "type": "library", + "autoload": { + "psr-4": { + "Pure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anton Medvedev", + "email": "anton@medv.io" + } + ], + "description": "Pure PHP key-value storage", + "time": "2016-03-19T14:26:03+00:00" + }, + { + "name": "evenement/evenement", + "version": "v2.1.0", + "source": { + "type": "git", + "url": "https://github.com/igorw/evenement.git", + "reference": "6ba9a777870ab49f417e703229d53931ed40fd7a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/igorw/evenement/zipball/6ba9a777870ab49f417e703229d53931ed40fd7a", + "reference": "6ba9a777870ab49f417e703229d53931ed40fd7a", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0||^5.7||^4.8.35" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-0": { + "Evenement": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Événement is a very simple event dispatching library for PHP", + "keywords": [ + "event-dispatcher", + "event-emitter" + ], + "time": "2017-07-17T17:39:19+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2017-03-20T17:10:46+00:00" + }, + { + "name": "monolog/monolog", + "version": "1.23.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/log": "~1.0" + }, + "provide": { + "psr/log-implementation": "1.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "graylog2/gelf-php": "~1.0", + "jakub-onderka/php-parallel-lint": "0.9", + "php-amqplib/php-amqplib": "~2.4", + "php-console/php-console": "^3.1.3", + "phpunit/phpunit": "~4.5", + "phpunit/phpunit-mock-objects": "2.3.0", + "ruflin/elastica": ">=0.90 <3.0", + "sentry/sentry": "^0.13", + "swiftmailer/swiftmailer": "^5.3|^6.0" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-mongo": "Allow sending log messages to a MongoDB server", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "php-console/php-console": "Allow sending log messages to Google Chrome", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server", + "sentry/sentry": "Allow sending log messages to a Sentry server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "http://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "time": "2017-06-19T01:22:40+00:00" + }, + { + "name": "phpseclib/phpseclib", + "version": "2.0.11", + "source": { + "type": "git", + "url": "https://github.com/phpseclib/phpseclib.git", + "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/7053f06f91b3de78e143d430e55a8f7889efc08b", + "reference": "7053f06f91b3de78e143d430e55a8f7889efc08b", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phing/phing": "~2.7", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0", + "sami/sami": "~2.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "suggest": { + "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", + "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", + "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", + "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations." + }, + "type": "library", + "autoload": { + "files": [ + "phpseclib/bootstrap.php" + ], + "psr-4": { + "phpseclib\\": "phpseclib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jim Wigginton", + "email": "terrafrost@php.net", + "role": "Lead Developer" + }, + { + "name": "Patrick Monnerat", + "email": "pm@datasphere.ch", + "role": "Developer" + }, + { + "name": "Andreas Fischer", + "email": "bantu@phpbb.com", + "role": "Developer" + }, + { + "name": "Hans-Jürgen Petrich", + "email": "petrich@tronic-media.com", + "role": "Developer" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "role": "Developer" + } + ], + "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.", + "homepage": "http://phpseclib.sourceforge.net", + "keywords": [ + "BigInteger", + "aes", + "asn.1", + "asn1", + "blowfish", + "crypto", + "cryptography", + "encryption", + "rsa", + "security", + "sftp", + "signature", + "signing", + "ssh", + "twofish", + "x.509", + "x509" + ], + "time": "2018-04-15T16:55:05+00:00" + }, + { + "name": "pimple/pimple", + "version": "v3.2.3", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", + "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "psr/container": "^1.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pimple": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "http://pimple.sensiolabs.org", + "keywords": [ + "container", + "dependency injection" + ], + "time": "2018-01-21T07:42:36+00:00" + }, + { + "name": "psr/cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", + "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "time": "2016-08-06T20:24:11+00:00" + }, + { + "name": "psr/container", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "time": "2017-02-14T16:28:37+00:00" + }, + { + "name": "psr/simple-cache", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "time": "2017-10-23T01:57:42+00:00" + }, + { + "name": "react/cache", + "version": "v0.4.2", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "75494f26b4ef089db9bf8c90b63c296246e099e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/75494f26b4ef089db9bf8c90b63c296246e099e8", + "reference": "75494f26b4ef089db9bf8c90b63c296246e099e8", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "~2.0|~1.1" + }, + "require-dev": { + "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "time": "2017-12-20T16:47:13+00:00" + }, + { + "name": "react/child-process", + "version": "v0.4.3", + "source": { + "type": "git", + "url": "https://github.com/reactphp/child-process.git", + "reference": "b81d06daaafb5d7d592b6f7f8b1b7905cdef9ac6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/b81d06daaafb5d7d592b6f7f8b1b7905cdef9ac6", + "reference": "b81d06daaafb5d7d592b6f7f8b1b7905cdef9ac6", + "shasum": "" + }, + "require": { + "evenement/evenement": "^2.0 || ^1.0", + "php": ">=5.3.0", + "react/event-loop": "^0.4 || ^0.3", + "react/stream": "^0.5 || ^0.4.4" + }, + "require-dev": { + "phpunit/phpunit": "^5.0 || ^4.8.10", + "sebastian/environment": "~1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\ChildProcess\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Library for executing child processes.", + "keywords": [ + "process" + ], + "time": "2017-03-14T13:23:20+00:00" + }, + { + "name": "react/dns", + "version": "v0.4.13", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "7d1e08c300fd7de600810883386ee5e2a64898f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/7d1e08c300fd7de600810883386ee5e2a64898f4", + "reference": "7d1e08c300fd7de600810883386ee5e2a64898f4", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "~0.4.0|~0.3.0", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5", + "react/promise": "^2.1 || ^1.2.1", + "react/promise-timer": "^1.2", + "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4.5" + }, + "require-dev": { + "clue/block-react": "^1.2", + "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "time": "2018-02-27T12:51:22+00:00" + }, + { + "name": "react/event-loop", + "version": "v0.4.3", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "8bde03488ee897dc6bb3d91e4e17c353f9c5252f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/8bde03488ee897dc6bb3d91e4e17c353f9c5252f", + "reference": "8bde03488ee897dc6bb3d91e4e17c353f9c5252f", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "suggest": { + "ext-event": "~1.0", + "ext-libev": "*", + "ext-libevent": ">=0.1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Event loop abstraction layer that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "time": "2017-04-27T10:56:23+00:00" + }, + { + "name": "react/http", + "version": "v0.4.4", + "source": { + "type": "git", + "url": "https://github.com/reactphp/http.git", + "reference": "aac319bd789cbc7b478d42cde2d03596e97e3222" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/http/zipball/aac319bd789cbc7b478d42cde2d03596e97e3222", + "reference": "aac319bd789cbc7b478d42cde2d03596e97e3222", + "shasum": "" + }, + "require": { + "evenement/evenement": "^2.0 || ^1.0", + "php": ">=5.3.0", + "react/socket": "^0.4", + "react/stream": "^0.4.4", + "ringcentral/psr7": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.10||^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Http\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Library for building an evented http server.", + "keywords": [ + "http" + ], + "time": "2017-02-13T14:12:50+00:00" + }, + { + "name": "react/http-client", + "version": "v0.4.17", + "source": { + "type": "git", + "url": "https://github.com/reactphp/http-client.git", + "reference": "75ee8a113f156834aaabfe0055e8db531cb4892c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/http-client/zipball/75ee8a113f156834aaabfe0055e8db531cb4892c", + "reference": "75ee8a113f156834aaabfe0055e8db531cb4892c", + "shasum": "" + }, + "require": { + "evenement/evenement": "~2.0", + "guzzlehttp/psr7": "^1.0", + "php": ">=5.4.0", + "react/dns": "0.4.*", + "react/event-loop": "0.4.*", + "react/promise": "~2.2", + "react/socket-client": "^0.5 || ^0.4 || ^0.3", + "react/stream": "0.4.*" + }, + "require-dev": { + "phpunit/phpunit": "^5.0 || ^4.8.10" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\HttpClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Asynchronous HTTP client library.", + "keywords": [ + "http" + ], + "time": "2017-03-20T09:55:48+00:00" + }, + { + "name": "react/promise", + "version": "v2.5.1", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "62785ae604c8d69725d693eb370e1d67e94c4053" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/62785ae604c8d69725d693eb370e1d67e94c4053", + "reference": "62785ae604c8d69725d693eb370e1d67e94c4053", + "shasum": "" + }, + "require": { + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "time": "2017-03-25T12:08:31+00:00" + }, + { + "name": "react/promise-timer", + "version": "v1.2.1", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise-timer.git", + "reference": "9b4cd9cbe7457e0d87fe8aa7ccceab8a2c830fbd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/9b4cd9cbe7457e0d87fe8aa7ccceab8a2c830fbd", + "reference": "9b4cd9cbe7457e0d87fe8aa7ccceab8a2c830fbd", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/event-loop": "^1.0 || ^0.5 || ^0.4 || ^0.3.5", + "react/promise": "~2.1|~1.2" + }, + "require-dev": { + "phpunit/phpunit": "^6.4 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Promise\\Timer\\": "src/" + }, + "files": [ + "src/functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@lueck.tv" + } + ], + "description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.", + "homepage": "https://github.com/react/promise-timer", + "keywords": [ + "async", + "event-loop", + "promise", + "reactphp", + "timeout", + "timer" + ], + "time": "2017-12-22T15:41:41+00:00" + }, + { + "name": "react/react", + "version": "v0.4.2", + "source": { + "type": "git", + "url": "https://github.com/reactphp/react.git", + "reference": "457b6b8a16a37c11278cac0870d6d2ff911c5765" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/react/zipball/457b6b8a16a37c11278cac0870d6d2ff911c5765", + "reference": "457b6b8a16a37c11278cac0870d6d2ff911c5765", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "react/cache": "0.4.*", + "react/child-process": "0.4.*", + "react/dns": "0.4.*", + "react/event-loop": "0.4.*", + "react/http": "0.4.*", + "react/http-client": "0.4.*", + "react/promise": "~2.1", + "react/socket": "0.4.*", + "react/socket-client": "0.4.*", + "react/stream": "0.4.*" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "ext-event": "Allows for use of a more performant event-loop implementation.", + "ext-libev": "Allows for use of a more performant event-loop implementation.", + "ext-libevent": "Allows for use of a more performant event-loop implementation." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.5-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Nuclear Reactor written in PHP.", + "keywords": [ + "asynchronous", + "event-loop", + "reactor" + ], + "time": "2014-12-11T02:06:55+00:00" + }, + { + "name": "react/socket", + "version": "v0.4.6", + "source": { + "type": "git", + "url": "https://github.com/reactphp/socket.git", + "reference": "cf074e53c974df52388ebd09710a9018894745d2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/socket/zipball/cf074e53c974df52388ebd09710a9018894745d2", + "reference": "cf074e53c974df52388ebd09710a9018894745d2", + "shasum": "" + }, + "require": { + "evenement/evenement": "~2.0|~1.0", + "php": ">=5.3.0", + "react/event-loop": "0.4.*|0.3.*", + "react/promise": "^2.0 || ^1.1", + "react/stream": "^0.4.5" + }, + "require-dev": { + "clue/block-react": "^1.1", + "phpunit/phpunit": "~4.8", + "react/socket-client": "^0.5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Socket\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server for React PHP", + "keywords": [ + "Socket" + ], + "time": "2017-01-26T09:23:38+00:00" + }, + { + "name": "react/socket-client", + "version": "v0.4.6", + "source": { + "type": "git", + "url": "https://github.com/reactphp/socket-client.git", + "reference": "49e730523b73d912e56f7a41f53ed3fc083ae167" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/socket-client/zipball/49e730523b73d912e56f7a41f53ed3fc083ae167", + "reference": "49e730523b73d912e56f7a41f53ed3fc083ae167", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "react/dns": "0.4.*", + "react/event-loop": "0.4.*", + "react/promise": "~2.0", + "react/stream": "0.4.*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.4-dev" + } + }, + "autoload": { + "psr-4": { + "React\\SocketClient\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Async connector to open TCP/IP and SSL/TLS based connections.", + "keywords": [ + "Socket" + ], + "abandoned": "react/socket", + "time": "2016-12-06T10:54:49+00:00" + }, + { + "name": "react/stream", + "version": "v0.4.6", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "44dc7f51ea48624110136b535b9ba44fd7d0c1ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/stream/zipball/44dc7f51ea48624110136b535b9ba44fd7d0c1ee", + "reference": "44dc7f51ea48624110136b535b9ba44fd7d0c1ee", + "shasum": "" + }, + "require": { + "evenement/evenement": "^2.0|^1.0", + "php": ">=5.3.8" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "react/event-loop": "^0.4|^0.3", + "react/promise": "^2.0|^1.0" + }, + "suggest": { + "react/event-loop": "^0.4", + "react/promise": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Stream\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Basic readable and writable stream interfaces that support piping.", + "keywords": [ + "pipe", + "stream" + ], + "time": "2017-01-25T14:44:14+00:00" + }, + { + "name": "ringcentral/psr7", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/ringcentral/psr7.git", + "reference": "dcd84bbb49b96c616d1dcc8bfb9bef3f2cd53d1c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ringcentral/psr7/zipball/dcd84bbb49b96c616d1dcc8bfb9bef3f2cd53d1c", + "reference": "dcd84bbb49b96c616d1dcc8bfb9bef3f2cd53d1c", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "psr/http-message": "~1.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "RingCentral\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "PSR-7 message implementation", + "keywords": [ + "http", + "message", + "stream", + "uri" + ], + "time": "2018-01-15T21:00:49+00:00" + }, + { + "name": "symfony/cache", + "version": "v3.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/cache.git", + "reference": "13255ddd056e49f3154747943f8ee175d555d394" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/cache/zipball/13255ddd056e49f3154747943f8ee175d555d394", + "reference": "13255ddd056e49f3154747943f8ee175d555d394", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "psr/cache": "~1.0", + "psr/log": "~1.0", + "psr/simple-cache": "^1.0", + "symfony/polyfill-apcu": "~1.1" + }, + "conflict": { + "symfony/var-dumper": "<3.3" + }, + "provide": { + "psr/cache-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" + }, + "require-dev": { + "cache/integration-tests": "dev-master", + "doctrine/cache": "~1.6", + "doctrine/dbal": "~2.4", + "predis/predis": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Cache\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Cache component with PSR-6, PSR-16, and tags", + "homepage": "https://symfony.com", + "keywords": [ + "caching", + "psr6" + ], + "time": "2018-04-02T14:35:16+00:00" + }, + { + "name": "symfony/expression-language", + "version": "v3.4.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/expression-language.git", + "reference": "867e4d1f5d4e52435a8ffff6b24fd6a801582241" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/867e4d1f5d4e52435a8ffff6b24fd6a801582241", + "reference": "867e4d1f5d4e52435a8ffff6b24fd6a801582241", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8", + "symfony/cache": "~3.1|~4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\ExpressionLanguage\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony ExpressionLanguage Component", + "homepage": "https://symfony.com", + "time": "2018-01-03T07:37:34+00:00" + }, + { + "name": "symfony/polyfill-apcu", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-apcu.git", + "reference": "e8ae2136ddb53dea314df56fcd88e318ab936c00" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/e8ae2136ddb53dea314df56fcd88e318ab936c00", + "reference": "e8ae2136ddb53dea314df56fcd88e318ab936c00", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Apcu\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "apcu", + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-01-30T19:27:44+00:00" + }, + { + "name": "symfony/yaml", + "version": "v3.3.16", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "af615970e265543a26ee712c958404eb9b7ac93d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/af615970e265543a26ee712c958404eb9b7ac93d", + "reference": "af615970e265543a26ee712c958404eb9b7ac93d", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "require-dev": { + "symfony/console": "~2.8|~3.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.3-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2018-01-20T15:04:53+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^5.6" + }, + "platform-dev": [], + "platform-overrides": { + "php": "5.6.34" + } +} diff --git a/deploy.php b/deploy.php new file mode 100644 index 00000000..0fc360e6 --- /dev/null +++ b/deploy.php @@ -0,0 +1,66 @@ +user('ssh-438277-ep-reisen') + ->forwardAgent() + ->set('deploy_path', '~/{{application}}') + ->set('bin/php', '/usr/local/bin/php5-56STABLE-CLI') +; + +task('build:epevents', function () { + runLocally('cd ' . __DIR__ . '/web/typo3conf/ext/ep_events && npm i && npm run build'); +}); + +task('build:eptheme', function () { + runLocally('cd ' . __DIR__ . '/web/typo3conf/ext/ep_theme && npm i && npm run build'); +}); + +task('upload:epevents', function () { + upload( + __DIR__ . '/web/typo3conf/ext/ep_events/Resources/Public/', + '{{release_path}}/web/typo3conf/ext/ep_events/Resources/Public' + ); +}); + +task('upload:eptheme', function () { + upload( + __DIR__ . '/web/typo3conf/ext/ep_theme/Resources/Public/', + '{{release_path}}/web/typo3conf/ext/ep_theme/Resources/Public' + ); +}); + +task('assets:epevents', [ + 'build:epevents', + 'upload:epevents', +]); + +task('assets:eptheme', [ + 'build:eptheme', + 'upload:eptheme', +]); + +task('assets', [ + 'assets:epevents', + 'assets:eptheme', +]); + +after('deploy:symlink', 'assets'); + +after('deploy:failed', 'deploy:unlock'); diff --git a/web/.htaccess b/web/.htaccess new file mode 100644 index 00000000..d92fbf86 --- /dev/null +++ b/web/.htaccess @@ -0,0 +1,368 @@ +SetEnv TYPO3_CONTEXT "Development" + +##### +# +# Example .htaccess file for TYPO3 CMS - for use with Apache Webserver +# +# This file includes settings for the following configuration options: +# +# - Compression +# - Caching +# - MIME types +# - Cross Origin requests +# - Rewriting and Access +# - Miscellaneous +# - PHP optimisation +# +# If you want to use it, you have to copy it to the root folder of your TYPO3 installation (if its +# not there already) and rename it to '.htaccess'. To make .htaccess files work, you might need to +# adjust the 'AllowOverride' directive in your Apache configuration file. +# +# IMPORTANT: You may need to change this file depending on your TYPO3 installation! +# Consider adding this file's content to your webserver's configuration directly for speed improvement +# +# Lots of the options are taken from https://github.com/h5bp/html5-boilerplate/blob/master/dist/.htaccess +# +#### + + +### Begin: Compression ### + +# Compressing resource files will save bandwidth and so improve loading speed especially for users +# with slower internet connections. TYPO3 can compress the .js and .css files for you. +# *) Uncomment the following lines and +# *) Set $GLOBALS['TYPO3_CONF_VARS']['BE']['compressionLevel'] = 9 for the Backend +# *) Set $GLOBALS['TYPO3_CONF_VARS']['FE']['compressionLevel'] = 9 together with the TypoScript properties +# config.compressJs and config.compressCss for GZIP compression of Frontend JS and CSS files. + +# +# AddType "text/javascript" .gzip +# +# +# AddType "text/css" .gzip +# +#AddEncoding gzip .gzip + + + # Force compression for mangled `Accept-Encoding` request headers + + + SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding + RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding + + + + # Compress all output labeled with one of the following media types. + # + # (!) For Apache versions below version 2.3.7 you don't need to + # enable `mod_filter` and can remove the `` + # and `` lines as `AddOutputFilterByType` is still in + # the core directives. + # + # https://httpd.apache.org/docs/current/mod/mod_filter.html#addoutputfilterbytype + + + AddOutputFilterByType DEFLATE application/atom+xml \ + application/javascript \ + application/json \ + application/ld+json \ + application/manifest+json \ + application/rdf+xml \ + application/rss+xml \ + application/schema+json \ + application/vnd.geo+json \ + application/vnd.ms-fontobject \ + application/x-font-ttf \ + application/x-javascript \ + application/x-web-app-manifest+json \ + application/xhtml+xml \ + application/xml \ + font/eot \ + font/opentype \ + image/bmp \ + image/svg+xml \ + image/vnd.microsoft.icon \ + image/x-icon \ + text/cache-manifest \ + text/css \ + text/html \ + text/javascript \ + text/plain \ + text/vcard \ + text/vnd.rim.location.xloc \ + text/vtt \ + text/x-component \ + text/x-cross-domain-policy \ + text/xml + + + + AddEncoding gzip svgz + + + +### End: Compression ### + + + +### Begin: Browser caching of resource files ### + +# This affects Frontend and Backend and increases performance. + + + ExpiresActive on + ExpiresDefault "access plus 1 month" + + ExpiresByType text/css "access plus 1 year" + + ExpiresByType application/json "access plus 0 seconds" + ExpiresByType application/ld+json "access plus 0 seconds" + ExpiresByType application/schema+json "access plus 0 seconds" + ExpiresByType application/vnd.geo+json "access plus 0 seconds" + ExpiresByType application/xml "access plus 0 seconds" + ExpiresByType text/xml "access plus 0 seconds" + + ExpiresByType image/vnd.microsoft.icon "access plus 1 week" + ExpiresByType image/x-icon "access plus 1 week" + + ExpiresByType text/x-component "access plus 1 month" + + ExpiresByType text/html "access plus 0 seconds" + + ExpiresByType application/javascript "access plus 1 year" + ExpiresByType application/x-javascript "access plus 1 year" + ExpiresByType text/javascript "access plus 1 year" + + ExpiresByType application/manifest+json "access plus 1 week" + ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds" + ExpiresByType text/cache-manifest "access plus 0 seconds" + + ExpiresByType audio/ogg "access plus 1 month" + ExpiresByType image/bmp "access plus 1 month" + ExpiresByType image/gif "access plus 1 month" + ExpiresByType image/jpeg "access plus 1 month" + ExpiresByType image/png "access plus 1 month" + ExpiresByType image/svg+xml "access plus 1 month" + ExpiresByType image/webp "access plus 1 month" + ExpiresByType video/mp4 "access plus 1 month" + ExpiresByType video/ogg "access plus 1 month" + ExpiresByType video/webm "access plus 1 month" + + ExpiresByType application/atom+xml "access plus 1 hour" + ExpiresByType application/rdf+xml "access plus 1 hour" + ExpiresByType application/rss+xml "access plus 1 hour" + + ExpiresByType application/vnd.ms-fontobject "access plus 1 month" + ExpiresByType font/eot "access plus 1 month" + ExpiresByType font/opentype "access plus 1 month" + ExpiresByType application/x-font-ttf "access plus 1 month" + ExpiresByType application/font-woff "access plus 1 month" + ExpiresByType application/x-font-woff "access plus 1 month" + ExpiresByType font/woff "access plus 1 month" + ExpiresByType application/font-woff2 "access plus 1 month" + + ExpiresByType text/x-cross-domain-policy "access plus 1 week" + + + +### End: Browser caching of resource files ### + + +### Begin: MIME types ### + +# Proper MIME types for all files + + + # Data interchange + AddType application/atom+xml atom + AddType application/json json map topojson + AddType application/ld+json jsonld + AddType application/rss+xml rss + AddType application/vnd.geo+json geojson + AddType application/xml rdf xml + + # JavaScript + AddType application/javascript js + + # Manifest files + AddType application/manifest+json webmanifest + AddType application/x-web-app-manifest+json webapp + AddType text/cache-manifest appcache + + # Media files + + AddType audio/mp4 f4a f4b m4a + AddType audio/ogg oga ogg opus + AddType image/bmp bmp + AddType image/svg+xml svg svgz + AddType image/webp webp + AddType video/mp4 f4v f4p m4v mp4 + AddType video/ogg ogv + AddType video/webm webm + AddType video/x-flv flv + AddType image/x-icon cur ico + + # Web fonts + AddType application/font-woff woff + AddType application/font-woff2 woff2 + AddType application/vnd.ms-fontobject eot + AddType application/x-font-ttf ttc ttf + AddType font/opentype otf + + # Other + AddType application/octet-stream safariextz + AddType application/x-bb-appworld bbaw + AddType application/x-chrome-extension crx + AddType application/x-opera-extension oex + AddType application/x-xpinstall xpi + AddType text/vcard vcard vcf + AddType text/vnd.rim.location.xloc xloc + AddType text/vtt vtt + AddType text/x-component htc + + + +# UTF-8 encoding +AddDefaultCharset utf-8 + + AddCharset utf-8 .atom .css .js .json .manifest .rdf .rss .vtt .webapp .webmanifest .xml + + +### End: MIME types ### + + + +### Begin: Cross Origin ### + +# Send the CORS header for images when browsers request it. + + + + SetEnvIf Origin ":" IS_CORS + Header set Access-Control-Allow-Origin "*" env=IS_CORS + + + + +# Allow cross-origin access to web fonts. + + + Header set Access-Control-Allow-Origin "*" + + + +### End: Cross Origin ### + + + +### Begin: Rewriting and Access ### + +# You need rewriting, if you use a URL-Rewriting extension (RealURL, CoolUri). + + + + # Enable URL rewriting + RewriteEngine On + + # Store the current location in an environment variable CWD to use + # mod_rewrite in .htaccess files without knowing the RewriteBase + RewriteCond $0#%{REQUEST_URI} ([^#]*)#(.*)\1$ + RewriteRule ^.*$ - [E=CWD:%2] + + # Rules to set ApplicationContext based on hostname + #RewriteCond %{HTTP_HOST} ^dev\.example\.com$ + #RewriteRule .? - [E=TYPO3_CONTEXT:Development] + #RewriteCond %{HTTP_HOST} ^staging\.example\.com$ + #RewriteRule .? - [E=TYPO3_CONTEXT:Production/Staging] + #RewriteCond %{HTTP_HOST} ^www\.example\.com$ + #RewriteRule .? - [E=TYPO3_CONTEXT:Production] + + # Rule for versioned static files, configured through: + # - $GLOBALS['TYPO3_CONF_VARS']['BE']['versionNumberInFilename'] + # - $GLOBALS['TYPO3_CONF_VARS']['FE']['versionNumberInFilename'] + # IMPORTANT: This rule has to be the very first RewriteCond in order to work! + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ %{ENV:CWD}$1.$3 [L] + + # Access block for folders + RewriteRule _(?:recycler|temp)_/ - [F] + RewriteRule fileadmin/templates/.*\.(?:txt|ts)$ - [F] + RewriteRule ^(?:vendor|typo3_src|typo3temp/logs) - [F] + RewriteRule (?:typo3conf/ext|typo3/sysext|typo3/ext)/[^/]+/(?:Configuration|Resources/Private|Tests?|Documentation|docs?)/ - [F] + + # Block access to all hidden files and directories with the exception of + # the visible content from within the `/.well-known/` hidden directory (RFC 5785). + RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/([^./]+./?)+$" [NC] + RewriteCond %{SCRIPT_FILENAME} -d [OR] + RewriteCond %{SCRIPT_FILENAME} -f + RewriteRule (?:^|/)\. - [F] + + # Stop rewrite processing, if we are in the typo3/ directory or any other known directory + # NOTE: Add your additional local storages here + RewriteRule ^(?:typo3/|fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) - [L] + + # If the file/symlink/directory does not exist => Redirect to index.php. + # For httpd.conf, you need to prefix each '%{REQUEST_FILENAME}' with '%{DOCUMENT_ROOT}'. + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-l + RewriteRule ^.*$ %{ENV:CWD}index.php [QSA,L] + + + +# Access block for files + + # Apache < 2.3 + + Order allow,deny + Deny from all + Satisfy All + + + # Apache ≥ 2.3 + + Require all denied + + + +# Block access to vcs directories + + RedirectMatch 404 /\.(?:git|svn|hg)/ + + +### End: Rewriting and Access ### + + + +### Begin: Miscellaneous ### + +# 404 error prevention for non-existing redirected folders +Options -MultiViews + +# Make sure that directory listings are disabled. + + Options -Indexes + + + + # Force IE to render pages in the highest available mode + Header set X-UA-Compatible "IE=edge" + + Header unset X-UA-Compatible + + + # Reducing MIME type security risks + Header set X-Content-Type-Options "nosniff" + + +# ETag removal + + Header unset ETag + +FileETag None + +### End: Miscellaneous ### + + +# Add your own rules here. diff --git a/web/typo3conf/ext/ep_events/Classes/.htaccess b/web/typo3conf/ext/ep_events/Classes/.htaccess new file mode 100755 index 00000000..3418e55a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Classes/Constants.php b/web/typo3conf/ext/ep_events/Classes/Constants.php new file mode 100644 index 00000000..556eb886 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Constants.php @@ -0,0 +1,35 @@ +, dreipunktnull + * Cedric Ziel , 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! + ***************************************************************/ + +final class Constants +{ + const PAGETYPE_CATEGORY = 101; + const PAGETYPE_OFFER = 102; + const PAGETYPE_ACTIVITY = 103; +} diff --git a/web/typo3conf/ext/ep_events/Classes/Controller/ActivityController.php b/web/typo3conf/ext/ep_events/Classes/Controller/ActivityController.php new file mode 100644 index 00000000..3c2f7ac9 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Controller/ActivityController.php @@ -0,0 +1,78 @@ +, dreipunktnull + * Cedric Ziel , 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\EpEvents\Domain\Model\Activity; +use EP\EpEvents\Domain\Repository\ActivityRepository; +use EP\EpEvents\Domain\Repository\OfferRepository; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class ActivityController extends ActionController +{ + /** + * @var ActivityRepository + */ + protected $activityRepository; + + /** + * @var OfferRepository + */ + protected $offerRepository; + + /** + * @param ActivityRepository $activityRepository + * @param OfferRepository $offerRepository + */ + public function __construct(ActivityRepository $activityRepository, OfferRepository $offerRepository) + { + parent::__construct(); + $this->activityRepository = $activityRepository; + $this->offerRepository = $offerRepository; + } + + public function listAction() + { + $configuration = ['activityType' => $this->settings['activityType']]; + $content = $this->configurationManager->getContentObject()->data; + $activities = $this->activityRepository->findByConfiguratorType($configuration['activityType']); + $this->view->assign('activities', $activities); + $this->view->assign('configuration', $configuration); + $this->view->assign('content', $content); + } + + /** + * @param Activity $activity + */ + public function detailAction(Activity $activity) + { + $offers = $this->offerRepository->findByActivity($activity); + $this->view->assign('activity', $activity); + $this->view->assign('offers', $offers); + } + +} diff --git a/web/typo3conf/ext/ep_events/Classes/Controller/AjaxFormController.php b/web/typo3conf/ext/ep_events/Classes/Controller/AjaxFormController.php new file mode 100644 index 00000000..07b92a0a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Controller/AjaxFormController.php @@ -0,0 +1,111 @@ +, dreipunktnull + * Cedric Ziel , 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\EpEvents\Domain\Model\Inquiry; +use EP\EpEvents\Service\EmailService; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; +use TYPO3\CMS\Extbase\Utility\LocalizationUtility; + +class AjaxFormController extends ActionController +{ + + /** + * @var EmailService + */ + protected $emailService; + + /** + * @param EmailService $service + */ + public function injectEmailService(EmailService $service) + { + $this->emailService = $service; + } + + /** + * @param Inquiry $inquiry + * + * @return string + */ + public function processInquiryFormAction(Inquiry $inquiry) + { + $response['status'] = 'ok'; + $this->emailService->send( + $this->settings['inquiryToEmail'], + $this->settings['inquiryToName'], + 'Anfrage E&P Events', + 'Email/Inquiry', + [ 'inquiry' => $inquiry ] + ); + return json_encode($response); + } + + /** + * @param Inquiry $inquiry + * + * @return string + */ + public function processConfiguratorFormAction(Inquiry $inquiry) + { + $response['status'] = 'ok'; + $this->emailService->send( + $this->settings['inquiryToEmail'], + $this->settings['inquiryToName'], + 'Anfrage E&P Events', + 'Email/Configurator', + [ 'inquiry' => $inquiry ] + ); + return json_encode($response); + } + + /** + * @return string + */ + protected function errorAction() { + $formErrors = []; + if ($this->arguments->getValidationResults()->hasErrors()) { + foreach ($this->arguments->getValidationResults()->getFlattenedErrors() as $key => $errors) + { + $key = str_replace('.', '', $key); + $errorsRaw = []; + foreach ($errors as $error) + { + $translationKey = sprintf('tx_epevents.message.%s.%s', $key, $error->getCode()); + $errorsRaw[] = LocalizationUtility::translate($translationKey, 'ep_events'); + } + $formErrors[$key] = implode(', ', $errorsRaw); + } + } + + $response['status'] = 'validation'; + $response['errors'] = $formErrors; + return json_encode($response); + } + +} diff --git a/web/typo3conf/ext/ep_events/Classes/Controller/ContactController.php b/web/typo3conf/ext/ep_events/Classes/Controller/ContactController.php new file mode 100644 index 00000000..6f19fa93 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Controller/ContactController.php @@ -0,0 +1,56 @@ +, dreipunktnull + * Cedric Ziel , 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\EpEvents\Domain\Repository\ContactRepository; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class ContactController extends ActionController +{ + /** + * @var ContactRepository + */ + protected $contactRepository; + + /** + * @param ContactRepository $contactRepository + */ + public function injectContactRepository(ContactRepository $contactRepository) + { + $this->contactRepository = $contactRepository; + } + + public function listAction() + { + $contacts = $this->contactRepository->findAll(); + $content = $this->configurationManager->getContentObject()->data; + $this->view->assign('contacts', $contacts); + $this->view->assign('content', $content); + } + +} diff --git a/web/typo3conf/ext/ep_events/Classes/Controller/FormController.php b/web/typo3conf/ext/ep_events/Classes/Controller/FormController.php new file mode 100644 index 00000000..81bafb9b --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Controller/FormController.php @@ -0,0 +1,103 @@ +, dreipunktnull + * Cedric Ziel , 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\EpEvents\Domain\Model\Inquiry; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class FormController extends ActionController +{ + public function inquiryFormAction() + { + $inquiry = $this->getInquiryFromContext(); + $this->view->assign('inquiry', $inquiry); + } + + /** + * @param int $travelType + * @param int $locationType + */ + public function contactFormAction($travelType = 0, $locationType = 0) + { + $inquiry = Inquiry::fromArguments($travelType, $locationType); + $pageUrl = $this->getCurrentPageUrl(); + $inquiry->setPageUrl($pageUrl); + $this->view->assign('inquiry', $inquiry); + } + + public function configuratorAction() + { + $inquiry = $this->getInquiryFromContext(); + $this->view->assign('inquiry', $inquiry); + } + + /** + * @return Inquiry + */ + protected function getInquiryFromContext() + { + $content = $this->configurationManager->getContentObject()->data; + $defaults = $this->settings['configurator']['defaults']; + if (isset($content['offer'])) { + $offer = $content['offer']; + $inquiry = Inquiry::fromOffer($offer, $defaults); + } elseif (isset($content['travelType'])) { + /** @var \EP\EpEvents\Domain\Model\Traveltype $travelType */ + $travelType = $content['travelType']; + $inquiryName = $this->settings['configurator']['options']['travelType'][$travelType->getConfiguratorType()]; + $inquiry = Inquiry::fromTraveltype($travelType, $inquiryName, $defaults); + } elseif (isset($content['activityType'])) { + $inquiry = new Inquiry($defaults); + $inquiry->setActivityType($content['activityType']); + } else { + $inquiry = new Inquiry($defaults); + } + $pageUrl = $this->getCurrentPageUrl(); + $inquiry->setPageUrl($pageUrl); + return $inquiry; + } + + /** + * @return string + */ + protected function getCurrentPageUrl() + { + if (GeneralUtility::_GET('ref')) { + $pageUid = GeneralUtility::_GET('ref'); + } else { + $pageUid = $GLOBALS['TSFE']->id; + } + return $this->uriBuilder + ->reset() + ->setCreateAbsoluteUri(true) + ->setTargetPageUid($pageUid) + ->build() + ; + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/Controller/OfferController.php b/web/typo3conf/ext/ep_events/Classes/Controller/OfferController.php new file mode 100644 index 00000000..848716af --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Controller/OfferController.php @@ -0,0 +1,81 @@ +, dreipunktnull + * Cedric Ziel , 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\EpEvents\Domain\Model\Offer; +use EP\EpEvents\Domain\Repository\OfferRepository; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class OfferController extends ActionController +{ + /** + * @var OfferRepository + */ + protected $offerRepository; + + /** + * @param OfferRepository $offerRepository + */ + public function __construct(OfferRepository $offerRepository) + { + parent::__construct(); + $this->offerRepository = $offerRepository; + } + + public function teaserAction() + { + $content = $this->configurationManager->getContentObject()->data; + $configuration = [ + 'travelType' => isset($this->settings['travelType']) ? $this->settings['travelType'] : $content['travelType'], + 'locationType' => isset($this->settings['locationType']) ? $this->settings['locationType'] : $content['locationType'], + 'locationDistance' => isset($this->settings['locationDistance']) ? $this->settings['locationDistance'] : $content['locationDistance'], + 'hotelType' => isset($this->settings['hotelType']) ? $this->settings['hotelType'] : $content['hotelType'], + 'activityType' => isset($this->settings['activityType']) ? $this->settings['activityType'] : $content['activityType'], + 'offerUid' => isset($content['offerUid']) ? $content['offerUid'] : null, + ]; + $offers = $this->offerRepository->findByConfiguration($configuration); + $this->view->assign('offers', $offers); + $this->view->assign('configuration', $configuration); + $this->view->assign('content', $content); + } + + /** + * @param Offer $offer + */ + public function detailAction(Offer $offer = null) + { + if ($offer === null) { + $pageUid = $GLOBALS['TSFE']->id; + $offer = $this->offerRepository->findByDetailPage($pageUid)->getFirst(); + } + $search = GeneralUtility::_GET('search'); + $this->view->assign('offer', $offer); + $this->view->assign('search', $search); + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/Controller/SearchController.php b/web/typo3conf/ext/ep_events/Classes/Controller/SearchController.php new file mode 100644 index 00000000..62c40a9c --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Controller/SearchController.php @@ -0,0 +1,108 @@ +, dreipunktnull + * Cedric Ziel , 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\EpEvents\Domain\Model\Search; +use EP\EpEvents\Domain\Repository\OfferRepository; +use TYPO3\CMS\Core\Log\LogManager; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class SearchController extends ActionController +{ + /** + * @var OfferRepository + */ + protected $offerRepository; + + /** + * @param OfferRepository $offerRepository + */ + public function __construct(OfferRepository $offerRepository) + { + parent::__construct(); + $this->offerRepository = $offerRepository; + } + + /** + * @param Search $search + */ + public function formAction(Search $search = null) + { + if ($search === null) { + $search = new Search(null, $GLOBALS['TSFE']->id); + } + $this->view->assign('search', $search); + } + + public function initializeResultAction() + { + $query = GeneralUtility::_GET('search'); + if ($query) { + $search = new Search($query); + $this->request->setArgument('search', $search); + } + } + + /** + * @param Search $search + */ + public function resultAction(Search $search = null) + { + if ($search === null) { + $this->redirectToUri('/'); + } + $result = null; + $searchValid = strlen($search->getQuery()) >= 3; + if ($searchValid) { + $this->logSearch($search); + $result = $this->offerRepository->search($search->getQuery()); + } + $this->view->assign('searchValid', $searchValid); + $this->view->assign('result', $result); + $this->view->assign('search', $search); + } + + /** + * @param Search $search + */ + private function logSearch(Search $search) + { + $ignoreIps = GeneralUtility::trimExplode(',', $this->settings['searchLogIgnoreIps'], true); + $remoteIp = GeneralUtility::getIndpEnv('REMOTE_ADDR'); + if (in_array($remoteIp, $ignoreIps)) { + return; + } + /** @var $logger \TYPO3\CMS\Core\Log\Logger */ + $logger = GeneralUtility::makeInstance(LogManager::class)->getLogger(__CLASS__); + $logger->info('Searchresult processed', [ + 'search' => $search->getQuery(), + 'pageUid' => $search->getPageUid(), + ]); + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/Controller/TestimonialController.php b/web/typo3conf/ext/ep_events/Classes/Controller/TestimonialController.php new file mode 100644 index 00000000..6fdf31d9 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Controller/TestimonialController.php @@ -0,0 +1,56 @@ +, dreipunktnull + * Cedric Ziel , 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\EpEvents\Domain\Repository\TestimonialRepository; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class TestimonialController extends ActionController +{ + /** + * @var TestimonialRepository + */ + protected $testimonialRepository; + + /** + * @param TestimonialRepository $testimonialRepository + */ + public function injectTestimonialRepository(TestimonialRepository $testimonialRepository) + { + $this->testimonialRepository = $testimonialRepository; + } + + public function listAction() + { + $testimonials = $this->testimonialRepository->findAll(); + $content = $this->configurationManager->getContentObject()->data; + $this->view->assign('testimonials', $testimonials); + $this->view->assign('content', $content); + } + +} diff --git a/web/typo3conf/ext/ep_events/Classes/DataProcessing/OfferProcessor.php b/web/typo3conf/ext/ep_events/Classes/DataProcessing/OfferProcessor.php new file mode 100644 index 00000000..d88759b4 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/DataProcessing/OfferProcessor.php @@ -0,0 +1,87 @@ +, dreipunktnull + * Cedric Ziel , 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\EpEvents\Constants; +use EP\EpEvents\Domain\Repository\OfferRepository; +use EP\EpEvents\Domain\Repository\TraveltypeRepository; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Object\ObjectManager; +use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; +use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface; + +class OfferProcessor implements DataProcessorInterface +{ + /** + * @param ContentObjectRenderer $cObj + * @param array $contentObjectConfiguration + * @param array $processorConfiguration + * @param array $processedData + * + * @return array + */ + public function process( + ContentObjectRenderer $cObj, + array $contentObjectConfiguration, + array $processorConfiguration, + array $processedData + ) { + // Process page data for special page type only + if ((int) $cObj->data['doktype'] !== Constants::PAGETYPE_OFFER) { + return $processedData; + } + // Get offer repository instance + /** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */ + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + /** @var \EP\EpEvents\Domain\Repository\OfferRepository $repository */ + $repository = $objectManager->get(OfferRepository::class); + $offer = null; + // First look for selected offer in page settings and fetch offer + // by page uid otherwise + $offerUid = (int) $cObj->data['tx_epevents_offer']; + if ($offerUid !== 0) { + /** @var \EP\EpEvents\Domain\Model\Offer $offer */ + $offer = $repository->findByIdentifier($offerUid); + } else { + $pageUid = $GLOBALS['TSFE']->id; + $offer = $repository->findOneByDetailPage($pageUid); + } + /** @var \EP\EpEvents\Domain\Model\Offer $offer */ + $processedData['offer'] = $offer; + $processedData['travelType'] = null; + if ($offer->getConfiguratorType()) { + $configuratorType = $offer->getConfiguratorType(); + /** @var \EP\EpEvents\Domain\Repository\TraveltypeRepository $repository */ + $repository = $objectManager->get(TraveltypeRepository::class); + $processedData['travelType'] = $repository->findOneByConfiguratorType($configuratorType); + } + $processedData['search'] = GeneralUtility::_GET('search'); + return $processedData; + } + +} diff --git a/web/typo3conf/ext/ep_events/Classes/DataProcessing/TraveltypeProcessor.php b/web/typo3conf/ext/ep_events/Classes/DataProcessing/TraveltypeProcessor.php new file mode 100644 index 00000000..47e2df8f --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/DataProcessing/TraveltypeProcessor.php @@ -0,0 +1,72 @@ +, dreipunktnull + * Cedric Ziel , 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\EpEvents\Constants; +use EP\EpEvents\Domain\Repository\TraveltypeRepository; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Object\ObjectManager; +use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; +use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface; + +class TraveltypeProcessor implements DataProcessorInterface +{ + /** + * @param ContentObjectRenderer $cObj + * @param array $contentObjectConfiguration + * @param array $processorConfiguration + * @param array $processedData + * + * @return array + */ + public function process( + ContentObjectRenderer $cObj, + array $contentObjectConfiguration, + array $processorConfiguration, + array $processedData + ) { + // Process page data for special page type only + if ((int) $cObj->data['doktype'] !== Constants::PAGETYPE_CATEGORY) { + return $processedData; + } + // Get traveltype repository instance + /** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */ + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + /** @var \EP\EpEvents\Domain\Repository\TraveltypeRepository $repository */ + $repository = $objectManager->get(TraveltypeRepository::class); + $traveltype = null; + $traveltypeUid = (int) $cObj->data['tx_epevents_traveltype']; + if ($traveltypeUid !== 0) { + /** @var \EP\EpEvents\Domain\Model\Traveltype $traveltype */ + $traveltype = $repository->findByIdentifier($traveltypeUid); + } + $processedData['traveltype'] = $traveltype; + return $processedData; + } + +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Model/Activity.php b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Activity.php new file mode 100644 index 00000000..a2442784 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Activity.php @@ -0,0 +1,241 @@ +, dreipunktnull + * Cedric Ziel , 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! + ***************************************************************/ + +/** + * Activity + */ +class Activity extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + /** + * @var array + */ + protected $configuratorTypeLabels = [ + 1 => 'Outdoor & Action', + 2 => 'Event-Gastronomie', + 3 => 'Sightseeing', + 4 => 'Spezial', + ]; + + /** + * @var string + */ + protected $name = ''; + + /** + * @var string + */ + protected $description = ''; + + /** + * @var string + */ + protected $footertext = ''; + + /** + * @var string + */ + protected $bannertext = ''; + + /** + * @var string + */ + protected $keywords = ''; + + /** + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageTeaser; + + /** + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageHeader; + + /** + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageOffer; + + /** + * @var int + */ + protected $configuratorType = 0; + + /** + * @return string $name + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string $description + */ + public function getDescription() + { + return $this->description; + } + + /** + * @param string $description + */ + public function setDescription($description) + { + $this->description = $description; + } + + /** + * @return string + */ + public function getFootertext() + { + return $this->footertext; + } + + /** + * @param string $footertext + */ + public function setFootertext($footertext) + { + $this->footertext = $footertext; + } + + /** + * @return string + */ + public function getBannertext() + { + return $this->bannertext; + } + + /** + * @param string $bannertext + */ + public function setBannertext($bannertext) + { + $this->bannertext = $bannertext; + } + + /** + * @return string + */ + public function getKeywords() + { + return $this->keywords; + } + + /** + * @param string $keywords + */ + public function setKeywords($keywords) + { + $this->keywords = $keywords; + } + + /** + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaser + */ + public function getImageTeaser() + { + return $this->imageTeaser; + } + + /** + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaser + */ + public function setImageTeaser(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaser) + { + $this->imageTeaser = $imageTeaser; + } + + /** + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageHeader + */ + public function getImageHeader() + { + return $this->imageHeader; + } + + /** + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageHeader + */ + public function setImageHeader(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageHeader) + { + $this->imageHeader = $imageHeader; + } + + /** + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageOffer + */ + public function getImageOffer() + { + return $this->imageOffer; + } + + /** + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageOffer + */ + public function setImageOffer(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageOffer) + { + $this->imageOffer = $imageOffer; + } + + /** + * @return int $configuratorType + */ + public function getConfiguratorType() + { + return $this->configuratorType; + } + + /** + * @param int $configuratorType + */ + public function setConfiguratorType($configuratorType) + { + $this->configuratorType = $configuratorType; + } + + /** + * @return string + */ + public function getConfiguratorTypeLabel() + { + return $this->configuratorTypeLabels[$this->configuratorType]; + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Model/Contact.php b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Contact.php new file mode 100644 index 00000000..430b2ea4 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Contact.php @@ -0,0 +1,166 @@ +, dreipunktnull + * Cedric Ziel , 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! + ***************************************************************/ + +/** + * Contact + */ +class Contact extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * name + * + * @var string + */ + protected $name = ''; + + /** + * position + * + * @var string + */ + protected $position = ''; + + /** + * email + * + * @var string + */ + protected $email = ''; + + /** + * phone + * + * @var string + */ + protected $phone = ''; + + /** + * image + * + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $image = null; + + /** + * Returns the name + * + * @return string $name + */ + public function getName() + { + return $this->name; + } + + /** + * Sets the name + * + * @param string $name + * @return void + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getPosition() + { + return $this->position; + } + + /** + * @param string $position + */ + public function setPosition($position) + { + $this->position = $position; + } + + /** + * Returns the email + * + * @return string $email + */ + public function getEmail() + { + return $this->email; + } + + /** + * Sets the email + * + * @param string $email + * @return void + */ + public function setEmail($email) + { + $this->email = $email; + } + + /** + * @return string + */ + public function getPhone() + { + return $this->phone; + } + + /** + * @param string $phone + */ + public function setPhone($phone) + { + $this->phone = $phone; + } + + /** + * Returns the image + * + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $image + */ + public function getImage() + { + return $this->image; + } + + /** + * Sets the image + * + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $image + * @return void + */ + public function setImage(\TYPO3\CMS\Extbase\Domain\Model\FileReference $image) + { + $this->image = $image; + } + +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Model/Hotel.php b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Hotel.php new file mode 100644 index 00000000..be12e888 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Hotel.php @@ -0,0 +1,197 @@ +, dreipunktnull + * Cedric Ziel , 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! + ***************************************************************/ + +/** + * Hotel + */ +class Hotel extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + /** + * name + * + * @var string + */ + protected $name = ''; + + /** + * internal name + * + * @var string + */ + protected $nameInternal = ''; + + /** + * description + * + * @var string + */ + protected $description = ''; + + /** + * imageTeaser + * + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageTeaser = null; + + /** + * imageOffer + * + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageOffer = null; + + /** + * configuratorType + * + * @var int + */ + protected $configuratorType = 0; + + /** + * Returns the name + * + * @return string $name + */ + public function getName() + { + return $this->name; + } + + /** + * Sets the name + * + * @param string $name + * @return void + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getNameInternal() + { + return $this->nameInternal; + } + + /** + * @param string $nameInternal + */ + public function setNameInternal($nameInternal) + { + $this->nameInternal = $nameInternal; + } + + /** + * Returns the description + * + * @return string $description + */ + public function getDescription() + { + return $this->description; + } + + /** + * Sets the description + * + * @param string $description + * @return void + */ + public function setDescription($description) + { + $this->description = $description; + } + + /** + * Returns the imageTeaser + * + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaser + */ + public function getImageTeaser() + { + return $this->imageTeaser; + } + + /** + * Sets the imageTeaser + * + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaser + * @return void + */ + public function setImageTeaser(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaser) + { + $this->imageTeaser = $imageTeaser; + } + + /** + * Returns the imageOffer + * + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageOffer + */ + public function getImageOffer() + { + return $this->imageOffer; + } + + /** + * Sets the imageOffer + * + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageOffer + * @return void + */ + public function setImageOffer(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageOffer) + { + $this->imageOffer = $imageOffer; + } + + /** + * Returns the configuratorType + * + * @return int $configuratorType + */ + public function getConfiguratorType() + { + return $this->configuratorType; + } + + /** + * Sets the configuratorType + * + * @param int $configuratorType + * @return void + */ + public function setConfiguratorType($configuratorType) + { + $this->configuratorType = $configuratorType; + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Model/Inquiry.php b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Inquiry.php new file mode 100644 index 00000000..595cc72c --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Inquiry.php @@ -0,0 +1,449 @@ +, dreipunktnull + * Cedric Ziel , 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 TYPO3\CMS\Extbase\DomainObject\AbstractValueObject; + +class Inquiry extends AbstractValueObject +{ + /** + * @var string + */ + protected $inquiryName; + + /** + * @var string + */ + protected $travelType; + + /** + * @var string + */ + protected $hotelType; + + /** + * @var string + */ + protected $locationType; + + /** + * @var string + */ + protected $activityType; + + /** + * @var string + */ + protected $distance; + + /** + * @var string + */ + protected $pax; + + /** + * @var string + */ + protected $budget; + + /** + * @var string + */ + protected $period; + + /** + * @var string + */ + protected $dateFrom; + + /** + * @var string + */ + protected $dateTo; + + /** + * @var string + * + * @validate NotEmpty + */ + protected $name; + + /** + * @var string + * + * @validate NotEmpty + * @validate EmailAddress + */ + protected $email; + + /** + * @var string + * + * @validate NotEmpty + */ + protected $phone; + + /** + * @var string + */ + protected $message; + + /** + * @var string + */ + protected $pageUrl; + + /** + * @param array $defaults + */ + public function __construct(array $defaults = []) + { + foreach ($defaults as $key => $value) + { + if (property_exists($this, $key)) { + $this->$key = $value; + } + } + } + + /** + * @param Offer $offer + * @param array $defaults + * + * @return Inquiry + */ + public static function fromOffer(Offer $offer, array $defaults = []) + { + $inquiry = new self($defaults); + $inquiry->setInquiryName($offer->getName() . ' ' . $offer->getLocation()->getName()); + $inquiry->setTravelType($offer->getConfiguratorType()); + if ($offer->getLocation()) { + $inquiry->setLocationType($offer->getLocation()->getConfiguratorType()); + } + if ($offer->getHotel()) { + $inquiry->setHotelType($offer->getHotel()->getConfiguratorType()); + } + if ($offer->getLocation()->getConfiguratorDistance()) { + $inquiry->setDistance($offer->getLocation()->getConfiguratorDistance()); + } + $activities = []; + /** @var \EP\EpEvents\Domain\Model\Activity $activity */ + foreach ($offer->getActivities() as $activity) + { + $activities[] = $activity->getConfiguratorType(); + } + $inquiry->setActivityType(implode(',', array_unique($activities))); + return $inquiry; + } + + /** + * @param Traveltype $traveltype + * @param string $name + * @param array $defaults + * + * @return Inquiry + */ + public static function fromTraveltype(Traveltype $traveltype, $name = '', array $defaults = []) + { + $inquiry = new self($defaults); + $inquiry->setInquiryName($name); + $inquiry->setTravelType($traveltype->getConfiguratorType()); + return $inquiry; + } + + /** + * @param int $travelType + * @param int $locationType + * + * @return Inquiry + */ + public static function fromArguments($travelType = 0, $locationType = 0) + { + $inquiry = new self; + $inquiry->setTravelType((string) $travelType); + $inquiry->setLocationType((string) $locationType); + return $inquiry; + } + + /** + * @return string + */ + public function getInquiryName() + { + return $this->inquiryName; + } + + /** + * @param string $inquiryName + */ + public function setInquiryName($inquiryName) + { + $this->inquiryName = $inquiryName; + } + + /** + * @return string + */ + public function getTravelType() + { + return $this->travelType; + } + + /** + * @param string $travelType + */ + public function setTravelType($travelType) + { + $this->travelType = $travelType; + } + + /** + * @return string + */ + public function getHotelType() + { + return $this->hotelType; + } + + /** + * @param string $hotelType + */ + public function setHotelType($hotelType) + { + $this->hotelType = $hotelType; + } + + /** + * @return string + */ + public function getLocationType() + { + return $this->locationType; + } + + /** + * @param string $locationType + */ + public function setLocationType($locationType) + { + $this->locationType = $locationType; + } + + /** + * @return string + */ + public function getActivityType() + { + return $this->activityType; + } + + /** + * @param string $activityType + */ + public function setActivityType($activityType) + { + $this->activityType = $activityType; + } + + /** + * @return string + */ + public function getDistance() + { + return $this->distance; + } + + /** + * @param string $distance + */ + public function setDistance($distance) + { + $this->distance = $distance; + } + + /** + * @return string + */ + public function getPax() + { + return $this->pax; + } + + /** + * @param string $pax + */ + public function setPax($pax) + { + $this->pax = $pax; + } + + /** + * @return string + */ + public function getBudget() + { + return $this->budget; + } + + /** + * @param string $budget + */ + public function setBudget($budget) + { + $this->budget = $budget; + } + + /** + * @return string + */ + public function getPeriod() + { + return $this->period; + } + + /** + * @param string $period + */ + public function setPeriod($period) + { + $this->period = $period; + } + + /** + * @return string + */ + public function getDateFrom() + { + return $this->dateFrom; + } + + /** + * @param string $dateFrom + */ + public function setDateFrom($dateFrom) + { + $this->dateFrom = $dateFrom; + } + + /** + * @return string + */ + public function getDateTo() + { + return $this->dateTo; + } + + /** + * @param string $dateTo + */ + public function setDateTo($dateTo) + { + $this->dateTo = $dateTo; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getEmail() + { + return $this->email; + } + + /** + * @param string $email + */ + public function setEmail($email) + { + $this->email = $email; + } + + /** + * @return string + */ + public function getPhone() + { + return $this->phone; + } + + /** + * @param string $phone + */ + public function setPhone($phone) + { + $this->phone = $phone; + } + + /** + * @return string + */ + public function getMessage() + { + return $this->message; + } + + /** + * @param string $message + */ + public function setMessage($message) + { + $this->message = $message; + } + + /** + * @return string + */ + public function getPageUrl() + { + return $this->pageUrl; + } + + /** + * @param string $pageUrl + */ + public function setPageUrl($pageUrl) + { + $this->pageUrl = $pageUrl; + } + +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Model/Location.php b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Location.php new file mode 100644 index 00000000..13c8cf65 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Location.php @@ -0,0 +1,364 @@ +, dreipunktnull + * Cedric Ziel , 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! + ***************************************************************/ + +/** + * Location + */ +class Location extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + const DISTANCE_GERMANY = 1; + const DISTANCE_EUROPE = 2; + const DISTANCE_WORLD = 3; + + /** + * name + * + * @var string + */ + protected $name = ''; + + /** + * descriptionShort + * + * @var string + */ + protected $descriptionShort = ''; + + /** + * descriptionLong + * + * @var string + */ + protected $descriptionLong = ''; + + /** + * season + * + * @var string + */ + protected $season = ''; + + /** + * imageHeader + * + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageHeader = null; + + /** + * imageTeaser + * + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageTeaser = null; + + /** + * imageOffer + * + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageOffer = null; + + /** + * configuratorType + * + * @var int + */ + protected $configuratorType = 0; + + /** + * configuratorDistance + * + * @var int + */ + protected $configuratorDistance = 1; + + /** + * footerText1 + * + * @var string + */ + protected $footerText1 = ''; + + /** + * footerText2 + * + * @var string + */ + protected $footerText2 = ''; + + /** + * footerText3 + * + * @var string + */ + protected $footerText3 = ''; + + /** + * Returns the name + * + * @return string $name + */ + public function getName() + { + return $this->name; + } + + /** + * Sets the name + * + * @param string $name + * @return void + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * Returns the descriptionShort + * + * @return string $descriptionShort + */ + public function getDescriptionShort() + { + return $this->descriptionShort; + } + + /** + * Sets the descriptionShort + * + * @param string $descriptionShort + * @return void + */ + public function setDescriptionShort($descriptionShort) + { + $this->descriptionShort = $descriptionShort; + } + + /** + * Returns the imageHeader + * + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageHeader + */ + public function getImageHeader() + { + return $this->imageHeader; + } + + /** + * Sets the imageHeader + * + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageHeader + * @return void + */ + public function setImageHeader(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageHeader) + { + $this->imageHeader = $imageHeader; + } + + /** + * Returns the imageTeaser + * + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaser + */ + public function getImageTeaser() + { + return $this->imageTeaser; + } + + /** + * Sets the imageTeaser + * + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaser + * @return void + */ + public function setImageTeaser(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaser) + { + $this->imageTeaser = $imageTeaser; + } + + /** + * Returns the imageOffer + * + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageOffer + */ + public function getImageOffer() + { + return $this->imageOffer; + } + + /** + * Sets the imageOffer + * + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageOffer + * @return void + */ + public function setImageOffer(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageOffer) + { + $this->imageOffer = $imageOffer; + } + + /** + * Returns the configuratorType + * + * @return int $configuratorType + */ + public function getConfiguratorType() + { + return $this->configuratorType; + } + + /** + * Sets the configuratorType + * + * @param int $configuratorType + * @return void + */ + public function setConfiguratorType($configuratorType) + { + $this->configuratorType = $configuratorType; + } + + /** + * @return int + */ + public function getConfiguratorDistance() + { + return $this->configuratorDistance; + } + + /** + * @param int $configuratorDistance + */ + public function setConfiguratorDistance($configuratorDistance) + { + $this->configuratorDistance = $configuratorDistance; + } + + /** + * Returns the descriptionLong + * + * @return string descriptionLong + */ + public function getDescriptionLong() + { + return $this->descriptionLong; + } + + /** + * Sets the descriptionLong + * + * @param string $descriptionLong + * @return void + */ + public function setDescriptionLong($descriptionLong) + { + $this->descriptionLong = $descriptionLong; + } + + /** + * @return string + */ + public function getSeason() + { + return $this->season; + } + + /** + * @param string $season + */ + public function setSeason($season) + { + $this->season = $season; + } + + /** + * Returns the footerText1 + * + * @return string $footerText1 + */ + public function getFooterText1() + { + return $this->footerText1; + } + + /** + * Sets the footerText1 + * + * @param string $footerText1 + * @return void + */ + public function setFooterText1($footerText1) + { + $this->footerText1 = $footerText1; + } + + /** + * Returns the footerText2 + * + * @return string $footerText2 + */ + public function getFooterText2() + { + return $this->footerText2; + } + + /** + * Sets the footerText2 + * + * @param string $footerText2 + * @return void + */ + public function setFooterText2($footerText2) + { + $this->footerText2 = $footerText2; + } + + /** + * Returns the footerText3 + * + * @return string $footerText3 + */ + public function getFooterText3() + { + return $this->footerText3; + } + + /** + * Sets the footerText3 + * + * @param string $footerText3 + * @return void + */ + public function setFooterText3($footerText3) + { + $this->footerText3 = $footerText3; + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Model/Offer.php b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Offer.php new file mode 100644 index 00000000..8c3e56fd --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Offer.php @@ -0,0 +1,652 @@ +, dreipunktnull + * Cedric Ziel , 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! + ***************************************************************/ + +/** + * Offer + */ +class Offer extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + const TYPE_EXAMPLE = 1; + const TYPE_CLIENT = 2; + + /** + * @var array + */ + protected $configuratorTypeLabels = [ + 1 => 'Incentive', + 2 => 'Team Building', + 3 => 'Meeting', + 4 => 'Corporate Event', + ]; + + /** + * type + * + * @var int + */ + protected $type = 1; + + /** + * name + * + * @var string + */ + protected $name = ''; + + /** + * name internal + * + * @var string + */ + protected $nameInternal = ''; + + /** + * groupname + * + * @var string + */ + protected $groupname = ''; + + /** + * price + * + * @var int + */ + protected $price = 0; + + /** + * headline + * + * @var string + */ + protected $headline = ''; + + /** + * header + * + * @var string + */ + protected $header = ''; + + /** + * arrival + * + * @var string + */ + protected $arrival = ''; + + /** + * schedule + * + * @var string + */ + protected $schedule = ''; + + /** + * services + * + * @var string + */ + protected $services = ''; + + /** + * guidelines + * + * @var string + */ + protected $guidelines = ''; + + /** + * imageHeader + * + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageHeader = null; + + /** + * imageTeaser + * + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageTeaser = null; + + /** + * imageTeaserMobile + * + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageTeaserMobile = null; + + /** + * bookingForm + * + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $bookingForm = null; + + /** + * configuratorType + * + * @var int + */ + protected $configuratorType = 0; + + /** + * contact + * + * @var \EP\EpEvents\Domain\Model\Contact + */ + protected $contact = null; + + /** + * hotel + * + * @var \EP\EpEvents\Domain\Model\Hotel + */ + protected $hotel = null; + + /** + * location + * + * @var \EP\EpEvents\Domain\Model\Location + */ + protected $location = null; + + /** + * activities + * + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpEvents\Domain\Model\Activity> + */ + protected $activities = null; + + /** + * detailPage + * + * @var int + */ + protected $detailPage = 0; + + /** + * __construct + */ + public function __construct() + { + //Do not remove the next line: It would break the functionality + $this->initStorageObjects(); + } + + /** + * Initializes all ObjectStorage properties + * Do not modify this method! + * It will be rewritten on each save in the extension builder + * You may modify the constructor of this class instead + * + * @return void + */ + protected function initStorageObjects() + { + $this->activities = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + } + + /** + * @return int + */ + public function getType() + { + return $this->type; + } + + /** + * @param int $type + */ + public function setType($type) + { + $this->type = $type; + } + + /** + * Returns the name + * + * @return string $name + */ + public function getName() + { + return $this->name; + } + + /** + * Sets the name + * + * @param string $name + * @return void + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getNameInternal() + { + return $this->nameInternal; + } + + /** + * @param string $nameInternal + */ + public function setNameInternal($nameInternal) + { + $this->nameInternal = $nameInternal; + } + + /** + * Returns the groupname + * + * @return string $groupname + */ + public function getGroupname() + { + return $this->groupname; + } + + /** + * Sets the groupname + * + * @param string $groupname + * @return void + */ + public function setGroupname($groupname) + { + $this->groupname = $groupname; + } + + /** + * @return int + */ + public function getPrice() + { + return $this->price; + } + + /** + * @param int $price + */ + public function setPrice($price) + { + $this->price = $price; + } + + /** + * @return string + */ + public function getHeadline() + { + return $this->headline; + } + + /** + * @param string $headline + */ + public function setHeadline($headline) + { + $this->headline = $headline; + } + + /** + * Returns the header + * + * @return string $header + */ + public function getHeader() + { + return $this->header; + } + + /** + * Sets the header + * + * @param string $header + * @return void + */ + public function setHeader($header) + { + $this->header = $header; + } + + /** + * Returns the arrival + * + * @return string $arrival + */ + public function getArrival() + { + return $this->arrival; + } + + /** + * Sets the arrival + * + * @param string $arrival + * @return void + */ + public function setArrival($arrival) + { + $this->arrival = $arrival; + } + + /** + * Returns the schedule + * + * @return string $schedule + */ + public function getSchedule() + { + return $this->schedule; + } + + /** + * Sets the schedule + * + * @param string $schedule + * @return void + */ + public function setSchedule($schedule) + { + $this->schedule = $schedule; + } + + /** + * Returns the services + * + * @return string $services + */ + public function getServices() + { + return $this->services; + } + + /** + * Sets the services + * + * @param string $services + * @return void + */ + public function setServices($services) + { + $this->services = $services; + } + + /** + * Returns the guidelines + * + * @return string $guidelines + */ + public function getGuidelines() + { + return $this->guidelines; + } + + /** + * Sets the guidelines + * + * @param string $guidelines + * @return void + */ + public function setGuidelines($guidelines) + { + $this->guidelines = $guidelines; + } + + /** + * Returns the imageHeader + * + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageHeader + */ + public function getImageHeader() + { + return $this->imageHeader; + } + + /** + * Sets the imageHeader + * + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageHeader + * @return void + */ + public function setImageHeader(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageHeader) + { + $this->imageHeader = $imageHeader; + } + + /** + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + public function getImageTeaser() + { + return $this->imageTeaser; + } + + /** + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaser + */ + public function setImageTeaser(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaser) + { + $this->imageTeaser = $imageTeaser; + } + + /** + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + public function getImageTeaserMobile() + { + return $this->imageTeaserMobile; + } + + /** + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaserMobile + */ + public function setImageTeaserMobile(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageTeaserMobile) + { + $this->imageTeaserMobile = $imageTeaserMobile; + } + + /** + * Returns the bookingForm + * + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $bookingForm + */ + public function getBookingForm() + { + return $this->bookingForm; + } + + /** + * Sets the bookingForm + * + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $bookingForm + * @return void + */ + public function setBookingForm(\TYPO3\CMS\Extbase\Domain\Model\FileReference $bookingForm) + { + $this->bookingForm = $bookingForm; + } + + /** + * Returns the contact + * + * @return \EP\EpEvents\Domain\Model\Contact $contact + */ + public function getContact() + { + return $this->contact; + } + + /** + * Sets the contact + * + * @param \EP\EpEvents\Domain\Model\Contact $contact + * @return void + */ + public function setContact(\EP\EpEvents\Domain\Model\Contact $contact) + { + $this->contact = $contact; + } + + /** + * Returns the hotel + * + * @return \EP\EpEvents\Domain\Model\Hotel $hotel + */ + public function getHotel() + { + return $this->hotel; + } + + /** + * Sets the hotel + * + * @param \EP\EpEvents\Domain\Model\Hotel $hotel + * @return void + */ + public function setHotel(\EP\EpEvents\Domain\Model\Hotel $hotel) + { + $this->hotel = $hotel; + } + + /** + * Returns the location + * + * @return \EP\EpEvents\Domain\Model\Location $location + */ + public function getLocation() + { + return $this->location; + } + + /** + * Sets the location + * + * @param \EP\EpEvents\Domain\Model\Location $location + * @return void + */ + public function setLocation(\EP\EpEvents\Domain\Model\Location $location) + { + $this->location = $location; + } + + /** + * Adds a Activity + * + * @param \EP\EpEvents\Domain\Model\Activity $activity + * @return void + */ + public function addActivity(\EP\EpEvents\Domain\Model\Activity $activity) + { + $this->activities->attach($activity); + } + + /** + * Removes a Activity + * + * @param \EP\EpEvents\Domain\Model\Activity $activityToRemove The Activity to be removed + * @return void + */ + public function removeActivity(\EP\EpEvents\Domain\Model\Activity $activityToRemove) + { + $this->activities->detach($activityToRemove); + } + + /** + * Returns the activities + * + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpEvents\Domain\Model\Activity> $activities + */ + public function getActivities() + { + return $this->activities; + } + + /** + * Sets the activities + * + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpEvents\Domain\Model\Activity> $activities + * @return void + */ + public function setActivities(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $activities) + { + $this->activities = $activities; + } + + /** + * Returns the configuratorType + * + * @return int $configuratorType + */ + public function getConfiguratorType() + { + return $this->configuratorType; + } + + /** + * Sets the configuratorType + * + * @param int $configuratorType + * @return void + */ + public function setConfiguratorType($configuratorType) + { + $this->configuratorType = $configuratorType; + } + + /** + * @return int + */ + public function getDetailPage() + { + return $this->detailPage; + } + + /** + * @param int $detailPage + */ + public function setDetailPage($detailPage) + { + $this->detailPage = $detailPage; + } + + /** + * @return string + */ + public function getConfiguratorTypeLabel() + { + return $this->configuratorTypeLabels[$this->configuratorType]; + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Model/Search.php b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Search.php new file mode 100644 index 00000000..aec850d4 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Search.php @@ -0,0 +1,84 @@ +, 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! + ***************************************************************/ + +class Search +{ + + /** + * @var string + */ + protected $query; + + /** + * @var int + */ + protected $pageUid; + + /** + * @param string $query + * @param null $pageUid + */ + public function __construct($query = null, $pageUid = null) + { + $this->setQuery($query); + $this->setPageUid($pageUid); + } + + /** + * @return string + */ + public function getQuery() + { + return $this->query; + } + + /** + * @param string $query + */ + public function setQuery($query) + { + $this->query = $query; + } + + /** + * @return int + */ + public function getPageUid() + { + return $this->pageUid; + } + + /** + * @param int $pageUid + */ + public function setPageUid($pageUid) + { + $this->pageUid = $pageUid; + } + +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Model/Testimonial.php b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Testimonial.php new file mode 100644 index 00000000..18911162 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Testimonial.php @@ -0,0 +1,120 @@ +, dreipunktnull + * Cedric Ziel , 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! + ***************************************************************/ + +/** + * Testimonial + */ +class Testimonial extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * clientName + * + * @var string + */ + protected $clientName = ''; + + /** + * clientImage + * + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $clientImage = null; + + /** + * quote + * + * @var string + */ + protected $quote = ''; + + /** + * Returns the clientName + * + * @return string $clientName + */ + public function getClientName() + { + return $this->clientName; + } + + /** + * Sets the clientName + * + * @param string $clientName + * @return void + */ + public function setClientName($clientName) + { + $this->clientName = $clientName; + } + + /** + * Returns the clientImage + * + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $clientImage + */ + public function getClientImage() + { + return $this->clientImage; + } + + /** + * Sets the clientImage + * + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $clientImage + * @return void + */ + public function setClientImage(\TYPO3\CMS\Extbase\Domain\Model\FileReference $clientImage) + { + $this->clientImage = $clientImage; + } + + /** + * Returns the quote + * + * @return string $quote + */ + public function getQuote() + { + return $this->quote; + } + + /** + * Sets the quote + * + * @param string $quote + * @return void + */ + public function setQuote($quote) + { + $this->quote = $quote; + } + +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Model/Traveltype.php b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Traveltype.php new file mode 100644 index 00000000..3f636add --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Model/Traveltype.php @@ -0,0 +1,252 @@ +, dreipunktnull + * Cedric Ziel , 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! + ***************************************************************/ + +/** + * Traveltype + */ +class Traveltype extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + /** + * @var string + */ + protected $title = ''; + + /** + * @var string + */ + protected $subtitle = ''; + + /** + * @var string + */ + protected $headertext = ''; + + /** + * @var string + */ + protected $subheadline = ''; + + /** + * @var string + */ + protected $description = ''; + + /** + * @var string + */ + protected $bannertext = ''; + + /** + * @var string + */ + protected $buttonlabel = ''; + + /** + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageHeader; + + /** + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $imageBanner; + + /** + * configuratorType + * + * @var int + */ + protected $configuratorType = 0; + + /** + * @return string + */ + public function getTitle() + { + return $this->title; + } + + /** + * @param string $title + */ + public function setTitle($title) + { + $this->title = $title; + } + + /** + * @return string + */ + public function getSubtitle() + { + return $this->subtitle; + } + + /** + * @param string $subtitle + */ + public function setSubtitle($subtitle) + { + $this->subtitle = $subtitle; + } + + /** + * @return string + */ + public function getHeadertext() + { + return $this->headertext; + } + + /** + * @param string $headertext + */ + public function setHeadertext($headertext) + { + $this->headertext = $headertext; + } + + /** + * @return string + */ + public function getSubheadline() + { + return $this->subheadline; + } + + /** + * @param string $subheadline + */ + public function setSubheadline($subheadline) + { + $this->subheadline = $subheadline; + } + + /** + * @return string + */ + public function getDescription() + { + return $this->description; + } + + /** + * @param string $description + */ + public function setDescription($description) + { + $this->description = $description; + } + + /** + * @return string + */ + public function getBannertext() + { + return $this->bannertext; + } + + /** + * @param string $bannertext + */ + public function setBannertext($bannertext) + { + $this->bannertext = $bannertext; + } + + /** + * @return string + */ + public function getButtonlabel() + { + return $this->buttonlabel; + } + + /** + * @param string $buttonlabel + */ + public function setButtonlabel($buttonlabel) + { + $this->buttonlabel = $buttonlabel; + } + + /** + * Returns the imageHeader + * + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageHeader + */ + public function getImageHeader() + { + return $this->imageHeader; + } + + /** + * Sets the imageHeader + * + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageHeader + * @return void + */ + public function setImageHeader(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageHeader) + { + $this->imageHeader = $imageHeader; + } + + /** + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + public function getImageBanner() + { + return $this->imageBanner; + } + + /** + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $imageBanner + */ + public function setImageBanner(\TYPO3\CMS\Extbase\Domain\Model\FileReference $imageBanner) + { + $this->imageBanner = $imageBanner; + } + + /** + * @return int $configuratorType + */ + public function getConfiguratorType() + { + return $this->configuratorType; + } + + /** + * @param int $configuratorType + * @return void + */ + public function setConfiguratorType($configuratorType) + { + $this->configuratorType = $configuratorType; + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Repository/AbstractRepository.php b/web/typo3conf/ext/ep_events/Classes/Domain/Repository/AbstractRepository.php new file mode 100644 index 00000000..46fe8e34 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Repository/AbstractRepository.php @@ -0,0 +1,41 @@ +, dreipunktnull + * Cedric Ziel , 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 TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings; + +class AbstractRepository extends \TYPO3\CMS\Extbase\Persistence\Repository +{ + public function initializeObject() + { + /** @var $querySettings \TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings */ + $querySettings = $this->objectManager->get(Typo3QuerySettings::class); + $querySettings->setRespectStoragePage(FALSE); + $this->setDefaultQuerySettings($querySettings); + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Repository/ActivityRepository.php b/web/typo3conf/ext/ep_events/Classes/Domain/Repository/ActivityRepository.php new file mode 100644 index 00000000..9e5d98be --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Repository/ActivityRepository.php @@ -0,0 +1,31 @@ +, 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! + ***************************************************************/ + +class ActivityRepository extends AbstractRepository +{ +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Repository/ContactRepository.php b/web/typo3conf/ext/ep_events/Classes/Domain/Repository/ContactRepository.php new file mode 100644 index 00000000..8d15989d --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Repository/ContactRepository.php @@ -0,0 +1,40 @@ +, dreipunktnull + * Cedric Ziel , 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 TYPO3\CMS\Extbase\Persistence\QueryInterface; + +class ContactRepository extends AbstractRepository +{ + /** + * @var array + */ + protected $defaultOrderings = [ + 'sorting' => QueryInterface::ORDER_ASCENDING, + ]; +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Repository/OfferRepository.php b/web/typo3conf/ext/ep_events/Classes/Domain/Repository/OfferRepository.php new file mode 100644 index 00000000..7f511007 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Repository/OfferRepository.php @@ -0,0 +1,113 @@ +, dreipunktnull + * Cedric Ziel , 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\EpEvents\Domain\Model\Activity; +use EP\EpEvents\Domain\Model\Offer; +use TYPO3\CMS\Extbase\Persistence\QueryInterface; + +class OfferRepository extends AbstractRepository +{ + /** + * @var array + */ + protected $defaultOrderings = [ + 'nameInternal' => QueryInterface::ORDER_ASCENDING, + ]; + + /** + * @param array $configuration + * @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface + */ + public function findByConfiguration(array $configuration) + { + if (array_sum($configuration) === 0) { + return []; + } + $query = $this->createQuery(); + $constraints = [ + $query->logicalNot($query->equals('type', Offer::TYPE_CLIENT)) + ]; + if ($configuration['offerUid']) { + $constraints[] = $query->logicalNot($query->equals('uid', $configuration['offerUid'])); + } + if ($configuration['travelType'] > 0) { + $constraints[] = $query->equals('configuratorType', $configuration['travelType']); + } + if ($configuration['locationDistance'] > 0) { + $constraints[] = $query->equals('location.configuratorDistance', $configuration['locationDistance']); + } + if ($configuration['locationType'] > 0) { + $constraints[] = $query->equals('location.configuratorType', $configuration['locationType']); + } + if ($configuration['hotelType'] > 0) { + $constraints[] = $query->equals('hotel.configuratorType', $configuration['hotelType']); + } + if ($configuration['activityType'] > 0) { + $constraints[] = $query->equals('activities.configuratorType', $configuration['activityType']); + } + return $query->matching($query->logicalAnd($constraints))->execute(); + } + + /** + * @param Activity $activity + * @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface + */ + public function findByActivity(Activity $activity) + { + $query = $this->createQuery(); + $query->matching( + $query->logicalAnd( + $query->contains('activities', $activity), + $query->equals('type', Offer::TYPE_EXAMPLE) + ) + ); + return $query->execute(); + } + + /** + * @param string $queryString + * @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface + */ + public function search($queryString) + { + $query = $this->createQuery(); + $constraints = [ + $query->like('nameInternal', '%' . $queryString . '%'), + $query->like('header', '%' . $queryString . '%'), + $query->like('services', '%' . $queryString . '%'), + $query->like('location.name', '%' . $queryString . '%'), + ]; + return $query->matching( + $query->logicalAnd( + $query->greaterThan('detailPage', 0), + $query->logicalOr($constraints) + ) + )->execute(); + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Repository/TestimonialRepository.php b/web/typo3conf/ext/ep_events/Classes/Domain/Repository/TestimonialRepository.php new file mode 100644 index 00000000..3019b613 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Repository/TestimonialRepository.php @@ -0,0 +1,32 @@ +, dreipunktnull + * Cedric Ziel , 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! + ***************************************************************/ + +class TestimonialRepository extends AbstractRepository +{ +} diff --git a/web/typo3conf/ext/ep_events/Classes/Domain/Repository/TraveltypeRepository.php b/web/typo3conf/ext/ep_events/Classes/Domain/Repository/TraveltypeRepository.php new file mode 100644 index 00000000..d002e091 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Domain/Repository/TraveltypeRepository.php @@ -0,0 +1,32 @@ +, dreipunktnull + * Cedric Ziel , 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! + ***************************************************************/ + +class TraveltypeRepository extends AbstractRepository +{ +} diff --git a/web/typo3conf/ext/ep_events/Classes/Form/UrlField.php b/web/typo3conf/ext/ep_events/Classes/Form/UrlField.php new file mode 100644 index 00000000..a25f14ba --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Form/UrlField.php @@ -0,0 +1,50 @@ +, dreipunktnull + * Cedric Ziel , 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! + ***************************************************************/ + +class UrlField +{ + + public function render($parameters, $fObj) + { + $uid = $parameters['row']['uid']; + $urlSegment = $parameters['row']['url']; + if ($uid && $urlSegment) { + $url = \tx_pagepath_api::getPagePath(889, [ + 'tx_epevents_offer' => [ + 'controller' => 'offer', + 'action' => 'show', + 'offer' => $uid, + ] + ]); + return urldecode($url); + } + return ''; + } + +} diff --git a/web/typo3conf/ext/ep_events/Classes/Hooks/Tcemain.php b/web/typo3conf/ext/ep_events/Classes/Hooks/Tcemain.php new file mode 100644 index 00000000..b4d7bfbe --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Hooks/Tcemain.php @@ -0,0 +1,70 @@ +, 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 TYPO3\CMS\Core\DataHandling\DataHandler; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; +use TYPO3\CMS\Extbase\Object\ObjectManager; + +class Tcemain +{ + + /** + * @param array $fields + * @param string $table + * @param int $id + * @param DataHandler $obj + */ + public function processDatamap_preProcessFieldArray(array &$fields, $table, $id, DataHandler $obj) + { + if ($table === 'tx_epevents_domain_model_offer') { + // Set default value for url segment + if (empty($fields['url'])) { + $fields['url'] = $fields['name'] . date('dmy'); + } + // Clear realurl cache for detail page + $settings = $this->getSettings(); + $detailPageUid = $settings['plugin']['tx_epevents']['settings']['offerDetailPageUid']; + if ((int) $detailPageUid > 0) { + $GLOBALS['TYPO3_DB']->exec_DELETEquery('tx_realurl_urldata', 'page_id=' . $detailPageUid); + } + } + } + + /** + * @return array + */ + protected function getSettings() + { + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + $configurationManager = $objectManager->get(ConfigurationManagerInterface::class); + return GeneralUtility::removeDotsFromTS( + $configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT) + ); + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/Service/EmailService.php b/web/typo3conf/ext/ep_events/Classes/Service/EmailService.php new file mode 100644 index 00000000..b60615d9 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/Service/EmailService.php @@ -0,0 +1,111 @@ +, dreipunktnull + * Cedric Ziel , 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 TYPO3\CMS\Core\Mail\MailMessage; +use TYPO3\CMS\Core\SingletonInterface; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; +use TYPO3\CMS\Fluid\View\StandaloneView; + +class EmailService implements SingletonInterface +{ + + /** + * @var ConfigurationManagerInterface + */ + protected $configurationManager; + + /** + * @var array + */ + protected $settings; + + /** + * @param ConfigurationManagerInterface $manager + */ + public function injectConfigurationManager(ConfigurationManagerInterface $manager) + { + $this->configurationManager = $manager; + $settings = GeneralUtility::removeDotsFromTS( + $this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT) + ); + $this->settings = $settings['plugin']['tx_epevents']; + } + + /** + * @param string $toEmail + * @param string $toName + * @param string $subject + * @param string $templateName + * @param array $variables + * @return bool + */ + public function send($toEmail, $toName, $subject, $templateName, array $variables = []) + { + $fromEmail = $this->settings['settings']['inquiryToEmail']; + $fromName = $this->settings['settings']['inquiryToName']; + + /** @var MailMessage $message */ + $message = GeneralUtility::makeInstance(MailMessage::class); + $message + ->setTo([$toEmail => $toName]) + ->setFrom([$fromEmail => $fromName]) + ->setSubject($subject) + ; + + $view = $this->getView($templateName); + $view->assignMultiple($variables); + $message->setBody($view->render(), 'text/html'); + + $message->send(); + + return $message->isSent(); + } + + /** + * @param string $templateName + * @param string $format + * @return StandaloneView + */ + protected function getView($templateName, $format = 'html') + { + /** @var StandaloneView $view */ + $view = GeneralUtility::makeInstance(StandaloneView::class); + $view->setFormat($format); + $view->getRequest()->setControllerExtensionName('ep_events'); + + $view->setTemplateRootPaths($this->settings['view']['templateRootPaths']); + $view->setLayoutRootPaths($this->settings['view']['layoutRootPaths']); + $view->setPartialRootPaths($this->settings['view']['partialRootPaths']); + $view->setTemplate($templateName); + + return $view; + } + +} diff --git a/web/typo3conf/ext/ep_events/Classes/ViewHelpers/ConfiguratorTypeLabelsViewHelper.php b/web/typo3conf/ext/ep_events/Classes/ViewHelpers/ConfiguratorTypeLabelsViewHelper.php new file mode 100644 index 00000000..bc179fc7 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/ViewHelpers/ConfiguratorTypeLabelsViewHelper.php @@ -0,0 +1,71 @@ +, dreipunktnull + * Cedric Ziel , 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 TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; +use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class ConfiguratorTypeLabelsViewHelper extends AbstractViewHelper +{ + /** + * @var array + */ + protected $settings; + + /** + * @param \TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface $configurationManager + */ + public function injectConfigurationManager(ConfigurationManagerInterface $configurationManager) + { + $this->settings = $configurationManager->getConfiguration( + ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS, + 'epevents' + ); + } + + /** + * @param string $type + * @param string $values + * + * @return string + */ + public function render($type, $values) + { + if (empty($values)) { + return 'Keine Angabe'; + } + $types = []; + $indexes = GeneralUtility::trimExplode(',', $values); + foreach ($indexes as $index) + { + $types[] = $this->settings['configurator']['options'][$type][$index]; + } + return implode(', ', $types); + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/ViewHelpers/SectionCssClassViewHelper.php b/web/typo3conf/ext/ep_events/Classes/ViewHelpers/SectionCssClassViewHelper.php new file mode 100644 index 00000000..4e4e22d0 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/ViewHelpers/SectionCssClassViewHelper.php @@ -0,0 +1,57 @@ +, dreipunktnull + * Cedric Ziel , 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class SectionCssClassViewHelper extends AbstractViewHelper +{ + /** + * @var array + */ + protected $cssClasses = [ + 1 => 'incentives', + 2 => 'teambuilding', + 3 => 'meetings', + 4 => 'events', + ]; + + /** + * @param string $sectionValue + * + * @return string + */ + public function render($sectionValue) + { + if (array_key_exists($sectionValue, $this->cssClasses)) { + return 'section-' . $this->cssClasses[$sectionValue]; + } + + return 'section-default'; + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/ViewHelpers/SectionIconViewHelper.php b/web/typo3conf/ext/ep_events/Classes/ViewHelpers/SectionIconViewHelper.php new file mode 100644 index 00000000..57a5eed0 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/ViewHelpers/SectionIconViewHelper.php @@ -0,0 +1,63 @@ +, dreipunktnull + * Cedric Ziel , 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class SectionIconViewHelper extends AbstractViewHelper +{ + /** + * @var array + */ + protected $icons = [ + 1 => 'icon_incentives', + 2 => 'icon_teambuilding', + 3 => 'icon_meetings', + 4 => 'icon_events', + ]; + + /** + * @param string $sectionValue + * @param bool $opaque + * + * @return string + */ + public function render($sectionValue, $opaque = false) + { + $icon = ''; + if (array_key_exists($sectionValue, $this->icons)) { + $icon = $this->icons[$sectionValue]; + if ($opaque) { + $icon .= '_opaque'; + } + $icon .= '.svg'; + } + + return $icon; + } +} diff --git a/web/typo3conf/ext/ep_events/Classes/ViewHelpers/SoftHyphenViewHelper.php b/web/typo3conf/ext/ep_events/Classes/ViewHelpers/SoftHyphenViewHelper.php new file mode 100644 index 00000000..025cf525 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Classes/ViewHelpers/SoftHyphenViewHelper.php @@ -0,0 +1,47 @@ +, dreipunktnull + * Cedric Ziel , 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class SoftHyphenViewHelper extends AbstractViewHelper +{ + /** + * @param string $string + * + * @return string + */ + public function render($string = null) + { + if ($string === null) { + $string = $this->renderChildren(); + } + + return str_replace('--', '­', $string); + } +} diff --git a/web/typo3conf/ext/ep_events/Configuration/.htaccess b/web/typo3conf/ext/ep_events/Configuration/.htaccess new file mode 100755 index 00000000..3418e55a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Configuration/FlexForms/activities.xml b/web/typo3conf/ext/ep_events/Configuration/FlexForms/activities.xml new file mode 100644 index 00000000..78e6f590 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/FlexForms/activities.xml @@ -0,0 +1,47 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + + + Outdoor & Action + 1 + + + Event-Gastronomie + 2 + + + Sightseeing + 3 + + + Spezial + 4 + + + 1 + 1 + + + + + + + + diff --git a/web/typo3conf/ext/ep_events/Configuration/FlexForms/offers.xml b/web/typo3conf/ext/ep_events/Configuration/FlexForms/offers.xml new file mode 100644 index 00000000..f6c7a73d --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/FlexForms/offers.xml @@ -0,0 +1,183 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + + + Keine Auswahl + 0 + + + Incentives + 1 + + + Teambuilding + 2 + + + Meeting + 3 + + + Corporate Event + 4 + + + 0 + 1 + + + + + + 0 + + + select + selectSingle + + + Keine Auswahl + 0 + + + Meer + 1 + + + Berge + 2 + + + Städte + 3 + + + Spezial + 4 + + + 0 + 1 + + + + + + 0 + + + select + selectSingle + + + Keine Auswahl + 0 + + + Deutschland + 1 + + + Europa + 2 + + + Welt + 3 + + + 0 + 1 + + + + + + 0 + + + select + selectSingle + + + Keine Auswahl + 0 + + + 3-Sterne + 1 + + + 4-Sterne + 2 + + + 5-Sterne + 3 + + + Spezial + 4 + + + 0 + 1 + + + + + + 0 + + + select + selectSingle + + + Keine Auswahl + 0 + + + Outdoor & Action + 1 + + + Event-Gastronomie + 2 + + + Sightseeing + 3 + + + Spezial + 4 + + + 0 + 1 + + + + + + + + diff --git a/web/typo3conf/ext/ep_events/Configuration/PageTS/Mod/WebLayout/BackendLayouts.ts b/web/typo3conf/ext/ep_events/Configuration/PageTS/Mod/WebLayout/BackendLayouts.ts new file mode 100644 index 00000000..9061c2ab --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/PageTS/Mod/WebLayout/BackendLayouts.ts @@ -0,0 +1,158 @@ +mod { + web_layout.BackendLayouts { + frontpageEpEvents { + title = EP Events: Startseite + config { + backend_layout { + colCount = 2 + rowCount = 5 + rows { + 1 { + columns { + 1 { + name = Content + colPos = 3 + colspan = 2 + } + } + } + 2 { + columns { + 1 { + name = Kachel + colPos = 10 + } + 2 { + name = Kachel + colPos = 11 + } + } + } + 3 { + columns { + 1 { + name = Kachel + colPos = 12 + } + 2 { + name = Kachel + colPos = 13 + } + } + } + 4 { + columns { + 1 { + name = Content + colPos = 0 + colspan = 2 + } + } + } + 5 { + columns { + 1 { + name = Footer Content + colPos = 4 + colspan = 2 + } + } + } + } + } + } + } + subpageEpEvents { + title = EP Events: Unterseite + config { + backend_layout { + colCount = 1 + rowCount = 2 + rows { + 1 { + columns { + 1 { + name = Header + colPos = 1 + } + } + } + 2 { + columns { + 1 { + name = Content + colPos = 0 + } + } + } + } + } + } + } + categoryEpEvents { + title = EP Events: Kategorie + config { + backend_layout { + colCount = 1 + rowCount = 2 + rows { + 1 { + columns { + 1 { + name = Content (Slider etc.) + colPos = 0 + } + } + } + 2 { + columns { + 1 { + name = Footer Content + colPos = 2 + } + } + } + } + } + } + } + offerEpEvents { + title = EP Events: Beispielangebot + config { + backend_layout { + colCount = 1 + rowCount = 1 + rows { + 1 { + columns { + 1 { + name = Content (Slider etc.) + colPos = 2 + } + } + } + } + } + } + } + activityEpEvents { + title = EP Events: Programmpunkt + config { + backend_layout { + colCount = 1 + rowCount = 1 + rows { + 1 { + columns { + 1 { + name = Content + colPos = 0 + } + } + } + } + } + } + } + } +} diff --git a/web/typo3conf/ext/ep_events/Configuration/PageTS/RTE.ts b/web/typo3conf/ext/ep_events/Configuration/PageTS/RTE.ts new file mode 100644 index 00000000..5dee5e26 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/PageTS/RTE.ts @@ -0,0 +1,38 @@ +RTE { + default { + contentCSS = EXT:ep_events/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 = coloured-list, footnote-list + entryHTMLparser_db { + tags { + span.fixAttrib.style.unset = 1 + span.rmTagIfNoAttrib = 1 + } + } + } + + buttons { + formatblock.removeItems = h1,h5,h6,section,div,footer,header,nav,aside,blockquote,pre,address,article + pastetoggle.setActiveOnRteOpen = 1 + blockstyle.tags.ul.allowedClasses = coloured-list, footnote-list + } + } + + classes { + button.name = Button + buttonfull.name = Button (volle Breite) + coloured-list.name = Farbige Bullets + footnote-list.name = Fußnote + } +} diff --git a/web/typo3conf/ext/ep_events/Configuration/PageTS/TCEFORM.ts b/web/typo3conf/ext/ep_events/Configuration/PageTS/TCEFORM.ts new file mode 100644 index 00000000..39b3accf --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/PageTS/TCEFORM.ts @@ -0,0 +1,114 @@ +TCEFORM { + tt_content { + # Disable image orientations + imageorient.removeItems = 0,1,2,8,9,25,26 + imageorient.disabled = 1 + + # Disable image columns + imagecols.disabled = 1 + + # Disable image norows + image_noRows.disabled = 1 + + # Disable image border + imageborder.disabled = 1 + + # Disable image width + imagewidth.disabled = 1 + + # Disable image height + imageheight.disabled = 1 + + # Disable image link + image_link.disabled = 1 + + # Enable image zoom + image_zoom = 1 + + # Disable image compression + image_compression.disabled = 1 + + # Disable image effects + image_effects.disabled = 1 + + # Disable image frames + image_frames.disabled = 1 + + # Disable image caption position + imagecaption_position.disabled = 1 + + # Disable layout field for all other types + layout.types.text.disabled = 1 + layout.types.textpic.disabled = 1 + layout.types.bullets.disabled = 1 + layout.types.html.disabled = 1 + layout.types.image.disabled = 1 + layout.types.list.disabled = 1 + layout.types.menu.disabled = 1 + layout.types.shortcut.disabled = 1 + layout.types.table.disabled = 1 + layout.types.uploads.disabled = 1 + layout.types.mailform.disabled = 1 + layout.types.login.disabled = 1 + layout.types.header.disabled = 1 + + layout.types.herounit { + altLabels { + 1 = Groß + } + removeItems = 2,3 + } + + header_layout { + addItems { + 10 = H1 (Icon, opt. Subheadline) + 20 = H2 (Icon, opt. Subheadline) + } + removeItems = 4,5 + altLabels { + 1 = H1 (opt. Subheadline) + 2 = H2 (opt. Subheadline) + 3 = H3 + } + } + + # Table background color + table_bgColor.disabled = 1 + + # Table border + table_border.disabled = 1 + + # Table cell spacing + table_cellspacing.disabled = 1 + + # Table cell padding + table_cellpadding.disabled = 1 + + # File size + filelink_size.disabled = 1 + + # Upload description + uploads_description.disabled = 1 + + # Upload type + uploads_type.disabled = 1 + + # Disable description + rowDescription.disabled = 1 + + # Disable categories + categories.disabled = 1 + + # Enable header link + header_link = 1 + + # Disable header position + header_position.disabled = 1 + } + + pages { + cache_tags.disabled = 1 + fe_login_mode.disabled = 1 + layout.disabled = 1 + } +} diff --git a/web/typo3conf/ext/ep_events/Configuration/PageTS/Wizards/NewContentElement.ts b/web/typo3conf/ext/ep_events/Configuration/PageTS/Wizards/NewContentElement.ts new file mode 100644 index 00000000..ebfef8b9 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/PageTS/Wizards/NewContentElement.ts @@ -0,0 +1,35 @@ +mod { + wizards.newContentElement.wizardItems { + epevents { + header = EP Events + elements { + tile { + iconIdentifier = content-image + title = Kachel + description = Kachel für Reisearten auf der Startseite + tt_content_defValues.CType = tile + } + statement { + iconIdentifier = content-image + title = Statement + description = Statment mit Button + tt_content_defValues.CType = statement + } + herounit { + iconIdentifier = content-image + title = Herounit + description = Seitenheader + tt_content_defValues.CType = herounit + } + banner { + iconIdentifier = content-image + title = Banner + description = Banner für Kategorieseiten + tt_content_defValues.CType = banner + } + } + show := addToList(tile, statement, herounit, banner) + } + } +} + diff --git a/web/typo3conf/ext/ep_events/Configuration/PageTS/main.ts b/web/typo3conf/ext/ep_events/Configuration/PageTS/main.ts new file mode 100644 index 00000000..110f62ff --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/PageTS/main.ts @@ -0,0 +1,4 @@ + + + + diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/pages.php b/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/pages.php new file mode 100644 index 00000000..15c534e8 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/pages.php @@ -0,0 +1,113 @@ + [ + 'typeicon_classes' => [ + \EP\EpEvents\Constants::PAGETYPE_CATEGORY => 'apps-pagetree-category-page', + ], + ], + 'types' => [ + (string) \EP\EpEvents\Constants::PAGETYPE_CATEGORY => $GLOBALS['TCA']['pages']['types'][\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_DEFAULT], + ] + ] + ); + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTcaSelectItem( + 'pages', + 'doktype', + [ + 'Beispiel-Seite', + \EP\EpEvents\Constants::PAGETYPE_OFFER, + 'apps-pagetree-example-page', + ], + '1', + 'after' + ); + \TYPO3\CMS\Core\Utility\ArrayUtility::mergeRecursiveWithOverrule( + $GLOBALS['TCA']['pages'], + [ + 'ctrl' => [ + 'typeicon_classes' => [ + \EP\EpEvents\Constants::PAGETYPE_OFFER => 'apps-pagetree-example-page', + ], + ], + 'types' => [ + (string) \EP\EpEvents\Constants::PAGETYPE_OFFER => $GLOBALS['TCA']['pages']['types'][\TYPO3\CMS\Frontend\Page\PageRepository::DOKTYPE_DEFAULT], + ], + ] + ); + + $temporaryColumns = [ + 'tx_epevents_traveltype' => [ + 'exclude' => 0, + 'label' => 'Reiseart', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'foreign_table' => 'tx_epevents_domain_model_traveltype', + 'minitems' => 0, + 'maxitems' => 1, + ] + ], + 'tx_epevents_offer' => [ + 'exclude' => 0, + 'label' => 'Angebot/Beispielangebot', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'foreign_table' => 'tx_epevents_domain_model_offer', + 'foreign_table_where' => 'AND tx_epevents_domain_model_offer.type = 1 ORDER BY tx_epevents_domain_model_offer.name_internal', + 'minitems' => 0, + 'maxitems' => 1, + ] + ], + ]; + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns( + 'pages', + $temporaryColumns + ); + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( + 'pages', + '--div--;Konfigurator, + tx_epevents_traveltype', + (string) \EP\EpEvents\Constants::PAGETYPE_CATEGORY + ); + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( + 'pages', + '--div--;Konfigurator, + tx_epevents_offer', + (string) \EP\EpEvents\Constants::PAGETYPE_OFFER + ); + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerPageTSConfigFile( + 'ep_events', + 'Configuration/TypoScript/pageTSconfig.ts', + 'EP Events' + ); + +}); diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content.php b/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content.php new file mode 100644 index 00000000..fa1417f4 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content.php @@ -0,0 +1,68 @@ + [ + 'exclude' => 0, + 'label' => 'Reiseart', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Keine Zuordnung', 0], + ['Incentive', 1], + ['Teambuilding', 2], + ['Meeting', 3], + ['Corporate Event', 4], + ], + 'minitems' => 0, + 'maxitems' => 1, + ] + ], + ]; + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tt_content', $temporaryColumns); + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette( + 'tt_content', + 'headers', + 'tx_epevents_configurator_travel_type', + 'before:header_layout' + ); + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette( + 'tt_content', + 'header', + 'tx_epevents_configurator_travel_type', + 'before:header_layout' + ); + + $GLOBALS['TCA']['tt_content']['types']['header']['columnsOverrides'] = [ + 'header' => [ + 'config' => [ + 'type' => 'text', + 'cols' => 60, + 'rows' => 2, + ], + ], + 'tx_epevents_configurator_travel_type' => [ + 'label' => 'Icon/Kategorie', + ], + ]; + + $pluginSignature = 'epevents_offerteasers'; + $GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform'; + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue( + $pluginSignature, 'FILE:EXT:ep_events/Configuration/FlexForms/offers.xml' + ); + + $pluginSignature = 'epevents_activityteasers'; + $GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform'; + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue( + $pluginSignature, 'FILE:EXT:ep_events/Configuration/FlexForms/activities.xml' + ); + +}); diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content_element_banner.php b/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content_element_banner.php new file mode 100644 index 00000000..14361e73 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content_element_banner.php @@ -0,0 +1,50 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + tx_epevents_configurator_travel_type, bodytext, header, header_link, assets + ', + 'columnsOverrides' => [ + 'header' => [ + 'label' => 'Button Label', + ], + 'header_link' => [ + 'label' => 'Button Link', + ], + 'bodytext' => [ + 'label' => 'Text', + ], + 'assets' => [ + 'label' => 'Hintergrundbild', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('assets', [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'Hinzufügen' + ], + 'foreign_types' => $GLOBALS['TCA']['tt_content']['columns']['image']['config']['foreign_types'], + 'maxitems' => 1, + 'minitems' => 1, + ], 'jpg') + ] + ] + ]; + +}); diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content_element_herounit.php b/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content_element_herounit.php new file mode 100644 index 00000000..2c76dce7 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content_element_herounit.php @@ -0,0 +1,69 @@ + 'layout, tx_epevents_configurator_travel_type', + ]; + + $GLOBALS['TCA']['tt_content']['types']['herounit'] = [ + 'showitem' => ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, --palette--;;herounit_layout, + header, subheader, bodytext, assets + ', + 'columnsOverrides' => [ + 'header' => [ + 'label' => 'Titel', + 'config' => [ + 'type' => 'text', + 'cols' => 50, + 'rows' => 2, + ], + ], + 'subheader' => [ + 'label' => 'Untertitel', + 'config' => [ + 'type' => 'text', + 'cols' => 50, + 'rows' => 2, + ], + ], + 'bodytext' => [ + 'label' => 'Headertext', + 'config' => [ + 'cols' => 80, + 'rows' => 4, + 'eval' => 'trim' + ], + ], + 'assets' => [ + 'label' => 'Bild', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('assets', [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'Hinzufügen' + ], + 'foreign_types' => $GLOBALS['TCA']['tt_content']['columns']['image']['config']['foreign_types'], + 'maxitems' => 1, + 'minitems' => 1, + ], 'jpg') + ] + ] + ]; + +}); diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content_element_statement.php b/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content_element_statement.php new file mode 100644 index 00000000..7ac5c450 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content_element_statement.php @@ -0,0 +1,47 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + tx_epevents_configurator_travel_type, bodytext, header, header_link + ', + 'columnsOverrides' => [ + 'header' => [ + 'label' => 'Button Label', + 'config' => [ + 'size' => 32, + ], + ], + 'header_link' => [ + 'label' => 'Button Link', + ], + 'bodytext' => [ + 'label' => 'Text', + 'config' => [ + 'cols' => 80, + 'rows' => 2, + 'eval' => 'trim,required' + ], + ], + ] + ]; + +}); diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content_element_tile.php b/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content_element_tile.php new file mode 100644 index 00000000..8c609177 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/Overrides/tt_content_element_tile.php @@ -0,0 +1,59 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + tx_epevents_configurator_travel_type, header, header_link, bodytext, + --div--;Bild, + assets + ', + 'columnsOverrides' => [ + 'header' => [ + 'config' => [ + 'type' => 'text', + 'cols' => 32, + 'rows' => 2, + ] + ], + 'bodytext' => [ + 'label' => 'Teasertext', + 'config' => [ + 'type' => 'input', + 'size' => 80, + 'eval' => 'trim,required' + ], + ], + 'assets' => [ + 'label' => 'Teaserbild', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('assets', [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'Hinzufügen' + ], + 'foreign_types' => $GLOBALS['TCA']['tt_content']['columns']['image']['config']['foreign_types'], + 'maxitems' => 1, + 'minitems' => 1, + ], 'jpg') + ] + ] + ]; + +}); diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_activity.php b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_activity.php new file mode 100644 index 00000000..4fce3de2 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_activity.php @@ -0,0 +1,286 @@ + [ + 'title' => 'LLL:EXT:ep_events/Resources/Private/Language/locallang.xlf:tx_epevents_domain_model_activity', + 'label' => 'name_internal', + 'default_sortby' => 'ORDER BY name_internal', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,name_internal,description,image_teaser,image_header,image_offer,configurator_type,', + 'iconfile' => 'EXT:ep_events/Resources/Public/images/tx_epevents_domain_model_activity.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, name_internal, + keywords, description, bannertext, footertext, image_teaser, image_header, image_offer, configurator_type', + ], + 'types' => [ + '1' => [ + 'showitem' => '--palette--;;general, + --palette--;;naming, keywords, bannertext, + --div--;Texte, description, footertext, + --div--;Bilder, image_teaser, image_header, image_offer', + 'columnsOverrides' => [ + 'description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'footertext' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + 'general' => ['showitem' => 'configurator_type, hidden'], + 'naming' => ['showitem' => 'name, name_internal'], + ], + 'columns' => [ + 'sys_language_uid' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epevents_domain_model_activity', + 'foreign_table_where' => 'AND tx_epevents_domain_model_activity.pid=###CURRENT_PID### AND tx_epevents_domain_model_activity.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + 'hidden' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + 'starttime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'endtime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'Bezeichnung', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'name_internal' => [ + 'exclude' => 0, + 'label' => 'Bezeichnung intern', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'keywords' => [ + 'exclude' => 0, + 'label' => 'Keywords', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 3, + 'eval' => 'trim', + ], + ], + 'description' => [ + 'exclude' => 0, + 'label' => 'Beschreibung (kurz)', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'footertext' => [ + 'exclude' => 0, + 'label' => 'Footertext', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'bannertext' => [ + 'exclude' => 0, + 'label' => 'Bannertext', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 3, + 'eval' => 'trim', + ], + ], + 'image_teaser' => [ + 'exclude' => 0, + 'label' => 'Bild Teaser', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_teaser', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'image_header' => [ + 'exclude' => 0, + 'label' => 'Bild Header', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_header', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'image_offer' => [ + 'exclude' => 0, + 'label' => 'Bild Angebotsseite', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_offer', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'configurator_type' => [ + 'exclude' => 0, + 'label' => 'Konfigurator Typ', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Outdoor & Action', 1], + ['Event-Gastronomie', 2], + ['Sightseeing', 3], + ['Spezial', 4], + ], + 'default' => 1, + 'size' => 1, + 'minitems' => 1, + 'maxitems' => 1, + 'eval' => '' + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_contact.php b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_contact.php new file mode 100644 index 00000000..c33a21b7 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_contact.php @@ -0,0 +1,186 @@ + [ + 'title' => 'LLL:EXT:ep_events/Resources/Private/Language/locallang.xlf:tx_epevents_domain_model_contact', + 'label' => 'name', + 'default_sortby' => 'ORDER BY name', + 'sortby' => 'sorting', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,email,phone,image,', + 'iconfile' => 'EXT:ep_events/Resources/Public/images/tx_epevents_domain_model_contact.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, position, email, phone, image', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, name, position, email, phone, image' + ], + ], + 'palettes' => [ + '1' => ['showitem' => ''], + ], + 'columns' => [ + 'sys_language_uid' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epevents_domain_model_contact', + 'foreign_table_where' => 'AND tx_epevents_domain_model_contact.pid=###CURRENT_PID### AND tx_epevents_domain_model_contact.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + 'hidden' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + 'starttime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'endtime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'sorting' => [ + 'config' => [ + 'type' => 'passthrough' + ] + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'Name', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'position' => [ + 'exclude' => 0, + 'label' => 'Position', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'email' => [ + 'exclude' => 0, + 'label' => 'E-Mail', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,email' + ], + ], + 'phone' => [ + 'exclude' => 0, + 'label' => 'Telefon', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'image' => [ + 'exclude' => 0, + 'label' => 'Bild', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + ], +]; diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_hotel.php b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_hotel.php new file mode 100644 index 00000000..bc3f674b --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_hotel.php @@ -0,0 +1,225 @@ + [ + 'title' => 'LLL:EXT:ep_events/Resources/Private/Language/locallang.xlf:tx_epevents_domain_model_hotel', + 'label' => 'name_internal', + 'default_sortby' => 'ORDER BY name_internal', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,name_internal,description,image_teaser,image_offer,configurator_type,', + 'iconfile' => 'EXT:ep_events/Resources/Public/images/tx_epevents_domain_model_hotel.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, name_internal, + description, image_teaser, image_offer, configurator_type', + ], + 'types' => [ + '1' => [ + 'showitem' => '--palette--;;general, --palette--;;naming, description, + --div--;Bilder, image_teaser, image_offer', + 'columnsOverrides' => [ + 'description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + 'general' => ['showitem' => 'configurator_type, hidden'], + 'naming' => ['showitem' => 'name, name_internal'], + ], + 'columns' => [ + 'sys_language_uid' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epevents_domain_model_hotel', + 'foreign_table_where' => 'AND tx_epevents_domain_model_hotel.pid=###CURRENT_PID### AND tx_epevents_domain_model_hotel.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + 'hidden' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + 'starttime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'endtime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'Bezeichnung', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'name_internal' => [ + 'exclude' => 0, + 'label' => 'Bezeichnung intern', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'description' => [ + 'exclude' => 0, + 'label' => 'Beschreibung', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'image_teaser' => [ + 'exclude' => 0, + 'label' => 'Bild Teaser', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_teaser', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'image_offer' => [ + 'exclude' => 0, + 'label' => 'Bild Angebotsseite', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_offer', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'configurator_type' => [ + 'exclude' => 0, + 'label' => 'Konfigurator Typ', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['3-Sterne', 1], + ['4-Sterne', 2], + ['5-Sterne', 3], + ['Spezial', 4], + ], + 'default' => 1, + 'size' => 1, + 'minitems' => 1, + 'maxitems' => 1, + 'eval' => '' + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_location.php b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_location.php new file mode 100644 index 00000000..e9c5b24b --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_location.php @@ -0,0 +1,320 @@ + [ + 'title' => 'LLL:EXT:ep_events/Resources/Private/Language/locallang.xlf:tx_epevents_domain_model_location', + 'label' => 'name', + 'default_sortby' => 'ORDER BY name', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,description_short,description_long,season,image_header,image_teaser,image_offer, + configurator_type,configurator_distance,footer_text1,footer_text2,footer_text3,', + 'iconfile' => 'EXT:ep_events/Resources/Public/images/tx_epevents_domain_model_location.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, description_short, + description_long, season, image_header, image_teaser, image_offer, configurator_type, configurator_distance, + footer_text1, footer_text2, footer_text3', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, --palette--;;configurator, + name, description_short, description_long, season, footer_text1, footer_text2, footer_text3, + --div--;Bilder, image_header, image_teaser, image_offer', + 'columnsOverrides' => [ + 'description_short' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'description_long' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'footer_text1' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'footer_text2' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'footer_text3' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + 'configurator' => ['showitem' => 'configurator_type, configurator_distance'], + ], + 'columns' => [ + 'sys_language_uid' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epevents_domain_model_location', + 'foreign_table_where' => 'AND tx_epevents_domain_model_location.pid=###CURRENT_PID### AND tx_epevents_domain_model_location.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + 'hidden' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + 'starttime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'endtime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'Bezeichnung', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'description_short' => [ + 'exclude' => 0, + 'label' => 'Beschreibung kurz', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'description_long' => [ + 'exclude' => 0, + 'label' => 'Beschreibung lang', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'season' => [ + 'exclude' => 0, + 'label' => 'Beste Reisezeit', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 5, + 'eval' => 'trim', + ], + ], + 'image_header' => [ + 'exclude' => 0, + 'label' => 'Bild Header', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_header', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'image_teaser' => [ + 'exclude' => 0, + 'label' => 'Bild Teaser', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_teaser', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'image_offer' => [ + 'exclude' => 0, + 'label' => 'Bild Angebotsseite', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_offer', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'footer_text1' => [ + 'exclude' => 0, + 'label' => 'Footer Text 1', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'footer_text2' => [ + 'exclude' => 0, + 'label' => 'Footer Text 2', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'footer_text3' => [ + 'exclude' => 0, + 'label' => 'Footer Text 3', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'configurator_type' => [ + 'exclude' => 0, + 'label' => 'Konfigurator Typ', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Meer', 1], + ['Berge', 2], + ['Städte', 3], + ['Spezial', 4], + ], + 'default' => 1, + 'size' => 1, + 'minitems' => 1, + 'maxitems' => 1, + 'eval' => '' + ], + ], + 'configurator_distance' => [ + 'exclude' => 0, + 'l10n_mode' => 'exclude', + 'label' => 'Entfernung', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + [ 'Deutschland', \EP\EpEvents\Domain\Model\Location::DISTANCE_GERMANY ], + [ 'Europa', \EP\EpEvents\Domain\Model\Location::DISTANCE_EUROPE ], + [ 'Welt', \EP\EpEvents\Domain\Model\Location::DISTANCE_WORLD ], + ] + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_offer.php b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_offer.php new file mode 100644 index 00000000..d75cab0a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_offer.php @@ -0,0 +1,494 @@ + [ + 'title' => 'LLL:EXT:ep_events/Resources/Private/Language/locallang.xlf:tx_epevents_domain_model_offer', + 'label' => 'name_internal', + 'default_sortby' => 'ORDER BY name_internal', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,name_internal,groupname,header,arrival,schedule,services,guidelines,image_header, + booking_form,configurator_type,contact,hotel,location,activities,', + 'iconfile' => 'EXT:ep_events/Resources/Public/images/tx_epevents_domain_model_offer.gif', + 'type' => 'type', + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, type, name, name_internal, + groupname, price, headline, header, arrival, schedule, services, guidelines, image_teaser, + image_teaser_mobile, image_header, booking_form, configurator_type, contact, hotel, location, activities, + detail_page, url, url_rendered', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, + --palette--;;general, --palette--;;naming, headline, header, services, + --div--;Bilder, image_teaser, image_teaser_mobile, image_header, + --div--;Verknüpfungen, contact, hotel, location, activities', + 'columnsOverrides' => [ + 'header' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'services' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + '2' => [ + 'showitem' => 'hidden, + --palette--;;general_ext, --palette--;;naming, --palette--;;url, groupname, headline, header, + services, arrival, schedule, guidelines, + --div--;Bilder/Dateien, image_header, booking_form, + --div--;Verknüpfungen, contact, hotel, location, activities', + 'columnsOverrides' => [ + 'header' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'arrival' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'schedule' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'services' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'guidelines' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + 'general' => ['showitem' => 'type, configurator_type, detail_page'], + 'general_ext' => ['showitem' => 'type, configurator_type, price'], + 'naming' => ['showitem' => 'name, name_internal'], + 'url' => ['showitem' => 'url, url_rendered'], + ], + 'columns' => [ + 'sys_language_uid' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epevents_domain_model_offer', + 'foreign_table_where' => 'AND tx_epevents_domain_model_offer.pid=###CURRENT_PID### AND tx_epevents_domain_model_offer.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + 'hidden' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + 'starttime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'endtime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'type' => [ + 'exclude' => 0, + 'l10n_mode' => 'exclude', + 'label' => 'Angebotsart', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + [ 'Beispiel', \EP\EpEvents\Domain\Model\Offer::TYPE_EXAMPLE ], + [ 'Angebotslink', \EP\EpEvents\Domain\Model\Offer::TYPE_CLIENT ], + ] + ], + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'Bezeichnung', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'name_internal' => [ + 'exclude' => 0, + 'label' => 'Bezeichnung intern', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'groupname' => [ + 'exclude' => 0, + 'label' => 'Gruppe/Kontakt', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 5, + 'eval' => 'trim', + ], + ], + 'price' => [ + 'exclude' => 0, + 'label' => 'Preis', + 'config' => [ + 'type' => 'input', + 'size' => 8, + 'eval' => 'int' + ], + ], + 'headline' => [ + 'exclude' => 0, + 'label' => 'Headline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'header' => [ + 'exclude' => 0, + 'label' => 'Header', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'arrival' => [ + 'exclude' => 0, + 'label' => 'Anreise', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'schedule' => [ + 'exclude' => 0, + 'label' => 'Ablauf', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'services' => [ + 'exclude' => 0, + 'label' => 'Leistungen', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'guidelines' => [ + 'exclude' => 0, + 'label' => 'Angebotsrichtlinien', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'image_teaser' => [ + 'exclude' => 0, + 'label' => 'Bild Teaser', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_teaser', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'image_teaser_mobile' => [ + 'exclude' => 0, + 'label' => 'Bild Teaser (mobil)', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_teaser_m', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'image_header' => [ + 'exclude' => 0, + 'label' => 'Bild Header', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_header', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'booking_form' => [ + 'exclude' => 0, + 'label' => 'Buchungsformular', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'booking_form', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:media.addFileReference' + ], + 'foreign_types' => [ + '0' => [ + 'showitem' => ' + --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette, + --palette--;;filePalette' + ], + \TYPO3\CMS\Core\Resource\File::FILETYPE_UNKNOWN => [ + 'showitem' => ' + --palette--;LLL:EXT:lang/locallang_tca.xlf:sys_file_reference.imageoverlayPalette;imageoverlayPalette, + --palette--;;filePalette' + ], + ], + 'maxitems' => 1 + ] + ), + ], + 'configurator_type' => [ + 'exclude' => 0, + 'label' => 'Konfigurator Typ', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Incentive', 1], + ['Teambuilding', 2], + ['Meeting', 3], + ['Corporate Event', 4], + ], + 'default' => 1, + 'size' => 1, + 'minitems' => 1, + 'maxitems' => 1, + 'eval' => '' + ], + ], + 'contact' => [ + 'exclude' => 0, + 'label' => 'Ansprechpartner', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epevents_domain_model_contact', + 'foreign_table_where' => 'AND 1=1 order by name', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'hotel' => [ + 'exclude' => 0, + 'label' => 'Unterkunft', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epevents_domain_model_hotel', + 'foreign_table_where' => 'AND 1=1 order by name', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'location' => [ + 'exclude' => 0, + 'label' => 'Location', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epevents_domain_model_location', + 'foreign_table_where' => 'AND 1=1 order by name', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'activities' => [ + 'exclude' => 0, + 'label' => 'Programmpunkte', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'foreign_table' => 'tx_epevents_domain_model_activity', + 'foreign_table_where' => 'AND 1=1 order by name', + 'MM' => 'tx_epevents_offer_activity_mm', + 'size' => 10, + 'autoSizeMax' => 30, + 'minitems' => 1, + 'maxitems' => 9999, + 'multiple' => 0, + 'wizards' => [ + 'suggest' => [ + 'type' => 'suggest', + 'default' => [ + 'searchWholePhrase' => 1, + ] + ] + ], + ], + ], + 'detail_page' => [ + 'exclude' => 0, + 'label' => 'Detailseite', + 'config' => [ + 'type' => 'input', + 'size' => 4, + 'eval' => 'int,required', + 'wizards' => [ + '_PADDING' => 2, + 'link' => [ + 'type' => 'popup', + 'title' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:header_link_formlabel', + 'icon' => 'actions-wizard-link', + 'module' => [ + 'name' => 'wizard_link', + ], + 'params' => [ + 'blindLinkOptions' => 'file,folder,mail,spec,url', + ], + 'JSopenParams' => 'height=300,width=500,status=0,menubar=0,scrollbars=1' + ], + ], + 'softref' => 'typolink' + ], + ], + 'url' => [ + 'exclude' => 0, + 'label' => 'URL Segment', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,lower,nospace', + ], + ], + 'url_rendered' => [ + 'exclude' => 0, + 'label' => 'Resultierende URL', + 'config' => [ + 'type' => 'user', + 'userFunc' => \EP\EpEvents\Form\UrlField::class . '->render', + ] + ], + ], +]; diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_testimonial.php b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_testimonial.php new file mode 100644 index 00000000..60ebb937 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_testimonial.php @@ -0,0 +1,169 @@ + [ + 'title' => 'LLL:EXT:ep_events/Resources/Private/Language/locallang.xlf:tx_epevents_domain_model_testimonial', + 'label' => 'client_name', + 'default_sortby' => 'ORDER BY client_name', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'client_name,client_image,quote,', + 'iconfile' => 'EXT:ep_events/Resources/Public/images/tx_epevents_domain_model_testimonial.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, client_name, client_image, + quote', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, client_name, client_image, quote', + 'columnsOverrides' => [ + 'quote' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + '1' => ['showitem' => ''], + ], + 'columns' => [ + 'sys_language_uid' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epevents_domain_model_testimonial', + 'foreign_table_where' => 'AND tx_epevents_domain_model_testimonial.pid=###CURRENT_PID### AND tx_epevents_domain_model_testimonial.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + 'hidden' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + 'starttime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'endtime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'client_name' => [ + 'exclude' => 0, + 'label' => 'Name, Firma', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'client_image' => [ + 'exclude' => 0, + 'label' => 'Bild', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'client_image', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'quote' => [ + 'exclude' => 0, + 'label' => 'Zitat', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_traveltype.php b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_traveltype.php new file mode 100644 index 00000000..1d082947 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TCA/tx_epevents_domain_model_traveltype.php @@ -0,0 +1,268 @@ + [ + 'title' => 'LLL:EXT:ep_events/Resources/Private/Language/locallang.xlf:tx_epevents_domain_model_traveltype', + 'label' => 'title', + 'default_sortby' => 'ORDER BY title ASC', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'title,subtitle,headertext,subheadline,description', + 'iconfile' => 'EXT:ep_events/Resources/Public/images/tx_epevents_domain_model_traveltype.gif', + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, type, title, subtitle, + headertext, subheadline, bannertext, description, buttonlabel, configurator_type, image_header, image_banner', + ], + 'types' => [ + '1' => [ + 'showitem' => '--palette--;;general, --palette--;;herounit, subheadline, bannertext, + buttonlabel, description, + --div--;Bilder,image_header, image_banner', + 'columnsOverrides' => [ + 'description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + 'general' => ['showitem' => 'hidden, configurator_type'], + 'herounit' => ['showitem' => 'title, subtitle, headertext'], + ], + 'columns' => [ + 'sys_language_uid' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epevents_domain_model_offer', + 'foreign_table_where' => 'AND tx_epevents_domain_model_offer.pid=###CURRENT_PID### AND tx_epevents_domain_model_offer.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + 'hidden' => [ + 'exclude' => 1, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + 'starttime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'endtime' => [ + 'exclude' => 1, + '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')) + ], + ], + ], + 'title' => [ + 'exclude' => 0, + 'label' => 'Titel', + 'config' => [ + 'type' => 'text', + 'cols' => 60, + 'rows' => 2, + 'eval' => 'trim,required' + ], + ], + 'subtitle' => [ + 'exclude' => 0, + 'label' => 'Untertitel', + 'config' => [ + 'type' => 'text', + 'cols' => 60, + 'rows' => 2, + 'eval' => 'trim' + ], + ], + 'headertext' => [ + 'exclude' => 0, + 'label' => 'Headertext', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 4, + 'eval' => 'trim', + ], + ], + 'subheadline' => [ + 'exclude' => 0, + 'label' => 'Subheadline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim', + ], + ], + 'description' => [ + 'exclude' => 0, + 'label' => 'Beschreibung', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'bannertext' => [ + 'exclude' => 0, + 'label' => 'Bannertext', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 3, + 'eval' => 'trim', + ], + ], + 'buttonlabel' => [ + 'exclude' => 0, + 'label' => 'Button Label', + 'config' => [ + 'type' => 'text', + 'cols' => 30, + 'rows' => 2, + 'eval' => 'trim', + 'default' => 'Beipiel Angebote', + ], + ], + 'image_header' => [ + 'exclude' => 0, + 'label' => 'Bild Header', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_header', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + 'jpg' + ), + ], + 'image_banner' => [ + 'exclude' => 0, + 'label' => 'Banner Hintergrund', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image_banner', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:cms/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + 'jpg' + ), + ], + 'configurator_type' => [ + 'exclude' => 0, + 'label' => 'Konfigurator Typ', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Incentive', 1], + ['Team Building', 2], + ['Meeting', 3], + ['Corporate Event', 4], + ], + 'default' => 1, + 'size' => 1, + 'minitems' => 1, + 'maxitems' => 1, + 'eval' => '' + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/ContentElements/banner.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/ContentElements/banner.ts new file mode 100644 index 00000000..a05e0632 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/ContentElements/banner.ts @@ -0,0 +1,12 @@ +tt_content.banner =< lib.fluidContent +tt_content.banner { + templateName = Banner + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor + 10 { + references.fieldName = assets + references.table = tt_content + as = image + } + } +} diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/ContentElements/herounit.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/ContentElements/herounit.ts new file mode 100644 index 00000000..7f070dab --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/ContentElements/herounit.ts @@ -0,0 +1,12 @@ +tt_content.herounit =< lib.fluidContent +tt_content.herounit { + templateName = Herounit + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor + 10 { + references.fieldName = assets + references.table = tt_content + as = image + } + } +} diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/ContentElements/statement.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/ContentElements/statement.ts new file mode 100644 index 00000000..6f91dfdf --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/ContentElements/statement.ts @@ -0,0 +1,4 @@ +tt_content.statement =< lib.fluidContent +tt_content.statement { + templateName = Statement +} diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/ContentElements/tile.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/ContentElements/tile.ts new file mode 100644 index 00000000..e8bae0a9 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/ContentElements/tile.ts @@ -0,0 +1,12 @@ +tt_content.tile =< lib.fluidContent +tt_content.tile { + templateName = Tile + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor + 10 { + references.fieldName = assets + references.table = tt_content + as = image + } + } +} diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/Extensions/FluidStyledContent.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Extensions/FluidStyledContent.ts new file mode 100644 index 00000000..da75e676 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Extensions/FluidStyledContent.ts @@ -0,0 +1,8 @@ + + +lib.fluidContent { + layoutRootPaths.20 = EXT:ep_events/Resources/Private/Layouts/FluidStyledContent + templateRootPaths.20 = EXT:ep_events/Resources/Private/Templates/FluidStyledContent + partialRootPaths.20 = EXT:ep_events/Resources/Private/Partials + settings < plugin.tx_epevents.settings +} diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/Extensions/Form.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Extensions/Form.ts new file mode 100644 index 00000000..e1f6073b --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Extensions/Form.ts @@ -0,0 +1 @@ + diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/Library/Configurator.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Library/Configurator.ts new file mode 100644 index 00000000..300ecc49 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Library/Configurator.ts @@ -0,0 +1,17 @@ +lib.configurator = USER +lib.configurator { + userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run + extensionName = EpEvents + pluginName = Configurator + vendorName = EP + controller = Form + action = configurator + switchableControllerActions { + Form { + 1 = configurator + } + } + settings =< plugin.tx_epevents.settings + persistence =< plugin.tx_epevents.persistence + view =< plugin.tx_epevents.view +} diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/Library/DynamicContent.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Library/DynamicContent.ts new file mode 100644 index 00000000..99c580ad --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Library/DynamicContent.ts @@ -0,0 +1,49 @@ +lib.dynamicContent = COA +lib.dynamicContent { + 5 = LOAD_REGISTER + 5 { + colPos.cObject = TEXT + colPos.cObject { + field = colPos + ifEmpty.cObject = TEXT + ifEmpty.cObject { + value.current = 1 + ifEmpty = 0 + } + } + pageUid.cObject = TEXT + pageUid.cObject { + field = pageUid + ifEmpty.data = TSFE:id + } + contentFromPid.cObject = TEXT + contentFromPid.cObject { + data = DB:pages:{register:pageUid}:content_from_pid + data.insertData = 1 + } + wrap.cObject = TEXT + wrap.cObject { + field = wrap + } + } + 20 = CONTENT + 20 { + table = tt_content + select { + includeRecordsWithoutDefaultTranslation = 1 + orderBy = sorting + where = colPos={register:colPos} + where.insertData = 1 + pidInList.data = register:pageUid + pidInList.override.data = register:contentFromPid + } + stdWrap { + dataWrap = {register:wrap} + required = 1 + } + } + 90 = RESTORE_REGISTER +} + +lib.dynamicContentSlide =< lib.dynamicContent +lib.dynamicContentSlide.20.slide = -1 diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/Library/ParseFunc.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Library/ParseFunc.ts new file mode 100644 index 00000000..ff14465a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Library/ParseFunc.ts @@ -0,0 +1,126 @@ +lib.parseFunc { + makelinks = 1 + makelinks { + http { + keep = path + extTarget = _blank + } + mailto { + keep = path + } + } + tags { + link = TEXT + link { + current = 1 + typolink { + parameter { + data = parameters : allParams + } + extTarget = _blank + } + parseFunc.constants = 1 + } + a = TEXT + a { + current = 1 + typolink { + parameter.data = parameters:href + title.data = parameters:title + ATagParams.data = parameters:allParams + target.data = parameters:target + extTarget = _blank + extTarget.override.data = parameters:target + } + } + } + allowTags := addToList(a, abbr, acronym, address, article, aside, b, bdo) + allowTags := addToList(big, blockquote, br, caption, center, cite, code, col) + allowTags := addToList(colgroup, dd, del, dfn, dl, div, dt, em, font) + allowTags := addToList(footer, header, h1, h2, h3, h4, h5, h6, hr, i, img) + allowTags := addToList(ins, kbd, label, li, link, meta, nav, ol, p, pre, q) + allowTags := addToList(samp, sdfield, section, small, span, strike, strong) + allowTags := addToList(style, sub, sup, table, thead, tbody, tfoot, td, th) + allowTags := addToList(tr, title, tt, u, ul, var) + denyTags = * + sword = | + constants = 1 + nonTypoTagStdWrap { + HTMLparser = 1 + HTMLparser { + keepNonMatchedTags = 1 + htmlSpecialChars = 2 + } + } +} + + +lib.parseFunc_RTE < lib.parseFunc +lib.parseFunc_RTE { + externalBlocks := addToList(article, aside, blockquote, div, dd, dl, footer) + externalBlocks := addToList(header, nav, ol, section, table, ul, pre) + externalBlocks { + ol { + stripNL = 1 + stdWrap { + parseFunc = < lib.parseFunc + } + } + ul { + stripNL = 1 + stdWrap { + parseFunc = < lib.parseFunc + } + } + table { + stripNL = 1 + stdWrap { + wrap =
|
+ } + HTMLtableCells = 1 + HTMLtableCells { + default.stdWrap { + parseFunc = < lib.parseFunc_RTE + parseFunc { + nonTypoTagStdWrap { + encapsLines { + nonWrappedTag = + } + } + } + } + } + } + pre { + stripNL = 1 + } + div { + stripNL = 1 + callRecursive = 1 + } + blockquote < .div + article < .div + aside < .div + footer < .div + header < .div + nav < .div + section < .div + dl < .div + dd < .div + } + nonTypoTagStdWrap { + encapsLines { + encapsTagList = p, pre, h1, h2, h3, h4, h5, h6, hr, dt + remapTag.DIV = P + nonWrappedTag = P + innerStdWrap_all.ifBlank =   + } + } + nonTypoTagStdWrap { + HTMLparser = 1 + HTMLparser { + keepNonMatchedTags = 1 + htmlSpecialChars = 2 + } + } +} diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/Library/SearchForm.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Library/SearchForm.ts new file mode 100644 index 00000000..58b69c17 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Library/SearchForm.ts @@ -0,0 +1,17 @@ +lib.searchForm = USER +lib.searchForm { + userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run + extensionName = EpEvents + pluginName = SearchForm + vendorName = EP + controller = Search + action = form + switchableControllerActions { + Search { + 1 = form + } + } + settings =< plugin.tx_epevents.settings + persistence =< plugin.tx_epevents.persistence + view =< plugin.tx_epevents.view +} diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/Page/Ajax.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Page/Ajax.ts new file mode 100644 index 00000000..c9896347 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Page/Ajax.ts @@ -0,0 +1,31 @@ +ajax_page_json = PAGE +ajax_page_json { + typeNum = 1703 + config { + disableAllHeaderCode = 1 + additionalHeaders.10.header = Content-type:application/json + xhtml_cleaning = 0 + admPanel = 0 + debug = 0 + no_cache = 1 + } + + 10 = USER_INT + 10 { + userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run + extensionName = EpEvents + pluginName = Ajax + vendorName = EP + controller = AjaxForm + action = processInquiryForm + switchableControllerActions { + AjaxForm { + 1 = processInquiryForm + 2 = processConfiguratorForm + } + } + settings =< plugin.tx_epevents.settings + persistence =< plugin.tx_epevents.persistence + view =< plugin.tx_epevents.view + } +} diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/Page/Main.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Page/Main.ts new file mode 100644 index 00000000..ac88df61 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Page/Main.ts @@ -0,0 +1,106 @@ +page = PAGE +page { + config { + index_enable = 1 + } + + meta { + viewport = width=device-width, initial-scale=1, maximum-scale=1 + X-UA-Compatible = ie=edge + } + + shortcutIcon = EXT:ep_events/Resources/Public/images/favicon.ico + + includeJS { + remarketing = https://www.googleadservices.com/pagead/conversion_async.js + remarketing.external = 1 + remarketing.disableCompression = 1 + } + + includeJSFooter { + main = EXT:ep_events/Resources/Public/js/main.js + } + + includeCSS { + main = EXT:ep_events/Resources/Public/css/main.css + } + + 10 = FLUIDTEMPLATE + 10 { + file { + cObject = TEXT + cObject { + data = levelfield: -1, backend_layout_next_level, slide + override { + data = TSFE:page|backend_layout + } + ifEmpty = Default + split { + token = pagets__ + 1.current = 1 + 1.wrap = | + } + wrap = typo3conf/ext/ep_events/Resources/Private/Templates/Page/|.html + case = ucfirst + } + } + + layoutRootPaths.0 = EXT:ep_events/Resources/Private/Layouts/ + partialRootPaths.0 = EXT:ep_events/Resources/Private/Partials/ + templateRootPaths.0 = EXT:ep_events/Resources/Private/Templates/ + + settings < plugin.tx_epevents.settings + + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor + 10.references.fieldName = media + 20 = EP\EpEvents\DataProcessing\TraveltypeProcessor + 30 = EP\EpEvents\DataProcessing\OfferProcessor + } + } + + headerData.999 = TEXT + headerData.999.value ( + + + + + ) + headerData.999.stdWrap.if.isTrue = {$plugin.tx_epevents.settings.googleTagManagerId} +} + +[globalVar = TSFE:page|doktype = 101] + page.stdWrap.addPageCacheTags = category_page,epevents_page +[end] + +[globalVar = TSFE:page|doktype = 102] + page.stdWrap.addPageCacheTags = offer_page,epevents_page +[end] diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/Page/XMLSitemap.ts b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Page/XMLSitemap.ts new file mode 100644 index 00000000..2f904793 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/Page/XMLSitemap.ts @@ -0,0 +1,83 @@ +xmlSitemap = PAGE +xmlSitemap { + typeNum = 1848 + config { + xhtml_cleaning = none + no_cache = 1 + disableAllHeaderCode = 1 + additionalHeaders = Content-Type: text/xml; charset=utf-8 + simulateStaticDocuments = 0 + tx_realurl_enable = 1 + } + + + wrap ( + + | + ) + + 10 = COA + 10 { + 10 = HMENU + 10 { + special = list + + # Ausgangspunkt / Root Seite + special.value = {$plugin.tx_epevents.settings.xmlSitemapRootPageUid} + + excludeDoktypes = 2,3,5,6,7,199,254,255 + excludeUidList = {$plugin.tx_epevents.settings.xmlSitemapExcludeUids} + includeNotInMenu = 1 + + 1 = TMENU + 1 { + expAll = 1 + NO { + doNotLinkIt = 1 + stdWrap { + cObject = COA + cObject { + wrap = | + 10 = TEXT + 10 { + typolink { + parameter.field = uid + returnLast = url + forceAbsoluteUrl = 1 + } + wrap = | + } + 20 = TEXT + 20 { + field = SYS_LASTCHANGED + strftime = %Y-%m-%dT%H:%M:%SZ + wrap = | + } + 30 = TEXT + 30.value = 1.0 + if.isFalse.field = shortcut + } + } + } + } + 2 < .1 + 2.NO.stdWrap.cObject.30.value = 0.9 + 3 < .1 + 3.NO.stdWrap.cObject.30.value = 0.8 + 4 < .1 + 4.NO.stdWrap.cObject.30.value = 0.7 + 5 < .1 + 5.NO.stdWrap.cObject.30.value = 0.6 + 6 < .1 + 6.NO.stdWrap.cObject.30.value = 0.5 + 7 < .6 + 8 < .6 + 9 < .6 + 10 < .6 + } + } +} diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/constants.txt b/web/typo3conf/ext/ep_events/Configuration/TypoScript/constants.txt new file mode 100644 index 00000000..f603ccef --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/constants.txt @@ -0,0 +1,53 @@ +plugin.tx_epevents { + settings { + # cat=plugin.tx_epevents//a; type=string; label=Helper navigation PID + helperNavPid = + # cat=plugin.tx_epevents//a; type=string; label=Footer navigation PID + footerNavPid = + # cat=plugin.tx_epevents//a; type=string; label=Contact page UID + contactPageUid = + # cat=plugin.tx_epevents//a; type=string; label=Data protection page UID + dataProtectionPageUid = + # cat=plugin.tx_epevents//a; type=string; label=Legal notice page UID + legalNoticePageUid = + # cat=plugin.tx_epevents//a; type=string; label=Terms page UID + termsPageUid = + # cat=plugin.tx_epevents//a; type=string; label=Offer detail page UID + offerDetailPageUid = + # cat=plugin.tx_epevents//a; type=string; label=Activity detail page UID + activityDetailPageUid = + # cat=plugin.tx_epevents//a; type=string; label=Activity list page UID + activityListPageUid = + # cat=plugin.tx_epevents//a; type=string; label=Inquiry page UID + inquiryPageUid = + # cat=plugin.tx_epevents//a; type=string; label=Feedback page UID + feedbackPageUid = + # cat=plugin.tx_epevents//a; type=string; label=Ajax page UID + ajaxPageUid = + # cat=plugin.tx_epevents//a; type=string; label=Search page UID + searchPageUid = + # cat=plugin.tx_epevents//a; type=string; label=Inquiry recipient email + inquiryToEmail = + # cat=plugin.tx_epevents//a; type=string; label=Inquiry recipient name + inquiryToName = + # cat=plugin.tx_epevents//a; type=string; label=Sitemap root page UID + xmlSitemapRootPageUid = + # cat=plugin.tx_epevents//a; type=string; label=XML sitemap page UIDs to exclude + xmlSitemapExcludeUids = + # cat=plugin.tx_epevents//a; type=string; label=Google Tag Manager ID + googleTagManagerId = + # cat=plugin.tx_epevents//a; type=string; label=Ignore following IPs in searchlog + searchLogIgnoreIps = + # cat=plugin.tx_epevents//a; type=string; label=Activity default header image + activityDefaultHeaderImage = + # cat=plugin.tx_epevents//a; type=string; label=Activity default keywords image + activityDefaultKeywordsImage = + } + persistence { + # cat=plugin.tx_epevents//a; type=string; label=Default storage PID + storagePid = + } +} + + + diff --git a/web/typo3conf/ext/ep_events/Configuration/TypoScript/setup.txt b/web/typo3conf/ext/ep_events/Configuration/TypoScript/setup.txt new file mode 100644 index 00000000..e2e48e3a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Configuration/TypoScript/setup.txt @@ -0,0 +1,174 @@ + + + + + + + + + + + + + +plugin.tx_epevents { + features.skipDefaultArguments = 1 + view { + layoutRootPaths.10 = EXT:ep_events/Resources/Private/Layouts/ + templateRootPaths.10 = EXT:ep_events/Resources/Private/Templates/ + partialRootPaths.10 = EXT:ep_events/Resources/Private/Partials/ + widget.TYPO3\CMS\Fluid\ViewHelpers\Widget\PaginateViewHelper.templateRootPath = EXT:ep_events/Resources/Private/Templates/ + } + + persistence { + storagePid = {$plugin.tx_epevents.persistence.storagePid} + } + settings < lib.fluidContent.settings + settings { + helperNavPid = {$plugin.tx_epevents.settings.helperNavPid} + footerNavPid = {$plugin.tx_epevents.settings.footerNavPid} + contactPageUid = {$plugin.tx_epevents.settings.contactPageUid} + inquiryPageUid = {$plugin.tx_epevents.settings.inquiryPageUid} + ajaxPageUid = {$plugin.tx_epevents.settings.ajaxPageUid} + searchPageUid = {$plugin.tx_epevents.settings.searchPageUid} + inquiryToEmail = {$plugin.tx_epevents.settings.inquiryToEmail} + inquiryToName = {$plugin.tx_epevents.settings.inquiryToName} + xmlSitemapRootPageUid = {$plugin.tx_epevents.settings.xmlSitemapRootPageUid} + xmlSitemapExcludeUids = {$plugin.tx_epevents.settings.xmlSitemapExcludeUids} + googleTagManagerId = {$plugin.tx_epevents.settings.googleTagManagerId} + offerDetailPageUid = {$plugin.tx_epevents.settings.offerDetailPageUid} + activityDetailPageUid = {$plugin.tx_epevents.settings.activityDetailPageUid} + activityListPageUid = {$plugin.tx_epevents.settings.activityListPageUid} + dataProtectionPageUid = {$plugin.tx_epevents.settings.dataProtectionPageUid} + legalNoticePageUid = {$plugin.tx_epevents.settings.legalNoticePageUid} + termsPageUid = {$plugin.tx_epevents.settings.termsPageUid} + feedbackPageUid = {$plugin.tx_epevents.settings.feedbackPageUid} + searchLogIgnoreIps = {$plugin.tx_epevents.settings.searchLogIgnoreIps} + activityDefaultHeaderImage = {$plugin.tx_epevents.settings.activityDefaultHeaderImage} + activityDefaultKeywordsImage = {$plugin.tx_epevents.settings.activityDefaultKeywordsImage} + configurator { + options { + travelType { + 1 = Incentive + 2 = Teambuilding + 3 = Meeting + 4 = Corporate Event + } + locationType { + 1 = Meer + 2 = Berge + 3 = Städte + 4 = Spezial + } + accommodationType { + 1 = 3-Sterne + 2 = 4-Sterne + 3 = 5-Sterne + 4 = Spezial + } + programmeType { + 1 = Outdoor & Action + 2 = Event-Gastronomie + 3 = Sightseeing + 4 = Spezial + } + distance { + 1 = Deutschland + 2 = Europa + 3 = Welt + } + pax { + 1 = 15 - 20 + 2 = 20 - 30 + 3 = 30 - 40 + 4 = 40 - 50 + 5 = 50 - 60 + 6 = 60 - 80 + 7 = 80 - 100 + 8 = 100 - 120 + 9 = 120 - 150 + 10 = 150 - 200 + 11 = 200 - 250 + 12 = 250 - 300 + 13 = 350 - 400 + 14 = 400 - 450 + 15 = 450 - 500 + } + budget { + 1 = nicht festgelegt + 2 = 300 - 400 € + 3 = 400 - 500 € + 4 = 500 - 600 € + 5 = 600 - 700 € + 6 = 700 - 800 € + 7 = 800 - 900 € + 8 = 900 - 1000 € + 9 = 1000 - 1100 € + 10 = 1100 - 1200 € + 11 = 1200 - 1300 € + 12 = 1300 - 1400 € + 13 = 1400 - 1500 € + 14 = 1500 - 1600 € + 15 = 1600 - 1700 € + 16 = 1700 - 1800 € + 17 = 1800 - 1900 € + 18 = 1900 - 2000 € + 19 = 2000 - 2100 € + 20 = 2100 - 2200 € + 21 = 2200 - 2300 € + 22 = 2300 - 2400 € + 23 = 2400 - 2500 € + 24 = 2500 - 2600 € + 25 = 2600 - 2700 € + 26 = 2700 - 2800 € + 27 = 2800 - 2900 € + 28 = 2900 - 3000 € + } + period { + 1 = 1 Nacht + 2 = 2 Nächte + 3 = 3 Nächte + 4 = 4 Nächte + 5 = 5 Nächte + 6 = 6 Nächte + 7 = 7 Nächte + } + } + defaults { + budget = 6 + } + } + } +} + +lib.parseFunc_RTE { + nonTypoTagStdWrap.encapsLines.addAttributes.P.class > + nonTypoTagStdWrap.encapsLines.addAttributes.H2.class = headline headline--primary + nonTypoTagStdWrap.encapsLines.addAttributes.H3.class = headline +} + +tt_content.stdWrap.innerWrap > +lib.stdheader.3.headerClass > + + + + + +config { + doctype = html5 + removeDefaultCSS = 1 + removePageCss = 1 + removeDefaultJS = 0 + disablePrefixComment = 1 + inlineStyle2TempFile = 1 + tx_realurl_enable = 1 + absRefPrefix = / + language = de + locale_all = de_DE.UTF-8 + sys_language_uid = 0 + htmlTag_langKey = de + compressJs = 1 + compressCss = 1 + typolinkEnableLinksAcrossDomains = 1 +} + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/.htaccess b/web/typo3conf/ext/ep_events/Resources/Private/.htaccess new file mode 100755 index 00000000..3418e55a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/css/rte.css b/web/typo3conf/ext/ep_events/Resources/Private/Assets/css/rte.css new file mode 100644 index 00000000..0c869853 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/css/rte.css @@ -0,0 +1,9 @@ +ul.coloured-list { + list-style: circle; +} +ul.footnote-list { + list-style: disc; +} +a.button { + font-weight: 700; +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.eot b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.eot new file mode 100644 index 00000000..1cea4781 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.eot differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.svg new file mode 100644 index 00000000..64e5a317 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.svg @@ -0,0 +1 @@ +Error 500 (Server Error)!!1

500. That’s an error.

There was an error. Please try again later. That’s all we know.

\ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.ttf b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.ttf new file mode 100644 index 00000000..fac3fa24 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.ttf differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.woff b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.woff new file mode 100644 index 00000000..08b4e428 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.woff differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.woff2 b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.woff2 new file mode 100644 index 00000000..97a3f1bd Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-700.woff2 differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.eot b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.eot new file mode 100644 index 00000000..6a055b2a Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.eot differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.svg new file mode 100644 index 00000000..64e5a317 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.svg @@ -0,0 +1 @@ +Error 500 (Server Error)!!1

500. That’s an error.

There was an error. Please try again later. That’s all we know.

\ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.ttf b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.ttf new file mode 100644 index 00000000..90c9667b Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.ttf differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.woff b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.woff new file mode 100644 index 00000000..ca5300c5 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.woff differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.woff2 b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.woff2 new file mode 100644 index 00000000..b5cec117 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/cairo-v2-latin-ext_latin-regular.woff2 differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/config.json b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/config.json new file mode 100755 index 00000000..b72bc53e --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/config.json @@ -0,0 +1,62 @@ +{ + "name": "", + "css_prefix_text": "icon-", + "css_use_suffix": false, + "hinting": true, + "units_per_em": 1000, + "ascent": 850, + "glyphs": [ + { + "uid": "44e04715aecbca7f266a17d5a7863c68", + "css": "plus", + "code": 59392, + "src": "fontawesome" + }, + { + "uid": "861ab06e455e2de3232ebef67d60d708", + "css": "minus", + "code": 59393, + "src": "fontawesome" + }, + { + "uid": "12f4ece88e46abd864e40b35e05b11cd", + "css": "ok", + "code": 59394, + "src": "fontawesome" + }, + { + "uid": "ee6d80c7df78180368f1fbb5c0673a96", + "css": "icon_mail_circle", + "code": 59396, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M500 940C743 940 942 741 941 499 940 256 743 59 500 59 257 59 60 257 60 500 60 743 258 941 500 940M476 1000C462 998 448 997 434 995 356 985 284 958 219 913 117 843 48 748 17 628-25 460 10 307 121 174 194 88 287 33 398 11 557-20 701 16 825 121 911 194 966 287 989 397 1017 536 992 665 912 782 842 884 746 952 626 983 596 991 565 993 534 998 531 999 527 999 524 1000L476 1000ZM510 699C586 699 663 699 739 699 764 699 780 683 780 658 780 555 780 451 780 347 780 322 765 306 739 306 587 306 434 306 281 306 277 306 272 307 268 308 251 313 241 327 241 347 241 394 241 441 241 488 241 545 241 601 241 658 241 671 244 682 254 690 262 697 272 699 282 699L510 699ZM216 670L216 335C217 334 217 334 217 334 221 306 246 282 281 282 432 282 583 282 734 282 737 282 740 282 744 282 770 283 788 296 799 319 802 324 803 330 804 335L804 670C804 671 804 671 803 672 796 704 773 723 740 723L307 723C297 723 287 723 278 723 252 722 233 710 222 686 219 681 218 676 216 670M419 519C399 497 379 476 360 454 338 430 316 406 294 382 289 377 288 371 292 366 295 362 301 359 306 362 309 363 311 365 313 367 362 421 412 474 460 529 485 556 522 558 547 540 554 535 561 528 567 521 614 470 661 419 707 367 715 358 725 361 729 367 732 372 731 377 726 383 706 405 685 428 665 450 644 473 623 496 602 519 609 526 617 533 624 540 657 570 691 600 724 631 724 631 725 632 726 632 732 639 733 645 728 651 723 656 715 656 709 650 686 629 662 607 639 586 621 570 603 554 585 537 566 561 542 577 510 577 479 577 455 562 436 537 424 548 413 558 402 568 372 596 342 623 312 650 305 656 298 656 293 651 288 645 289 638 295 632 335 596 375 560 414 523 416 522 417 521 419 519", + "width": 1000 + }, + "search": [ + "icon_mail_circle" + ] + }, + { + "uid": "1b0a86f5250095cc6878f1215dedf51c", + "css": "icon_phone_circle", + "code": 59397, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M500 940C743 940 942 741 941 499 940 256 743 59 500 59 257 59 60 257 60 500 60 743 258 941 500 940M476 1000C462 998 448 997 434 995 356 985 284 958 219 913 117 843 48 748 17 628-25 460 10 307 121 174 194 88 287 33 398 11 557-20 701 16 825 121 911 194 966 287 989 397 1017 536 992 665 912 782 842 884 746 952 626 983 596 991 565 993 534 998 531 999 527 999 524 1000L476 1000ZM320 222C352 277 383 331 415 386 384 407 381 438 386 469 396 534 426 588 475 631 492 646 512 657 535 656 545 656 556 653 568 650 598 703 629 757 660 811 613 843 574 850 529 822 499 805 474 783 450 759 367 672 308 571 268 457 254 416 245 374 244 330 244 292 259 262 291 240 300 234 310 228 320 222M445 384C435 383 429 380 425 373 396 322 366 271 337 219 330 208 334 196 345 190 360 181 375 172 390 164 402 157 413 160 420 172 450 223 479 273 508 324 515 336 512 348 500 355 485 364 470 372 455 381 451 383 447 383 445 384M690 807C680 806 674 803 670 796 640 745 610 693 581 642 574 631 578 619 589 613 603 604 618 596 632 588 646 580 657 583 665 597 692 643 719 690 746 737 749 741 751 745 753 749 758 759 755 771 745 777 730 786 714 795 698 804 695 806 691 806 690 807", + "width": 1000 + }, + "search": [ + "icon_phone_circle" + ] + }, + { + "uid": "531bc468eecbb8867d822f1c11f1e039", + "css": "calendar", + "code": 59395, + "src": "fontawesome" + } + ] +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.eot b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.eot new file mode 100755 index 00000000..98eca33e Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.eot differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.svg new file mode 100755 index 00000000..f33d6272 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.svg @@ -0,0 +1,22 @@ + + + +Copyright (C) 2017 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.ttf b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.ttf new file mode 100755 index 00000000..df44bc33 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.ttf differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.woff b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.woff new file mode 100755 index 00000000..8608cae3 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.woff differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.woff2 b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.woff2 new file mode 100755 index 00000000..8156862d Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/fonts/fontello.woff2 differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/apps-pagetree-category-page.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/apps-pagetree-category-page.svg new file mode 100644 index 00000000..f1c7ad9c --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/apps-pagetree-category-page.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/apps-pagetree-example-page.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/apps-pagetree-example-page.svg new file mode 100644 index 00000000..f7664543 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/apps-pagetree-example-page.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/bg_configurator.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/bg_configurator.jpg new file mode 100644 index 00000000..3f4123d7 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/bg_configurator.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/button_circle.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/button_circle.svg new file mode 100644 index 00000000..ace100b2 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/button_circle.svg @@ -0,0 +1 @@ + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_destination_city.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_destination_city.jpg new file mode 100644 index 00000000..be2b4899 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_destination_city.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_destination_mountains.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_destination_mountains.jpg new file mode 100644 index 00000000..799eb240 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_destination_mountains.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_destination_sea.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_destination_sea.jpg new file mode 100644 index 00000000..7a56b395 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_destination_sea.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_destination_special.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_destination_special.jpg new file mode 100644 index 00000000..ec2cde8f Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_destination_special.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_hotel_3-stars.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_hotel_3-stars.jpg new file mode 100644 index 00000000..1448c32b Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_hotel_3-stars.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_hotel_4-stars.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_hotel_4-stars.jpg new file mode 100644 index 00000000..fc2473d9 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_hotel_4-stars.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_hotel_5-stars.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_hotel_5-stars.jpg new file mode 100644 index 00000000..303d461b Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_hotel_5-stars.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_hotel_special.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_hotel_special.jpg new file mode 100644 index 00000000..6606d91f Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_hotel_special.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_programme_event-gastro.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_programme_event-gastro.jpg new file mode 100644 index 00000000..4d24d401 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_programme_event-gastro.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_programme_outdoor-action.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_programme_outdoor-action.jpg new file mode 100644 index 00000000..6f773387 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_programme_outdoor-action.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_programme_sightseeing.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_programme_sightseeing.jpg new file mode 100644 index 00000000..be80619e Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_programme_sightseeing.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_programme_special.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_programme_special.jpg new file mode 100644 index 00000000..184afc68 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_programme_special.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_type_corporate-event.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_type_corporate-event.jpg new file mode 100644 index 00000000..133325b7 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_type_corporate-event.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_type_incentive.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_type_incentive.jpg new file mode 100644 index 00000000..a2b9d2fb Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_type_incentive.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_type_meeting.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_type_meeting.jpg new file mode 100644 index 00000000..6d0f06e4 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_type_meeting.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_type_team-building.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_type_team-building.jpg new file mode 100644 index 00000000..fb96fbad Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/configurator_type_team-building.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_banner_01.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_banner_01.jpg new file mode 100644 index 00000000..45108ec2 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_banner_01.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_carousel_01.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_carousel_01.jpg new file mode 100644 index 00000000..450e898a Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_carousel_01.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_carousel_01_mobile.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_carousel_01_mobile.jpg new file mode 100644 index 00000000..fa5e90c5 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_carousel_01_mobile.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_contact.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_contact.jpg new file mode 100644 index 00000000..27319c00 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_contact.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_about_01.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_about_01.jpg new file mode 100644 index 00000000..941edcdf Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_about_01.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_example_01.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_example_01.jpg new file mode 100644 index 00000000..b6c7b28d Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_example_01.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_home_01.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_home_01.jpg new file mode 100644 index 00000000..2a8df7e4 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_home_01.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_home_02.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_home_02.jpg new file mode 100644 index 00000000..c09bf73a Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_home_02.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_home_03.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_home_03.jpg new file mode 100644 index 00000000..6657888e Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_header_home_03.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_konfigurator_desktop_02.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_konfigurator_desktop_02.jpg new file mode 100644 index 00000000..cb9151cf Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_konfigurator_desktop_02.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_teaser_01.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_teaser_01.jpg new file mode 100644 index 00000000..a7b1b869 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_teaser_01.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_teaser_02.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_teaser_02.jpg new file mode 100644 index 00000000..6e155972 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_teaser_02.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_teaser_03.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_teaser_03.jpg new file mode 100644 index 00000000..591c0cce Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_teaser_03.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_testimonial_01.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_testimonial_01.jpg new file mode 100644 index 00000000..de2b4d54 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_testimonial_01.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_tile_01.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_tile_01.jpg new file mode 100644 index 00000000..5dabfd57 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_tile_01.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_tile_02.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_tile_02.jpg new file mode 100644 index 00000000..108096c0 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_tile_02.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_tile_03.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_tile_03.jpg new file mode 100644 index 00000000..f64567df Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_tile_03.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_tile_04.jpg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_tile_04.jpg new file mode 100644 index 00000000..575a2619 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/dummy_tile_04.jpg differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/favicon.ico b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/favicon.ico new file mode 100644 index 00000000..51a26264 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/favicon.ico differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/global_compact.png b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/global_compact.png new file mode 100644 index 00000000..a04d500e Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/global_compact.png differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_destination_cities.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_destination_cities.svg new file mode 100644 index 00000000..1f1fe044 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_destination_cities.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_destination_mountains.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_destination_mountains.svg new file mode 100644 index 00000000..b68f653e --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_destination_mountains.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_destination_sea.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_destination_sea.svg new file mode 100644 index 00000000..45f35bde --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_destination_sea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_destination_special.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_destination_special.svg new file mode 100644 index 00000000..8705c778 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_destination_special.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_events.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_events.svg new file mode 100644 index 00000000..c4874b31 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_events.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_events_opaque.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_events_opaque.svg new file mode 100644 index 00000000..d8121797 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_events_opaque.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_incentives.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_incentives.svg new file mode 100644 index 00000000..f5f800ad --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_incentives.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_incentives_opaque.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_incentives_opaque.svg new file mode 100644 index 00000000..87d1764e --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_incentives_opaque.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_mail.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_mail.svg new file mode 100644 index 00000000..229b535b --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_mail.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_mail_circle.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_mail_circle.svg new file mode 100644 index 00000000..cf41dd8b --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_mail_circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_meetings.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_meetings.svg new file mode 100644 index 00000000..101d39a6 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_meetings.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_meetings_opaque.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_meetings_opaque.svg new file mode 100644 index 00000000..7aa4e8d6 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_meetings_opaque.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_phone.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_phone.svg new file mode 100644 index 00000000..83af3e13 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_phone_circle.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_phone_circle.svg new file mode 100644 index 00000000..42cebd6e --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_phone_circle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_printer.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_printer.svg new file mode 100644 index 00000000..06e74eda --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_printer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_teambuilding.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_teambuilding.svg new file mode 100644 index 00000000..040d09c2 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_teambuilding.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_teambuilding_opaque.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_teambuilding_opaque.svg new file mode 100644 index 00000000..49a3daaf --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/icon_teambuilding_opaque.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/logo.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/logo.svg new file mode 100644 index 00000000..7800ad2f --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/logo_wide.svg b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/logo_wide.svg new file mode 100644 index 00000000..28f23946 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/logo_wide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/spinner_box.gif b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/spinner_box.gif new file mode 100644 index 00000000..47e60c20 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/spinner_box.gif differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/spinner_configurator.gif b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/spinner_configurator.gif new file mode 100644 index 00000000..66849aa2 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/spinner_configurator.gif differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/spinner_default.gif b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/spinner_default.gif new file mode 100644 index 00000000..cb272fda Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/spinner_default.gif differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_activity.gif b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_activity.gif new file mode 100644 index 00000000..ff8c9cdb Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_activity.gif differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_contact.gif b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_contact.gif new file mode 100644 index 00000000..ff8c9cdb Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_contact.gif differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_hotel.gif b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_hotel.gif new file mode 100644 index 00000000..ff8c9cdb Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_hotel.gif differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_location.gif b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_location.gif new file mode 100644 index 00000000..ff8c9cdb Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_location.gif differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_offer.gif b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_offer.gif new file mode 100644 index 00000000..6cc5f163 Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_offer.gif differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_testimonial.gif b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_testimonial.gif new file mode 100644 index 00000000..ff8c9cdb Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_testimonial.gif differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_traveltype.gif b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_traveltype.gif new file mode 100644 index 00000000..ff8c9cdb Binary files /dev/null and b/web/typo3conf/ext/ep_events/Resources/Private/Assets/images/tx_epevents_domain_model_traveltype.gif differ diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/app.js b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/app.js new file mode 100644 index 00000000..bd339f7c --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/app.js @@ -0,0 +1,182 @@ +'use strict'; + +require('cookieconsent'); + +import Vue from 'vue' +import $ from 'jquery' +import VueSession from 'vue-session' + +const slick = require('slick-carousel'); +const Sticky = require('sticky-js'); +const $window = $(window); + +Vue.use(VueSession); + +import InquiryForm from './components/InquiryForm.vue' +import Configurator from './components/Configurator.vue' +import TeaserCarousel from './components/TeaserCarousel.vue' + +const carouselArrowLeft = ''; +const carouselArrowRight = ''; + +new Vue({ + el: '#page', + components: { + InquiryForm, + Configurator, + TeaserCarousel + }, + data () { + return { + mobileNavOpen: false, + scrollTopVisible: false + } + }, + methods: { + initTeaserCarousel () { + $('.teaser-carousel').each(function () { + $(this).slick({ + mobileFirst: true, + slidesToShow: 1, + slidesToScroll: 1, + dots: false, + prevArrow: carouselArrowLeft, + nextArrow: carouselArrowRight, + appendArrows: $(this).closest('.carousel__outer'), + responsive: [ + { + breakpoint: 1024, + settings: { + slidesToShow: 4 + } + }, + { + breakpoint: 768, + settings: { + slidesToShow: 3 + } + }, + { + breakpoint: 512, + settings: { + slidesToShow: 2 + } + } + ] + }); + }); + }, + initTestimonialsCarousel () { + $('.testimonial-carousel').each(function () { + $(this).slick({ + mobileFirst: true, + slidesToShow: 1, + slidesToScroll: 1, + dots: false, + prevArrow: carouselArrowLeft, + nextArrow: carouselArrowRight, + appendArrows: $(this).closest('.carousel__outer'), + responsive: [ + { + breakpoint: 1024, + settings: { + slidesToShow: 4 + } + }, + { + breakpoint: 768, + settings: { + slidesToShow: 3 + } + }, + { + breakpoint: 512, + settings: { + slidesToShow: 2 + } + } + ] + }); + }); + }, + initProgramSlider () { + $('.program-slider').slick({ + slidesToShow: 1, + slidesToScroll: 1, + dots: false, + prevArrow: carouselArrowLeft, + nextArrow: carouselArrowRight, + }); + }, + initSlider () { + $('.slider').slick({ + mobileFirst: true, + slidesToShow: 1, + slidesToScroll: 1, + dots: false, + arrows: false, + rows: 0, + responsive: [ + { + breakpoint: 768, + settings: { + arrows: true, + prevArrow: carouselArrowLeft, + nextArrow: carouselArrowRight, + } + }, + ] + }); + }, + initStickyForm () { + new Sticky('.sticky'); + }, + toggleMobileNavigation () { + this.mobileNavOpen = !this.mobileNavOpen; + $('body').toggleClass('mobilenav--open', this.mobileNavOpen); + }, + initMobileNavigation () { + $('.subnav-toggle').on('click', function (e) { + e.preventDefault(); + let $navItem = $(this).closest('.mobilenav__item'); + $navItem.find('.mobilenav__subnav') + .slideToggle('fast'); + $navItem.find('.mobilenav__sub-flag') + .toggleClass('open'); + $(this).toggleClass('open'); + }); + }, + initListeners () { + $window.on('scroll', () => { + this.scrollTopVisible = $window.scrollTop() > $window.height() / 3; + }); + }, + scrollTo (id) { + let $element = $(id); + let offset = $('header').outerHeight() + 20; + this.scroll($element.offset().top - offset); + }, + scrollTop () { + this.scroll(0); + }, + scroll (top) { + $('body, html').stop().animate({ + scrollTop: top + }, 650); + }, + triggerPrintDialog () { + window.print(); + } + }, + mounted () { + Vue.nextTick(() => { + this.initTeaserCarousel(); + this.initTestimonialsCarousel(); + this.initProgramSlider(); + this.initSlider(); + this.initMobileNavigation(); + this.initStickyForm(); + this.initListeners(); + }); + } +}); diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/Configurator.vue b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/Configurator.vue new file mode 100644 index 00000000..5a5ec9a4 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/Configurator.vue @@ -0,0 +1,251 @@ + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/DateInput.vue b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/DateInput.vue new file mode 100644 index 00000000..3bf05aa6 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/DateInput.vue @@ -0,0 +1,66 @@ + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/DateRangeInput.vue b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/DateRangeInput.vue new file mode 100644 index 00000000..e5a39ef0 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/DateRangeInput.vue @@ -0,0 +1,56 @@ + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/InquiryForm.vue b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/InquiryForm.vue new file mode 100644 index 00000000..85487bba --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/InquiryForm.vue @@ -0,0 +1,86 @@ + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/StepInput.vue b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/StepInput.vue new file mode 100644 index 00000000..deca477e --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/StepInput.vue @@ -0,0 +1,92 @@ + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/TeaserCarousel.vue b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/TeaserCarousel.vue new file mode 100644 index 00000000..106d61c3 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/components/TeaserCarousel.vue @@ -0,0 +1,104 @@ + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/main.js b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/main.js new file mode 100644 index 00000000..254a2f9e --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/js/main.js @@ -0,0 +1,7 @@ +'use strict'; + +const images = require.context('../images', true, /\.(png|gif|svg|ico)$/); + +require('./app'); + +require('../scss/main.scss'); diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_badge.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_badge.scss new file mode 100644 index 00000000..0e3dc048 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_badge.scss @@ -0,0 +1,40 @@ +.badge { + display: none; + + @include mq($from: tablet) { + display: block; + position: relative; + float: right; + width: 256px; + margin: 0 0 24px 96px; + } +} + +.badge__background { + width: 100%; + height: auto; + display: block; +} + +.badge__content { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + text-align: center; + color: white; + font-size: 20px; + font-weight: 700; + line-height: 130%; + @include mq($from: tablet) { + font-size: 32px; + } +} + +.badge__outline { + @include sectionFills(0.15); +} + +.badge__inner { + @include sectionFills(); +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_banner.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_banner.scss new file mode 100644 index 00000000..0eeafea4 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_banner.scss @@ -0,0 +1,37 @@ +.banner { + position: relative; + margin-bottom: 20px; +} + +.banner__content { + width: 100%; + min-height: 300px; + padding: 48px 0; + color: white; + @include sectionBackgrounds(0.8); + display: flex; + justify-content: space-around; + align-items: center; + flex-direction: column; +} + +.banner__title { + display: block; + text-align: center; + font-size: 32px; + font-weight: 700; + text-transform: uppercase; + line-height: 110%; + text-shadow: 1px 1px rgba(black, 0.25); +} + +.banner__image { + position: absolute; + z-index: -1; + top: 0; + left: 0; + @include size(100%); + background-position: center; + background-size: cover; + background-repeat: no-repeat; +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_base.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_base.scss new file mode 100644 index 00000000..928b9221 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_base.scss @@ -0,0 +1,231 @@ +html, +body { + height: 100%; + width: 100%; + margin: 0; + padding: 0; + font-family: $font-main; + font-weight: 400; + font-size: 16px; + + @include mq($from: tablet) { + font-size: 18px; + } + + &.mobilenav--open { + overflow: hidden; + } +} + +html { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + box-sizing: border-box; +} + +*, +*:after, +*:before { + box-sizing: inherit; +} + +.scale { + max-width: 100%; + height: auto; + display: block; +} + +.navtoggle { + display: block; + width: 32px; + height: auto; + margin-left: auto; + + @include mq($from: tablet) { + display: none; + } +} + +.navtoggle__icon { + fill: $color-font-main; + transition: all 0.25s ease-in-out; + + .mobilenav--open & { + transform: rotate(90deg); + } +} + +.scrolltop { + display: block; + position: fixed; + bottom: 2%; + right: 2%; + @include size(40px); + background-color: $color-brand-primary; + opacity: 0.75; +} + +b, strong { + font-weight: 700; +} + +a { + color: inherit; +} + +ul { + margin: 0 0 16px; + padding-left: 24px; + + &.plain-list { + list-style: none; + margin: 0; + padding: 0; + } + + &.inline-list { + & > li { + float: left; + } + } + + &.footnote-list { + list-style: none; + margin: 0; + padding: 0; + font-size: 14px; + padding-left: 16px; + } + + &.coloured-list { + list-style: none; + padding: 0; + line-height: 175%; + + li { + position: relative; + padding-left: 16px; + } + + li::before { + position: absolute; + top: 0; + left: 0; + content: "\25CF"; + font-size: 18px; + @include sectionColoursFromParent(); + } + } +} + +p { + margin: 0 0 24px; + line-height: 175%; +} + +hr { + max-width: 25%; + margin: 32px auto 32px 0; + color: $color-ruler; + background-color: $color-ruler; + height: 1px; + border: none; +} + +h1, +h2, +h3, +.headline--primary, +.headline--secondary { + margin: 0; + padding: 0; + font-weight: 700; +} + +.headline { + @include sectionColoursFromParent(); + + &--icon { + display: flex; + justify-content: flex-start; + align-items: center; + } +} + +.headline--primary, +.headline--secondary { + + .content--sub & { + text-align: center; + } + +} + +h1, +.headline--primary { + font-size: 22px; + line-height: 115%; + text-transform: uppercase; + padding-bottom: 18px; + + @include mq($from: tablet) { + font-size: 32px; + padding-bottom: 24px; + } + + span { + font-weight: 400; + } + + .subline, + .topline { + display: block; + font-size: 16px; + line-height: 120%; + color: $color-brand-primary; + text-transform: none; + @include sectionColoursFromParent(); + + @include mq($from: tablet) { + font-size: 24px; + } + + &--box { + color: white; + } + } +} + +h2, +.headline--secondary { + font-size: 16px; + line-height: 120%; + padding-bottom: 16px; + font-weight: 400; + + @include mq($from: tablet) { + font-size: 24px; + padding-bottom: 24px; + } +} + +h3 { + font-weight: 400; + font-size: 16px; + + @include mq($from: tablet) { + font-size: 18px; + padding-bottom: 8px; + } +} + +.headline__icon { + display: block; + width: 80px; + height: auto; + padding-right: 16px; + + @include mq($from: mobile) { + width: 96px; + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_box.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_box.scss new file mode 100644 index 00000000..10aa0ad4 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_box.scss @@ -0,0 +1,93 @@ +.box { + width: 100%; +} + +.box__image { + display: block; + max-width: 100%; + height: auto; +} + +.box__button { + display: block; + color: white; + text-align: center; + text-decoration: none; + background-color: $color-brand-secondary; + border: none; + width: 100%; + font-size: 20px; + font-weight: 700; + padding: 8px 0; +} + +.box__content { + padding: 32px 16px; + background-color: $color-brand-primary; + color: white; +} + +.box__form { + display: none; + + @include mq($from: tablet) { + display: block; + width: 100%; + height: auto; + fill: $color-brand-primary; + } + + &--top { + margin-bottom: -1px; + } + + &--bottom { + margin-top: -1px; + } +} + +.box__link { + text-decoration: none; + font-weight: 700; + font-size: 16px; + line-height: 32px; + + @include mq($from: desktop) { + font-size: 20px; + line-height: 32px; + + &--small { + font-size: 16px; + } + } + +} + +.box__nav { + margin-top: -32px; + padding-bottom: 32px; + background-color: $color-brand-primary; +} + +.box__nav__item { + padding: 0 16px; + + &:not(:last-child) { + border-bottom: 1px solid rgba(white, 0.2); + } + + &--active, + &:hover { + background-color: $color-brand-light; + } +} + +.box__nav__link { + display: block; + color: white; + text-decoration: none; + text-transform: uppercase; + font-size: 18px; + line-height: 32px; + font-weight: 700; +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_brands.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_brands.scss new file mode 100644 index 00000000..599b08c9 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_brands.scss @@ -0,0 +1,19 @@ +.brands { + padding-top: 32px; + border-top: 1px solid $color-divider; + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.brands__item { + width: percentage(1/2); + + @include mq($from: desktop) { + width: percentage(1/4); + } +} + +.brands__logo { + margin: 8px auto; +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_breakpoints.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_breakpoints.scss new file mode 100644 index 00000000..77badf35 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_breakpoints.scss @@ -0,0 +1,7 @@ +$mq-breakpoints: ( + mobile: $viewport-width-mobile, + tablet: $viewport-width-tablet, + desktop: $viewport-width-desktop +); + +@import "~sass-mq"; diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_buttons.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_buttons.scss new file mode 100644 index 00000000..805b8717 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_buttons.scss @@ -0,0 +1,59 @@ +.button { + display: inline-block; + font-weight: 700; + text-decoration: none; + + &--page-header { + display: block; + min-width: 186px; + background-color: $color-brand-primary; + color: white; + font-size: 18px; + padding: 0 32px 0 24px; + line-height: 80px; + box-shadow: 8px 8px 8px rgba(black, 0.2); + } + + &--herounit, + &--configurator { + display: block; + min-width: 220px; + text-align: center; + background-color: $color-brand-primary; + @include sectionBackgroundsFromParent(); + color: white; + line-height: 48px; + border: none; + outline: none; + + @include mq($from: tablet) { + box-shadow: 8px 8px 8px rgba(black, 0.2); + font-size: 24px; + } + } + + &--configurator { + width: 100%; + display: inline-block; + + @include mq($from: tablet) { + width: auto; + } + } + + &--transparent { + padding: 8px 16px; + text-align: center; + border: 1px solid white; + color: white; + + &:hover { + background: white; + color: $color-font-main; + } + } + + &--full { + width: 100%; + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_card.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_card.scss new file mode 100644 index 00000000..9cbc5687 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_card.scss @@ -0,0 +1,65 @@ +.card { + @include mq($from: desktop) { + &:not(.card--no-form) { + padding-bottom: 48px; + } + } +} + +.card__inner { + position: relative; + margin: 0 8px; +} + +.card__caption { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + min-height: 25%; + padding: 16px; + color: white; + text-transform: uppercase; + @include sectionBackgrounds(0.75); + transition: background-color 0.25s ease-in-out; + + @include mq($from: desktop) { + .card:hover & { + @include sectionBackgrounds(); + } + } +} + +.card__form { + display: none; + + @include mq($from: desktop) { + display: block; + opacity: 0; + transition: opacity 0.25s ease-in-out; + width: 100%; + height: auto; + position: absolute; + left: 0; + top: 100%; + border: none; + + .card:hover & { + opacity: 1; + } + } + + polygon { + @include sectionFills(); + } +} + +.card__subtitle { + display: block; +} + +.card__title { + display: block; + font-weight: 700; +} + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_carousel.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_carousel.scss new file mode 100644 index 00000000..86515548 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_carousel.scss @@ -0,0 +1,69 @@ +.carousel { + + &--background { + background-color: $color-background; + padding-bottom: 48px; + margin-bottom: 8px; + } + + @include sectionBackgrounds(0.25); +} + +.carousel__outer { + @include container($viewport-width-max); + position: relative; +} + +.carousel__inner { + @include container($content-width-max); +} + +.carousel__item { + border: none; + outline: none; +} + +.carousel__arrow { + border: none; + outline: none; + &:focus, + &:active { + outline: none; + } + position: absolute; + z-index: 100; + @include size(32px); + + fill: white; + @include sectionColoursFromParent; + + &--prev { + left: -5px; + top: 50%; + transform: translateY(-50%); + + .program-slider & { + left: 10px; + } + } + + &--next { + right: -5px; + top: 50%; + transform: translateY(-50%); + + .program-slider & { + right: 10px; + } + } + + .testimonials & { + fill: $color-brand-primary; + } +} + +.carousel__loading { + display: block; + @include size(24px); + margin: 0 auto; +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_colors.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_colors.scss new file mode 100644 index 00000000..40569e9d --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_colors.scss @@ -0,0 +1,15 @@ +//$color-brand-primary: #0084d4; +$color-brand-primary: #19a0d2; +$color-brand-secondary: #1e314b; +$color-brand-light: #8CCFE8; +$color-background: lighten(#dbdee2, 5%); + +$color-font-main: #1e314b; +$color-divider: rgba($color-background, 0.8); +$color-ruler: rgba(black, 0.2); +$color-formerror: #cc3333; + +$color-incentives: #8cae8d; +$color-teambuilding: #8b97a5; +$color-meetings: #406c73; +$color-events: #007894; diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_configurator.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_configurator.scss new file mode 100644 index 00000000..19608942 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_configurator.scss @@ -0,0 +1,485 @@ +@import "~@fengyuanchen/datepicker/dist/datepicker.css"; + +.configurator { + background: url(../images/bg_configurator.jpg) no-repeat top left; + background-size: cover; + position: relative; + + .form__item__error { + color: white; + } + + ::-webkit-input-placeholder { /* WebKit, Blink, Edge */ + font-weight: 700; + } + + :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + font-weight: 700; + } + + ::-moz-placeholder { /* Mozilla Firefox 19+ */ + font-weight: 700; + } + + :-ms-input-placeholder { /* Internet Explorer 10-11 */ + font-weight: 700 !important; + } + + ::-ms-input-placeholder { /* Microsoft Edge */ + font-weight: 700 !important; + } +} + +.configurator__overlay { + @include size(100%); + position: absolute; + top: 0; + left: 0; + z-index: 10; + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + background-color: rgba($color-brand-secondary, 0.85); + color: white; +} + +.configurator__main { + padding-bottom: 0; +} + +.configurator__sidebar { + display: none; + color: white; + + @include mq($from: desktop) { + display: block; + } +} + +.configurator__selectbox-wrapper { + padding-bottom: 16px; +} + +.config-selectbox { + background-color: rgba(white, 0.6); + border-radius: 16px; + padding: 8px 0; + margin-bottom: 4px; + transition: all 0.25s ease-in-out; + + &.active { + padding-bottom: 0; + } +} + +.config-selectbox__bar { + position: relative; + min-height: 42px; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: flex-start; + padding: 8px 16px; + text-decoration: none; + text-transform: uppercase; + + @include mq($from: tablet) { + flex-wrap: nowrap; + } + + @include mq($from: desktop) { + align-items: center; + } +} + +.config-selectbox__title { + display: inline-block; + width: 100%; + margin-bottom: 8px; + font-weight: 700; + + @include mq($from: tablet) { + width: 30%; + margin-bottom: 0; + } + + @include mq($from: desktop) { + width: 20%; + margin-bottom: 0; + } +} + +.config-selectbox__badges { + width: 100%; + padding-right: 40px; + + @include mq($from: tablet) { + width: 70%; + } + + @include mq($from: desktop) { + width: 80%; + } +} + +.config-selectbox__badge { + display: inline-block; + background-color: rgba(white, 0.6); + padding: 4px 8px; + border-radius: 8px; + margin: 0 4px 4px 0; + font-size: 14px; + font-weight: 700; + + @include mq($from: tablet) { + font-size: 16px; + } + + @include mq($from: desktop) { + margin-bottom: 0; + } +} + +.config-selectbox__toggle { + display: block; + position: absolute; + right: 16px; + top: 6px; + @include size(32px); + line-height: 32px; + text-decoration: none; + text-align: center; + color: white; + background-color: $color-brand-primary; + border-radius: 16px; + font-family: "fontello"; + + &.closed { + background-color: white; + color: $color-brand-primary; + + &:before { + content: '\e800'; + } + } + + &.open:before { + content: '\e801'; + } + + &.included:before { + content: '\e802'; + } +} + +.config-selectbox__main { + display: flex; + justify-content: space-between; + flex-wrap: wrap; + padding: 0 8px; + transition: all 0.25s ease-in-out; + + .active & { + padding: 8px; + } +} + +.configurator__selections { + padding-bottom: 32px; +} + +.config-selectbox__item { + display: block; + width: 100%; + height: 0; + overflow: hidden; + transition: all 0.25s ease-in-out; + text-decoration: none; + padding: 0 4px; + text-align: center; + + .active & { + height: 200px; + margin-bottom: 8px; + } + + @include mq($from: mobile) { + width: 50%; + + .active & { + height: 180px; + } + } + + @include mq($from: desktop) { + width: 25%; + + .active & { + height: 160px; + } + } +} + +.config-selectbox__item__inner { + position: relative; + @include size(100%); + background-repeat: no-repeat; + background-size: cover; + background-position: center; + + &:after { + content: ""; + @include size(100%); + position: absolute; + top: 0; + left: 0; + background-color: rgba(black, 0.33); + } + + .selected &:after { + background-color: rgba($color-brand-secondary, 0.75); + } + + @include mq($from: desktop) { + &:hover:after { + content: ""; + @include size(100%); + position: absolute; + top: 0; + left: 0; + background-color: rgba($color-brand-primary, 0.5); + } + } + + .has--icon &:after { + background-repeat: no-repeat; + background-position: center 32px; + background-size: 96px; + + @include mq($from: tablet) { + background-position: center 16px; + background-size: 128px; + } + + @include mq($from: desktop) { + background-position: center 8px; + background-size: 96px; + } + } + + .type--1 &:after { + background-image: url(../images/icon_incentives.svg); + } + + .type--2 &:after { + background-image: url(../images/icon_teambuilding.svg); + } + + .type--3 &:after { + background-image: url(../images/icon_meetings.svg); + } + + .type--4 &:after { + background-image: url(../images/icon_events.svg); + } + + .destination--1 &:after { + background-image: url(../images/icon_destination_sea.svg); + } + + .destination--2 &:after { + background-image: url(../images/icon_destination_mountains.svg); + } + + .destination--3 &:after { + background-image: url(../images/icon_destination_cities.svg); + } + + .destination--4 &:after { + background-image: url(../images/icon_destination_special.svg); + } +} + +.config-selectbox__item-label { + color: white; + font-weight: 700; + position: absolute; + z-index: 10; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + text-shadow: 0 1px rgba(black, 0.5); + + .has--icon & { + top: auto; + bottom: 0; + } +} + +.config-selected { + display: flex; + flex-wrap: nowrap; + justify-content: space-between; + padding-bottom: 8px; +} + +.config-selected__checkmark { + display: block; + width: 5%; + color: white; + font-family: "fontello"; + + &.checked:before { + content: '\e802'; + } +} + +.config-selected__items { + display: block; + width: 90%; + text-transform: uppercase; + font-weight: 700; +} + +.config-selected__placeholder { + display: inline-block; + opacity: 0.5; +} + +.configurator__input-wrapper { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + + @include mq($from: tablet) { + flex-wrap: nowrap; + } +} + +.configurator__data { + width: 100%; + padding-bottom: 16px; + + @include mq($from: tablet) { + width: percentage(2/3); + padding-right: 32px; + } +} + +.configurator__address { + width: 100%; + padding-bottom: 16px; + + @include mq($from: tablet) { + width: percentage(1/3); + } +} + +.configurator-field { + background-color: rgba(white, 0.6); + border-radius: 16px; + padding: 16px; + display: flex; + flex-wrap: nowrap; + justify-content: space-between; + align-items: center; + + &:not(:last-child) { + margin-bottom: 8px; + } +} + +.configurator-field__label { + width: percentage(2/3); + font-weight: 700; + text-transform: uppercase; +} + +.configurator-field__input { + width: percentage(2/3); +} + +.configurator-field__group { + .daterange-input, + .step-input { + &:not(:last-child) { + margin-bottom: 8px; + } + } +} + +.step-input { + display: flex; + flex-wrap: nowrap; + justify-content: space-between; + align-items: center; + background-color: rgba(white, 0.6); + border-radius: 16px; +} + +.step-input__trigger { + display: block; + text-decoration: none; + @include size(32px); + line-height: 32px; + text-align: center; + background-color: white; + color: $color-brand-primary; + border-radius: 16px; + font-family: 'fontello'; + + &.disabled { + opacity: 0.25; + } + + &--decrease { + &:before { + content: '\e801'; + } + } + + &--increase { + &:before { + content: '\e800'; + } + } +} + +.step-input__value { + text-align: center; + font-weight: 700; + text-transform: uppercase; +} + +.daterange-input { + display: flex; + flex-wrap: nowrap; + justify-content: space-between; + align-items: center; + background-color: rgba(white, 0.6); + border-radius: 16px; + height: 32px; +} + +.daterange-input__field { + position: relative; + width: 48%; + padding-left: 8px; +} + +.daterange-input__divider { + display: block; + width: 4%; + text-align: center; +} + +.date-input { + font-size: 80%; + border: none; + background: none; + outline: none; + font-weight: 700; + width: 100%; + text-align: center; +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_cookieconsent.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_cookieconsent.scss new file mode 100644 index 00000000..d3f6a8c2 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_cookieconsent.scss @@ -0,0 +1,3 @@ +.cc-window { + font-size: 75%; +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_fonts.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_fonts.scss new file mode 100644 index 00000000..00e5bbb7 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_fonts.scss @@ -0,0 +1,64 @@ +@font-face { + font-family: 'Cairo'; + font-style: normal; + font-weight: 400; + src: url('../fonts/cairo-v2-latin-ext_latin-regular.eot'); /* IE9 Compat Modes */ + src: local('Cairo'), local('Cairo-Regular'), + url('../fonts/cairo-v2-latin-ext_latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/cairo-v2-latin-ext_latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/cairo-v2-latin-ext_latin-regular.woff') format('woff'), /* Modern Browsers */ + url('../fonts/cairo-v2-latin-ext_latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/cairo-v2-latin-ext_latin-regular.svg#Cairo') format('svg'); /* Legacy iOS */ +} + +@font-face { + font-family: 'Cairo'; + font-style: normal; + font-weight: 700; + src: url('../fonts/cairo-v2-latin-ext_latin-700.eot'); /* IE9 Compat Modes */ + src: local('Cairo Bold'), local('Cairo-Bold'), + url('../fonts/cairo-v2-latin-ext_latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/cairo-v2-latin-ext_latin-700.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/cairo-v2-latin-ext_latin-700.woff') format('woff'), /* Modern Browsers */ + url('../fonts/cairo-v2-latin-ext_latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/cairo-v2-latin-ext_latin-700.svg#Cairo') format('svg'); /* Legacy iOS */ +} + +$font-main: 'Cairo', $helvetica; + +@font-face { + font-family: 'fontello'; + src: url('../fonts/fontello.eot?39986861'); + src: url('../fonts/fontello.eot?39986861#iefix') format('embedded-opentype'), + url('../fonts/fontello.woff2?39986861') format('woff2'), + url('../fonts/fontello.woff?39986861') format('woff'), + url('../fonts/fontello.ttf?39986861') format('truetype'), + url('../fonts/fontello.svg?39986861#fontello') format('svg'); + font-weight: normal; + font-style: normal; +} + +[class^="icon-"]:before, [class*=" icon-"]:before { + font-family: "fontello"; + font-style: normal; + font-weight: normal; + speak: none; + display: inline-block; + text-decoration: inherit; + width: 1em; + margin-right: .5em; + text-align: center; + font-variant: normal; + text-transform: none; + line-height: 1em; + margin-left: .2em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-plus:before { content: '\e800'; } +.icon-minus:before { content: '\e801'; } +.icon-ok:before { content: '\e802'; } +.icon-calendar:before { content: '\e803'; } +.icon_mail_circle:before { content: '\e804'; } +.icon_phone_circle:before { content: '\e805'; } diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_forms.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_forms.scss new file mode 100644 index 00000000..682765ba --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_forms.scss @@ -0,0 +1,218 @@ +.form { + margin: 0; + padding: 0; + position: relative; + max-width: 100%; + + @include mq($from: desktop) { + max-width: 75%; + } + + &--box { + max-width: 100%; + } +} + +.form__item { + display: block; + margin-bottom: 8px; + + &--textarea { + padding-top: 16px; + } + + &--button { + padding-top: 16px; + } + + &--radios { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + background-color: $color-divider; + border-radius: 8px; + } + + &--mobile { + display: block; + + @include mq($from: tablet) { + display: none; + } + } + + &--tablet { + display: none; + + @include mq($from: tablet, $until: desktop) { + display: block; + } + } + + &--desktop { + display: none; + + @include mq($from: desktop) { + display: block; + } + } +} + +.form__item__error { + padding: 8px; + font-size: 90%; +} + +.form__field { + border: none; + border-radius: 8px; + width: 100%; + padding: 8px 16px; + color: $color-font-main; + background-color: $color-divider; + + .form--box & { + background-color: $color-brand-light; + color: white; + } + + &--textarea { + resize: vertical; + } + + &--radio { + background-color: transparent; + display: block; + padding: 8px; + width: 100%; + @include mq($from: tablet) { + width: 50%; + } + @include mq($from: desktop) { + width: 25%; + } + } + + &--configurator { + background-color: rgba(white, 0.6); + } + + .has-errors & { + border: 1px solid $color-formerror; + } +} + +.form__link { + display: block; + font-size: 80%; + + &--indent { + text-align: right; + } + + .configurator & { + color: white; + padding-top: 16px; + } +} + +.form__button { + outline: none; + display: block; + width: 100%; + color: white; + background-color: $color-brand-secondary; + border: none; + font-weight: 700; + text-decoration: none; + text-align: center; + padding: 8px 32px; + margin-bottom: 16px; + + @include mq($from: tablet) { + display: inline-block; + width: auto; + margin-bottom: 0; + } + + .form--box & { + width: 100%; + font-size: 20px; + padding: 8px 0; + } +} + +.form__overlay { + @include size(100%); + position: absolute; + top: 0; + left: 0; + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + background-color: rgba($color-divider, 0.75); + + .form--box & { + background-color: rgba($color-brand-primary, 0.75); + } +} + +.form__overlay__text { + text-align: center; +} + +::-webkit-input-placeholder { /* WebKit, Blink, Edge */ + color: $color-font-main; + text-transform: uppercase; + font-size: 90%; +} + +:-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: $color-font-main; + opacity: 1; + text-transform: uppercase; + font-size: 90%; +} + +::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: $color-font-main; + opacity: 1; + text-transform: uppercase; + font-size: 90%; +} + +:-ms-input-placeholder { /* Internet Explorer 10-11 */ + color: $color-font-main; + text-transform: uppercase; + font-size: 90%; +} + +::-ms-input-placeholder { /* Microsoft Edge */ + color: $color-font-main; + text-transform: uppercase; + font-size: 90%; +} + +.form--box { + ::-webkit-input-placeholder { /* WebKit, Blink, Edge */ + color: white; + } + + :-moz-placeholder { /* Mozilla Firefox 4 to 18 */ + color: white; + } + + ::-moz-placeholder { /* Mozilla Firefox 19+ */ + color: white; + } + + :-ms-input-placeholder { /* Internet Explorer 10-11 */ + color: white; + } + + ::-ms-input-placeholder { /* Microsoft Edge */ + color: white; + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_helpernav.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_helpernav.scss new file mode 100644 index 00000000..93e72e4b --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_helpernav.scss @@ -0,0 +1,63 @@ +.helpernav { + display: none; + + @include mq($from: mobile) { + display: block; + position: relative; + } +} + +.helpernav__link { + display: block; + text-decoration: none; + text-transform: uppercase; + padding: 12px 8px; +} + +.helpernav__subnav { + visibility: hidden; + opacity: 0; + transition: 0.25s ease-in-out; + position: absolute; + top: 100%; + right: 0; + z-index: 10; + min-width: 300px; + padding: 16px 32px; + background-color: $color-brand-primary; +} + +.helpernav__item:hover { + + & > .helpernav__link { + background-color: $color-brand-primary; + } + + & > .helpernav__subnav { + visibility: visible; + opacity: 1; + } + +} + +.helpernav__subitem { + width: 75%; + &:not(:last-child) { + border-bottom: 1px solid rgba(white, 0.25); + } +} + +.helpernav__sublink { + display: block; + text-decoration: none; + text-transform: uppercase; + color: white; + padding: 8px 0; + + &.active, + &:hover { + &:before { + content: ">>\ "; + } + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_herounit.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_herounit.scss new file mode 100644 index 00000000..daf8a02f --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_herounit.scss @@ -0,0 +1,223 @@ +.herounit { + position: relative; + width: 100%; + max-width: $viewport-width-max; + margin: 0 auto; + + &--indent { + max-width: $content-width-max - 16px; + } +} + +.herounit__image { + background-size: cover; + background-repeat: no-repeat; + background-position: center; + + height: 240px; + + @include mq($from: tablet) { + height: 384px; + } + + @include mq($from: desktop) { + height: 420px; + } + + .herounit--large & { + height: 300px; + + @include mq($from: tablet) { + height: 480px; + } + + @include mq($from: desktop) { + height: 700px; + } + } + + .herounit--indent & { + height: 320px; + + @include mq($from: tablet) { + height: 480px; + } + } +} + +.herounit__mask { + display: none; + + @include mq($from: tablet) { + position: absolute; + z-index: 10; + top: 0; + left: 0; + display: block; + height: 100%; + width: auto; + } +} + +.herounit__content { + position: absolute; + top: 0; + left: 0; + z-index: 10; + width: 100%; + height: 100%; + padding: 32px; + background-color: rgba($color-brand-secondary, 0.2); + + @include mq($from: tablet) { + background-color: transparent; + padding: 64px 16px 0 96px; + max-width: 45%; + } +} + +.herounit__title { + display: block; + //text-shadow: 1px 1px rgba(black, 0.25); + color: white; + font-size: 32px; + line-height: 95%; + + @include mq($from: desktop) { + font-size: 48px; + } + + .herounit__topline { + display: block; + font-size: 24px; + text-transform: none; + } + + &--brand { + font-size: 40px; + font-weight: 400; + line-height: 85%; + + span { + font-weight: 700; + text-transform: uppercase; + color: $color-brand-primary; + } + + @include mq($from: desktop) { + font-size: 56px; + } + } +} + +.herounit__subtitle { + display: block; + font-size: 18px; + //text-shadow: 1px 1px rgba(black, 0.25); + font-weight: 400; + line-height: 120%; + padding: 18px 0 0; + color: white; + text-transform: none; + + @include mq($from: tablet) { + font-size: 20px; + } + + &--claim { + font-size: 22px; + font-weight: 700; + + @include mq($from: tablet) { + font-size: 24px; + padding-bottom: 48px; + } + + @include mq($from: desktop) { + font-size: 32px; + padding-bottom: 96px; + } + } +} + +.herounit__text { + display: none; + font-size: 24px; + line-height: 120%; + color: white; + + @include mq($from: tablet) { + display: block; + } +} + +.herounit__icon { + display: none; + + @include mq($from: tablet) { + display: block; + width: 100%; + height: auto; + max-width: 100px; + padding-bottom: 32px; + } +} + +.herounit__button { + display: flex; + flex-wrap: nowrap; + justify-content: center; + position: absolute; + z-index: 10; + top: 80%; + left: 50%; + transform: translateX(-50%); + + @include mq($from: tablet) { + top: 85%; + } + + @include mq($from: desktop) { + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } +} + +.herounit__button__form { + display: none; + width: 12px; + height: 48px; + border: none; + + @include mq($from: tablet) { + display: block; + } + + & > polygon { + fill: $color-brand-primary; + @include sectionFills(); + } +} + +#gradient__from { + stop-color: $color-brand-secondary; +} + +#gradient__to { + .section-default & { + stop-color: $color-brand-primary; + } + .section-incentives & { + stop-color: $color-incentives; + } + .section-teambuilding & { + stop-color: $color-teambuilding; + } + .secolor-meeting & { + stop-color: $color-meetings; + } + .secolor-events & { + stop-color: $color-events; + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_iconbar.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_iconbar.scss new file mode 100644 index 00000000..5607568b --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_iconbar.scss @@ -0,0 +1,48 @@ +.iconbar { + display: none; + @include mq($from: desktop) { + display: block; + } + position: fixed; + z-index: 1000; + top: 30vh; + right: 0; + overflow: hidden; +} + +.iconbar__item { + width: 240px; + transition: all 0.25s ease-in-out; + transform: translateX(200px); + display: flex; + flex-wrap: nowrap; + align-items: center; + background-color: $color-brand-light; + margin-bottom: 2px; + + &:hover { + transform: translateX(0); + } +} + +.iconbar__icon { + padding: 4px; + background-color: $color-brand-primary; + + svg { + display: block; + @include size(32px); + fill: white; + } +} + +.iconbar__bar { + padding-left: 16px; + font-size: 18px; + line-height: 40px; +} + +.iconbar__link { + display: block; + text-decoration: none; +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_iconnav.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_iconnav.scss new file mode 100644 index 00000000..4fef906e --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_iconnav.scss @@ -0,0 +1,40 @@ +.iconnav { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + padding-top: 32px; + padding-bottom: 32px; +} + +.iconnav__link { + display: block; + width: percentage(1/2); + padding: 16px; + text-decoration: none; + text-align: center; + opacity: 0.4; + transition: opacity 0.25s ease-in-out; + + &:hover, + &--active { + opacity: 1; + } + + @include mq($from: mobile) { + width: percentage(1/4); + } +} + +.iconnav__icon { + padding-bottom: 16px; + display: block; + margin: 0 auto; + max-width: 80px; +} + +.iconnav__label { + text-transform: uppercase; + font-weight: 700; + @include sectionColours(); +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_layout.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_layout.scss new file mode 100644 index 00000000..1415499a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_layout.scss @@ -0,0 +1,99 @@ +main { + padding-top: 96px; + + @include mq($from: tablet) { + padding-top: 140px; + } +} + +.content { + width: 100%; + padding-top: 32px; + padding-bottom: 32px; + @include clearfix(); + + &.nopad { + &--bottom { + padding-bottom: 0; + } + &--top { + padding-top: 0; + } + } +} + +.content__title { + @include container(); + text-align: center; +} + +.content__inner { + @include container(); + + .content--has-sidebar & { + display: flex; + flex-wrap: wrap; + + @include mq($from: tablet) { + flex-wrap: nowrap; + } + } +} + +.content__main { + width: 100%; + padding: 0 0 32px; + overflow: hidden; + + @include mq($from: tablet) { + padding: 0; + } +} + +.content__plain { + @include clearfix(); + @include mq($from: tablet) { + padding-right: 96px; + } +} + +.content__background { + @include clearfix(); + @include sectionBackgrounds(0.15); + padding: 24px 48px 24px 32px; +} + +.content__float { + @include clearfix(); +} + +.content__sidebar { + width: 100%; + padding: 32px 0; + + @include mq($from: tablet) { + flex: 0 0 320px; + padding: 0 0 0 32px; + } +} + +.content__form { + @include sectionFills(0.15); + width: 100%; + height: auto; + display: block; +} + +.content__image { + &--right { + float: right; + padding: 0 0 0 48px; + } +} + +.desktop-only { + display: none; + @include mq($from: tablet) { + display: block; + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_mixins.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_mixins.scss new file mode 100644 index 00000000..43495830 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_mixins.scss @@ -0,0 +1,126 @@ +@mixin container($width-max: $content-width-max, $padding: $padding-default / 2) { + @include clearfix(); + width: 100%; + max-width: $width-max; + margin: 0 auto; + padding: 0 $padding; +} + +@mixin sectionColours() { + &.section-incentives { + color: $color-incentives; + fill: $color-incentives; + } + + &.section-teambuilding { + color: $color-teambuilding; + fill: $color-teambuilding; + } + + &.section-meetings { + color: $color-meetings; + fill: $color-meetings; + } + + &.section-events { + color: $color-events; + fill: $color-events; + } +} + +@mixin sectionColoursFromParent() { + .section-incentives & { + color: $color-incentives; + fill: $color-incentives; + } + + .section-teambuilding & { + color: $color-teambuilding; + fill: $color-teambuilding; + } + + .section-meetings & { + color: $color-meetings; + fill: $color-meetings; + } + + .section-events & { + color: $color-events; + fill: $color-events; + } +} + +@mixin sectionBackgrounds($opacity: 1) { + &.section-default, + .section-default & { + background-color: rgba($color-brand-primary, $opacity); + } + + &.section-incentives, + .section-incentives & { + background-color: rgba($color-incentives, $opacity); + } + + &.section-teambuilding, + .section-teambuilding & { + background-color: rgba($color-teambuilding, $opacity); + } + + &.section-meetings, + .section-meetings & { + background-color: rgba($color-meetings, $opacity); + } + + &.section-events, + .section-events & { + background-color: rgba($color-events, $opacity); + } +} + +@mixin sectionBackgroundsFromParent($opacity: 1) { + .section-default & { + background-color: rgba($color-brand-primary, $opacity); + } + + .section-incentives & { + background-color: rgba($color-incentives, $opacity); + } + + .section-teambuilding & { + background-color: rgba($color-teambuilding, $opacity); + } + + .section-meetings & { + background-color: rgba($color-meetings, $opacity); + } + + .section-events & { + background-color: rgba($color-events, $opacity); + } +} + +@mixin sectionFills($opacity: 1) { + &.section-incentives, + .section-incentives & { + fill: $color-incentives; + opacity: $opacity; + } + + &.section-teambuilding, + .section-teambuilding & { + fill: $color-teambuilding; + opacity: $opacity; + } + + &.section-meetings, + .section-meetings & { + fill: $color-meetings; + opacity: $opacity; + } + + &.section-events, + .section-events & { + fill: $color-events; + opacity: $opacity; + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_mobilenav.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_mobilenav.scss new file mode 100644 index 00000000..f69fe9ef --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_mobilenav.scss @@ -0,0 +1,90 @@ +.mobilenav { + position: fixed; + z-index: 50; + top: 0; + left: 0; + width: 100%; + height: 0; + padding-top: 96px; + overflow: hidden; + background: rgba($color-brand-secondary, 0.9); + transition: height 0.25s ease-in-out; + + @include mq($from: desktop) { + display: none; + } + + .mobilenav--open & { + height: 100%; + } +} + +.mobilenav__inner { + @include size(100%); + overflow-y: scroll; + padding: 32px; +} + +.mobilenav__primary { + border-bottom: 3px solid white; + margin-bottom: 16px; + padding-bottom: 16px; +} + +.mobilenav__secondary { + padding-bottom: 32px; +} + +.mobilenav__item { + position: relative; + width: 100%; + padding: 8px 0; + &:not(:last-child) { + border-bottom: 1px solid rgba(white, 0.5); + } +} + +.mobilenav__sub-flag { + position: absolute; + right: 0; + top: 0; + text-decoration: none; + line-height: 120%; + font-size: 32px; + color: white; + transition: all 0.25s ease-in-out; + + &.open { + transform: rotate(45deg); + } +} + +.mobilenav__subitem { + @extend .mobilenav__item; +} + +.mobilenav__subnav { + display: none; + padding: 16px; +} + +.mobilenav__link { + display: block; + text-decoration: none; + text-transform: uppercase; + color: white; + font-size: 20px; + + .mobilenav__secondary & { + font-size: 16px; + } +} + +.mobilenav__sublink { + @extend .mobilenav__link; + font-size: 18px; +} + +.mobilenav__search { + padding-bottom: 16px; +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_page-footer.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_page-footer.scss new file mode 100644 index 00000000..133990f2 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_page-footer.scss @@ -0,0 +1,146 @@ +.page-footer { + width: 100%; + background: linear-gradient(to right, $color-brand-secondary, $color-brand-primary); + color: white; + padding-top: 16px; + padding-bottom: 16px; + + @include mq($from: mobile) { + padding-top: 48px; + padding-bottom: 48px; + } +} + +.page-footer__inner { + @include container($content-width-max); + display: flex; + align-items: flex-start; + flex-wrap: wrap; + justify-content: center; + border-bottom: 1px solid white; + + @include mq($from: tablet) { + padding-bottom: 48px; + } +} + +.page-footer__column { + width: percentage(1/2); + text-align: center; + padding: 0 8px 32px; + + @include mq($from: mobile) { + width: percentage(1/3); + text-align: left; + } + + @include mq($from: tablet) { + width: percentage(1/5); + } + + &--hide-mobile { + display: none; + + @include mq($from: tablet) { + display: block; + } + } +} + +.page-footer__column__title { + color: white; + font-weight: 700; +} + +.page-footer__link { + text-decoration: none; + + &--legal:not(:last-child) { + padding-right: 8px; + } +} + +.page-footer__bottom { + @include container($content-width-max); + padding-top: 32px; + display: flex; + align-items: center; + flex-wrap: wrap; + justify-content: space-around; + + @include mq($from: tablet) { + align-items: flex-start; + justify-content: space-between; + } +} + +.page-footer__bottom__column { + width: 100%; + + @include mq($from: tablet) { + width: percentage(1/3); + } +} + +.page-footer__phone { + display: flex; + justify-content: center; + align-items: flex-start; + + @include mq($from: tablet) { + justify-content: flex-start; + } +} + +.page-footer__phone__icon { + width: 100%; + max-width: 48px; + height: auto; + display: block; + fill: white; +} + +.page-footer__phone__text { + padding-left: 32px; + font-size: 20px; + text-transform: uppercase; + font-weight: 700; + text-align: center; + + @include mq($from: tablet) { + text-align: left; + } +} + +.page-footer__legal { + text-align: center; + padding-top: 32px; + + @include mq($from: tablet) { + text-align: right; + padding-top: 0; + } +} + +.page-footer__copyright { + display: block; +} + +.page-footer__links { + display: block; + padding-top: 8px; +} + +.page-footer__image { + margin: 0 auto; +} + +.page-footer__businesshours { + text-align: center; + padding-top: 32px; + + @include mq($from: tablet) { + text-align: left; + padding-top: 0; + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_page-header.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_page-header.scss new file mode 100644 index 00000000..277583f7 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_page-header.scss @@ -0,0 +1,133 @@ +.page-header { + width: 100%; + position: fixed; + top: 0; + left: 0; + z-index: 100; + background: white; + box-shadow: 0 2px 2px rgba($color-background, 0.5); +} + +.page-header__bar { + background: linear-gradient(to right, $color-brand-primary 50%, $color-brand-secondary); +} + +.page-header__bar__main { + @include container(); + color: white; + display: flex; + justify-content: center; + align-items: center; + + @include mq($from: tablet) { + justify-content: space-between; + } +} + +.page-header__bar__search { + display: none; + @include mq($from: tablet) { + display: block; + width: 50%; + } +} + +.page-header__bar__helpernav { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + @include mq($from: tablet) { + width: 50%; + justify-content: flex-end; + } +} + +.page-header__bar__link { + display: block; + padding: 8px 0; + text-decoration: none; + font-weight: 700; +} + +.page-header__bar__divider { + display: none; + + @include mq($from: mobile) { + display: inline-block; + padding: 12px 8px; + } +} + +.page-header__main { + @include container(); + padding: 16px; + display: flex; + display: -ms-flexbox; + justify-content: space-between; + align-items: center; + -ms-flex-align: center; + + @include mq($from: tablet) { + padding: 32px 16px 24px; + } + + @include mq($from: desktop) { + justify-content: space-between; + align-items: baseline; + -ms-flex-align: end; + } +} + +.page-header__navwrapper { + display: flex; + justify-content: flex-end; + align-items: baseline; + -ms-flex-align: end; + width: 100%; +} + +.page-header__logo { + display: block; + width: 100%; + height: 100%; + max-width: 160px; + max-height: 60px; +} + +.page-header__sitenav { + display: none; + + @include mq($from: tablet) { + display: block; + } +} + +.page-header__button { + display: none; + + @include mq($from: desktop) { + position: relative; + display: block; + min-width: 220px; + } +} + +.page-header__button__wrapper { + position: absolute; + bottom: -32px; + right: -8px; + display: flex; + min-width: 220px; + height: 80px; +} + +.page-header__button__form { + width: 24px; + height: 80px; + border: none; + + & > polygon { + fill: $color-brand-primary; + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_paginator.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_paginator.scss new file mode 100644 index 00000000..c021a537 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_paginator.scss @@ -0,0 +1,26 @@ +.paginator { + list-style: none; + margin: 0; + padding: 0; + + & > li { + display: inline-block; + } +} + +.paginator__item { + display: inline-block; + background-color: $color-brand-primary; + color: white; + padding: 4px; + text-decoration: none; + &:not(:last-child) { + margin-right: 2px; + } + + &--current { + border: 1px solid $color-brand-primary; + background-color: white; + color: $color-brand-primary; + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_search.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_search.scss new file mode 100644 index 00000000..ab6be68c --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_search.scss @@ -0,0 +1,65 @@ +.searchresult {} + +.searchresult__info { + @include container(); +} + +.searchresult-item { + text-decoration: none; + margin-bottom: 32px; + display: block; + @include mq($from: mobile) { + display: flex; + } +} + +.searchresult-item__card { + width: 100%; + @include mq($from: mobile) { + width: 240px; + } + @include mq($from: desktop) { + width: percentage(1/3); + } +} + +.searchresult-item__text { + margin: 0 8px; + padding: 32px; + color: white; + @include sectionBackgrounds(); + @include mq($from: mobile) { + margin: 0; + flex: 1; + } +} + +.searchresult-item__title { + span { + display: block; + } +} + +.searchform__input, +.searchform__button { + -webkit-appearance: none; + display: inline-block; + border: 1px solid white; + color: white; + font-size: 14px; + outline: none; + background-color: transparent; + padding: 2px 4px; + + .mobilenav__search & { + padding: 8px; + } +} + +.searchform__button { + padding: 0 0 0 4px; + text-transform: uppercase; + border: none; + font-size: 16px; + font-weight: 700; +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_sitenav.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_sitenav.scss new file mode 100644 index 00000000..1978bad0 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_sitenav.scss @@ -0,0 +1,31 @@ +.sitenav { + @include mq($from: desktop) { + padding-right: 64px; + } +} + +.sitenav__item { + padding: 0 16px; + + &:first-child { + padding-left: 0; + } + + &:last-child { + padding-right: 0; + } + +} + +.sitenav__link { + text-decoration: none; + text-transform: uppercase; + font-weight: 700; + + &--active, + &:hover { + border-bottom: 3px solid; + @include sectionColours(); + } + +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_slider.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_slider.scss new file mode 100644 index 00000000..e6cc2e61 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_slider.scss @@ -0,0 +1,44 @@ +.slider {} + +.slider__arrow { + border: none; + //background: url('data:image/svg+xml,%3Csvg%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%2032%2048%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20xml%3Aspace%3D%22preserve%22%20style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A1.41421%3B%22%3E%3Cpath%20d%3D%22M3.565%2C5.477l18.323%2C18.523l-18.323%2C18.523c-1.593%2C1.46%20-1.629%2C2.92%20-0.099%2C4.382c1.527%2C1.46%203.021%2C1.46%204.481%2C0l20.713%2C-20.714c0.663%2C-0.531%200.996%2C-1.262%200.996%2C-2.191c0%2C-0.929%20-0.333%2C-1.66%20-0.996%2C-2.191l-20.713%2C-20.714c-1.46%2C-1.46%20-2.954%2C-1.46%20-4.481%2C0c-1.53%2C1.461%20-1.494%2C2.922%200.099%2C4.382%22%20style%3D%22fill%3A%23ddd%3Bfill-rule%3Anonzero%3B%22%2F%3E%3C%2Fsvg%3E') no-repeat center center; + background: url('data:image/svg+xml,%3Csvg%20width%3D%22100%25%22%20height%3D%22100%25%22%20viewBox%3D%220%200%2032%2032%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20xml%3Aspace%3D%22preserve%22%3E%3Cpolygon%20points%3D%2232%2C0%2032%2C32%200%2C16%22%20fill%3D%22white%22%2F%3E%3C%2Fsvg%3E') no-repeat center center; + position: absolute; + z-index: 10; + @include size(8px); + color: transparent; + + &:focus { + outline: none; + } + + &--prev { + left: 1%; + top: 50%; + transform: translateY(-50%); + + &.slider__arrow--teaser { + left: 7.5%; + } + } + + &--next { + right: 1%; + top: 50%; + transform: translateY(-50%) rotate(180deg); + + &.slider__arrow--teaser { + right: 7.5%; + } + } + + &--teaser { + top: 30%; + } + + @include mq($from: tablet) { + @include size(16px); + } +} + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_statement.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_statement.scss new file mode 100644 index 00000000..e212eb65 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_statement.scss @@ -0,0 +1,24 @@ +.statement { + @include container(); + padding-top: 32px; + padding-bottom: 48px; +} + +.statement__inner { + @include sectionBackgrounds(); + box-shadow: 0 5px 10px rgba(black, 0.2); + text-align: center; + padding-top: 48px; + padding-bottom: 48px; + color: white; +} + +.statement__text { + display: block; + font-size: 24px; + line-height: 105%; + + @include mq($from: tablet) { + font-size: 48px; + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_team.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_team.scss new file mode 100644 index 00000000..9dadf328 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_team.scss @@ -0,0 +1,66 @@ +.team { + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + margin: 0 -16px 0; +} + +.team__item { + display: block; + width: 100%; + max-width: 400px; + padding: 0 16px 64px; + + @include mq($until: desktop) { + margin: 0 auto; + } + + @include mq($from: desktop) { + width: percentage(1/2); + max-width: 100%; + } +} + +.team__image { + display: block; + max-width: 100%; + height: auto; +} + +.team__data { + width: 100%; + padding-top: 16px; + + th, + td { + vertical-align: top; + } + + th { + text-align: left; + width: percentage(1/5); + } +} + +.team__contact { + width: 100%; + padding-top: 16px; +} + +.team__name { + display: block; + text-transform: uppercase; + font-size: 24px; + font-weight: 700; +} + +.team__position { + display: block; + color: $color-brand-primary; +} + +.team__contact__link { + text-decoration: none; + color: $color-brand-primary; +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_teasers.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_teasers.scss new file mode 100644 index 00000000..68e78bca --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_teasers.scss @@ -0,0 +1,66 @@ +.teasers { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + @include sectionBackgrounds(0.15); + margin: 0 -16px 0; + + @include mq($from: desktop) { + flex-direction: row; + } +} + +.teaser { + width: percentage(3/4); + padding: 0 16px; + + @include mq($until: tablet) { + padding-bottom: 16px; + } + + @include mq($from: tablet) { + width: percentage(1/2); + } + + @include mq($from: desktop) { + width: percentage(1/3); + } +} + +.teaser__image { + width: 100%; + max-width: 100%; + height: auto; + display: block; +} + +.teaser__caption { + @include sectionBackgroundsFromParent(); + padding: 16px 16px 0; +} + +.teaser__form { + @include sectionFills(); + width: 100%; + height: auto; + display: block; + margin-top: -1px; +} + +.teaser__title { + display: block; + text-transform: uppercase; + font-size: 24px; + color: white; + font-weight: 700; + padding-bottom: 16px; + &:not(:last-of-type) { + border-bottom: 1px solid rgba(white, 0.15); + } + + &--subline { + padding-top: 8px; + font-size: 16px; + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_testimonial.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_testimonial.scss new file mode 100644 index 00000000..881c532b --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_testimonial.scss @@ -0,0 +1,24 @@ +.testimonial { + width: 100%; + padding: 0 32px; + text-align: center; + + @include mq($from: tablet) { + font-size: 80%; + width: percentage(1/2); + &:not(:last-child) { + border-right: 1px solid $color-divider; + } + } + + @include mq($from: desktop) { + width: percentage(1/4); + } +} + +.testimonial__image { + margin: 0 auto; + margin-bottom: 32px; + @include size(160px); + border-radius: 80px; +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_tiles.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_tiles.scss new file mode 100644 index 00000000..e38af917 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_tiles.scss @@ -0,0 +1,119 @@ +.tiles { + padding-bottom: 0; +} + +.tiles__inner { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + margin-top: -8px; +} + +.tile { + display: block; + width: percentage(1/2); + padding: 16px; + text-decoration: none; + + @include mq($from: tablet) { + width: 50%; + padding: 16px; + } +} + +.tile__inner { + background-repeat: no-repeat; + background-size: cover; + background-position: center; + + @include mq($from: mobile) { + min-height: 250px; + padding: 32px; + } + + @include mq($from: tablet) { + padding: 32px 32px 0; + min-height: 375px; + } +} + +.tile__caption { + width: 100%; + color: white; + text-align: center; + + @include mq($from: tablet) { + width: 70%; + margin: 0 auto; + } +} + +.tile__caption__inner { + @include sectionBackgrounds(0.75); + width: 100%; + padding: 24px 0; + + @include mq($from: tablet) { + padding: 32px 0; + + .tile:hover .section-incentives & { + background-color: $color-incentives; + } + .tile:hover .section-teambuilding & { + background-color: $color-teambuilding; + } + + .tile:hover .section-meetings & { + background-color: $color-meetings; + } + + .tile:hover .section-events & { + background-color: $color-events; + } + } +} + +.tile__teaser { + display: none; + padding: 16px 32px 0; + + @include mq($from: tablet) { + .tile:hover & { + display: block; + } + } +} + +.tile__form { + display: none; + width: 100%; + height: auto; + margin-top: -1px; + + polygon { + @include sectionFills(); + } + + @include mq($from: tablet) { + .tile:hover & { + display: block; + } + } +} + +.tile__icon { + display: block; + @include size(72px); + margin: 0 auto 8px; +} + +.tile__title { + display: block; + font-size: 18px; + font-weight: 700; + min-height: 54px; + + @include mq($from: tablet) { + font-size: 24px; + } +} diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_variables.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_variables.scss new file mode 100644 index 00000000..174f9ebe --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/_variables.scss @@ -0,0 +1,17 @@ +// Maximum viewport width +$viewport-width-max: 1440px; + +// Viewport width considered as 'mobile' +$viewport-width-mobile: 512px; + +// Viewport width considered as 'tablet' +$viewport-width-tablet: 768px; + +// Viewport width considered as 'desktop' +$viewport-width-desktop: 960px; + +// Width of content area +$content-width-max: 1280px; + +// Default padding +$padding-default: 16px; diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/main.scss b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/main.scss new file mode 100644 index 00000000..64fd90f5 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Assets/scss/main.scss @@ -0,0 +1,41 @@ +$output-bourbon-deprecation-warnings: false; +@import "~bourbon/app/assets/stylesheets/bourbon"; +@import "~normalize.css"; +@import "~slick-carousel/slick/slick"; +@import "~cookieconsent/build/cookieconsent.min.css"; + +@import "variables"; +@import "mixins"; +@import "breakpoints"; + +@import "colors"; +@import "fonts"; + +@import "base"; +@import "buttons"; +@import "page-header"; +@import "page-footer"; +@import "layout"; +@import "sitenav"; +@import "helpernav"; +@import "mobilenav"; +@import "herounit"; +@import "carousel"; +@import "slider"; +@import "configurator"; +@import "statement"; +@import "testimonial"; +@import "brands"; +@import "iconbar"; +@import "tiles"; +@import "card"; +@import "box"; +@import "banner"; +@import "iconnav"; +@import "forms"; +@import "teasers"; +@import "badge"; +@import "team"; +@import "cookieconsent"; +@import "search"; +@import "paginator"; diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Language/locallang.xlf b/web/typo3conf/ext/ep_events/Resources/Private/Language/locallang.xlf new file mode 100644 index 00000000..c322375a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Language/locallang.xlf @@ -0,0 +1,106 @@ + + + +
+ + + Programmpunkt + + + Ansprechpartner + + + Unterkunft + + + Location + + + Angebot + + + Testimonial + + + + Incentive + + + Teambuilding + + + Meeting + + + Corporate Event + + + + 3-Sterne + + + 4-Sterne + + + 5-Sterne + + + Spezial + + + + Meer + + + Berge + + + Städte + + + Spezial + + + + Outdoor & Action + + + Event-Gastronomie + + + Sightseeing + + + Spezial + + + + Bitte angeben + + + Bitte angeben + + + Bitte angeben + + + Ungültige E-Mail Adresse + + + Reiseart + + + Bitte angeben + + + Bitte angeben + + + Bitte angeben + + + Ungültige E-Mail Adresse + + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Default.html b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Default.html new file mode 100644 index 00000000..80278619 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Default.html @@ -0,0 +1 @@ + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Email.html b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Email.html new file mode 100644 index 00000000..5877a26e --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Email.html @@ -0,0 +1,35 @@ + + + HTML E-Mail + + + + + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Layouts/FluidStyledContent/Default.html b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/FluidStyledContent/Default.html new file mode 100644 index 00000000..8b8422db --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/FluidStyledContent/Default.html @@ -0,0 +1,7 @@ + + + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/ActivityEpEvents.html b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/ActivityEpEvents.html new file mode 100644 index 00000000..32d868a5 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/ActivityEpEvents.html @@ -0,0 +1,18 @@ + + + +
+ +
+ +
+ + + +
+ + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/CategoryEpEvents.html b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/CategoryEpEvents.html new file mode 100644 index 00000000..4a8025aa --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/CategoryEpEvents.html @@ -0,0 +1,84 @@ + + + +
+ +
+ +
+
+
+
+

+ {traveltype.title} +
{traveltype.title -> f:format.nl2br()}
+

+ +

{traveltype.subheadline}

+
+
+ + +
{traveltype.buttonlabel -> f:format.nl2br()}
+ + + + + + +
+
+ {traveltype.description -> f:format.html()} +
+ + + +
+ +
+ +
+
+ + + + +
+ + + +
+ + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/FrontpageEpEvents.html b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/FrontpageEpEvents.html new file mode 100644 index 00000000..3ee821ec --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/FrontpageEpEvents.html @@ -0,0 +1,30 @@ + + + +
+ +
+ +
+ +
+ + + + +
+
+ + + + +
+ + + +
+ + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/OfferEpEvents.html b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/OfferEpEvents.html new file mode 100644 index 00000000..6fa5e0f7 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/OfferEpEvents.html @@ -0,0 +1,114 @@ + + + +
+ +
+ +
+
+
+
+

{offer.name -> ep:softHyphen()}
{offer.location.name}

+
+ + +
+ +
+
+ + + + + +
+
+
+ {offer.location.descriptionLong -> f:format.html()} +
+
+
+
+
+
+

Programmpunkte

+
+
+
+ +

{activity.name}

+ {activity.description -> f:format.html()} +
+
+
+
+ +
+
+

{offer.hotel.name}

+
+
+
+ {offer.hotel.description -> f:format.html()} +
+
+
+
+ +
+
+
+ {offer.location.footerText1 -> f:format.html()} +
+
+
+
+ +
+
+
+ {offer.location.footerText2 -> f:format.html()} +
+
+
+
+ +
+
+
+ {offer.location.footerText3 -> f:format.html()} +
+
+
+
+
+ + + +
+ + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/SubpageEpEvents.html b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/SubpageEpEvents.html new file mode 100644 index 00000000..bcec049a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Layouts/Page/SubpageEpEvents.html @@ -0,0 +1,54 @@ + + + +
+ +
+ +
+
+
+ + + +
+ +
+
+
+ + + +
+ + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/ContactBox.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/ContactBox.html new file mode 100644 index 00000000..224eb467 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/ContactBox.html @@ -0,0 +1,8 @@ +
+ + +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/CookieConsent.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/CookieConsent.html new file mode 100644 index 00000000..fec81c33 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/CookieConsent.html @@ -0,0 +1,21 @@ + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/ErrorMessage.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/ErrorMessage.html new file mode 100644 index 00000000..58f0c460 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/ErrorMessage.html @@ -0,0 +1,10 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} + + +
    + +
  • +
    +
+
+
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormBoxBottom.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormBoxBottom.html new file mode 100644 index 00000000..59fdd6d3 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormBoxBottom.html @@ -0,0 +1,3 @@ + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormBoxTop.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormBoxTop.html new file mode 100644 index 00000000..fdf0c1e1 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormBoxTop.html @@ -0,0 +1,3 @@ + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormCardBottom.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormCardBottom.html new file mode 100644 index 00000000..3e9d5d0d --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormCardBottom.html @@ -0,0 +1,3 @@ + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormContentBottom.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormContentBottom.html new file mode 100644 index 00000000..c94894f5 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormContentBottom.html @@ -0,0 +1,4 @@ +{namespace ep=EP\EpEvents\ViewHelpers} + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormTeaserBottom.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormTeaserBottom.html new file mode 100644 index 00000000..43f7072a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/FormTeaserBottom.html @@ -0,0 +1,3 @@ + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/GoogleTagManager.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/GoogleTagManager.html new file mode 100644 index 00000000..ceb90847 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/GoogleTagManager.html @@ -0,0 +1,5 @@ + + + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/Header.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/Header.html new file mode 100644 index 00000000..77017f2b --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/Header.html @@ -0,0 +1,11 @@ + + + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/Header/Header.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/Header/Header.html new file mode 100644 index 00000000..71630123 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/Header/Header.html @@ -0,0 +1,75 @@ + + + + + + + H1 without icon, with optional subline + +
+

{header -> f:format.nl2br()}{subheader}

+
+
+ + H2 without icon, with optional subline + +
+

{header -> f:format.nl2br()}{subheader}

+
+
+ + H3 + +

{header -> f:format.raw()}

+
+ + H1 with icon, with optional subheadline + +

+ + {header} +
{header -> f:format.nl2br()}
+
+

+ +

{subheader}

+
+
+ + H2 with icon, with optional subheadline + +

+ + {header} +
{header -> f:format.nl2br()}
+
+

+ +

{subheader}

+
+
+ + + -- do not show header -- + + + + + + + +
+
+
+ + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/HerounitActivity.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/HerounitActivity.html new file mode 100644 index 00000000..15771b49 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/HerounitActivity.html @@ -0,0 +1,39 @@ +{namespace ep=EP\EpEvents\ViewHelpers} +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +
+ + + + {f:uri.image(src: activity.imageHeader.uid, treatIdAsReference: 1, crop: activity.imageHeader.crop, width: '1440') -> v:variable.set(name: 'headerImage')} + + + {f:uri.image(src: settings.activityDefaultHeaderImage, width: '1440') -> v:variable.set(name: 'headerImage')} + + + +
+ + + + + + + + + +
+
+

Programmidee{activity.name -> ep:softHyphen()}
Kategorie {activity.configuratorTypeLabel}

+ +
+
    + +
  • {keyword}
  • +
    +
+
+
+
+
+
+
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/HerounitCategory.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/HerounitCategory.html new file mode 100644 index 00000000..9a671470 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/HerounitCategory.html @@ -0,0 +1,42 @@ +{namespace ep=EP\EpEvents\ViewHelpers} +{namespace v=FluidTYPO3\Vhs\ViewHelpers} + + + + {f:uri.image(src: traveltype.imageHeader.uid, treatIdAsReference: 1, crop: traveltype.imageHeader.crop, width: '1440') -> v:variable.set(name: 'headerImage')} + + + {v:variable.set(name: 'headerImage', value: 'https://placehold.it/1440x700')} + + + +
+
+ + + + + + + + + +
+
+ +

{traveltype.title -> f:format.nl2br()}{traveltype.subtitle -> ep:softHyphen()}

+
{traveltype.headertext -> f:format.nl2br()}
+
+
+ + + + » Jetzt anfragen + + + +
+
+
+
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/HerounitFrontpage.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/HerounitFrontpage.html new file mode 100644 index 00000000..b32900c9 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/HerounitFrontpage.html @@ -0,0 +1,32 @@ +
+ + + + + + + + + +
+
+ E&P
Events
+ Weil besondere Momente
nicht von der Stange kommen.
+

Planen Sie mit uns Ihre
individuelle Veranstaltung.

+
+
+ + + + » Jetzt anfragen + + + +
+
+
+ +
+
+
+
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/HerounitOffer.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/HerounitOffer.html new file mode 100644 index 00000000..5739acad --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/HerounitOffer.html @@ -0,0 +1,31 @@ +{namespace ep=EP\EpEvents\ViewHelpers} +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +
+ + + + {f:uri.image(src: offer.imageHeader.uid, treatIdAsReference: 1, crop: offer.imageHeader.crop, width: '1440') -> v:variable.set(name: 'headerImage')} + + + {v:variable.set(name: 'headerImage', value: 'https://placehold.it/1440x700')} + + + +
+ + + + + + + + + +
+
+

Beispielangebot{offer.name -> ep:softHyphen()}
{offer.location.name -> ep:softHyphen()}{offer.headline}

+
{offer.header -> f:format.html()}
+
+
+
+
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/IconBar.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/IconBar.html new file mode 100644 index 00000000..8b7d6e1a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/IconBar.html @@ -0,0 +1,31 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +
+
+
+
+ +
+ +
+ +
+
+ +
+ +
+
+
+
+ +
+ +
+
+
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/MobileNav.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/MobileNav.html new file mode 100644 index 00000000..f26addbf --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/MobileNav.html @@ -0,0 +1,43 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +
+
+ + + Anfrage +
+
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/OfferTeaserLandscape.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/OfferTeaserLandscape.html new file mode 100644 index 00000000..17ad5acb --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/OfferTeaserLandscape.html @@ -0,0 +1,32 @@ +{namespace ep=EP\EpEvents\ViewHelpers} + +
+
+ + + + + + + {offer.imageTeaser.alternative} + + + + Platzhalter + + +
+ {offer.name -> ep:softHyphen()} + {offer.location.name -> ep:softHyphen()} +
+
+
+
+

Beispielangebot {offer.name -> ep:softHyphen()} {offer.location.name -> ep:softHyphen()}

+

{offer.headline}

+ {offer.header -> f:format.html()} + » Mehr erfahren +
+
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/OfferTeasers.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/OfferTeasers.html new file mode 100644 index 00000000..449279b3 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/OfferTeasers.html @@ -0,0 +1,40 @@ +{namespace ep=EP\EpEvents\ViewHelpers} + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/PageFooter.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/PageFooter.html new file mode 100644 index 00000000..9a6cd014 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/PageFooter.html @@ -0,0 +1,51 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +
+ + +
+ + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/PageHeader.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/PageHeader.html new file mode 100644 index 00000000..9935b2fa --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/PageHeader.html @@ -0,0 +1,105 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +{namespace ep=EP\EpEvents\ViewHelpers} + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/SubnavBox.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/SubnavBox.html new file mode 100644 index 00000000..0c03fe45 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/SubnavBox.html @@ -0,0 +1,16 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} + +
+ +
+

Weitere
Infos

+
+
+ +
+
+
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Partials/Svg.html b/web/typo3conf/ext/ep_events/Resources/Private/Partials/Svg.html new file mode 100644 index 00000000..d0cfa482 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Partials/Svg.html @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Activity/Detail.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Activity/Detail.html new file mode 100644 index 00000000..f47c8693 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Activity/Detail.html @@ -0,0 +1,76 @@ +
+ + + + + +
+
+
+
+ + +
Beispiel-
angebot{f:if(condition: '{offers -> f:count()} > 1', then: 'e')}
+ + + + + + +
+
+

Programmidee
{activity.name}

+
+ + {activity.descriptionExtended -> f:format.html()} + {activity.description -> f:format.html()} + +
+ + + + + « Zurück zur Programm-Übersicht + +
+
+ +
+
+ + + + +
+
+ +
+
+
+ + + +
+
+ + +
+
+ {activity.footertext -> f:format.html()} +
+
+
+
+ +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Activity/List.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Activity/List.html new file mode 100644 index 00000000..49dd94fa --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Activity/List.html @@ -0,0 +1,47 @@ +
+ + + + + + + +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Contact/List.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Contact/List.html new file mode 100644 index 00000000..d6aec3c3 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Contact/List.html @@ -0,0 +1,42 @@ +
+ + + + +
+ +
+
+ + + + + + + + + + +
+ {contact.name} + {contact.position} + + + + + + + + + +
Fon{contact.phone}
E-Mail
+
+
+
+
+
+
+ +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Email/Configurator.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Email/Configurator.html new file mode 100644 index 00000000..b56c0485 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Email/Configurator.html @@ -0,0 +1,70 @@ +
+ + + + +

Anfrage E&P Events vom

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Seiten URL{inquiry.pageUrl}
Reiseart{ep:configuratorTypeLabels(type: 'travelType', values: inquiry.travelType)}
Destination{ep:configuratorTypeLabels(type: 'locationType', values: inquiry.locationType)}
Unterkunft{ep:configuratorTypeLabels(type: 'accommodationType', values: inquiry.hotelType)}
Programm{ep:configuratorTypeLabels(type: 'programmeType', values: inquiry.activityType)}
Ziel{ep:configuratorTypeLabels(type: 'distance', values: inquiry.distance)}
Anzahl Personen{ep:configuratorTypeLabels(type: 'pax', values: inquiry.pax)}
Budget{ep:configuratorTypeLabels(type: 'budget', values: inquiry.budget)}
Zeitraum{inquiry.period -> v:or(alternative: 'Keine Angabe')}{f:if(condition: '{inquiry.period} == 1', then: ' Nacht')}{f:if(condition: '{inquiry.period} > 1', then: ' Nächte')}
Datum{inquiry.dateFrom -> v:or(alternative: 'Keine Angabe')} - {inquiry.dateTo -> v:or(alternative: 'Keine Angabe')}
Name/Firma{inquiry.name}
E-Mail{inquiry.email}
Telefon{inquiry.phone -> v:or(alternative: 'Keine Angabe')}
Mitteilung{inquiry.message -> v:or(alternative: 'Keine Angabe')}
+
+ +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Email/Inquiry.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Email/Inquiry.html new file mode 100644 index 00000000..f116e5e1 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Email/Inquiry.html @@ -0,0 +1,53 @@ +
+ + + + +

Anfrage E&P Events vom

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Seiten URL{inquiry.pageUrl}
Kategorie{f:translate(key: 'tx_epevents_domain_model_traveltype.configurator_label.{inquiry.travelType}', default: 'Keine Angabe')}
Angebot{inquiry.inquiryName -> v:or(alternative: 'Keine Angabe')}
Name/Firma{inquiry.name}
E-Mail{inquiry.email}
Telefon{inquiry.phone}
Budget/Person{inquiry.budget -> v:or(alternative: 'Keine Angabe')}
Anzahl Personen{inquiry.pax -> v:or(alternative: 'Keine Angabe')}
Zeitraum{inquiry.period -> v:or(alternative: 'Keine Angabe')}
Mitteilung{inquiry.message -> v:or(alternative: 'Keine Angabe')}
+
+ +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Banner.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Banner.html new file mode 100644 index 00000000..316dea9a --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Banner.html @@ -0,0 +1,19 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Header.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Header.html new file mode 100644 index 00000000..8534ea2e --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Header.html @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Herounit.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Herounit.html new file mode 100644 index 00000000..4e2d8c8c --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Herounit.html @@ -0,0 +1,55 @@ + + + + + + + + + {f:uri.image(src: image.0.uid, treatIdAsReference: 1, crop: image.0.crop, width: '1440') -> v:variable.set(name: 'headerImage')} + + + {v:variable.set(name: 'headerImage', value: 'https://placehold.it/1440x700')} + + + +
+
+ + + + + + + + + +
+ + + + + +

{data.header -> f:format.nl2br()}{data.subheader}

+
{data.bodytext -> f:format.nl2br()}
+
+ +
+ + + + » Jetzt anfragen + + + +
+
+
+
+
+ + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/List.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/List.html new file mode 100644 index 00000000..b5201335 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/List.html @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Statement.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Statement.html new file mode 100644 index 00000000..6eb899bd --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Statement.html @@ -0,0 +1,19 @@ + + + + + +
+
+ {data.bodytext -> v:iterator.explode(glue: 'constant:LF') -> v:variable.set(name: 'items')} +

{items.0}
{items.1}

+ » {data.header} +
+
+
+ + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Textmedia.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Textmedia.html new file mode 100644 index 00000000..c8b05003 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Textmedia.html @@ -0,0 +1,4 @@ + + + {data.bodytext} + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Tile.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Tile.html new file mode 100644 index 00000000..f0b6a8a5 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/FluidStyledContent/Tile.html @@ -0,0 +1,27 @@ + + + + + + +
+
+
+ {data.header} + {data.header -> f:format.nl2br()} +
+ {data.bodytext -> f:format.nl2br()} +
+
+ + + +
+
+
+
+ + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Form/Configurator.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Form/Configurator.html new file mode 100644 index 00000000..cab56d93 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Form/Configurator.html @@ -0,0 +1,265 @@ +
+ + + + + +
+
+

Anfrage-AssistentSetzen Sie Eckpunkte für + Ihre Anfrage. Wir machen Ihnen ein individuelles Angebot.

+
+
+ }' + context-destination='{inquiry.locationType}' + :options-destination='{settings.configurator.options.locationType -> v:format.json.encode()}' + :images-destination='{ + 1: "{f:uri.image(src: 'fileadmin/user_upload/ep_Events/Konfigurator/configurator_destination_sea.jpg', width: '450')}", + 2: "{f:uri.image(src: 'fileadmin/user_upload/ep_Events/Konfigurator/configurator_destination_mountains.jpg', width: '450')}", + 3: "{f:uri.image(src: 'fileadmin/user_upload/ep_Events/Konfigurator/configurator_destination_city.jpg', width: '450')}", + 4: "{f:uri.image(src: 'fileadmin/user_upload/ep_Events/Konfigurator/configurator_destination_special.jpg', width: '450')}" + }' + context-accommodation='{inquiry.hotelType}' + :options-accommodation='{settings.configurator.options.accommodationType -> v:format.json.encode()}' + :images-accommodation='{ + 1: "{f:uri.image(src: 'fileadmin/user_upload/ep_Events/Konfigurator/configurator_hotel_3-stars.jpg', width: '450')}", + 2: "{f:uri.image(src: 'fileadmin/user_upload/ep_Events/Konfigurator/configurator_hotel_4-stars.jpg', width: '450')}", + 3: "{f:uri.image(src: 'fileadmin/user_upload/ep_Events/Konfigurator/configurator_hotel_5-stars.jpg', width: '450')}", + 4: "{f:uri.image(src: 'fileadmin/user_upload/ep_Events/Konfigurator/configurator_hotel_special.jpg', width: '450')}" + }' + context-programme='{inquiry.activityType}' + :options-programme='{settings.configurator.options.programmeType -> v:format.json.encode()}' + :images-programme='{ + 1: "{f:uri.image(src: 'fileadmin/user_upload/ep_Events/Konfigurator/configurator_programme_outdoor-action.jpg', width: '450')}", + 2: "{f:uri.image(src: 'fileadmin/user_upload/ep_Events/Konfigurator/configurator_programme_event-gastro.jpg', width: '450')}", + 3: "{f:uri.image(src: 'fileadmin/user_upload/ep_Events/Konfigurator/configurator_programme_sightseeing.jpg', width: '450')}", + 4: "{f:uri.image(src: 'fileadmin/user_upload/ep_Events/Konfigurator/configurator_programme_special.jpg', width: '450')}" + }' + context-distance="{inquiry.distance}" + :options-distance='{settings.configurator.options.distance -> v:format.json.encode()}' + :options-pax='{settings.configurator.options.pax -> v:format.json.encode()}' + :options-budget='{settings.configurator.options.budget -> v:format.json.encode()}' + :options-period='{settings.configurator.options.period -> v:format.json.encode()}' + inline-template> + + + + + + + + + + + + +
+
+
+ +
+
+
+ Ziel: + +
+
+ Teilnehmerzahl: + +
+
+ Budget pro Person ohne Anreise: + +
+
+ Reisezeitraum: +
+ + +
+
+
+ +
+ + + +
+
+
+ +
{{formErrors.inquiryname}}
+
+
+ +
{{formErrors.inquiryemail}}
+
+
+ +
{{formErrors.inquiryphone}}
+
+
+ +
+
+ +
+ + + +
+
+
+ +
+
+ Processing... +
+
+

Vielen Dank für Ihre Anfrage. Wir werden uns + schnellstmöglich mit Ihnen in Verbindung setzen.
Klicken für eine weitere Anfrage.

+
+
+ Es ist ein Problem aufgetreten. Bitte versuchen Sie es noch einmal. +
+
+
+
+
+ +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Form/ContactForm.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Form/ContactForm.html new file mode 100644 index 00000000..fcadd939 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Form/ContactForm.html @@ -0,0 +1,114 @@ +
+ + + + +
+
+ +
+ +
+
+
+ Incentive +
+
+
+
+ Team Building +
+
+
+
+ Meeting +
+
+
+
+ Corporate Event +
+
+
+
+ +
{{formErrors.inquiryname}}
+
+
+ +
{{formErrors.inquiryemail}}
+
+
+ +
{{formErrors.inquiryphone}}
+
+ +
+ +
{{formErrors.inquirybudget}}
+
+
+ +
{{formErrors.inquirypax}}
+
+
+ +
{{formErrors.inquiryperiod}}
+
+
+ +
+
+ +
+
+
+ Processing... +
+
+

Vielen Dank für Ihre Anfrage. Wir werden uns schnellstmöglich + mit Ihnen in Verbindung setzen.

+

» Weiter umschauen

+
+
+ Es ist ein Problem aufgetreten. Bitte versuchen Sie es noch einmal. +
+
+
+
+
+
+ +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Form/InquiryForm.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Form/InquiryForm.html new file mode 100644 index 00000000..e7bb9b8f --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Form/InquiryForm.html @@ -0,0 +1,100 @@ +
+ + + + +
+ + +
+

Ihre
Anfrage zu
{inquiry.inquiryName -> ep:softHyphen()}

+
+ + + + +
+ +
{{formErrors.inquirybudget}}
+
+
+ +
{{formErrors.inquirypax}}
+
+
+ +
{{formErrors.inquiryperiod}}
+
+
+ +
{{formErrors.inquiryname}}
+
+
+ +
{{formErrors.inquiryemail}}
+
+
+ +
{{formErrors.inquiryphone}}
+
+ +
+ +
+
+ +
+
+
+ Processing... +
+
+ Vielen Dank für Ihre Anfrage. Wir werden uns schnellstmöglich mit Ihnen in Verbindung + setzen. +
+
+ Es ist ein Problem aufgetreten. Bitte versuchen Sie es noch einmal. +
+
+
+
+
+
+ +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Offer/Teaser.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Offer/Teaser.html new file mode 100644 index 00000000..87869581 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Offer/Teaser.html @@ -0,0 +1,10 @@ +
+ + + + + + + +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/ActivityEpEvents.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/ActivityEpEvents.html new file mode 100644 index 00000000..e345fca7 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/ActivityEpEvents.html @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/CategoryEpEvents.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/CategoryEpEvents.html new file mode 100644 index 00000000..65fa6800 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/CategoryEpEvents.html @@ -0,0 +1,23 @@ + + + + + + + + + + +
+
+ +
+
+
+
+ + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/FrontpageEpEvents.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/FrontpageEpEvents.html new file mode 100644 index 00000000..e29472fb --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/FrontpageEpEvents.html @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + +
+
+ +
+
+
+
+ + + + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/OfferEpEvents.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/OfferEpEvents.html new file mode 100644 index 00000000..a2bc2cdc --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/OfferEpEvents.html @@ -0,0 +1,100 @@ + + + + + + + + + +
+
+ +
+
+ +
+
+ + + +
+
+
+ +
Weitere-
Beispiele
+ + + + + + +
+

Leistungen{offer.name -> ep:softHyphen()} {offer.location.name}

+ {offer.services -> f:format.html()} +
+

Informationen über die Region{offer.location.name}

+ {offer.location.descriptionShort -> f:format.html()} + +

zurück zum Suchergebnis

+
+
+
+ + +
+ + + {title} {subtitle} + + + + + +
+ {title} + {subtitle} +
+ +
+
+ + +
+ + + + + + + + + + +
+

» {offer.contact.name}

+

Ihr Experte für
{offer.location.name}

+ {offer.contact.phone}
+ E-Mail
+
+ +
+
+ + +
+ + +
+
+ + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/SubpageEpEvents.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/SubpageEpEvents.html new file mode 100644 index 00000000..61f5bedb --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Page/SubpageEpEvents.html @@ -0,0 +1,16 @@ + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Search/Form.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Search/Form.html new file mode 100644 index 00000000..ad0b8098 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Search/Form.html @@ -0,0 +1,15 @@ +
+ + + + + + + + + + + +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Search/Result.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Search/Result.html new file mode 100644 index 00000000..b7cb4898 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Search/Result.html @@ -0,0 +1,68 @@ +
+ + + + +
+ + +
+

Ihre Suche nach {search.query} ergab {result -> f:count()} Treffer:

+
+ + + +
+
+ + + + + + + {offer.imageTeaser.alternative} + + + + Platzhalter + + +
+ {offer.name -> ep:softHyphen()} + {offer.location.name -> ep:softHyphen()} +
+
+
+
+

Beispielangebot {offer.name -> ep:softHyphen()} {offer.location.name -> ep:softHyphen()}

+

{offer.headline}

+ {offer.header -> f:format.html()} + » Mehr erfahren +
+
+
+
+
+ +
+

Ihre Suche nach {search.query} ergab leider keine Treffer.

+ + + + + +

Bitte geben Sie einen Suchbegriff mit mindestens drei Buchstaben Länge ein.

+
+
+
+
+
+
+
+ +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/Testimonial/List.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Testimonial/List.html new file mode 100644 index 00000000..eef0c198 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/Testimonial/List.html @@ -0,0 +1,31 @@ +
+ + + + + + + +
diff --git a/web/typo3conf/ext/ep_events/Resources/Private/Templates/ViewHelpers/Widget/Paginate/Index.html b/web/typo3conf/ext/ep_events/Resources/Private/Templates/ViewHelpers/Widget/Paginate/Index.html new file mode 100644 index 00000000..04089e79 --- /dev/null +++ b/web/typo3conf/ext/ep_events/Resources/Private/Templates/ViewHelpers/Widget/Paginate/Index.html @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + +
    + +
  • + + + + + + + + +
  • +
    + +
  • + 1 +
  • +
    + +
  • ...
  • +
    + + + +
  • + {page.number} +
  • +
    + +
  • + + + {page.number} + + + {page.number} + + +
  • +
    +
    +
    + +
  • ...
  • +
    + +
  • + {pagination.numberOfPages} +
  • +
    + +
  • + +
  • +
    +
+
diff --git a/web/typo3conf/ext/ep_events/ext_emconf.php b/web/typo3conf/ext/ep_events/ext_emconf.php new file mode 100644 index 00000000..ad046ca4 --- /dev/null +++ b/web/typo3conf/ext/ep_events/ext_emconf.php @@ -0,0 +1,31 @@ + 'E&P Events', + 'description' => 'Theme package for EP Events TYPO3 website', + 'category' => 'templates', + 'author' => 'Björn Fromme', + 'author_email' => 'fromme@dreipunktnull.com', + 'state' => 'stable', + 'internal' => '', + 'uploadfolder' => true, + 'createDirs' => '', + 'dividers2tabs' => true, + 'clearCacheOnLoad' => 0, + 'version' => '1.0.0', + 'constraints' => [ + 'depends' => [ + 'typo3' => '7.6.0-7.9.9', + 'fluid_styled_content' => '7.6.0-7.9.9', + 'vhs' => '4.0.0-4.9.9', + 'metaseo' => '2.1.0-2.1.9', + ], + 'conflicts' => [], + 'suggests' => [ + ] + ], + 'autoload' => + [ + 'psr-4' => ['EP\\EpEvents\\' => 'Classes'] + ], +]; diff --git a/web/typo3conf/ext/ep_events/ext_icon.gif b/web/typo3conf/ext/ep_events/ext_icon.gif new file mode 100644 index 00000000..9fc0f1d0 Binary files /dev/null and b/web/typo3conf/ext/ep_events/ext_icon.gif differ diff --git a/web/typo3conf/ext/ep_events/ext_localconf.php b/web/typo3conf/ext/ep_events/ext_localconf.php new file mode 100644 index 00000000..4926d14f --- /dev/null +++ b/web/typo3conf/ext/ep_events/ext_localconf.php @@ -0,0 +1,135 @@ + 'teaser', + ] + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpEvents', + 'OfferDetail', + [ + 'Offer' => 'detail', + ] + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpEvents', + 'Testimonials', + [ + 'Testimonial' => 'list', + ] + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpEvents', + 'Contacts', + [ + 'Contact' => 'list', + ] + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpEvents', + 'ActivityTeasers', + [ + 'Activity' => 'list', + ] + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpEvents', + 'ActivityDetail', + [ + 'Activity' => 'detail', + ] + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpEvents', + 'InquiryForm', + [ + 'Form' => 'inquiryForm', + ], + [ + 'Form' => 'inquiryForm', + ] + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpEvents', + 'ContactForm', + [ + 'Form' => 'contactForm', + ], + [ + 'Form' => 'contactForm', + ] + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpEvents', + 'SearchForm', + [ + 'Search' => 'form', + ], + [ + 'Search' => 'form', + ] + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpEvents', + 'SearchResult', + [ + 'Search' => 'result', + ], + [ + 'Search' => 'result', + ] + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpEvents', + 'Configurator', + [ + 'Form' => 'configurator', + ], + [ + 'Form' => 'configurator', + ] + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpEvents', + 'Ajax', + [ + 'AjaxForm' => 'processInquiryForm, processConfiguratorForm', + ], + [ + 'AjaxForm' => 'processInquiryForm, processConfiguratorForm', + ] + ); + + $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass']['EP.EpEvents'] = + \EP\EpEvents\Hooks\Tcemain::class; + + $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'search'; + $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'ref'; + + $GLOBALS['TYPO3_CONF_VARS']['LOG']['EP']['EpEvents']['Controller']['writerConfiguration'] = [ + \TYPO3\CMS\Core\Log\LogLevel::INFO => [ + 'TYPO3\\CMS\\Core\\Log\\Writer\\DatabaseWriter' => [ + 'logTable' => 'tx_epevents_log' + ], + ], + ]; + +}); diff --git a/web/typo3conf/ext/ep_events/ext_tables.php b/web/typo3conf/ext/ep_events/ext_tables.php new file mode 100644 index 00000000..c1dee991 --- /dev/null +++ b/web/typo3conf/ext/ep_events/ext_tables.php @@ -0,0 +1,87 @@ + 'web', + 'allowedTables' => '*', + ]; + + // Add offer page type + $GLOBALS['PAGES_TYPES'][\EP\EpEvents\Constants::PAGETYPE_OFFER] = [ + 'type' => 'web', + 'allowedTables' => '*', + ]; + + // Register icons + $icons = [ + 'apps-pagetree-category-page' => 'EXT:ep_events/Resources/Public/images/apps-pagetree-category-page.svg', + 'apps-pagetree-example-page' => 'EXT:ep_events/Resources/Public/images/apps-pagetree-example-page.svg', + ]; + $iconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class); + foreach ($icons as $identifier => $path) { + $iconRegistry->registerIcon( + $identifier, + TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider::class, + ['source' => $path] + ); + } + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( + 'EP.EpEvents', + 'OfferTeasers', + 'EP Events: Reisebeispiele Slider' + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( + 'EP.EpEvents', + 'Testimonials', + 'EP Events: Testimonials Slider' + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( + 'EP.EpEvents', + 'Contacts', + 'EP Events: Team' + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( + 'EP.EpEvents', + 'ActivityTeasers', + 'EP Events: Programmpunkte Slider' + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( + 'EP.EpEvents', + 'ActivityDetail', + 'EP Events: Programmpunkt Detail' + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( + 'EP.EpEvents', + 'ContactForm', + 'EP Events: Kontaktformular' + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( + 'EP.EpEvents', + 'Configurator', + 'EP Events: Anfragurator' + ); + + \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerPlugin( + 'EP.EpEvents', + 'SearchResult', + 'EP Events: Suchergebnis' + ); + +}); diff --git a/web/typo3conf/ext/ep_events/ext_tables.sql b/web/typo3conf/ext/ep_events/ext_tables.sql new file mode 100644 index 00000000..b020b5a3 --- /dev/null +++ b/web/typo3conf/ext/ep_events/ext_tables.sql @@ -0,0 +1,380 @@ +# +# Table structure for table 'tx_epevents_domain_model_traveltype' +# +CREATE TABLE tx_epevents_domain_model_traveltype ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + title varchar(255) DEFAULT '' NOT NULL, + subtitle varchar(255) DEFAULT '' NOT NULL, + headertext text NOT NULL, + subheadline varchar(255) DEFAULT '' NOT NULL, + description text NOT NULL, + bannertext text NOT NULL, + buttonlabel varchar(255) DEFAULT '' NOT NULL, + image_header int(11) unsigned NOT NULL default '0', + image_banner int(11) unsigned NOT NULL default '0', + configurator_type int(11) DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epevents_domain_model_offer' +# +CREATE TABLE tx_epevents_domain_model_offer ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + type tinyint(4) unsigned DEFAULT '0' NOT NULL, + name varchar(255) DEFAULT '' NOT NULL, + url varchar(255) DEFAULT '' NOT NULL, + name_internal varchar(255) DEFAULT '' NOT NULL, + groupname varchar(255) DEFAULT '' NOT NULL, + price int(11) unsigned DEFAULT '0' NOT NULL, + headline varchar(255) DEFAULT '' NOT NULL, + header text NOT NULL, + arrival text NOT NULL, + schedule text NOT NULL, + services text NOT NULL, + guidelines text NOT NULL, + detail_page int(11) unsigned DEFAULT '0', + image_header int(11) unsigned NOT NULL default '0', + image_teaser int(11) unsigned NOT NULL default '0', + image_teaser_mobile int(11) unsigned NOT NULL default '0', + booking_form int(11) unsigned NOT NULL default '0', + configurator_type int(11) DEFAULT '0' NOT NULL, + contact int(11) unsigned DEFAULT '0', + hotel int(11) unsigned DEFAULT '0', + location int(11) unsigned DEFAULT '0', + activities int(11) unsigned DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epevents_domain_model_location' +# +CREATE TABLE tx_epevents_domain_model_location ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + name varchar(255) DEFAULT '' NOT NULL, + description_short text NOT NULL, + description_long text NOT NULL, + season text NOT NULL, + image_header int(11) unsigned NOT NULL default '0', + image_teaser int(11) unsigned NOT NULL default '0', + image_offer int(11) unsigned NOT NULL default '0', + configurator_distance tinyint(4) unsigned DEFAULT '0' NOT NULL, + configurator_type tinyint(4) DEFAULT '0' NOT NULL, + footer_text1 text NOT NULL, + footer_text2 text NOT NULL, + footer_text3 text NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epevents_domain_model_hotel' +# +CREATE TABLE tx_epevents_domain_model_hotel ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + name varchar(255) DEFAULT '' NOT NULL, + name_internal varchar(255) DEFAULT '' NOT NULL, + description text NOT NULL, + image_teaser int(11) unsigned NOT NULL default '0', + image_offer int(11) unsigned NOT NULL default '0', + configurator_type int(11) DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epevents_domain_model_activity' +# +CREATE TABLE tx_epevents_domain_model_activity ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + name varchar(255) DEFAULT '' NOT NULL, + name_internal varchar(255) DEFAULT '' NOT NULL, + keywords text NOT NULL, + description text NOT NULL, + footertext text NOT NULL, + bannertext text NOT NULL, + image_teaser int(11) unsigned NOT NULL default '0', + image_header int(11) unsigned NOT NULL default '0', + image_offer int(11) unsigned NOT NULL default '0', + configurator_type int(11) DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epevents_domain_model_contact' +# +CREATE TABLE tx_epevents_domain_model_contact ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + name varchar(255) DEFAULT '' NOT NULL, + position varchar(255) DEFAULT '' NOT NULL, + email varchar(255) DEFAULT '' NOT NULL, + phone varchar(255) DEFAULT '' NOT NULL, + image int(11) unsigned NOT NULL default '0', + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epevents_domain_model_testimonial' +# +CREATE TABLE tx_epevents_domain_model_testimonial ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + client_name varchar(255) DEFAULT '' NOT NULL, + client_image int(11) unsigned NOT NULL default '0', + quote text NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epevents_offer_activity_mm' +# +CREATE TABLE tx_epevents_offer_activity_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); + +# +# Table structure for table 'pages' +# +CREATE TABLE pages ( + tx_epevents_configurator_travel_type tinyint(4) DEFAULT '0', + tx_epevents_configurator_hotel_type tinyint(4) DEFAULT '0', + tx_epevents_configurator_destination_type tinyint(4) DEFAULT '0', + tx_epevents_configurator_activity_type tinyint(4) DEFAULT '0', + tx_epevents_traveltype int(11) DEFAULT '0', + tx_epevents_offer int(11) DEFAULT '0' +); + +# +# Table structure for table 'tt_content' +# +CREATE TABLE tt_content ( + tx_epevents_configurator_travel_type tinyint(4) DEFAULT '0', +); + +# +# Table structure for table 'tx_epevents_log' +# +CREATE TABLE tx_epevents_log ( + request_id varchar(13) DEFAULT '' NOT NULL, + time_micro double(16,4) NOT NULL default '0.0000', + component varchar(255) DEFAULT '' NOT NULL, + level tinyint(1) unsigned DEFAULT '0' NOT NULL, + message text, + data text, + + KEY request (request_id) +); diff --git a/web/typo3conf/ext/ep_events/package.json b/web/typo3conf/ext/ep_events/package.json new file mode 100644 index 00000000..13322774 --- /dev/null +++ b/web/typo3conf/ext/ep_events/package.json @@ -0,0 +1,39 @@ +{ + "name": "epevents", + "description": "EP Reisen TYPO3 website package", + "version": "3.0.0", + "author": "Björn Fromme, fromme@dreipunktnull.com", + "license": "WTFPL", + "repository": "https://gitlab.com/dreipunktnull/ep_theme.git", + "scripts": { + "dev": "./node_modules/.bin/encode dev", + "build": "./node_modules/.bin/encode production" + }, + "dependencies": { + "@fengyuanchen/datepicker": "^0.6.4", + "bourbon": "^4.3.2", + "cookieconsent": "^3.0.4", + "jquery": "^3.2.1", + "jquery-lazy": "^1.7.4", + "normalize.css": "^7.0.0", + "sass-mq": "^3.3.2", + "slick-carousel": "^1.8.0", + "sticky-js": "^1.2.0", + "vue": "^2.5.11", + "vue-session": "^0.9.10" + }, + "devDependencies": { + "@symfony/webpack-encore": "^0.19.0", + "autoprefixer": "^8.2.0", + "node-sass": "^4.8.3", + "postcss-loader": "^2.1.3", + "sass-loader": "^6.0.7", + "vue-loader": "^14.2.2", + "vue-template-compiler": "^2.5.16", + "webpack-notifier": "^1.6.0" + }, + "browserslist": [ + "last 2 versions", + "ios >= 8" + ] +} diff --git a/web/typo3conf/ext/ep_events/postcss.config.js b/web/typo3conf/ext/ep_events/postcss.config.js new file mode 100644 index 00000000..f7e18f1c --- /dev/null +++ b/web/typo3conf/ext/ep_events/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + parser: false, + plugins: { + 'autoprefixer': {}, + } +}; diff --git a/web/typo3conf/ext/ep_events/webpack.config.js b/web/typo3conf/ext/ep_events/webpack.config.js new file mode 100644 index 00000000..cdbff02c --- /dev/null +++ b/web/typo3conf/ext/ep_events/webpack.config.js @@ -0,0 +1,22 @@ +const Encore = require('@symfony/webpack-encore'); + +Encore + .setOutputPath('./Resources/Public/') + .setPublicPath('/typo3conf/ext/ep_events/Resources/Public/') + .addEntry('main', './Resources/Private/Assets/js/main.js') + .addStyleEntry('rte', './Resources/Private/Assets/css/rte.css') + .enableSassLoader() + .enableVueLoader() + .autoProvidejQuery() + .enableSourceMaps(!Encore.isProduction()) + .cleanupOutputBeforeBuild() + .enableBuildNotifications() + .enablePostCssLoader() + .configureFilenames({ + js: 'js/[name].js', + css: 'css/[name].css', + images: 'images/[name].[ext]' + }) +; + +module.exports = Encore.getWebpackConfig(); diff --git a/web/typo3conf/ext/ep_products/Classes/Command/ContingentCommandController.php b/web/typo3conf/ext/ep_products/Classes/Command/ContingentCommandController.php new file mode 100644 index 00000000..a8a651c0 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Command/ContingentCommandController.php @@ -0,0 +1,49 @@ +, 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 TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\CommandController; + +class ContingentCommandController extends CommandController +{ + + /** + * @var \EP\EpProducts\Service\ContingentService + * @inject + */ + protected $contingentService; + + public function importCommand() + { + $path = GeneralUtility::getFileAbsFileName('fileadmin/xmlexportzimmer'); + $count = $this->contingentService->import($path); + $this->outputLine('%d rows imported.', [ $count ]); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Command/ProductCommandController.php b/web/typo3conf/ext/ep_products/Classes/Command/ProductCommandController.php new file mode 100644 index 00000000..4c820d75 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Command/ProductCommandController.php @@ -0,0 +1,53 @@ +, 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 TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\CommandController; + +class ProductCommandController extends CommandController +{ + + /** + * @var \EP\EpProducts\Service\ImportService + * @inject + */ + protected $importService; + + public function importCommand() + { + $path = GeneralUtility::getFileAbsFileName('fileadmin/xmlexport'); + if ($this->importService->checkActiveUpload($path)) { + $this->outputLine('Import cancelled due to active file upload.'); + } else { + $count = $this->importService->import($path); + $this->outputLine('%d rows imported.', [ $count ]); + } + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Command/SnowreportCommandController.php b/web/typo3conf/ext/ep_products/Classes/Command/SnowreportCommandController.php new file mode 100644 index 00000000..026146d1 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Command/SnowreportCommandController.php @@ -0,0 +1,48 @@ +, 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 TYPO3\CMS\Extbase\Mvc\Controller\CommandController; + +class SnowreportCommandController extends CommandController +{ + + /** + * @var \EP\EpProducts\Service\SnowreportService + * @inject + */ + protected $snowreportService; + + public function importCommand() + { + $this->snowreportService->downloadReportsXml(); + $count = $this->snowreportService->importSnowReportData(); + $this->outputLine('%d rows imported.', [ $count ]); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxCalendarController.php b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxCalendarController.php new file mode 100644 index 00000000..1224e703 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxCalendarController.php @@ -0,0 +1,91 @@ +, 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 CalendR\Calendar; +use CalendR\Period\Range; +use EP\EpProducts\Domain\Model\Hotel; +use EP\EpProducts\Domain\Repository\ContingentRepository; +use EP\EpProducts\Utility\DateUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class AjaxCalendarController extends ActionController +{ + /** + * @var \EP\EpProducts\Domain\Repository\ContingentRepository + */ + protected $contingentRepository; + + /** + * @param ContingentRepository $contingentRepository + */ + public function __construct(ContingentRepository $contingentRepository) + { + parent::__construct(); + $this->contingentRepository = $contingentRepository; + } + + /** + * @param Hotel $hotel + * @param string $year + * @param string $month + * @param int $months + */ + public function rangeAction(Hotel $hotel, $year = null, $month = null, $months = 6) + { + list ($begin, $end) = DateUtility::getDateRange($year, $month, $months); + + $factory = new Calendar(); + $factory->getEventManager()->addProvider('contingent', $this->contingentRepository); + + // Actual date range as requested + $range = new Range($begin, $end); + + // Date range for event selection extends the actual date range by one day + // before and after + $eventsRangeBegin = $range->getBegin()->sub(new \DateInterval('P1D')); + $eventsRangeEnd = $range->getEnd()->add(new \DateInterval('P1D')); + $eventsRange = new Range($eventsRangeBegin, $eventsRangeEnd); + $events = $factory->getEvents($eventsRange, [ 'hotel' => $hotel ]); + + $yearStart = $factory->getYear($range->getBegin()->format('Y')); + $yearEnd = null; + if ($range->getBegin()->format('Y') !== $range->getEnd()->format('Y')) { + $yearEnd = $factory->getYear($range->getEnd()->format('Y')); + } + + $this->view->assignMultiple([ + 'months' => $months, + 'hotel' => $hotel, + 'range' => $range, + 'yearStart' => $yearStart, + 'yearEnd' => $yearEnd, + 'events' => $events, + ]); + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxContentController.php b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxContentController.php new file mode 100644 index 00000000..37455407 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxContentController.php @@ -0,0 +1,108 @@ +, 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\City; +use EP\EpProducts\Domain\Model\Country; +use EP\EpProducts\Domain\Model\Hotel; +use EP\EpProducts\Domain\Model\Journey; +use EP\EpProducts\Domain\Model\Product; +use EP\EpProducts\Domain\Model\Region; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class AjaxContentController extends ActionController +{ + + /** + * @param Product $product + * @param Hotel $hotel + * @param integer $referringPageUid + */ + public function productAction(Product $product, Hotel $hotel = null, $referringPageUid = null) + { + $this->view->assignMultiple([ + 'hotel' => $hotel, + 'product' => $product, + 'referringPageUid' => $referringPageUid, + ]); + } + + /** + * @param Hotel $hotel + */ + public function hotelAction(Hotel $hotel) + { + $this->view->assign('hotel', $hotel); + } + + /** + * @param Country $country + */ + public function countryAction(Country $country) + { + $this->view->assign('country', $country); + } + + /** + * @param Region $region + */ + public function regionAction(Region $region) + { + $this->view->assign('region', $region); + } + + /** + * @param City $city + */ + public function cityAction(City $city) + { + $this->view->assign('city', $city); + } + + /** + * @param Journey $journey + */ + public function journeyAction(Journey $journey) + { + $this->view->assign('journey', $journey); + } + + /** + * @param Region $region + */ + public function webcamAction(Region $region) + { + $webcam = $region->getWebcam(); + $available = ($webcam !== null && $webcam->getAvailable()); + $this->view->assignMultiple([ + 'region' => $region, + 'webcam' => $webcam, + 'available' => $available, + ]); + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxDateController.php b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxDateController.php new file mode 100644 index 00000000..425715b2 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxDateController.php @@ -0,0 +1,113 @@ +, 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\FilterSettings; +use EP\EpProducts\Domain\Model\Hotel; +use EP\EpProducts\Domain\Model\Product; +use EP\EpProducts\Service\DateService; +use EP\EpProducts\Service\FilterService; +use EP\EpProducts\Traits\RequestArgumentTypeConversionTrait; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class AjaxDateController extends ActionController +{ + + use RequestArgumentTypeConversionTrait; + + /** + * @var \EP\EpProducts\Service\FilterService + */ + protected $filterService; + + /** + * @var DateService + */ + protected $dateService; + + /** + * @param FilterService $filterService + * @param DateService $dateService + */ + public function __construct(FilterService $filterService, DateService $dateService) + { + parent::__construct(); + $this->filterService = $filterService; + $this->dateService = $dateService; + } + + public function initializeAction() + { + $forcedConceptUid = (int) $this->settings['forcedConceptUid']; + $this->processFilterSettingsArgument($forcedConceptUid); + } + + /** + * @param Product $product + * @param Hotel $hotel + * @param FilterSettings $filterSettings + * + * @return string + */ + public function datesAction(Product $product, Hotel $hotel = null, FilterSettings $filterSettings = null) + { + if ($hotel === null) { + return json_encode([ + 'dates' => [], + 'bookable' => false, + 'altProductLink' => null, + 'altLabel' => null, + ]); + } + if ($filterSettings === null) { + $forcedConceptUid = (int) $this->settings['forcedConceptUid']; + $filterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUid, false); + } + $altProductLink = null; + $altLabel = null; + if ($product->getAltProduct()) { + $altProduct = $product->getAltProduct(); + $altProductLink = $this->uriBuilder + ->reset() + ->setTargetPageUid($altProduct->getDetailPage()) + ->setCreateAbsoluteUri(true) + ->build() + ; + $altLabel = $product->getAltLabel(); + } + $template = $this->settings['bpnBookingUrlTemplateCode']; + $datesTable = $this->dateService->getDatesTable($product, $hotel, $filterSettings, $template); + return json_encode([ + 'dates' => $datesTable, + 'bookable' => $product->getBookable(), + 'altProductLink' => $altProductLink, + 'altLabel' => $altLabel, + ]); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxFilterpanelController.php b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxFilterpanelController.php new file mode 100644 index 00000000..b69ccc22 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxFilterpanelController.php @@ -0,0 +1,101 @@ +, 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\FilterSettings; +use EP\EpProducts\Service\DateService; +use EP\EpProducts\Service\FilterService; +use EP\EpProducts\Traits\RequestArgumentTypeConversionTrait; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class AjaxFilterpanelController extends ActionController +{ + + use RequestArgumentTypeConversionTrait; + + /** + * @var \EP\EpProducts\Service\FilterService + */ + protected $filterService; + + /** + * @var DateService + */ + protected $dateService; + + /** + * @param FilterService $filterService + */ + public function __construct(FilterService $filterService, DateService $dateService) + { + parent::__construct(); + $this->filterService = $filterService; + $this->dateService = $dateService; + } + + public function initializeAction() + { + $forcedConceptUid = (int) $this->settings['forcedConceptUid']; + $this->processFilterSettingsArgument($forcedConceptUid); + } + + /** + * @param FilterSettings $filterSettings + * + * @return string + */ + public function optionsAction(FilterSettings $filterSettings = null) + { + if ($filterSettings === null) { + $forcedConceptUid = (int) $this->settings['forcedConceptUid']; + $filterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUid); + } + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']); + $filterOptions = $this->filterService->getFilterOptions($filterSettings, $excludedConceptUids); + if ($filterOptions === null) { + $filterSettings = $this->filterService->getDefaultFilterSettings(); + $filterOptions = $this->filterService->getFilterOptions($filterSettings, $excludedConceptUids); + } + return json_encode($filterOptions); + } + + /** + * @param FilterSettings $filterSettings + * @param string $search + * + * @return string + */ + public function autocompleteAction(FilterSettings $filterSettings, $search) + { + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']); + $destinations = $this->dateService->getAutocompleteOptions($filterSettings, $search, $excludedConceptUids); + return json_encode($destinations); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchController.php b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchController.php new file mode 100644 index 00000000..0bacbab5 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchController.php @@ -0,0 +1,113 @@ +, 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\FilterSettings; +use EP\EpProducts\Service\FilterService; +use EP\EpProducts\Service\SearchService; +use EP\EpProducts\Traits\RequestArgumentTypeConversionTrait; +use EP\EpProducts\Utility\DateUtility; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class AjaxSearchController extends ActionController +{ + + use RequestArgumentTypeConversionTrait; + + /** + * @var \EP\EpProducts\Service\FilterService + */ + protected $filterService; + + /** + * @var SearchService + */ + protected $searchService; + + /** + * @param FilterService $filterService + * @param SearchService $searchService + */ + public function __construct(FilterService $filterService, SearchService $searchService) + { + parent::__construct(); + $this->filterService = $filterService; + $this->searchService = $searchService; + } + + public function initializeAction() + { + $forcedConceptUid = (int) $this->settings['forcedConceptUid']; + $this->processFilterSettingsArgument($forcedConceptUid); + } + + /** + * @param FilterSettings $filterSettings + * @param integer $referringPageUid + * + * @return string + */ + public function searchresultAction(FilterSettings $filterSettings = null, $referringPageUid = null) + { + $dateSelected = false; + if ($filterSettings === null) { + $forcedConceptUid = (int) $this->settings['forcedConceptUid']; + $filterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUid); + } else if ($filterSettings->getDateFrom() !== null || $filterSettings->getDateTo() !== null) { + $dateSelected = true; + } + $organic = true; + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']); + $searchResult = $this->searchService->getSearchResult($filterSettings, $excludedConceptUids); + if ($searchResult->getTotal() === 0) { + $filterSettings = $this->filterService->getDefaultFilterSettings(); + $searchResult = $this->searchService->getSearchResult($filterSettings, $excludedConceptUids); + $organic = false; + } + $this->view->assignMultiple([ + 'searchResult' => $searchResult, + 'detailPageUid' => $this->settings['defaultDetailPageUid'], + 'referringPageUid' => $referringPageUid, + 'filterSettings' => $filterSettings, + 'dateSelected' => $dateSelected, + 'organic' => $organic, + ]); + return json_encode([ + 'html' => $this->view->render(), + 'meta' => [ + 'organic' => $organic, + 'total' => $searchResult->getTotal(), + 'destinationName' => $filterSettings->getDestinationName(), + 'dateRange' => DateUtility::formatDateRange($filterSettings->getDateFrom(), $filterSettings->getDateTo()), + 'dateSelected' => $dateSelected, + ], + ]); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchbarController.php b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchbarController.php new file mode 100644 index 00000000..46bacaa7 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxSearchbarController.php @@ -0,0 +1,98 @@ +, 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\FilterSettings; +use EP\EpProducts\Domain\Model\SearchParams; +use EP\EpProducts\Service\DateService; +use EP\EpProducts\Service\FilterService; +use EP\EpProducts\Traits\RequestArgumentTypeConversionTrait; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class AjaxSearchbarController extends ActionController +{ + + use RequestArgumentTypeConversionTrait; + + /** + * @var \EP\EpProducts\Service\FilterService + */ + protected $filterService; + + /** + * @param FilterService $filterService + */ + public function __construct(FilterService $filterService) + { + parent::__construct(); + $this->filterService = $filterService; + } + + public function initializeAction() + { + $forcedConceptUid = $this->settings['forcedConceptUid']; + $this->processSearchParamsArgument($forcedConceptUid); + } + + /** + * @param SearchParams $searchParams + * @return string + */ + public function optionsAction(SearchParams $searchParams = null) + { + if ($searchParams === null) { + $searchParams = new SearchParams(); + $forcedConceptUid = (int) $this->settings['forcedConceptUid']; + $filterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUid); + } else { + $filterSettings = FilterSettings::fromSearchParams($searchParams); + } + $filterOptions = $this->filterService->getFilterOptions($filterSettings); + return json_encode([ + 'filterOptions' => $filterOptions, + 'searchParams' => $searchParams, + ]); + } + + /** + * @return string + */ + public function resetAction() + { + $searchParams = new SearchParams(); + $forcedConceptUid = (int) $this->settings['forcedConceptUid']; + $filterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUid); + $filterOptions = $this->filterService->getFilterOptions($filterSettings); + return json_encode([ + 'filterOptions' => $filterOptions, + 'searchParams' => $searchParams, + ]); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/AjaxTableController.php b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxTableController.php new file mode 100644 index 00000000..f81b5313 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/AjaxTableController.php @@ -0,0 +1,141 @@ +, 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\Date; +use EP\EpProducts\Domain\Model\FilterSettings; +use EP\EpProducts\Domain\Model\Hotel; +use EP\EpProducts\Domain\Model\Product; +use EP\EpProducts\Service\DateService; +use EP\EpProducts\Service\FilterService; +use EP\EpProducts\Traits\RequestArgumentTypeConversionTrait; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class AjaxTableController extends ActionController +{ + + use RequestArgumentTypeConversionTrait; + + /** + * @var \EP\EpProducts\Service\FilterService + */ + protected $filterService; + + /** + * @var DateService + */ + protected $dateService; + + /** + * @param DateService $dateService + * @param FilterService $filterService + */ + public function __construct(DateService $dateService, FilterService $filterService) + { + parent::__construct(); + $this->dateService = $dateService; + $this->filterService = $filterService; + } + + public function initializeAction() + { + $forcedConceptUid = (int) $this->settings['forcedConceptUid']; + $this->processFilterSettingsArgument($forcedConceptUid); + } + + /** + * @param Product $product + * @param Hotel $hotel + * @param FilterSettings $filterSettings + * @param Date $date + * + * @return string + */ + public function pricetableAction(Product $product, Hotel $hotel, FilterSettings $filterSettings = null, Date $date = null) + { + if ($filterSettings === null) { + $forcedConceptUid = (int) $this->settings['forcedConceptUid']; + $filterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUid, false); + } + $template = $this->settings['bpnBookingUrlTemplateCode']; + $priceTable = $this->dateService->getPriceTable($product, $hotel, $filterSettings, $date, $template); + return json_encode([ + 'dateStart' => $date ? $date->getDateStart()->format('Y-m-d') : '', + 'dateEnd' => $date ? $date->getDateEnd()->format('Y-m-d') : '', + 'servicesIncluded' => $date ? $date->getServicesIncluded() : '', + 'priceTable' => $priceTable, + ]); + } + + /** + * @param Product $product + * @param Hotel $hotel + */ + public function pricetableHtmlAction(Product $product, Hotel $hotel) + { + $filterSettings = $this->filterService->getDefaultFilterSettings(); + $template = $this->settings['bpnBookingUrlTemplateCode']; + $pricetable = $this->dateService->getPriceTable($product, $hotel, $filterSettings, null, $template); + $this->view->assign('pricetable', $pricetable); + } + + /** + * @param Product $product + */ + public function eventPricetableAction(Product $product) + { + $roomTypes = GeneralUtility::trimExplode(',', $this->settings['priceTableRoomTypes']); + $roomTypesPax = array_map(function ($type) { + return (int) $type; + }, $roomTypes); + $roomTypesLabels = array_map(function ($type) { + $label = (int) $type . 'er'; + if (strpos($type, '+') !== false) { + $label .= '+'; + } + return $label; + }, $roomTypes); + $maxPax = max($roomTypesPax); + $template = $this->settings['bpnBookingUrlTemplateCode']; + $pricetable = $this->dateService->getEventPriceTable($product, $maxPax, $template); + $categories = [ + Hotel::CATEGORY_STANDARD => 'Standard', + Hotel::CATEGORY_COMFORT => 'Komfort', + Hotel::CATEGORY_DELUXE => 'Deluxe', + Hotel::CATEGORY_SUPER_DELUXE => 'Super Deluxe', + ]; + $this->view->assignMultiple([ + 'roomTypesPax' => $roomTypesPax, + 'roomTypesLabels' => $roomTypesLabels, + 'pricetable' => $pricetable, + 'categories' => $categories + ]); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/BackendController.php b/web/typo3conf/ext/ep_products/Classes/Controller/BackendController.php new file mode 100644 index 00000000..b9a6ed8e --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/BackendController.php @@ -0,0 +1,144 @@ +, 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 TYPO3\CMS\Backend\View\BackendTemplateView; +use TYPO3\CMS\Core\Messaging\AbstractMessage; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class BackendController extends ActionController +{ + /** + * @var BackendTemplateView + */ + protected $defaultViewObjectName = BackendTemplateView::class; + + /** + * @var BackendTemplateView + */ + protected $view; + + /** + * @var \EP\EpProducts\Service\ImportService + * @inject + */ + protected $importService; + + /** + * @var \EP\EpProducts\Service\ContingentService + * @inject + */ + protected $contingentService; + + /** + * @var \EP\EpProducts\Service\SnowreportService + * @inject + */ + protected $snowreportService; + + /** + * @var \EP\EpProducts\Service\LogService + * @inject + */ + protected $logService; + + public function indexAction() + {} + + public function importProductsAction() + { + $path = GeneralUtility::getFileAbsFileName('fileadmin/xmlexport'); + if ($this->importService->checkActiveUpload($path)) { + $this->addFlashMessage( + 'Datenexport aus BusProNet aktiv. Import nicht möglich.', + 'Import fehlgeschlagen', + AbstractMessage::WARNING + ); + } else { + $dateCount = $this->importService->import($path); + $this->addFlashMessage($dateCount . ' Termine importiert', 'Import abgechlossen', AbstractMessage::OK); + } + $this->redirect('index'); + } + + public function importContingentsAction() + { + $path = GeneralUtility::getFileAbsFileName('fileadmin/xmlexportzimmer'); + $count = $this->contingentService->import($path); + $this->addFlashMessage($count . ' Datensätze importiert', 'Import abgechlossen', AbstractMessage::OK); + $this->redirect('index'); + } + + public function importSnowReportAction() + { + $this->snowreportService->downloadReportsXml(); + $count = $this->snowreportService->importSnowReportData(); + $this->addFlashMessage($count . ' Datensätze importiert', 'Import abgechlossen', AbstractMessage::OK); + $this->redirect('index'); + } + + public function dumpSearchLogEpreisenAction() + { + $csv = $this->logService->dumpSearchLogEpreisen(); + $this->dumpSearchLog($csv, 'epreisen'); + } + + public function dumpSearchLogEpeventsAction() + { + $csv = $this->logService->dumpSearchLogEpevents(); + $this->dumpSearchLog($csv, 'epevents'); + } + + /** + * @param array $csv + * @param $name + */ + private function dumpSearchLog(array $csv, $name) + { + $fileName = sprintf('searchlog_dump_%s_%s.csv', $name, date('dmY')); + + header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); + header('Content-Description: File Transfer'); + header('Content-type: text/csv'); + header("Content-Disposition: attachment; filename={$fileName}"); + header('Expires: 0'); + header('Pragma: public'); + + $fh = @fopen( 'php://output', 'w' ); + + foreach ($csv as $data) { + fputcsv($fh, $data, ';'); + } + + fclose($fh); + + exit; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/CityController.php b/web/typo3conf/ext/ep_products/Classes/Controller/CityController.php new file mode 100644 index 00000000..fdb27d79 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/CityController.php @@ -0,0 +1,72 @@ +, 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\City; +use EP\EpProducts\Domain\Repository\CityRepository; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class CityController extends ActionController +{ + + /** + * @var \EP\EpProducts\Domain\Repository\CityRepository + */ + protected $cityRepository; + + /** + * @param CityRepository $cityRepository + */ + public function __construct(CityRepository $cityRepository) + { + parent::__construct(); + $this->cityRepository = $cityRepository; + } + + /** + * @param City $city + */ + public function detailAction(City $city = null) + { + if ($city === null) { + $cityUid = $this->settings['cityUid']; + $city = $this->cityRepository->findByIdentifier($cityUid); + } + + $this->view->assign('city', $city); + } + + public function teasergroupAction() + { + $regionUid = $this->settings['regionUid']; + $season = $this->settings['season']; + $cities = $this->cityRepository->getTeasersByRegionAndSeason($regionUid, $season); + $this->view->assign('teasers', $cities); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/ConceptController.php b/web/typo3conf/ext/ep_products/Classes/Controller/ConceptController.php new file mode 100644 index 00000000..7e1cd03f --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/ConceptController.php @@ -0,0 +1,86 @@ +, 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\Concept; +use EP\EpProducts\Domain\Model\FilterSettings; +use EP\EpProducts\Domain\Repository\ConceptRepository; +use EP\EpProducts\Service\ProductService; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class ConceptController extends ActionController +{ + + /** + * @var \EP\EpProducts\Domain\Repository\ConceptRepository + */ + protected $conceptRepository; + + /** + * @var \EP\EpProducts\Service\ProductService + */ + protected $productService; + + /** + * @param ConceptRepository $conceptRepository + * @param ProductService $productService + */ + public function __construct(ConceptRepository $conceptRepository, ProductService $productService) + { + parent::__construct(); + $this->conceptRepository = $conceptRepository; + $this->productService = $productService; + } + + /** + * @param Concept $concept + */ + public function detailAction(Concept $concept = null) + { + if ($concept === null) { + $conceptUid = $this->settings['conceptUid']; + $concept = $this->conceptRepository->findByIdentifier($conceptUid); + } + $filterSettings = new FilterSettings(); + $filterSettings->setConceptUids([$concept->getUid()]); + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids'], true); + $limit = $this->settings['showMoreLink'] ? 4 : 0; + $teasers = $this->productService->getTeasergroup($filterSettings, $excludedConceptUids, $limit); + $this->view->assign('teasers', $teasers); + $this->view->assign('concept', $concept); + $this->view->assign('filterSettings', $filterSettings); + } + + public function teasergroupAction() + { + $concepts = $this->conceptRepository->findAll(); + $this->view->assign('teasers', $concepts); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/CountryController.php b/web/typo3conf/ext/ep_products/Classes/Controller/CountryController.php new file mode 100644 index 00000000..2d5d927e --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/CountryController.php @@ -0,0 +1,80 @@ +, 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\Country; +use EP\EpProducts\Domain\Model\FilterSettings; +use EP\EpProducts\Domain\Repository\CountryRepository; +use EP\EpProducts\Service\ProductService; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class CountryController extends ActionController +{ + + /** + * @var \EP\EpProducts\Domain\Repository\CountryRepository + */ + protected $countryRepository; + + /** + * @var ProductService + */ + protected $productService; + + /** + * @param CountryRepository $countryRepository + * @param ProductService $productService + */ + public function __construct(CountryRepository $countryRepository, ProductService $productService) + { + parent::__construct(); + $this->countryRepository = $countryRepository; + $this->productService = $productService; + } + + /** + * @param Country $country + */ + public function detailAction(Country $country = null) + { + if ($country === null) { + $countryUid = $this->settings['countryUid']; + $country = $this->countryRepository->findByIdentifier($countryUid); + } + $filterSettings = new FilterSettings(); + $filterSettings->setCountryUids([$countryUid]); + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids'], true); + $limit = $this->settings['showMoreLink'] ? 4 : 0; + $teasers = $this->productService->getTeasergroup($filterSettings, $excludedConceptUids, $limit); + $this->view->assign('teasers', $teasers); + $this->view->assign('country', $country); + $this->view->assign('filterSettings', $filterSettings); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/FaqController.php b/web/typo3conf/ext/ep_products/Classes/Controller/FaqController.php new file mode 100644 index 00000000..390b5a65 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/FaqController.php @@ -0,0 +1,57 @@ +, 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\Repository\FaqRepository; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class FaqController extends ActionController +{ + + /** + * @var \EP\EpProducts\Domain\Repository\FaqRepository + */ + protected $faqRepository; + + /** + * @param FaqRepository $faqRepository + */ + public function __construct(FaqRepository $faqRepository) + { + parent::__construct(); + $this->faqRepository = $faqRepository; + } + + public function detailAction() + { + $faqUids = $this->settings['faqUids']; + $faqs = $this->faqRepository->findByUids($faqUids); + $this->view->assign('faqs', $faqs); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/HotelController.php b/web/typo3conf/ext/ep_products/Classes/Controller/HotelController.php new file mode 100644 index 00000000..74dad4aa --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/HotelController.php @@ -0,0 +1,146 @@ +, 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\FilterSettings; +use EP\EpProducts\Domain\Model\Hotel; +use EP\EpProducts\Domain\Repository\HotelRepository; +use EP\EpProducts\Domain\Repository\ProductRepository; +use EP\EpProducts\Service\HotelService; +use EP\EpProducts\Service\ProductService; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class HotelController extends ActionController +{ + + /** + * @var \EP\EpProducts\Domain\Repository\HotelRepository + */ + protected $hotelRepository; + + /** + * @var \EP\EpProducts\Domain\Repository\ProductRepository + */ + protected $productRepository; + + /** + * @var \EP\EpProducts\Service\HotelService + */ + protected $hotelService; + + /** + * @var ProductService + */ + private $productService; + + /** + * @param HotelService $hotelService + * @param HotelRepository $hotelRepository + * @param ProductRepository $productRepository + * @param ProductService $productService + */ + public function __construct( + HotelService $hotelService, + HotelRepository $hotelRepository, + ProductRepository $productRepository, + ProductService $productService + ) + { + parent::__construct(); + $this->hotelRepository = $hotelRepository; + $this->productRepository = $productRepository; + $this->hotelService = $hotelService; + $this->productService = $productService; + } + + /** + * @param Hotel $hotel + */ + public function detailAction(Hotel $hotel = null) + { + if ($hotel === null) { + $hotelUid = $this->settings['hotelUid']; + /** @var Hotel $hotel */ + $hotel = $this->hotelRepository->findByIdentifier($hotelUid); + } + $filterSettings = new FilterSettings(); + $filterSettings->setHotelUid($hotel->getUid()); + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids'], true); + $limit = $this->settings['showMoreLink'] ? 4 : 0; + $teasers = $this->productService->getTeasergroup($filterSettings, $excludedConceptUids, $limit); + $this->view->assign('hotel', $hotel); + $this->view->assign('teasers', $teasers); + $this->view->assign('filterSettings', $filterSettings); + } + + public function detailEventAction() + { + $productUid = $this->settings['productUid']; + /** @var \EP\EpProducts\Domain\Model\Product $product */ + $product = $this->productRepository->findByIdentifier($productUid); + $hotelUid = $this->settings['hotelUid']; + /** @var \EP\EpProducts\Domain\Model\Hotel $hotel */ + $hotel = $this->hotelRepository->findByIdentifier($hotelUid); + $this->view->assignMultiple([ + 'product' => $product, + 'hotel' => $hotel, + ]); + } + + public function teasergroupAction() + { + $criteria = [ + 'regionUid' => (int) $this->settings['regionUid'], + 'countryUid' => (int) $this->settings['countryUid'], + 'conceptUid' => (int) $this->settings['conceptUid'], + 'productUid' => (int) $this->settings['productUid'], + 'category' => (int) $this->settings['category'], + 'type' => (int) $this->settings['type'], + ]; + $bookable = $this->hotelService->getTeasersByCriteria($criteria); + $bookableHotelUids = array_keys($bookable); + $nonBookable = $this->hotelService->getDateIndependentTeasersByCriteria($criteria, $bookableHotelUids); + $this->view->assign('bookable', $bookable); + $this->view->assign('nonBookable', $nonBookable); + } + + public function dateIndependentTeasergroupAction() + { + $criteria = [ + 'regionUid' => (int) $this->settings['regionUid'], + 'countryUid' => (int) $this->settings['countryUid'], + 'productUid' => (int) $this->settings['productUid'], + 'category' => (int) $this->settings['category'], + 'type' => (int) $this->settings['type'], + ]; + $hotels = $this->hotelService->getDateIndependentTeasersByCriteria($criteria); + $this->view->assign('teasers', $hotels); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/MapController.php b/web/typo3conf/ext/ep_products/Classes/Controller/MapController.php new file mode 100644 index 00000000..12247f67 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/MapController.php @@ -0,0 +1,118 @@ +, 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\Repository\HotelRepository; +use EP\EpProducts\Domain\Repository\ProductRepository; +use EP\EpProducts\Service\HotelService; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class MapController extends ActionController +{ + + /** + * @var \EP\EpProducts\Domain\Repository\HotelRepository + */ + protected $hotelRepository; + + /** + * @var \EP\EpProducts\Domain\Repository\ProductRepository + */ + protected $productRepository; + + /** + * @param HotelRepository $hotelRepository + * @param ProductRepository $productRepository + */ + public function __construct( + HotelRepository $hotelRepository, + ProductRepository $productRepository + ) + { + parent::__construct(); + $this->hotelRepository = $hotelRepository; + $this->productRepository = $productRepository; + } + + public function generalAction() + { + $markerData = []; + $selectedHotels = $this->settings['hotelUids']; + $hotelUids = GeneralUtility::trimExplode(',', $selectedHotels); + $hotels = $this->hotelRepository->getListByUids($hotelUids); + if ($hotels) { + foreach ($hotels as $hotel) + { + /** @var \EP\EpProducts\Domain\Model\Hotel $hotel */ + $markerData[] = [ + 'name' => $hotel->getName(), + 'uri' => $this->getUriForPageUid($hotel->getDetailPage()), + 'teaser' => $hotel->getTeaser(), + 'lat' => $hotel->getLatitude(), + 'lng' => $hotel->getLongitude(), + ]; + } + } + + $selectedProducts = $this->settings['productUids']; + $productUids = GeneralUtility::trimExplode(',', $selectedProducts); + $products = $this->productRepository->getListByUids($productUids); + if ($products) { + foreach ($products as $product) + { + /** @var \EP\EpProducts\Domain\Model\Product $product */ + $hotel = reset($product->getHotels()->toArray()); + $markerData[] = [ + 'name' => $product->getName(), + 'uri' => $this->getUriForPageUid($product->getDetailPage()), + 'teaser' => $product->getTeaser(), + 'lat' => $hotel->getLatitude(), + 'lng' => $hotel->getLongitude(), + ]; + } + } + + $this->view->assign('markerData', json_encode($markerData)); + } + + /** + * @param int $pageUid + * @return string + */ + protected function getUriForPageUid($pageUid) + { + return $this->uriBuilder + ->reset() + ->setTargetPageUid($pageUid) + ->setCreateAbsoluteUri(true) + ->build() + ; + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/NewsletterController.php b/web/typo3conf/ext/ep_products/Classes/Controller/NewsletterController.php new file mode 100644 index 00000000..e92002f5 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/NewsletterController.php @@ -0,0 +1,41 @@ +, 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 TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class NewsletterController extends ActionController +{ + + public function indexAction() + { + $this->view->assign('result', GeneralUtility::_GET('result')); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/PricetableController.php b/web/typo3conf/ext/ep_products/Classes/Controller/PricetableController.php new file mode 100644 index 00000000..32712990 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/PricetableController.php @@ -0,0 +1,41 @@ +, 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 TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class PricetableController extends ActionController +{ + + public function eventAction() + { + $productUid = $this->settings['productUid']; + $this->view->assign('productUid', $productUid); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/ProductController.php b/web/typo3conf/ext/ep_products/Classes/Controller/ProductController.php new file mode 100644 index 00000000..00e2aaca --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/ProductController.php @@ -0,0 +1,253 @@ +, 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\Date; +use EP\EpProducts\Domain\Model\FilterSettings; +use EP\EpProducts\Domain\Model\Hotel; +use EP\EpProducts\Domain\Model\Product; +use EP\EpProducts\Domain\Repository\HotelRepository; +use EP\EpProducts\Domain\Repository\ProductRepository; +use EP\EpProducts\Service\DateService; +use EP\EpProducts\Service\FilterService; +use EP\EpProducts\Service\HotelService; +use EP\EpProducts\Service\ProductService; +use EP\EpProducts\Traits\RequestArgumentTypeConversionTrait; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class ProductController extends ActionController +{ + + use RequestArgumentTypeConversionTrait; + + /** + * @var \EP\EpProducts\Domain\Repository\ProductRepository + */ + protected $productRepository; + + /** + * @var \EP\EpProducts\Domain\Repository\HotelRepository + */ + protected $hotelRepository; + + /** + * @var \EP\EpProducts\Service\FilterService + */ + protected $filterService; + + /** + * @var \EP\EpProducts\Service\ProductService + */ + protected $productService; + + /** + * @var DateService + */ + protected $dateService; + + /** + * @var HotelService + */ + protected $hotelService; + + /** + * @param ProductRepository $productRepository + * @param ProductService $productService + * @param HotelRepository $hotelRepository + * @param HotelService $hotelService + * @param DateService $dateService + * @param FilterService $filterService + */ + public function __construct( + ProductRepository $productRepository, + ProductService $productService, + HotelRepository $hotelRepository, + HotelService $hotelService, + DateService $dateService, + FilterService $filterService + ) + { + parent::__construct(); + $this->productRepository = $productRepository; + $this->productService = $productService; + $this->hotelRepository = $hotelRepository; + $this->dateService = $dateService; + $this->hotelService = $hotelService; + $this->filterService = $filterService; + } + + public function initializeAction() + { + $this->processFilterSettingsArgument(); + } + + /** + * @param Product $product + * @param Hotel $hotel + * @param FilterSettings $filterSettings + * @param int $referringPageUid + */ + public function detailAction( + Product $product = null, + Hotel $hotel = null, + FilterSettings $filterSettings = null, + $referringPageUid = null + ) + { + // Get product to display from flexform settings if not provided via url + if ($product === null) { + $productUid = $this->settings['productUid']; + $product = $this->productRepository->findByIdentifier($productUid); + } + // Redirect to search page in case no product can be determined + if ($product === null) { + $this->redirect('search', 'Search', null, null, $this->settings['defaultSearchPageUid']); + } + // Get hotel to display from flexform settings if not provided via url + if ((int) $this->settings['hotelUid'] > 0) { + $hotelUid = $this->settings['hotelUid']; + $hotel = $this->hotelRepository->findByIdentifier($hotelUid); + } + if ($hotel === null) { + // Forward to hotel list action in case no single hotel can be determined + if ($product->getHotels()->count() > 1) { + $arguments = [ + 'product' => $product, + 'filterSettings' => $filterSettings, + 'referringPageUid' => $referringPageUid, + ]; + $this->forward('hotelList', null, null, $arguments); + } + // Use first hotel which should be the only one at this point + if ($product->getHotels()->count() > 0) { + $hotel = reset($product->getHotels()->toArray()); + } + } + list($productDateRangeFrom, $productDateRangeTo) = $this->filterService->getProductDateRange($product, $filterSettings); + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']); + $isProductWithExcludedConcept = ($product->getConcept() !== null) && in_array($product->getConcept()->getUid(), $excludedConceptUids); + $noInfoConceptUids = GeneralUtility::trimExplode(',', $this->settings['noInfoConceptUids']); + $isProductWithNoInfoConcept = ($product->getConcept() !== null) && in_array($product->getConcept()->getUid(), $noInfoConceptUids); + $this->view->assignMultiple([ + 'filterSettings' => $filterSettings, + 'hotel' => $hotel, + 'product' => $product, + 'productDateRangeFrom' => $productDateRangeFrom, + 'productDateRangeTo' => $productDateRangeTo, + 'referringPageUid' => $referringPageUid, + 'currentPageUid' => $GLOBALS['TSFE']->id, + 'isProductWithExcludedConcept' => $isProductWithExcludedConcept, + 'isProductWithNoInfoConcept' => $isProductWithNoInfoConcept, + ]); + } + + public function pricetableAction() + { + $productUid = $this->settings['productUid']; + /** @var \EP\EpProducts\Domain\Model\Product $product */ + $product = $this->productRepository->findByIdentifier($productUid); + $hotelUid = $this->settings['hotelUid']; + /** @var \EP\EpProducts\Domain\Model\Hotel $hotel */ + $hotel = $this->hotelRepository->findByIdentifier($hotelUid); + $filterSettings = $this->filterService->getDefaultFilterSettings(); + $pricetable = $this->dateService->getPriceTable($product, $hotel, $filterSettings); + $this->view->assign('pricetable', $pricetable); + } + + /** + * @param Product $product + * @param FilterSettings $filterSettings + * @param int $referringPageUid + */ + public function hotelListAction( + Product $product, + FilterSettings $filterSettings = null, + $referringPageUid = null + ) + { + $hotels = $this->hotelService->getList($product); + // Forward to detail view in case there's only one hotel + if (count($hotels) === 1) { + $hotel = reset($hotels); + $arguments = [ + 'product' => $product, + 'hotel' => $hotel, + 'filterSettings' => $filterSettings, + 'referringPageUid' => $referringPageUid, + ]; + $this->forward('detail', null, null, $arguments); + } + list($productDateRangeFrom, $productDateRangeTo) = $this->filterService->getProductDateRange($product, $filterSettings); + $this->view->assignMultiple([ + 'filterSettings' => $filterSettings, + 'hotels' => $hotels, + 'product' => $product, + 'productDateRangeFrom' => $productDateRangeFrom, + 'productDateRangeTo' => $productDateRangeTo, + 'referringPageUid' => $referringPageUid, + 'linkHotel' => true, + ]); + } + + public function teasergroupAction() + { + $filterSettings = new FilterSettings(); + if ((int) $this->settings['regionUid'] > 0) { + $filterSettings->setRegionUids([$this->settings['regionUid']]); + } elseif ((int) $this->settings['countryUid'] > 0) { + $filterSettings->setCountryUids([$this->settings['countryUid']]); + } elseif ((int) $this->settings['hotelUid'] > 0) { + $filterSettings->setHotelUid($this->settings['hotelUid']); + } + if ((int) $this->settings['conceptUid'] > 0) { + $filterSettings->setConceptUids([$this->settings['conceptUid']]); + } + $filterSettings = $this->filterService->getFiltersettingsFromSettings($this->settings); + $dateAuto = !$this->settings['dateFrom'] && !$this->settings['dateTo']; + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids'], true); + $limit = $this->settings['showMoreLink'] ? 4 : 0; + $teasers = $this->productService->getTeasergroup($filterSettings, $excludedConceptUids, $limit); + $this->view->assign('teasers', $teasers); + $this->view->assign('dateAuto', $dateAuto); + $this->view->assign('filterSettings', $filterSettings); + } + + /** + * @param Date $date + */ + public function bookingAction(Date $date = null) + { + if ($date === null) { + $this->redirect('search', 'Search', null, null, $this->settings['defaultSearchPageUid']); + } + $this->view->assign('bookingId', $date->getBusProId()); + $this->view->assign('hotelId', $date->getHotelBusProId()); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/RegionController.php b/web/typo3conf/ext/ep_products/Classes/Controller/RegionController.php new file mode 100644 index 00000000..95b5b79f --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/RegionController.php @@ -0,0 +1,88 @@ +, 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\FilterSettings; +use EP\EpProducts\Domain\Model\Region; +use EP\EpProducts\Domain\Repository\RegionRepository; +use EP\EpProducts\Service\ProductService; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class RegionController extends ActionController +{ + + /** + * @var \EP\EpProducts\Domain\Repository\RegionRepository + */ + protected $regionRepository; + + /** + * @var \EP\EpProducts\Service\ProductService + */ + protected $productService; + + /** + * @param RegionRepository $regionRepository + * @param ProductService $productService + */ + public function __construct(RegionRepository $regionRepository, ProductService $productService) + { + parent::__construct(); + $this->regionRepository = $regionRepository; + $this->productService = $productService; + } + + /** + * @param Region $region + */ + public function detailAction(Region $region = null) + { + if ($region === null) { + $regionUid = $this->settings['regionUid']; + $region = $this->regionRepository->findByIdentifier($regionUid); + } + $filterSettings = new FilterSettings(); + $filterSettings->setRegionUids([$region->getUid()]); + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids'], true); + $limit = $this->settings['showMoreLink'] ? 4 : 0; + $teasers = $this->productService->getTeasergroup($filterSettings, $excludedConceptUids, $limit); + $this->view->assign('teasers', $teasers); + $this->view->assign('region', $region); + $this->view->assign('filterSettings', $filterSettings); + } + + public function teasergroupAction() + { + $countryUid = $this->settings['countryUid']; + $season = $this->settings['season']; + $regions = $this->regionRepository->getTeasersByCountryAndSeason($countryUid, $season); + $this->view->assign('teasers', $regions); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/SearchController.php b/web/typo3conf/ext/ep_products/Classes/Controller/SearchController.php new file mode 100644 index 00000000..d75a95f9 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/SearchController.php @@ -0,0 +1,151 @@ +, 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\FilterSettings; +use EP\EpProducts\Domain\Model\SearchParams; +use EP\EpProducts\Service\FilterService; +use EP\EpProducts\Service\FilterSettingsEncoder; +use EP\EpProducts\Traits\RequestArgumentTypeConversionTrait; +use TYPO3\CMS\Core\Log\LogManager; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; +use TYPO3\CMS\Extbase\Mvc\Exception\StopActionException; +use TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException; + +class SearchController extends ActionController +{ + + use RequestArgumentTypeConversionTrait; + + /** + * @var \EP\EpProducts\Service\FilterService + */ + protected $filterService; + + /** + * @var \EP\EpProducts\Domain\Model\FilterSettings + */ + protected $defaultFilterSettings; + + /** + * @var \EP\EpProducts\Domain\Model\FilterOptions + */ + protected $defaultFilterOptions; + + /** + * @param FilterService $filterService + */ + public function __construct(FilterService $filterService) + { + parent::__construct(); + $this->filterService = $filterService; + } + + public function initializeAction() + { + $forcedConceptUid = (int) $this->settings['forcedConceptUid']; + $this->defaultFilterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUid); + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']); + $this->defaultFilterOptions = $this->filterService->getFilterOptions($this->defaultFilterSettings, $excludedConceptUids); + } + + public function searchbarAction() + { + $fixed = (bool) $this->settings['fixed']; + $searchParams = new SearchParams($GLOBALS['TSFE']->id); + $this->view->assignMultiple([ + 'filterSettings' => $this->defaultFilterSettings, + 'filterOptions' => $this->defaultFilterOptions, + 'searchParams' => $searchParams, + 'fixed' => $fixed, + ]); + } + + public function searchboxAction() + { + $searchParams = new SearchParams($GLOBALS['TSFE']->id); + $this->view->assignMultiple([ + 'filterSettings' => $this->defaultFilterSettings, + 'filterOptions' => $this->defaultFilterOptions, + 'searchParams' => $searchParams, + ]); + } + + public function initializeSearchresultAction() + { + $forcedConceptUid = $this->settings['forcedConceptUid']; + $this->processSearchParamsArgument($forcedConceptUid); + $this->processFilterSettingsArgument($forcedConceptUid); + } + + /** + * @param \EP\EpProducts\Domain\Model\SearchParams $searchParams + * @param \EP\EpProducts\Domain\Model\FilterSettings $filterSettings + */ + public function searchresultAction(SearchParams $searchParams = null, FilterSettings $filterSettings = null) + { + if ($searchParams === null) { + $searchParams = new SearchParams(); + } else { + $this->logSearch($searchParams); + } + if ($filterSettings === null) { + $filterSettings = FilterSettings::fromSearchParams($searchParams); + } + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']); + $filterOptions = $this->filterService->getFilterOptions($filterSettings, $excludedConceptUids); + if ($filterOptions === null) { + $filterOptions = $this->filterService->getFilterOptions($this->defaultFilterSettings, $excludedConceptUids); + } + + $this->view->assignMultiple([ + 'detailPageUid' => $this->settings['detailPageUid'], + 'referringPageUid' => $GLOBALS['TSFE']->id, + 'filterSettings' => $filterSettings, + 'filterOptions' => $filterOptions, + ]); + } + + /** + * @param SearchParams $searchParams + */ + private function logSearch(SearchParams $searchParams) + { + $ignoreIps = GeneralUtility::trimExplode(',', $this->settings['searchLogIgnoreIps'], true); + $remoteIp = GeneralUtility::getIndpEnv('REMOTE_ADDR'); + if (in_array($remoteIp, $ignoreIps)) { + return; + } + /** @var $logger \TYPO3\CMS\Core\Log\Logger */ + $logger = GeneralUtility::makeInstance(LogManager::class)->getLogger(__CLASS__); + $logger->info('Searchresult processed', [ + 'searchParams' => $searchParams, + ]); + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/SnowreportController.php b/web/typo3conf/ext/ep_products/Classes/Controller/SnowreportController.php new file mode 100644 index 00000000..4e4c9120 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/SnowreportController.php @@ -0,0 +1,58 @@ +, 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\Repository\SnowreportRepository; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class SnowreportController extends ActionController +{ + + /** + * @var \EP\EpProducts\Domain\Repository\SnowreportRepository + */ + protected $snowreportRepository; + + /** + * @param SnowreportRepository $snowreportRepository + */ + public function __construct(SnowreportRepository $snowreportRepository) + { + parent::__construct(); + $this->snowreportRepository = $snowreportRepository; + } + + public function listAction() + { + $regionUids = GeneralUtility::trimExplode(',', $this->settings['regionUids'], true); + $list = $this->snowreportRepository->getSnowreportsForRegions($regionUids); + $this->view->assign('list', $list); + } + +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_products/Classes/Controller/TeamController.php b/web/typo3conf/ext/ep_products/Classes/Controller/TeamController.php new file mode 100644 index 00000000..0b8fb1dd --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Controller/TeamController.php @@ -0,0 +1,63 @@ +, 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\Teammember; +use EP\EpProducts\Domain\Repository\TeammemberRepository; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class TeamController extends ActionController +{ + /** + * @var \EP\EpProducts\Domain\Repository\TeammemberRepository + */ + protected $teammemberRepository; + + /** + * @param TeammemberRepository $teammemberRepository + */ + public function __construct(TeammemberRepository $teammemberRepository) + { + parent::__construct(); + $this->teammemberRepository = $teammemberRepository; + } + + public function listAction() + { + $members = $this->teammemberRepository->findAll(); + $this->view->assign('members', $members); + } + + /** + * @param Teammember $member + */ + public function showAction(Teammember $member) + { + $this->view->assign('member', $member); + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/AbstractDestination.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/AbstractDestination.php new file mode 100644 index 00000000..ef49e7a8 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/AbstractDestination.php @@ -0,0 +1,389 @@ +, 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! + ***************************************************************/ + +class AbstractDestination extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + const SEASON_WINTER = 'w'; + const SEASON_SUMMER = 's'; + + /** + * @var int + */ + protected $detailPage = 0; + + /** + * @var string + */ + protected $season = self::SEASON_WINTER; + + /** + * @var float + */ + protected $latitude = 0.0; + + /** + * @var float + */ + protected $longitude = 0.0; + + /** + * @var string + */ + protected $name = ''; + + /** + * @var string + */ + protected $nameInternal = ''; + + /** + * @var string + */ + protected $keywords = ''; + + /** + * @var string + */ + protected $headline = ''; + + /** + * @var string + */ + protected $teaser = ''; + + /** + * @var string + */ + protected $headerTitle = ''; + + /** + * @var string + */ + protected $headerSubtitle = ''; + + /** + * @var string + */ + protected $description = ''; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + protected $images; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + protected $teaserImages; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + protected $headerImages; + + public function __construct() + { + $this->initStorageObjects(); + } + + protected function initStorageObjects() + { + $this->images = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->teaserImages = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->headerImages = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + } + + /** + * @return int + */ + public function getDetailPage() + { + return $this->detailPage; + } + + /** + * @param int $detailPage + */ + public function setDetailPage($detailPage) + { + $this->detailPage = $detailPage; + } + + /** + * @return string + */ + public function getSeason() + { + return $this->season; + } + + /** + * @param string $season + */ + public function setSeason($season) + { + $this->season = $season; + } + + /** + * @return float $latitude + */ + public function getLatitude() + { + return $this->latitude; + } + + /** + * @param float $latitude + */ + public function setLatitude($latitude) + { + $this->latitude = $latitude; + } + + /** + * @return float $longitude + */ + public function getLongitude() + { + return $this->longitude; + } + + /** + * @param float $longitude + */ + public function setLongitude($longitude) + { + $this->longitude = $longitude; + } + + /** + * @return string $name + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getNameInternal() + { + return $this->nameInternal; + } + + /** + * @param string $nameInternal + */ + public function setNameInternal($nameInternal) + { + $this->nameInternal = $nameInternal; + } + + /** + * @return string + */ + public function getKeywords() + { + return $this->keywords; + } + + /** + * @param string $keywords + */ + public function setKeywords($keywords) + { + $this->keywords = $keywords; + } + + /** + * @return string + */ + public function getHeadline() + { + return $this->headline; + } + + /** + * @param string $headline + */ + public function setHeadline($headline) + { + $this->headline = $headline; + } + + /** + * @return string + */ + public function getTeaser() + { + return $this->teaser; + } + + /** + * @param string $teaser + */ + public function setTeaser($teaser) + { + $this->teaser = $teaser; + } + + /** + * @return string + */ + public function getHeaderTitle() + { + return $this->headerTitle; + } + + /** + * @param string $headerTitle + */ + public function setHeaderTitle($headerTitle) + { + $this->headerTitle = $headerTitle; + } + + /** + * @return string + */ + public function getHeaderSubtitle() + { + return $this->headerSubtitle; + } + + /** + * @param string $headerSubtitle + */ + public function setHeaderSubtitle($headerSubtitle) + { + $this->headerSubtitle = $headerSubtitle; + } + + /** + * @return string + */ + public function getDescription() + { + return $this->description; + } + + /** + * @param string $description + */ + public function setDescription($description) + { + $this->description = $description; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $images + */ + public function getImages() + { + return $this->images; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $images + */ + public function setImages(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $images) + { + $this->images = $images; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getTeaserImages() + { + return $this->teaserImages; + } + + /** + * @return null|\TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getTeaserImage() + { + if ($this->teaserImages->count() === 0) { + return null; + } + + return reset($this->teaserImages->toArray()); + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $teaserImages + */ + public function setTeaserImages($teaserImages) + { + $this->teaserImages = $teaserImages; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getHeaderImages() + { + return $this->headerImages; + } + + /** + * @return null|\TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + public function getHeaderImage() + { + $headerImages = $this->getHeaderImages(); + + if ($headerImages->count() === 0) { + return null; + } + + return reset($headerImages->toArray()); + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $headerImages + */ + public function setHeaderImages($headerImages) + { + $this->headerImages = $headerImages; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Badge.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Badge.php new file mode 100644 index 00000000..65cc14cf --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Badge.php @@ -0,0 +1,97 @@ +, 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! + ***************************************************************/ + +class Badge extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * @var string + */ + protected $title; + + /** + * @var string + */ + protected $subtitle; + + /** + * @var string + */ + protected $link; + + /** + * @return string + */ + public function getTitle() + { + return $this->title; + } + + /** + * @param string $title + */ + public function setTitle($title) + { + $this->title = $title; + } + + /** + * @return string + */ + public function getSubtitle() + { + return $this->subtitle; + } + + /** + * @param string $subtitle + */ + public function setSubtitle($subtitle) + { + $this->subtitle = $subtitle; + } + + /** + * @return string + */ + public function getLink() + { + return $this->link; + } + + /** + * @param string $link + */ + public function setLink($link) + { + $this->link = $link; + } + +} + diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/City.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/City.php new file mode 100644 index 00000000..8929ae22 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/City.php @@ -0,0 +1,199 @@ +, 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! + ***************************************************************/ + +class City extends AbstractDestination implements TeaserInterface +{ + + /** + * @var bool + */ + protected $excludeFromTeasergroups = false; + + /** + * @var string + */ + protected $party = ''; + + /** + * @var string + */ + protected $leisure = ''; + + /** + * @var \EP\EpProducts\Domain\Model\Country + */ + protected $country; + + /** + * @var \EP\EpProducts\Domain\Model\Region + */ + protected $region; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> + */ + protected $facts; + + /** + * @var \EP\EpProducts\Domain\Model\Officetip + */ + protected $officetip; + + protected function initStorageObjects() + { + parent::initStorageObjects(); + $this->facts = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + } + + /** + * @return bool + */ + public function isExcludeFromTeasergroups() + { + return $this->excludeFromTeasergroups; + } + + /** + * @param bool $excludeFromTeasergroups + */ + public function setExcludeFromTeasergroups($excludeFromTeasergroups) + { + $this->excludeFromTeasergroups = (bool) $excludeFromTeasergroups; + } + + /** + * @return string + */ + public function getParty() { + return $this->party; + } + + /** + * @param string $party + */ + public function setParty($party) { + $this->party = $party; + } + + /** + * @return string + */ + public function getLeisure() { + return $this->leisure; + } + + /** + * @param string $leisure + */ + public function setLeisure($leisure) { + $this->leisure = $leisure; + } + + /** + * Returns all header images with fallback to parent + * region in case none are assigned. + * + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getHeaderImages() + { + $headerImages = $this->headerImages; + + if ($headerImages->count() === 0) { + $headerImages = $this->getRegion()->getHeaderImages(); + } + + return $headerImages; + } + + /** + * @return \EP\EpProducts\Domain\Model\Country $country + */ + public function getCountry() + { + return $this->country; + } + + /** + * @param \EP\EpProducts\Domain\Model\Country $country + */ + public function setCountry(\EP\EpProducts\Domain\Model\Country $country) + { + $this->country = $country; + } + + /** + * @return \EP\EpProducts\Domain\Model\Region $region + */ + public function getRegion() + { + return $this->region; + } + + /** + * @param \EP\EpProducts\Domain\Model\Region $region + */ + public function setRegion(\EP\EpProducts\Domain\Model\Region $region) + { + $this->region = $region; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> $facts + */ + public function getFacts() + { + return $this->facts; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> $facts + */ + public function setFacts(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $facts) + { + $this->facts = $facts; + } + + /** + * @return Officetip + */ + public function getOfficetip() + { + return $this->officetip; + } + + /** + * @param Officetip $officetip + */ + public function setOfficetip($officetip) + { + $this->officetip = $officetip; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Concept.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Concept.php new file mode 100644 index 00000000..ddb3f285 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Concept.php @@ -0,0 +1,362 @@ +, 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! + ***************************************************************/ + +class Concept extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity implements TeaserInterface +{ + + /** + * @var int + */ + protected $busProId = 0; + + /** + * @var string + */ + protected $name = ''; + + /** + * @var string + */ + protected $code = ''; + + /** + * @var string + */ + protected $headline = ''; + + /** + * @var string + */ + protected $headerTitle = ''; + + /** + * @var string + */ + protected $headerSubtitle = ''; + + /** + * @var string + */ + protected $teaser = ''; + + /** + * @var string + */ + protected $description = ''; + + /** + * @var string + */ + protected $descriptionExtended = ''; + + /** + * @var int + */ + protected $detailPage = 0; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + protected $teaserImages = null; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + protected $headerImages = null; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Product> + * @lazy + */ + protected $products = null; + + /** + * __construct + */ + public function __construct() + { + $this->initStorageObjects(); + } + + /** + */ + protected function initStorageObjects() + { + $this->products = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->teaserImages = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->headerImages = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + } + + /** + * @return int + */ + public function getBusProId() { + return $this->busProId; + } + + /** + * @param int $busProId + */ + public function setBusProId($busProId) { + $this->busProId = $busProId; + } + + /** + * @return string $name + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getCode() + { + return $this->code; + } + + /** + * @param string $code + */ + public function setCode($code) + { + $this->code = $code; + } + + /** + * @return string + */ + public function getTeaser() + { + return $this->teaser; + } + + /** + * @param string $teaser + */ + public function setTeaser($teaser) + { + $this->teaser = $teaser; + } + + /** + * @return string + */ + public function getHeadline() + { + return $this->headline; + } + + /** + * @param string $headline + */ + public function setHeadline($headline) + { + $this->headline = $headline; + } + + /** + * @return string + */ + public function getHeaderTitle() + { + return $this->headerTitle; + } + + /** + * @param string $headerTitle + */ + public function setHeaderTitle($headerTitle) + { + $this->headerTitle = $headerTitle; + } + + /** + * @return string + */ + public function getHeaderSubtitle() + { + return $this->headerSubtitle; + } + + /** + * @param string $headerSubtitle + */ + public function setHeaderSubtitle($headerSubtitle) + { + $this->headerSubtitle = $headerSubtitle; + } + + /** + * @return string $description + */ + public function getDescription() + { + return $this->description; + } + + /** + * @param string $description + */ + public function setDescription($description) + { + $this->description = $description; + } + + /** + * @return string + */ + public function getDescriptionExtended() + { + return $this->descriptionExtended; + } + + /** + * @param string $descriptionExtended + */ + public function setDescriptionExtended($descriptionExtended) + { + $this->descriptionExtended = $descriptionExtended; + } + + /** + * @return int $detailPage + */ + public function getDetailPage() + { + return $this->detailPage; + } + + /** + * @param int $detailPage + */ + public function setDetailPage($detailPage) + { + $this->detailPage = $detailPage; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getTeaserImages() + { + return $this->teaserImages; + } + + /** + * @return null|\TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getTeaserImage() + { + if ($this->teaserImages->count() === 0) { + return null; + } + + return reset($this->teaserImages->toArray()); + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $teaserImages + */ + public function setTeaserImages($teaserImages) + { + $this->teaserImages = $teaserImages; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getHeaderImages() + { + return $this->headerImages; + } + + /** + * @return null|\TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getHeaderImage() + { + if ($this->headerImages->count() === 0) { + return null; + } + + return reset($this->headerImages->toArray()); + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $headerImages + */ + public function setHeaderImages($headerImages) + { + $this->headerImages = $headerImages; + } + + /** + * @param \EP\EpProducts\Domain\Model\Product $product + */ + public function addProduct(\EP\EpProducts\Domain\Model\Product $product) + { + $this->products->attach($product); + } + + /** + * @param \EP\EpProducts\Domain\Model\Product $product + */ + public function removeProduct(\EP\EpProducts\Domain\Model\Product $product) + { + $this->products->detach($product); + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Product> + */ + public function getProducts() + { + return $this->products; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Product> $products + */ + public function setProducts(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $products) + { + $this->products = $products; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Contingent.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Contingent.php new file mode 100644 index 00000000..b3edee92 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Contingent.php @@ -0,0 +1,199 @@ +, 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 CalendR\Event\EventInterface; +use CalendR\Period\PeriodInterface; +use TYPO3\CMS\Extbase\DomainObject\AbstractEntity; + +class Contingent extends AbstractEntity implements EventInterface +{ + const STATUS_OK = 0; + const STATUS_BLOCKED = 1; + const STATUS_ONREQUEST = 2; + + /** + * @var \DateTime + */ + protected $date; + + /** + * @var \EP\EpProducts\Domain\Model\Hotel + */ + protected $hotel; + + /** + * @var int + */ + protected $pax; + + /** + * @var int + */ + protected $available; + + /** + * @var int + */ + protected $status; + + /** + * @return \DateTime + */ + public function getDate() + { + return $this->date; + } + + /** + * @param \DateTime $date + */ + public function setDate(\DateTime $date) + { + $this->date = $date; + } + + /** + * @return Hotel + */ + public function getHotel() + { + return $this->hotel; + } + + /** + * @param Hotel $hotel + */ + public function setHotel($hotel) + { + $this->hotel = $hotel; + } + + /** + * @return int + */ + public function getPax() + { + return $this->pax; + } + + /** + * @param int $pax + */ + public function setPax($pax) + { + $this->pax = $pax; + } + + /** + * @return int + */ + public function getAvailable() + { + return $this->available; + } + + /** + * @param int $available + */ + public function setAvailable($available) + { + $this->available = $available; + } + + /** + * @return int + */ + public function getPercentageAvailable() + { + if ($this->pax === 0) { + return 0; + } + + return round($this->available / $this->pax * 100, 2); + } + + /** + * @return int + */ + public function getStatus() + { + return $this->status; + } + + /** + * @param int $status + */ + public function setStatus($status) + { + $this->status = $status; + } + + /** + * @return \DateTime + */ + public function getBegin() + { + return $this->date; + } + + /** + * @return \DateTime + */ + public function getEnd() + { + return $this->date; + } + + /** + * @param \DateTime $datetime + * @return bool + */ + public function contains(\DateTime $datetime) + { + return $datetime >= $this->getBegin() && $datetime < $this->getEnd(); + } + + /** + * @param PeriodInterface $period + * @return bool + */ + public function containsPeriod(PeriodInterface $period) + { + return $this->contains($period->getBegin()) && $this->contains($period->getEnd()); + } + + /** + * @param PeriodInterface $period + * @return bool + */ + public function isDuring(PeriodInterface $period) + { + return $this->getBegin() >= $period->getBegin() && $this->getEnd() < $period->getEnd(); + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Country.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Country.php new file mode 100644 index 00000000..043dcaf7 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Country.php @@ -0,0 +1,158 @@ +, 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! + ***************************************************************/ + +class Country extends AbstractDestination implements TeaserInterface +{ + + /** + * @var string + */ + protected $code = ''; + + /** + * @var string + */ + protected $descriptionExtended = ''; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> + */ + protected $facts; + + /** + * @var \EP\EpProducts\Domain\Model\Officetip + */ + protected $officetip; + + /** + * @var \EP\EpProducts\Domain\Model\Snowreport + */ + protected $snowreport; + + protected function initStorageObjects() + { + parent::initStorageObjects(); + $this->facts = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + } + + /** + * @return string + */ + public function getCode() { + return $this->code; + } + + /** + * @param string $code + */ + public function setCode($code) { + $this->code = $code; + } + + /** + * @return string + */ + public function getDescriptionExtended() + { + return $this->descriptionExtended; + } + + /** + * @param string $descriptionExtended + */ + public function setDescriptionExtended($descriptionExtended) + { + $this->descriptionExtended = $descriptionExtended; + } + + /** + * @param \EP\EpProducts\Domain\Model\Fact $fact + */ + public function addFact(\EP\EpProducts\Domain\Model\Fact $fact) + { + $this->facts->attach($fact); + } + + /** + * @param \EP\EpProducts\Domain\Model\Fact $factToRemove + */ + public function removeFact(\EP\EpProducts\Domain\Model\Fact $factToRemove) + { + $this->facts->detach($factToRemove); + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> + */ + public function getFacts() + { + return $this->facts; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> $facts + */ + public function setFacts(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $facts) + { + $this->facts = $facts; + } + + /** + * @return Officetip + */ + public function getOfficetip() + { + return $this->officetip; + } + + /** + * @param Officetip $officetip + */ + public function setOfficetip($officetip) + { + $this->officetip = $officetip; + } + + /** + * @return Snowreport + */ + public function getSnowreport() + { + return $this->snowreport; + } + + /** + * @param Snowreport $snowreport + */ + public function setSnowreport($snowreport) + { + $this->snowreport = $snowreport; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Date.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Date.php new file mode 100644 index 00000000..b80ea8d4 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Date.php @@ -0,0 +1,433 @@ +, 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! + ***************************************************************/ + +class Date extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + const DURATION_SHORT = 4; + const DURATION_LONG = 5; + + /** + * @var int + */ + protected $busProId = 0; + + /** + * @var int + */ + protected $hotelBusProId = 0; + + /** + * @var string + */ + protected $code = ''; + + /** + * @var \DateTime + */ + protected $dateStart; + + /** + * @var \DateTime + */ + protected $dateEnd; + + /** + * @var int + */ + protected $nights = 0; + + /** + * @var string + */ + protected $board = ''; + + /** + * @var string + */ + protected $boardCode = ''; + + /** + * @var int + */ + protected $boardBusProId = 0; + + /** + * @var bool + */ + protected $busIncluded = false; + + /** + * @var bool + */ + protected $skipassIncluded = false; + + /** + * @var bool + */ + protected $busAvailable = false; + + /** + * @var int + */ + protected $busPrice = 0; + + /** + * @var string + */ + protected $servicesIncluded = ''; + + /** + * @var string + */ + protected $servicesGeneral = ''; + + /** + * @var int + */ + protected $discount = 0; + + /** + * @var int + */ + protected $minPrice = 0; + + /** + * @var int + */ + protected $pseudoPrice = 0; + + /** + * @var int + */ + protected $available = 0; + + /** + * @return int $bookingId + */ + public function getBusProId() + { + return $this->busProId; + } + + /** + * @param int $busProId + */ + public function setBusProId($busProId) + { + $this->busProId = $busProId; + } + + /** + * @return int + */ + public function getHotelBusProId() + { + return $this->hotelBusProId; + } + + /** + * @param int $hotelBusProId + */ + public function setHotelBusProId($hotelBusProId) + { + $this->hotelBusProId = $hotelBusProId; + } + + /** + * @return string $code + */ + public function getCode() + { + return $this->code; + } + + /** + * @param string $code + */ + public function setCode($code) + { + $this->code = $code; + } + + /** + * @return \DateTime $dateStart + */ + public function getDateStart() + { + return $this->dateStart; + } + + /** + * @param \DateTime $dateStart + */ + public function setDateStart(\DateTime $dateStart) + { + $this->dateStart = $dateStart; + } + + /** + * @return \DateTime $dateEnd + */ + public function getDateEnd() + { + return $this->dateEnd; + } + + /** + * @param \DateTime $dateEnd + */ + public function setDateEnd(\DateTime $dateEnd) + { + $this->dateEnd = $dateEnd; + } + + /** + * @return int + */ + public function getNights() + { + return $this->nights; + } + + /** + * @param int $nights + */ + public function setNights($nights) + { + $this->nights = $nights; + } + + /** + * @return string + */ + public function getBoard() + { + return $this->board; + } + + /** + * @param string $board + */ + public function setBoard($board) + { + $this->board = $board; + } + + /** + * @return string + */ + public function getBoardCode() + { + return $this->boardCode; + } + + /** + * @param string $boardCode + */ + public function setBoardCode(string $boardCode) + { + $this->boardCode = $boardCode; + } + + /** + * @return int + */ + public function getBoardBusProId() + { + return $this->boardBusProId; + } + + /** + * @param int $boardBusProId + */ + public function setBoardBusProId(int $boardBusProId) + { + $this->boardBusProId = $boardBusProId; + } + + /** + * @return bool $busIncluded + */ + public function getBusIncluded() + { + return $this->busIncluded; + } + + /** + * @param bool $busIncluded + */ + public function setBusIncluded($busIncluded) + { + $this->busIncluded = $busIncluded; + } + + /** + * @return bool + */ + public function getSkipassIncluded() + { + return $this->skipassIncluded; + } + + /** + * @param bool $skipassIncluded + */ + public function setSkipassIncluded($skipassIncluded) + { + $this->skipassIncluded = $skipassIncluded; + } + + /** + * @return bool + */ + public function getBusAvailable() + { + return $this->busAvailable; + } + + /** + * @param bool $busAvailable + */ + public function setBusAvailable($busAvailable) + { + $this->busAvailable = $busAvailable; + } + + /** + * @return int + */ + public function getBusPrice() + { + return $this->busPrice; + } + + /** + * @param int $busPrice + */ + public function setBusPrice($busPrice) + { + $this->busPrice = $busPrice; + } + + /** + * @return array $servicesIncluded + */ + public function getServicesIncluded() + { + return unserialize($this->servicesIncluded); + } + + /** + * @param array $servicesIncluded + */ + public function setServicesIncluded(array $servicesIncluded) + { + $this->servicesIncluded = serialize($servicesIncluded); + } + + /** + * @return array $servicesGeneral + */ + public function getServicesGeneral() + { + return unserialize($this->servicesGeneral); + } + + /** + * @param array $servicesGeneral + */ + public function setServicesGeneral(array $servicesGeneral) + { + $this->servicesGeneral = serialize($servicesGeneral); + } + + /** + * @return int + */ + public function getDiscount() { + return $this->discount; + } + + /** + * @param int $discount + */ + public function setDiscount($discount) { + $this->discount = $discount; + } + + /** + * @return int + */ + public function getMinPrice() + { + return $this->minPrice; + } + + /** + * @param int $minPrice + */ + public function setMinPrice($minPrice) + { + $this->minPrice = $minPrice; + } + + /** + * @return int + */ + public function getPseudoPrice() + { + return $this->pseudoPrice; + } + + /** + * @param int $pseudoPrice + */ + public function setPseudoPrice($pseudoPrice) + { + $this->pseudoPrice = $pseudoPrice; + } + + /** + * @return int + */ + public function getAvailable() + { + return $this->available; + } + + /** + * @param int $available + */ + public function setAvailable($available) + { + $this->available = $available; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Fact.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Fact.php new file mode 100644 index 00000000..79207cd1 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Fact.php @@ -0,0 +1,96 @@ +, 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! + ***************************************************************/ + +class Fact extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * @var string + */ + protected $name = ''; + + /** + * @var string + */ + protected $keywords = ''; + + /** + * @var string + */ + protected $label = ''; + + /** + * @return string $name + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string $keywords + */ + public function getKeywords() + { + return $this->keywords; + } + + /** + * @param string $keywords + */ + public function setKeywords($keywords) + { + $this->keywords = $keywords; + } + + /** + * @return string + */ + public function getLabel() + { + return $this->label; + } + + /** + * @param string $label + */ + public function setLabel($label) + { + $this->label = $label; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Faq.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Faq.php new file mode 100644 index 00000000..ab8bd890 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Faq.php @@ -0,0 +1,75 @@ +, 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! + ***************************************************************/ + +class Faq extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * @var string + */ + protected $question = ''; + + /** + * @var string + */ + protected $answer = ''; + + /** + * @return string $question + */ + public function getQuestion() + { + return $this->question; + } + + /** + * @param string $question + */ + public function setQuestion($question) + { + $this->question = $question; + } + + /** + * @return string $answer + */ + public function getAnswer() + { + return $this->answer; + } + + /** + * @param string $answer + */ + public function setAnswer($answer) + { + $this->answer = $answer; + } + +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/FilterOptions.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/FilterOptions.php new file mode 100644 index 00000000..6e098ab0 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/FilterOptions.php @@ -0,0 +1,288 @@ +, 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! + ***************************************************************/ + +class FilterOptions implements \JsonSerializable +{ + /** + * @var array + */ + protected $priceRanges = []; + + /** + * @var array + */ + protected $destinations = []; + + /** + * @var array + */ + protected $concepts = []; + + /** + * @var array + */ + protected $pax = []; + + /** + * @var array + */ + protected $nights = []; + + /** + * @var array + */ + protected $hotelTypes = []; + + /** + * @var array + */ + protected $boardTypes = []; + + /** + * @var array + */ + protected $roomTypes = []; + + /** + * @var \DateTime + */ + protected $dateFrom; + + /** + * @var \DateTime + */ + protected $dateTo; + + /** + * @var bool + */ + protected $busAvailable; + + public function __construct() + { + $this->pax = range(1, 20); + } + + /** + * @return array + */ + public function getPriceRanges() + { + return $this->priceRanges; + } + + /** + * @param array $priceRanges + */ + public function setPriceRanges($priceRanges) + { + $this->priceRanges = $priceRanges; + } + + /** + * @return array + */ + public function getDestinations() + { + return $this->destinations; + } + + /** + * @param array $destinations + */ + public function setDestinations(array $destinations) + { + $this->destinations = $destinations; + } + + /** + * @return array + */ + public function getConcepts() + { + return $this->concepts; + } + + /** + * @param array $concepts + */ + public function setConcepts($concepts) + { + $this->concepts = $concepts; + } + + /** + * @return array + */ + public function getPax() + { + return $this->pax; + } + + /** + * @param array $pax + */ + public function setPax($pax) + { + $this->pax = $pax; + } + + /** + * @return array + */ + public function getNights() + { + return $this->nights; + } + + /** + * @param array $nights + */ + public function setNights($nights) + { + $this->nights = $nights; + } + + /** + * @return array + */ + public function getHotelTypes() + { + return $this->hotelTypes; + } + + /** + * @param array $hotelTypes + */ + public function setHotelTypes($hotelTypes) + { + $this->hotelTypes = $hotelTypes; + } + + /** + * @return array + */ + public function getBoardTypes() + { + return $this->boardTypes; + } + + /** + * @param array $boardTypes + */ + public function setBoardTypes($boardTypes) + { + $this->boardTypes = $boardTypes; + } + + /** + * @return array + */ + public function getRoomTypes() + { + return $this->roomTypes; + } + + /** + * @param array $roomTypes + */ + public function setRoomTypes($roomTypes) + { + $this->roomTypes = $roomTypes; + } + + /** + * @return \DateTime + */ + public function getDateFrom() + { + return $this->dateFrom; + } + + /** + * @param \DateTime $dateFrom + */ + public function setDateFrom($dateFrom) + { + $this->dateFrom = $dateFrom; + } + + /** + * @return \DateTime + */ + public function getDateTo() + { + return $this->dateTo; + } + + /** + * @param \DateTime $dateTo + */ + public function setDateTo($dateTo) + { + $this->dateTo = $dateTo; + } + + /** + * @return bool + */ + public function getBusAvailable() + { + return $this->busAvailable; + } + + /** + * @param bool $busAvailable + */ + public function setBusAvailable($busAvailable) + { + $this->busAvailable = $busAvailable; + } + + /** + * @return array + */ + public function jsonSerialize() + { + return [ + 'priceRanges' => $this->getPriceRanges(), + 'destinations' => $this->getDestinations(), + 'concepts' => $this->getConcepts(), + 'pax' => $this->getPax(), + 'nights' => $this->getNights(), + 'hotelTypes' => $this->getHotelTypes(), + 'boardTypes' => $this->getBoardTypes(), + 'roomTypes' => $this->getRoomTypes(), + 'dateFrom' => ($this->getDateFrom() !== null) ? $this->getDateFrom()->format('Y-m-d') : null, + 'dateTo' => ($this->getDateTo() !== null) ? $this->getDateTo()->format('Y-m-d') : null, + 'busAvailable' => $this->getBusAvailable(), + ]; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/FilterSettings.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/FilterSettings.php new file mode 100644 index 00000000..0a55c339 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/FilterSettings.php @@ -0,0 +1,551 @@ +, 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! + ***************************************************************/ + +class FilterSettings implements \JsonSerializable +{ + + const DESTINATION_TYPE_COUNTRY = 'country'; + const DESTINATION_TYPE_REGION = 'region'; + const DESTINATION_TYPE_CITY = 'city'; + const DESTINATION_TYPE_HOTEL = 'hotel'; + const DESTINATION_TYPE_PRODUCT = 'product'; + + /** + * @var array + */ + public static $priceRanges = [ + 1 => [ 1, 200 ], + 2 => [ 200, 300 ], + 3 => [ 300, 400 ], + 4 => [ 400, 500 ], + 5 => [ 500, 600 ], + 6 => [ 600, 999 ], + ]; + + /** + * @var int + */ + protected $priceRange = 0; + + /** + * @var string + */ + protected $destinationName = ''; + + /** + * @var int + */ + protected $destinationUid = 0; + + /** + * @var string + */ + protected $destinationType = ''; + + /** + * @var array + */ + protected $countryUids = []; + + /** + * @var array + */ + protected $regionUids = []; + + /** + * @var array + */ + protected $cityUids = []; + + /** + * @var array + */ + protected $conceptUids = []; + + /** + * @var int + */ + protected $hotelUid = 0; + + /** + * @var int + */ + protected $productUid = 0; + + /** + * @var \DateTime + */ + protected $dateFrom; + + /** + * @var \DateTime + */ + protected $dateTo; + + /** + * @var int + */ + protected $nights = 0; + + /** + * @var int + */ + protected $pax = 1; + + /** + * @var array + */ + protected $boardTypes = []; + + /** + * @var array + */ + protected $hotelTypes = []; + + /** + * @var array + */ + protected $roomTypes = []; + + /** + * @var bool + */ + protected $bus = false; + + /** + * @param \DateTime $dateFrom + * @param \DateTime $dateTo + */ + public function __construct(\DateTime $dateFrom = null, \DateTime $dateTo = null) + { + if ($dateFrom !== null) { + $this->setDateFrom($dateFrom); + } else { + // Disabling the minimum date shouldn't be a problem since + // imported dates are never in the past + //$this->setDateFrom(new \DateTime('now')); + } + + if ($dateTo !== null) { + $this->setDateTo($dateTo); + } + } + + /** + * @param SearchParams $searchParams + * @return FilterSettings + */ + public static function fromSearchParams(SearchParams $searchParams) + { + $filterSettings = new self; + $filterSettings->setDateFrom($searchParams->getDateFrom()); + $filterSettings->setDateTo($searchParams->getDateTo()); + if ($searchParams->getDestinationType() && $searchParams->getDestinationUid()) { + switch ($searchParams->getDestinationType()) { + case self::DESTINATION_TYPE_COUNTRY: + $filterSettings->setCountryUids([$searchParams->getDestinationUid()]); + break; + case self::DESTINATION_TYPE_REGION: + $filterSettings->setRegionUids([$searchParams->getDestinationUid()]); + break; + } + } + if ($searchParams->getConceptUid()) { + $filterSettings->setConceptUids([ $searchParams->getConceptUid() ]); + } + $filterSettings->setPriceRange($searchParams->getPriceRange()); + $filterSettings->setPax($searchParams->getPax()); + $filterSettings->setNights($searchParams->getNights()); + return $filterSettings; + } + + /** + * @param array $searchParams + * @return FilterSettings + */ + public static function fromStaticSearchParams(array $searchParams) + { + $filterSettings = new self; + if (!empty($searchParams['country'])) { + $filterSettings->setCountryUids([$searchParams['country']]); + } + if (!empty($searchParams['region'])) { + $filterSettings->setRegionUids([$searchParams['region']]); + } + if (!empty($searchParams['concept'])) { + $filterSettings->setConceptUids([$searchParams['concept']]); + } + if (!empty($searchParams['hotel'])) { + $filterSettings->setHotelUid($searchParams['hotel']); + } + if (!empty($searchParams['product'])) { + $filterSettings->setProductUid($searchParams['product']); + } + if (!empty($searchParams['hotel_types'])) { + $hotelTypes = explode(',', $searchParams['hotel_types']); + $filterSettings->setHotelTypes($hotelTypes); + } + if (!empty($searchParams['bus'])) { + $filterSettings->setBus((bool) $searchParams['bus']); + } + if (!empty($searchParams['date_from']) && $searchParams['date_from'] !== '0000-00-00') { + $dateFrom = new \DateTime($searchParams['date_from']); + $filterSettings->setDateFrom($dateFrom); + } + if (!empty($searchParams['date_to']) && $searchParams['date_to'] !== '0000-00-00') { + $dateTo = new \DateTime($searchParams['date_to']); + $filterSettings->setDateTo($dateTo); + } + + return $filterSettings; + } + + /** + * @return int + */ + public function getPriceRange() + { + return $this->priceRange; + } + + /** + * @param int $priceRange + */ + public function setPriceRange($priceRange) + { + $this->priceRange = $priceRange; + } + + /** + * @return string + */ + public function getDestinationName() + { + return $this->destinationName; + } + + /** + * @param string $destinationName + */ + public function setDestinationName($destinationName) + { + $this->destinationName = $destinationName; + } + + /** + * @return int + */ + public function getDestinationUid() + { + return $this->destinationUid; + } + + /** + * @param int $destinationUid + */ + public function setDestinationUid($destinationUid) + { + $this->destinationUid = (int) $destinationUid; + } + + /** + * @return string + */ + public function getDestinationType() + { + return $this->destinationType; + } + + /** + * @param string $destinationType + */ + public function setDestinationType($destinationType) + { + $this->destinationType = $destinationType; + } + + /** + * @return array + */ + public function getCountryUids() + { + return $this->countryUids; + } + + /** + * @param array $countryUids + */ + public function setCountryUids(array $countryUids) + { + $this->countryUids = $countryUids; + } + + /** + * @return array + */ + public function getRegionUids() + { + return $this->regionUids; + } + + /** + * @param array $regionUids + */ + public function setRegionUids(array $regionUids) + { + $this->regionUids = $regionUids; + } + + /** + * @return array + */ + public function getCityUids() + { + return $this->cityUids; + } + + /** + * @param array $cityUids + */ + public function setCityUids($cityUids) + { + $this->cityUids = $cityUids; + } + + /** + * @return array + */ + public function getConceptUids() + { + return $this->conceptUids; + } + + /** + * @param array $conceptUids + */ + public function setConceptUids($conceptUids) + { + $this->conceptUids = $conceptUids; + } + + /** + * @return int + */ + public function getHotelUid() + { + return $this->hotelUid; + } + + /** + * @param int $hotelUid + */ + public function setHotelUid($hotelUid) + { + $this->hotelUid = (int) $hotelUid; + } + + /** + * @return int + */ + public function getProductUid() + { + return $this->productUid; + } + + /** + * @param int $productUid + */ + public function setProductUid($productUid) + { + $this->productUid = (int) $productUid; + } + + /** + * @return \DateTime + */ + public function getDateFrom() + { + return $this->dateFrom; + } + + /** + * @param \DateTime $dateFrom + */ + public function setDateFrom(\DateTime $dateFrom = null) + { + $this->dateFrom = $dateFrom; + } + + /** + * @return \DateTime + */ + public function getDateTo() + { + return $this->dateTo; + } + + /** + * @param \DateTime $dateTo + */ + public function setDateTo(\DateTime $dateTo = null) + { + if ($this->dateFrom !== null && $dateTo !== null && $dateTo < $this->dateFrom) { + $dateTo = $this->dateFrom; + } + $this->dateTo = $dateTo; + } + + /** + * @return int + */ + public function getNights() { + return $this->nights; + } + + /** + * @param int $nights + */ + public function setNights($nights) { + $this->nights = (int) $nights; + } + + /** + * @return int + */ + public function getPax() { + return $this->pax; + } + + /** + * @param int $pax + */ + public function setPax($pax) { + $this->pax = (int) $pax; + } + + /** + * @return array + */ + public function getBoardTypes() + { + return $this->boardTypes; + } + + /** + * @param array $boardTypes + */ + public function setBoardTypes($boardTypes) + { + $this->boardTypes = $boardTypes; + } + + /** + * @return array + */ + public function getHotelTypes() + { + return $this->hotelTypes; + } + + /** + * @param array $hotelTypes + */ + public function setHotelTypes($hotelTypes) + { + $this->hotelTypes = $hotelTypes; + } + + /** + * @return array + */ + public function getRoomTypes() + { + return $this->roomTypes; + } + + /** + * @param array $roomTypes + */ + public function setRoomTypes($roomTypes) + { + $this->roomTypes = $roomTypes; + } + + /** + * @return bool + */ + public function getBus() + { + return $this->bus; + } + + /** + * @param bool $bus + */ + public function setBus($bus) + { + $this->bus = (bool) $bus; + } + + /** + * @return bool + */ + public function getDestinationSelected() + { + return $this->destinationType !== ''; + } + + /** + * @return array + */ + public function jsonSerialize() + { + return [ + 'priceRange' => $this->getPriceRange(), + 'destinationName' => $this->getDestinationName(), + 'destinationUid' => $this->getDestinationUid(), + 'destinationType' => $this->getDestinationType(), + 'countryUids' => $this->getCountryUids(), + 'regionUids' => $this->getRegionUids(), + 'cityUids' => $this->getCityUids(), + 'conceptUids' => $this->getConceptUids(), + 'hotelUid' => $this->getHotelUid(), + 'productUid' => $this->getProductUid(), + 'nights' => $this->getNights(), + 'pax' => $this->getPax(), + 'boardTypes' => $this->getBoardTypes(), + 'hotelTypes' => $this->getHotelTypes(), + 'roomTypes' => $this->getRoomTypes(), + 'dateFrom' => ($this->getDateFrom() !== null) ? $this->getDateFrom()->format('Y-m-d') : null, + 'dateTo' => ($this->getDateTo() !== null) ? $this->getDateTo()->format('Y-m-d') : null, + 'bus' => $this->getBus(), + ]; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Hotel.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Hotel.php new file mode 100644 index 00000000..c3ecd441 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Hotel.php @@ -0,0 +1,794 @@ +, 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! + ***************************************************************/ + +class Hotel extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity implements TeaserInterface +{ + + const CATEGORY_STANDARD = 1; + const CATEGORY_COMFORT = 2; + const CATEGORY_DELUXE = 3; + const CATEGORY_SUPER_DELUXE = 4; + + const TYPE_HOLIDAY_FLAT = 1; + const TYPE_SPORTS_CLUB = 2; + const TYPE_APPARTMENT = 3; + const TYPE_GUESTHOUSE = 4; + const TYPE_PENSION = 5; + + /** + * @var array + */ + public static $categoryLabels = [ + self::CATEGORY_STANDARD => 'Standard', + self::CATEGORY_COMFORT => 'Komfort', + self::CATEGORY_DELUXE => 'Deluxe', + self::CATEGORY_SUPER_DELUXE => 'Superdeluxe', + ]; + + /** + * @var bool + */ + protected $hidden = true; + + /** + * @var bool + */ + protected $earlybird = false; + + /** + * @var bool + */ + protected $lowContingent = false; + + /** + * @var int + */ + protected $detailPage = 0; + + /** + * @var string + */ + protected $name = ''; + + /** + * @var string + */ + protected $keywords = ''; + + /** + * @var string + */ + protected $headline = ''; + + /** + * @var string + */ + protected $teaser = ''; + + /** + * @var string + */ + protected $headerTitle = ''; + + /** + * @var string + */ + protected $headerSubtitle = ''; + + /** + * @var string + */ + protected $description = ''; + + /** + * @var string + */ + protected $features = ''; + + /** + * @var string + */ + protected $roomTypes = ''; + + /** + * @var string + */ + protected $additionalInformation = ''; + + /** + * @var float + */ + protected $latitude = 0.0; + + /** + * @var float + */ + protected $longitude = 0.0; + + /** + * @var string + */ + protected $address = ''; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + protected $images; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + protected $teaserImages; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + protected $headerImages; + + /** + * @var string + */ + protected $code = ''; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\MatchCode> + * @lazy + */ + protected $additionalCodes; + + /** + * @var string + */ + protected $type = ''; + + /** + * @var int + */ + protected $category = self::CATEGORY_STANDARD; + + /** + * @var \EP\EpProducts\Domain\Model\Country + */ + protected $country; + + /** + * @var \EP\EpProducts\Domain\Model\Region + */ + protected $region; + + /** + * @var \EP\EpProducts\Domain\Model\City + */ + protected $city; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Teammember> + * @lazy + */ + protected $teamer; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Product> + * @lazy + */ + protected $products; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> + */ + protected $facts; + + public function __construct() + { + $this->initStorageObjects(); + } + + protected function initStorageObjects() + { + $this->images = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->teaserImages = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->headerImages = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->teamer = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->products = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->facts = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->additionalCodes = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + } + + /** + * @return bool + */ + public function isHidden() + { + return $this->hidden; + } + + /** + * @param bool $hidden + */ + public function setHidden($hidden) + { + $this->hidden = $hidden; + } + + /** + * @return bool + */ + public function isEarlybird() + { + return $this->earlybird; + } + + /** + * @param bool $earlybird + */ + public function setEarlybird($earlybird) + { + $this->earlybird = $earlybird; + } + + /** + * @return bool + */ + public function isLowContingent() + { + return $this->lowContingent; + } + + /** + * @param bool $lowContingent + */ + public function setLowContingent($lowContingent) + { + $this->lowContingent = $lowContingent; + } + + /** + * @return int + */ + public function getDetailPage() + { + return $this->detailPage; + } + + /** + * @param int $detailPage + */ + public function setDetailPage($detailPage) + { + $this->detailPage = $detailPage; + } + + /** + * @return string $name + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getKeywords() + { + return $this->keywords; + } + + /** + * @param string $keywords + */ + public function setKeywords($keywords) + { + $this->keywords = $keywords; + } + + /** + * @return string + */ + public function getHeadline() { + return $this->headline; + } + + /** + * @param string $headline + */ + public function setHeadline($headline) { + $this->headline = $headline; + } + + /** + * @return string + */ + public function getTeaser() { + return $this->teaser; + } + + /** + * @param string $teaser + */ + public function setTeaser($teaser) { + $this->teaser = $teaser; + } + + /** + * @return string + */ + public function getHeaderTitle() + { + return $this->headerTitle; + } + + /** + * @param string $headerTitle + */ + public function setHeaderTitle($headerTitle) + { + $this->headerTitle = $headerTitle; + } + + /** + * @return string + */ + public function getHeaderSubtitle() + { + return $this->headerSubtitle; + } + + /** + * @param string $headerSubtitle + */ + public function setHeaderSubtitle($headerSubtitle) + { + $this->headerSubtitle = $headerSubtitle; + } + + /** + * @return string $description + */ + public function getDescription() + { + return $this->description; + } + + /** + * @param string $description + */ + public function setDescription($description) + { + $this->description = $description; + } + + /** + * @return string + */ + public function getFeatures() { + return $this->features; + } + + /** + * @param string $features + */ + public function setFeatures($features) { + $this->features = $features; + } + + /** + * @return string + */ + public function getRoomTypes() { + return $this->roomTypes; + } + + /** + * @param string $roomTypes + */ + public function setRoomTypes($roomTypes) { + $this->roomTypes = $roomTypes; + } + + /** + * @return string + */ + public function getAdditionalInformation() { + return $this->additionalInformation; + } + + /** + * @param string $additionalInformation + */ + public function setAdditionalInformation($additionalInformation) { + $this->additionalInformation = $additionalInformation; + } + + /** + * @return float + */ + public function getLatitude() + { + return $this->latitude; + } + + /** + * @param float $latitude + */ + public function setLatitude($latitude) + { + $this->latitude = $latitude; + } + + /** + * @return float + */ + public function getLongitude() + { + return $this->longitude; + } + + /** + * @param float $longitude + */ + public function setLongitude($longitude) + { + $this->longitude = $longitude; + } + + /** + * @return string + */ + public function getAddress() + { + return $this->address; + } + + /** + * @param string $address + */ + public function setAddress($address) + { + $this->address = $address; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $images + */ + public function getImages() + { + return $this->images; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $images + */ + public function setImages(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $images) + { + $this->images = $images; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getTeaserImages() + { + return $this->teaserImages; + } + + /** + * @return null|\TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getTeaserImage() + { + if ($this->teaserImages->count() === 0) { + return null; + } + + return reset($this->teaserImages->toArray()); + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $teaserImages + */ + public function setTeaserImages($teaserImages) + { + $this->teaserImages = $teaserImages; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getHeaderImages() + { + $headerImages = $this->headerImages; + + if ($headerImages->count() === 0) { + $headerImages = $this->getCity()->getHeaderImages(); + } + + return $headerImages; + } + + /** + * @return null|\TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getHeaderImage() + { + if ($this->headerImages->count() === 0) { + return null; + } + + return reset($this->headerImages->toArray()); + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $headerImages + */ + public function setHeaderImages($headerImages) + { + $this->headerImages = $headerImages; + } + + /** + * @return string $code + */ + public function getCode() + { + return $this->code; + } + + /** + * @param string $code + */ + public function setCode($code) + { + $this->code = $code; + } + + /** + * @param \EP\EpProducts\Domain\Model\MatchCode $code + */ + public function addAdditionalCode(\EP\EpProducts\Domain\Model\MatchCode $code) + { + $this->additionalCodes->attach($code); + } + + /** + * @param \EP\EpProducts\Domain\Model\MatchCode $codeToRemove + */ + public function removeAdditionalCodes(\EP\EpProducts\Domain\Model\MatchCode $codeToRemove) + { + $this->additionalCodes->detach($codeToRemove); + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\MatchCode> $codes + */ + public function getAdditionalCodes() + { + return $this->additionalCodes; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\MatchCode> $codes + */ + public function setAdditionalCodes(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $codes) + { + $this->additionalCodes = $codes; + } + + /** + * @return string $type + */ + public function getType() + { + return $this->type; + } + + /** + * @param string $type + */ + public function setType($type) + { + $this->type = $type; + } + + /** + * @return int $comfort + */ + public function getCategory() + { + return $this->category; + } + + /** + * @param int $category + */ + public function setCategory($category) + { + $this->category = $category; + } + + /** + * @return \EP\EpProducts\Domain\Model\Country $country + */ + public function getCountry() + { + return $this->country; + } + + /** + * @param \EP\EpProducts\Domain\Model\Country $country + */ + public function setCountry(\EP\EpProducts\Domain\Model\Country $country) + { + $this->country = $country; + } + + /** + * @return \EP\EpProducts\Domain\Model\Region $region + */ + public function getRegion() + { + return $this->region; + } + + /** + * @param \EP\EpProducts\Domain\Model\Region $region + */ + public function setRegion(\EP\EpProducts\Domain\Model\Region $region) + { + $this->region = $region; + } + + /** + * @return \EP\EpProducts\Domain\Model\City $city + */ + public function getCity() + { + return $this->city; + } + + /** + * @param \EP\EpProducts\Domain\Model\City $city + */ + public function setCity(\EP\EpProducts\Domain\Model\City $city) + { + $this->city = $city; + } + + /** + * @param \EP\EpProducts\Domain\Model\Teammember $teamer + */ + public function addTeamer(\EP\EpProducts\Domain\Model\Teammember $teamer) + { + $this->teamer->attach($teamer); + } + + /** + * @param \EP\EpProducts\Domain\Model\Teammember $teamerToRemove The Teammember to be removed + */ + public function removeTeamer(\EP\EpProducts\Domain\Model\Teammember $teamerToRemove) + { + $this->teamer->detach($teamerToRemove); + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Teammember> $teamer + */ + public function getTeamer() + { + return $this->teamer; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Teammember> $teamer + */ + public function setTeamer(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $teamer) + { + $this->teamer = $teamer; + } + + /** + * @param \EP\EpProducts\Domain\Model\Product $product + */ + public function addProduct(\EP\EpProducts\Domain\Model\Product $product) + { + $this->products->attach($product); + } + + /** + * @param \EP\EpProducts\Domain\Model\Product $product + */ + public function removeProduct(\EP\EpProducts\Domain\Model\Product $product) + { + $this->products->detach($product); + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Product> + */ + public function getProducts() + { + return $this->products; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Product> $products + */ + public function setProducts(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $products) + { + $this->products = $products; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Room> $rooms + */ + public function setRooms($rooms) { + $this->rooms = $rooms; + } + + /** + * @param \EP\EpProducts\Domain\Model\Fact $fact + */ + public function addFact(\EP\EpProducts\Domain\Model\Fact $fact) + { + $this->facts->attach($fact); + } + + /** + * @param \EP\EpProducts\Domain\Model\Fact $factToRemove + */ + public function removeFact(\EP\EpProducts\Domain\Model\Fact $factToRemove) + { + $this->facts->detach($factToRemove); + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> + */ + public function getFacts() + { + return $this->facts; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> $facts + */ + public function setFacts(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $facts) + { + $this->facts = $facts; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Journey.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Journey.php new file mode 100644 index 00000000..cc54f3b6 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Journey.php @@ -0,0 +1,117 @@ +, 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! + ***************************************************************/ + +class Journey extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * @var string + */ + protected $name = ''; + + /** + * @var string + */ + protected $byCar = ''; + + /** + * @var string + */ + protected $byBus; + + /** + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $image; + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getByCar() + { + return $this->byCar; + } + + /** + * @param string $byCar + */ + public function setByCar($byCar) + { + $this->byCar = $byCar; + } + + /** + * @return string + */ + public function getByBus() + { + return $this->byBus; + } + + /** + * @param string $byBus + */ + public function setByBus($byBus) + { + $this->byBus = $byBus; + } + + /** + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + public function getImage() + { + return $this->image; + } + + /** + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $image + */ + public function setImage($image) + { + $this->image = $image; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/MatchCode.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/MatchCode.php new file mode 100644 index 00000000..d0d06ea3 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/MatchCode.php @@ -0,0 +1,54 @@ +, 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! + ***************************************************************/ + +class MatchCode extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * @var string + */ + protected $code = ''; + + /** + * @return string + */ + public function getCode() + { + return $this->code; + } + + /** + * @param string $code + */ + public function setCode($code) + { + $this->code = $code; + } + +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Officetip.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Officetip.php new file mode 100644 index 00000000..fa003639 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Officetip.php @@ -0,0 +1,96 @@ +, 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! + ***************************************************************/ + +class Officetip extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * @var string + */ + protected $label = ''; + + /** + * @var string + */ + protected $text = ''; + + /** + * @var \EP\EpProducts\Domain\Model\Teammember + */ + protected $author; + + /** + * @return string + */ + public function getLabel() + { + return $this->label; + } + + /** + * @param string $label + */ + public function setLabel($label) + { + $this->label = $label; + } + + /** + * @return string $text + */ + public function getText() + { + return $this->text; + } + + /** + * @param string $text + */ + public function setText($text) + { + $this->text = $text; + } + + /** + * @return Teammember $author + */ + public function getAuthor() + { + return $this->author; + } + + /** + * @param Teammember $author + */ + public function setAuthor(Teammember $author) + { + $this->author = $author; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Product.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Product.php new file mode 100644 index 00000000..1509dad1 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Product.php @@ -0,0 +1,913 @@ +, 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! + ***************************************************************/ + +class Product extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity implements TeaserInterface +{ + + /** + * @var bool + */ + protected $searchable = true; + + /** + * @var bool + */ + protected $bookable = true; + + /** + * @var int + */ + protected $detailPage = 0; + + /** + * @var string + */ + protected $name = ''; + + /** + * @var string + */ + protected $nameInternal = ''; + + /** + * @var string + */ + protected $keywords = ''; + + /** + * @var string + */ + protected $headline = ''; + + /** + * @var int + */ + protected $busProId = 0; + + /** + * @var string + */ + protected $code = ''; + + /** + * @var string + */ + protected $feature = ''; + + /** + * @var string + */ + protected $teaser = ''; + + /** + * @var string + */ + protected $teaserLong = ''; + + /** + * @var string + */ + protected $headerTitle = ''; + + /** + * @var string + */ + protected $headerSubtitle = ''; + + /** + * @var string + */ + protected $conceptDescription = ''; + + /** + * @var string + */ + protected $boardDescription = ''; + + /** + * @var string + */ + protected $additionalServices = ''; + + /** + * @var string + */ + protected $programmeDescription = ''; + + /** + * @var string + */ + protected $skiPassDescription = ''; + + /** + * @var float + */ + protected $ratingAverage = 0; + + /** + * @var int + */ + protected $ratingVotesCount = 0; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + protected $images; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + protected $teaserImages; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + protected $headerImages; + + /** + * @var \EP\EpProducts\Domain\Model\Concept + * @lazy + */ + protected $concept; + + /** + * @var \EP\EpProducts\Domain\Model\Country + * @lazy + */ + protected $country; + + /** + * @var \EP\EpProducts\Domain\Model\Region + * @lazy + */ + protected $region; + + /** + * @var \EP\EpProducts\Domain\Model\City + * @lazy + */ + protected $city; + + /** + * @var \EP\EpProducts\Domain\Model\Journey + * @lazy + */ + protected $journey; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> + * @lazy + */ + protected $facts; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Hotel> + * @lazy + */ + protected $hotels; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Faq> + * @lazy + */ + protected $faqs; + + /** + * @var \EP\EpProducts\Domain\Model\Officetip + */ + protected $officetip; + + /** + * @var \EP\EpProducts\Domain\Model\Hotel + */ + protected $calendarHotel; + + /** + * @var \EP\EpProducts\Domain\Model\Product + * @lazy + */ + protected $altProduct; + + /** + * @var string + */ + protected $altLabel; + + /** + * @var string + */ + protected $video = ''; + + /** + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $banner; + + /** + * @var \EP\EpProducts\Domain\Model\Badge + */ + protected $badge; + + public function __construct() + { + $this->initStorageObjects(); + } + + protected function initStorageObjects() + { + $this->images = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->teaserImages = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->headerImages = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->facts = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->hotels = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->faqs = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + } + + /** + * @return bool + */ + public function getSearchable() + { + return $this->searchable; + } + + /** + * @param bool $searchable + */ + public function setSearchable($searchable) + { + $this->searchable = (bool) $searchable; + } + + /** + * @return boolean + */ + public function getBookable() + { + return $this->bookable; + } + + /** + * @param boolean $bookable + */ + public function setBookable($bookable) + { + $this->bookable = (bool) $bookable; + } + + /** + * @return int + */ + public function getDetailPage() { + return $this->detailPage; + } + + /** + * @param int $detailPage + */ + public function setDetailPage($detailPage) { + $this->detailPage = $detailPage; + } + + /** + * @return string $name + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getNameInternal() + { + return $this->nameInternal; + } + + /** + * @param string $nameInternal + */ + public function setNameInternal($nameInternal) + { + $this->nameInternal = $nameInternal; + } + + /** + * @return string + */ + public function getKeywords() + { + return $this->keywords; + } + + /** + * @param string $keywords + */ + public function setKeywords($keywords) + { + $this->keywords = $keywords; + } + + /** + * @return string + */ + public function getHeadline() { + return $this->headline; + } + + /** + * @param string $headline + */ + public function setHeadline($headline) { + $this->headline = $headline; + } + + /** + * @return int + */ + public function getBusProId() + { + return $this->busProId; + } + + /** + * @param int $busProId + */ + public function setBusProId($busProId) + { + $this->busProId = $busProId; + } + + /** + * @return string $code + */ + public function getCode() + { + return $this->code; + } + + /** + * @param string $code + */ + public function setCode($code) + { + $this->code = $code; + } + + /** + * @return string + */ + public function getFeature() + { + return $this->feature; + } + + /** + * @param string $feature + */ + public function setFeature($feature) + { + $this->feature = $feature; + } + + /** + * @return string + */ + public function getTeaser() { + return $this->teaser; + } + + /** + * @param string $teaser + */ + public function setTeaser($teaser) { + $this->teaser = $teaser; + } + + /** + * @return string + */ + public function getTeaserLong() + { + return $this->teaserLong; + } + + /** + * @param string $teaserLong + */ + public function setTeaserLong($teaserLong) + { + $this->teaserLong = $teaserLong; + } + + /** + * @return string + */ + public function getHeaderTitle() + { + return $this->headerTitle; + } + + /** + * @param string $headerTitle + */ + public function setHeaderTitle($headerTitle) + { + $this->headerTitle = $headerTitle; + } + + /** + * @return string + */ + public function getHeaderSubtitle() + { + return $this->headerSubtitle; + } + + /** + * @param string $headerSubtitle + */ + public function setHeaderSubtitle($headerSubtitle) + { + $this->headerSubtitle = $headerSubtitle; + } + + /** + * @return string + */ + public function getConceptDescription() { + return $this->conceptDescription; + } + + /** + * @param string $conceptDescription + */ + public function setConceptDescription($conceptDescription) { + $this->conceptDescription = $conceptDescription; + } + + /** + * @return string + */ + public function getBoardDescription() { + return $this->boardDescription; + } + + /** + * @param string $boardDescription + */ + public function setBoardDescription($boardDescription) { + $this->boardDescription = $boardDescription; + } + + /** + * @return string + */ + public function getAdditionalServices() { + return $this->additionalServices; + } + + /** + * @param string $additionalServices + */ + public function setAdditionalServices($additionalServices) { + $this->additionalServices = $additionalServices; + } + + /** + * @return string + */ + public function getProgrammeDescription() { + return $this->programmeDescription; + } + + /** + * @param string $programmeDescription + */ + public function setProgrammeDescription($programmeDescription) { + $this->programmeDescription = $programmeDescription; + } + + /** + * @return string + */ + public function getSkiPassDescription() { + return $this->skiPassDescription; + } + + /** + * @param string $skiPassDescription + */ + public function setSkiPassDescription($skiPassDescription) { + $this->skiPassDescription = $skiPassDescription; + } + + /** + * @return float + */ + public function getRatingAverage() + { + return $this->ratingAverage; + } + + /** + * @param float $ratingAverage + */ + public function setRatingAverage($ratingAverage) + { + $this->ratingAverage = $ratingAverage; + } + + /** + * @return int + */ + public function getRatingVotesCount() + { + return $this->ratingVotesCount; + } + + /** + * @param int $ratingVotesCount + */ + public function setRatingVotesCount($ratingVotesCount) + { + $this->ratingVotesCount = $ratingVotesCount; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference $images> + */ + public function getImages() + { + return $this->images; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> $images + */ + public function setImages(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $images) + { + $this->images = $images; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getTeaserImages() + { + return $this->teaserImages; + } + + /** + * @return null|\TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getTeaserImage() + { + if ($this->teaserImages->count() === 0) { + return null; + } + + return reset($this->teaserImages->toArray()); + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $teaserImages + */ + public function setTeaserImages($teaserImages) + { + $this->teaserImages = $teaserImages; + } + + /** + * Returns all header images with fallback to parent + * region in case none are assigned. + * + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getHeaderImages() + { + $headerImages = $this->headerImages; + + if ($headerImages->count() === 0) { + $headerImages = $this->getRegion()->getHeaderImages(); + } + + return $headerImages; + } + + /** + * Returns a single header image with fallback to parent + * region in case none is assigned. + * + * @return null|\TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + public function getHeaderImage() + { + $headerImages = $this->getHeaderImages(); + + if ($headerImages->count() === 0) { + return null; + } + + return reset($headerImages->toArray()); + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $headerImages + */ + public function setHeaderImages($headerImages) + { + $this->headerImages = $headerImages; + } + + /** + * @return \EP\EpProducts\Domain\Model\Concept $concept + */ + public function getConcept() + { + return $this->concept; + } + + /** + * @param \EP\EpProducts\Domain\Model\Concept $concept + */ + public function setConcepts(\EP\EpProducts\Domain\Model\Concept $concept) + { + $this->concept = $concept; + } + + /** + * @return \EP\EpProducts\Domain\Model\Country $country + */ + public function getCountry() + { + return $this->country; + } + + /** + * @param \EP\EpProducts\Domain\Model\Country $country + */ + public function setCountry(\EP\EpProducts\Domain\Model\Country $country) + { + $this->country = $country; + } + + /** + * @return \EP\EpProducts\Domain\Model\Region + */ + public function getRegion() + { + return $this->region; + } + + /** + * @param \EP\EpProducts\Domain\Model\Region $region + */ + public function setRegion(\EP\EpProducts\Domain\Model\Region $region) + { + $this->region = $region; + } + + /** + * @return \EP\EpProducts\Domain\Model\City + */ + public function getCity() + { + return $this->city; + } + + /** + * @param \EP\EpProducts\Domain\Model\City $city + */ + public function setCity(\EP\EpProducts\Domain\Model\City $city) + { + $this->city = $city; + } + + /** + * @return \EP\EpProducts\Domain\Model\Journey + */ + public function getJourney() + { + return $this->journey; + } + + /** + * @param \EP\EpProducts\Domain\Model\Journey $journey + */ + public function setJourney($journey) + { + $this->journey = $journey; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> $facts + */ + public function getFacts() + { + return $this->facts; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> $facts + */ + public function setFacts(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $facts) + { + $this->facts = $facts; + } + + /** + * @param \EP\EpProducts\Domain\Model\Hotel $hotel + */ + public function addHotel(\EP\EpProducts\Domain\Model\Hotel $hotel) + { + $this->hotels->attach($hotel); + } + + /** + * @param \EP\EpProducts\Domain\Model\Hotel $hotel + */ + public function removeHotel(\EP\EpProducts\Domain\Model\Hotel $hotel) + { + $this->hotels->detach($hotel); + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Hotel> $hotels + */ + public function getHotels() + { + return $this->hotels; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Hotel> $hotels + */ + public function setHotels(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $hotels) + { + $this->hotels = $hotels; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Faq> + */ + public function getFaqs() { + return $this->faqs; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Faq> $faq + */ + public function setFaqs(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $faqs) + { + $this->faqs = $faqs; + } + + /** + * @return Officetip + */ + public function getOfficetip() + { + return $this->officetip; + } + + /** + * @param Officetip $officetip + */ + public function setOfficetip($officetip) + { + $this->officetip = $officetip; + } + + /** + * @return Hotel + */ + public function getCalendarHotel() + { + return $this->calendarHotel; + } + + /** + * @param Hotel $calendarHotel + */ + public function setCalendarHotel($calendarHotel) + { + $this->calendarHotel = $calendarHotel; + } + + /** + * @return Product + */ + public function getAltProduct() + { + return $this->altProduct; + } + + /** + * @param Product $altProduct + */ + public function setAltProduct($altProduct) + { + $this->altProduct = $altProduct; + } + + /** + * @return string + */ + public function getAltLabel() + { + return $this->altLabel; + } + + /** + * @param string $altLabel + */ + public function setAltLabel($altLabel) + { + $this->altLabel = $altLabel; + } + + /** + * @return string + */ + public function getVideo() + { + return $this->video; + } + + /** + * @param string $video + */ + public function setVideo($video) + { + $this->video = $video; + } + + /** + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + public function getBanner() + { + return $this->banner; + } + + /** + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $banner + */ + public function setBanner($banner) + { + $this->banner = $banner; + } + + /** + * @return Badge + */ + public function getBadge() + { + return $this->badge; + } + + /** + * @param Badge $badge + */ + public function setBadge($badge) + { + $this->badge = $badge; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Region.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Region.php new file mode 100644 index 00000000..fa9e6d91 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Region.php @@ -0,0 +1,467 @@ +, 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! + ***************************************************************/ + +class Region extends AbstractDestination implements TeaserInterface +{ + + /** + * @var bool + */ + protected $excludeFromTeasergroups = false; + + /** + * @var string + */ + protected $skiArea = ''; + + /** + * @var string + */ + protected $skiAreaExtended = ''; + + /** + * @var string + */ + protected $skiPass = ''; + + /** + * @var string + */ + protected $news = ''; + + /** + * @var string + */ + protected $length = ''; + + /** + * @var string + */ + protected $height = ''; + + /** + * @var string + */ + protected $lifts = ''; + + /** + * @var string + */ + protected $feature = ''; + + /** + * @var \EP\EpProducts\Domain\Model\Country + */ + protected $country; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\City> + * @cascade remove + */ + protected $cities; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Product> + * @cascade remove + */ + protected $products; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> + */ + protected $facts; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Hotel> + * @cascade remove + */ + protected $hotels; + + /** + * @var \EP\EpProducts\Domain\Model\Snowreport + */ + protected $snowreport; + + /** + * @var \EP\EpProducts\Domain\Model\Webcam + */ + protected $webcam; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + protected $regionMaps; + + /** + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $awardImage; + + /** + * @var string + */ + protected $awardLink; + + /** + * @var string + */ + protected $awardLabel; + + protected function initStorageObjects() + { + parent::initStorageObjects(); + $this->cities = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->products = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->facts = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->hotels = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + $this->regionMaps = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage(); + } + + /** + * @return bool + */ + public function isExcludeFromTeasergroups() + { + return $this->excludeFromTeasergroups; + } + + /** + * @param bool $excludeFromTeasergroups + */ + public function setExcludeFromTeasergroups($excludeFromTeasergroups) + { + $this->excludeFromTeasergroups = (bool) $excludeFromTeasergroups; + } + + /** + * @return string + */ + public function getSkiArea() { + return $this->skiArea; + } + + /** + * @param string $skiArea + */ + public function setSkiArea($skiArea) { + $this->skiArea = $skiArea; + } + + /** + * @return string + */ + public function getSkiAreaExtended() + { + return $this->skiAreaExtended; + } + + /** + * @param string $skiAreaExtended + */ + public function setSkiAreaExtended($skiAreaExtended) + { + $this->skiAreaExtended = $skiAreaExtended; + } + + /** + * @return string + */ + public function getSkiPass() { + return $this->skiPass; + } + + /** + * @param string $skiPass + */ + public function setSkiPass($skiPass) { + $this->skiPass = $skiPass; + } + + /** + * @return string + */ + public function getNews() { + return $this->news; + } + + /** + * @param string $news + */ + public function setNews($news) { + $this->news = $news; + } + + /** + * @return string + */ + public function getLength() { + return $this->length; + } + + /** + * @param string $length + */ + public function setLength($length) { + $this->length = $length; + } + + /** + * @return string + */ + public function getHeight() { + return $this->height; + } + + /** + * @param string $height + */ + public function setHeight($height) { + $this->height = $height; + } + + /** + * @return string + */ + public function getLifts() { + return $this->lifts; + } + + /** + * @param string $lifts + */ + public function setLifts($lifts) { + $this->lifts = $lifts; + } + + /** + * @return string + */ + public function getFeature() + { + return $this->feature; + } + + /** + * @param string $feature + */ + public function setFeature($feature) + { + $this->feature = $feature; + } + + /** + * Returns all header images with fallback to parent + * country in case none are assigned. + * + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getHeaderImages() + { + $headerImages = $this->headerImages; + + if ($headerImages->count() === 0) { + $headerImages = $this->getCountry()->getHeaderImages(); + } + + return $headerImages; + } + + /** + * @return \EP\EpProducts\Domain\Model\Country $country + */ + public function getCountry() + { + return $this->country; + } + + /** + * @param \EP\EpProducts\Domain\Model\Country $country + */ + public function setCountry(\EP\EpProducts\Domain\Model\Country $country) + { + $this->country = $country; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getCities() { + return $this->cities; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $cities + */ + public function setCities($cities) { + $this->cities = $cities; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getProducts() { + return $this->products; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $products + */ + public function setProducts($products) { + $this->products = $products; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> $facts + */ + public function getFacts() + { + return $this->facts; + } + + /** + * Sets the facts + * + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Fact> $facts + */ + public function setFacts(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $facts) + { + $this->facts = $facts; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getHotels() { + return $this->hotels; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $hotels + */ + public function setHotels($hotels) { + $this->hotels = $hotels; + } + + /** + * @return Snowreport + */ + public function getSnowreport() + { + return $this->snowreport; + } + + /** + * @param Snowreport $snowreport + */ + public function setSnowreport($snowreport) + { + $this->snowreport = $snowreport; + } + + /** + * @return Webcam + */ + public function getWebcam() + { + return $this->webcam; + } + + /** + * @param Webcam $webcam + */ + public function setWebcam($webcam) + { + $this->webcam = $webcam; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + public function getRegionMaps() + { + return $this->regionMaps; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference> + */ + public function setRegionMaps($regionMaps) + { + $this->regionMaps = $regionMaps; + } + + /** + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + public function getAwardImage() + { + return $this->awardImage; + } + + /** + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $awardImage + */ + public function setAwardImage($awardImage) + { + $this->awardImage = $awardImage; + } + + /** + * @return string + */ + public function getAwardLink() + { + return $this->awardLink; + } + + /** + * @param string $awardLink + */ + public function setAwardLink($awardLink) + { + $this->awardLink = $awardLink; + } + + /** + * @return string + */ + public function getAwardLabel() + { + return $this->awardLabel; + } + + /** + * @param string $awardLabel + */ + public function setAwardLabel($awardLabel) + { + $this->awardLabel = $awardLabel; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Room.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Room.php new file mode 100644 index 00000000..222dc691 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Room.php @@ -0,0 +1,43 @@ +, 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! + ***************************************************************/ + +class Room +{ + + const ROOM_TYPE_FOR_ONE = 1; + const ROOM_TYPE_FOR_TWO = 2; + const ROOM_TYPE_FOR_THREE = 3; + const ROOM_TYPE_FOR_FOUR = 4; + const ROOM_TYPE_WITH_OTHERS = 5; + const ROOM_TYPE_OTHER = 6; + + const ROOM_STATUS_AVAILABLE = 1; + const ROOM_STATUS_ON_REQUEST = 2; + const ROOM_STATUS_FULLY_BOOKED = 3; +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/RoomMapping.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/RoomMapping.php new file mode 100644 index 00000000..56c5180c --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/RoomMapping.php @@ -0,0 +1,75 @@ +, 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! + ***************************************************************/ + +class RoomMapping extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * @var string + */ + protected $code = ''; + + /** + * @var int + */ + protected $type = 0; + + /** + * @return string + */ + public function getCode() + { + return $this->code; + } + + /** + * @param string $code + */ + public function setCode($code) + { + $this->code = $code; + } + + /** + * @return int + */ + public function getType() + { + return $this->type; + } + + /** + * @param int $type + */ + public function setType($type) + { + $this->type = $type; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/SearchParams.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/SearchParams.php new file mode 100644 index 00000000..ac597022 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/SearchParams.php @@ -0,0 +1,247 @@ +, 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! + ***************************************************************/ + +class SearchParams implements \JsonSerializable +{ + /** + * @var int + */ + protected $priceRange = 0; + + /** + * @var \DateTime + */ + protected $dateFrom; + + /** + * @var \DateTime + */ + protected $dateTo; + + /** + * @var int + */ + protected $destinationUid = 0; + + /** + * @var string + */ + protected $destinationType; + + /** + * @var int + */ + protected $conceptUid = 0; + + /** + * @var int + */ + protected $nights = 0; + + /** + * @var int + */ + protected $pax = 1; + + /** + * @var int + */ + protected $pageUid = 0; + + /** + * @param int $pageUid + */ + public function __construct($pageUid = 0) + { + $this->setPageUid($pageUid); + } + + /** + * @return int + */ + public function getPriceRange() + { + return $this->priceRange; + } + + /** + * @param int $priceRange + */ + public function setPriceRange($priceRange) + { + $this->priceRange = $priceRange; + } + + /** + * @return \DateTime + */ + public function getDateFrom() + { + return $this->dateFrom; + } + + /** + * @param \DateTime $dateFrom + */ + public function setDateFrom(\DateTime $dateFrom = null) + { + $this->dateFrom = $dateFrom; + } + + /** + * @return \DateTime + */ + public function getDateTo() + { + return $this->dateTo; + } + + /** + * @param \DateTime $dateTo + */ + public function setDateTo(\DateTime $dateTo = null) + { + $this->dateTo = $dateTo; + } + + /** + * @return int + */ + public function getDestinationUid() + { + return $this->destinationUid; + } + + /** + * @param int $destinationUid + */ + public function setDestinationUid($destinationUid) + { + $this->destinationUid = $destinationUid; + } + + /** + * @return string + */ + public function getDestinationType() + { + return $this->destinationType; + } + + /** + * @param string $destinationType + */ + public function setDestinationType($destinationType) + { + $this->destinationType = $destinationType; + } + + /** + * @return int + */ + public function getConceptUid() + { + return $this->conceptUid; + } + + /** + * @param int $conceptUid + */ + public function setConceptUid($conceptUid) + { + $this->conceptUid = $conceptUid; + } + + /** + * @return int + */ + public function getNights() + { + return $this->nights; + } + + /** + * @param int $nights + */ + public function setNights($nights) + { + $this->nights = $nights; + } + + /** + * @return int + */ + public function getPax() + { + return $this->pax; + } + + /** + * @param int $pax + */ + public function setPax($pax) + { + $this->pax = $pax; + } + + /** + * @return int + */ + public function getPageUid() + { + return $this->pageUid; + } + + /** + * @param int $pageUid + */ + public function setPageUid($pageUid) + { + $this->pageUid = $pageUid; + } + + /** + * @return array + */ + public function jsonSerialize() + { + return [ + 'priceRange' => $this->getPriceRange(), + 'destinationUid' => $this->getDestinationUid(), + 'destinationType' => $this->getDestinationType(), + 'conceptUid' => $this->getConceptUid(), + 'nights' => $this->getNights(), + 'pax' => $this->getPax(), + 'pageUid' => $this->getPageUid(), + 'dateFrom' => ($this->getDateFrom() !== null) ? $this->getDateFrom()->format('Y-m-d') : null, + 'dateTo' => ($this->getDateTo() !== null) ? $this->getDateTo()->format('Y-m-d') : null, + ]; + } + +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/SearchResult.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/SearchResult.php new file mode 100644 index 00000000..a9edf078 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/SearchResult.php @@ -0,0 +1,108 @@ +, 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! + ***************************************************************/ + +class SearchResult +{ + + /** + * @var int + */ + protected $total = 0; + + /** + * @var array + */ + protected $data = []; + + /** + * @var FilterSettings + */ + protected $filterSettings; + + /** + * @param array $data + * @param int $total + * @param FilterSettings $filterSettings + */ + public function __construct(array $data = [], $total = 0, FilterSettings $filterSettings = null) + { + $this->data = $data; + $this->total = $total; + $this->filterSettings = $filterSettings; + } + + /** + * @return int + */ + public function getTotal() + { + return $this->total; + } + + /** + * @param int $total + */ + public function setTotal($total) + { + $this->total = $total; + } + + /** + * @return array + */ + public function getData() + { + return $this->data; + } + + /** + * @param array $data + */ + public function setData($data) + { + $this->data = $data; + } + + /** + * @return FilterSettings + */ + public function getFilterSettings() + { + return $this->filterSettings; + } + + /** + * @param FilterSettings $filterSettings + */ + public function setFilterSettings($filterSettings) + { + $this->filterSettings = $filterSettings; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Snowreport.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Snowreport.php new file mode 100644 index 00000000..7497f421 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Snowreport.php @@ -0,0 +1,392 @@ +, 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! + ***************************************************************/ + +class Snowreport extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * @var int + */ + protected $vendorUid; + + /** + * @var string + */ + protected $regionName = ''; + + /** + * @var bool + */ + protected $glacier = false; + + /** + * @var int + */ + protected $heightMax = 0; + + /** + * @var int + */ + protected $heightMin = 0; + + /** + * @var bool + */ + protected $opened = false; + + /** + * @var int + */ + protected $snowLevelMountain = 0; + + /** + * @var int + */ + protected $snowLevelValley = 0; + + /** + * @var string + */ + protected $snowQuality = ''; + + /** + * @var \DateTime + */ + protected $lastSnowfall; + + /** + * @var int + */ + protected $liftsTotal = 0; + + /** + * @var int + */ + protected $liftsOpened = 0; + + /** + * @var \DateTime + */ + protected $lastUpdate; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Webcam> + */ + protected $webcams; + + /** + * @var \DateTime + */ + protected $seasonStart; + + /** + * @var \DateTime + */ + protected $seasonEnd; + + public function __construct() + { + $this->webcams = new ObjectStorage(); + } + + /** + * @return int + */ + public function getVendorUid() + { + return $this->vendorUid; + } + + /** + * @param int $vendorUid + */ + public function setVendorUid($vendorUid) + { + $this->vendorUid = $vendorUid; + } + + /** + * @return string + */ + public function getRegionName() + { + return $this->regionName; + } + + /** + * @param string $regionName + */ + public function setRegionName($regionName) + { + $this->regionName = $regionName; + } + + /** + * @return bool + */ + public function getGlacier() + { + return $this->glacier; + } + + /** + * @param bool $glacier + */ + public function setGlacier($glacier) + { + $this->glacier = $glacier; + } + + /** + * @return int + */ + public function getHeightMax() + { + return $this->heightMax; + } + + /** + * @param int $heightMax + */ + public function setHeightMax($heightMax) + { + $this->heightMax = $heightMax; + } + + /** + * @return int + */ + public function getHeightMin() + { + return $this->heightMin; + } + + /** + * @param int $heightMin + */ + public function setHeightMin($heightMin) + { + $this->heightMin = $heightMin; + } + + /** + * @return bool + */ + public function getOpened() + { + return $this->opened; + } + + /** + * @param bool $opened + */ + public function setOpened($opened) + { + $this->opened = $opened; + } + + /** + * @return int + */ + public function getSnowLevelMountain() + { + return $this->snowLevelMountain; + } + + /** + * @param int $snowLevelMountain + */ + public function setSnowLevelMountain($snowLevelMountain) + { + $this->snowLevelMountain = $snowLevelMountain; + } + + /** + * @return int + */ + public function getSnowLevelValley() + { + return $this->snowLevelValley; + } + + /** + * @param int $snowLevelValley + */ + public function setSnowLevelValley($snowLevelValley) + { + $this->snowLevelValley = $snowLevelValley; + } + + /** + * @return string + */ + public function getSnowQuality() + { + return $this->snowQuality; + } + + /** + * @param string $snowQuality + */ + public function setSnowQuality($snowQuality) + { + $this->snowQuality = $snowQuality; + } + + /** + * @return \DateTime + */ + public function getLastSnowfall() + { + return $this->lastSnowfall; + } + + /** + * @param \DateTime $lastSnowfall + */ + public function setLastSnowfall($lastSnowfall) + { + $this->lastSnowfall = $lastSnowfall; + } + + /** + * @return int + */ + public function getLiftsTotal() + { + return (int) $this->liftsTotal; + } + + /** + * @param int $liftsTotal + */ + public function setLiftsTotal($liftsTotal) + { + $this->liftsTotal = $liftsTotal; + } + + /** + * @return int + */ + public function getLiftsOpened() + { + return (int) $this->liftsOpened; + } + + /** + * @param int $liftsOpened + */ + public function setLiftsOpened($liftsOpened) + { + $this->liftsOpened = $liftsOpened; + } + + /** + * @return \DateTime + */ + public function getLastUpdate() + { + return $this->lastUpdate; + } + + /** + * @param \DateTime $lastUpdate + */ + public function setLastUpdate($lastUpdate) + { + $this->lastUpdate = $lastUpdate; + } + + /** + * @param \EP\EpProducts\Domain\Model\Webcam $webcam + */ + public function addWebcam(\EP\EpProducts\Domain\Model\Webcam $webcam) + { + $this->webcams->attach($webcam); + } + + /** + * @param \EP\EpProducts\Domain\Model\Webcam $webcam + */ + public function removeWebcam(\EP\EpProducts\Domain\Model\Webcam $webcam) + { + $this->webcams->detach($webcam); + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Webcam> + */ + public function getWebcams() + { + return $this->webcams; + } + + /** + * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\EP\EpProducts\Domain\Model\Webcam> $webcams + */ + public function setWebcams(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $webcams) + { + $this->webcams = $webcams; + } + + /** + * @return \DateTime + */ + public function getSeasonStart() + { + return $this->seasonStart; + } + + /** + * @param \DateTime $seasonStart + */ + public function setSeasonStart($seasonStart) + { + $this->seasonStart = $seasonStart; + } + + /** + * @return \DateTime + */ + public function getSeasonEnd() + { + return $this->seasonEnd; + } + + /** + * @param \DateTime $seasonEnd + */ + public function setSeasonEnd($seasonEnd) + { + $this->seasonEnd = $seasonEnd; + } +} + diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Teammember.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Teammember.php new file mode 100644 index 00000000..b48e8695 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Teammember.php @@ -0,0 +1,159 @@ +, 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! + ***************************************************************/ + +class Teammember extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * @var string + */ + protected $name = ''; + + /** + * @var string + */ + protected $email = ''; + + /** + * @var string + */ + protected $phone = ''; + + /** + * @var string + */ + protected $tasks = ''; + + /** + * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + protected $image; + + /** + * @var string + */ + protected $description = ''; + + /** + * @return string $name + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string $email + */ + public function getEmail() + { + return $this->email; + } + + /** + * @param string $email + */ + public function setEmail($email) + { + $this->email = $email; + } + + /** + * @return string + */ + public function getPhone() + { + return $this->phone; + } + + /** + * @param string $phone + */ + public function setPhone($phone) + { + $this->phone = $phone; + } + + /** + * @return string + */ + public function getTasks() + { + return $this->tasks; + } + + /** + * @param string $tasks + */ + public function setTasks($tasks) + { + $this->tasks = $tasks; + } + + /** + * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference + */ + public function getImage() + { + return $this->image; + } + + /** + * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $image + */ + public function setImage($image) + { + $this->image = $image; + } + + /** + * @return string + */ + public function getDescription() + { + return $this->description; + } + + /** + * @param string $description + */ + public function setDescription($description) + { + $this->description = $description; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/TeaserInterface.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/TeaserInterface.php new file mode 100644 index 00000000..33ad37a7 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/TeaserInterface.php @@ -0,0 +1,50 @@ +, 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! + ***************************************************************/ + +interface TeaserInterface +{ + + /** + * @return string + */ + public function getTeaser(); + + /** + * @return ObjectStorage + */ + public function getTeaserImages(); + + /** + * @return null|\TYPO3\CMS\Extbase\Persistence\ObjectStorage + */ + public function getTeaserImage(); + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Model/Webcam.php b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Webcam.php new file mode 100644 index 00000000..52f873a2 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Model/Webcam.php @@ -0,0 +1,138 @@ +, 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! + ***************************************************************/ + +class Webcam extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity +{ + + /** + * @var int + */ + protected $vendorUid; + + /** + * @var \EP\EpProducts\Domain\Model\Snowreport + */ + protected $snowreport; + + /** + * @var string + */ + protected $name; + + /** + * @var string + */ + protected $url; + + /** + * @var bool + */ + protected $available = true; + + /** + * @return Snowreport + */ + public function getSnowreport() + { + return $this->snowreport; + } + + /** + * @param Snowreport $snowreport + */ + public function setSnowreport($snowreport) + { + $this->snowreport = $snowreport; + } + + /** + * @return int + */ + public function getVendorUid() + { + return $this->vendorUid; + } + + /** + * @param int $vendorUid + */ + public function setVendorUid($vendorUid) + { + $this->vendorUid = $vendorUid; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getUrl() + { + return $this->url; + } + + /** + * @param string $url + */ + public function setUrl($url) + { + $this->url = $url; + } + + /** + * @return boolean + */ + public function getAvailable() + { + return $this->available; + } + + /** + * @param boolean $available + */ + public function setAvailable($available) + { + $this->available = $available; + } +} + diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/AbstractRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/AbstractRepository.php new file mode 100644 index 00000000..244aecd9 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/AbstractRepository.php @@ -0,0 +1,317 @@ +, 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 Doctrine\DBAL\Connection; +use Doctrine\DBAL\Query\QueryBuilder; +use EP\EpProducts\Domain\Model\Date; +use EP\EpProducts\Domain\Model\FilterSettings; +use TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings; + +abstract class AbstractRepository extends \TYPO3\CMS\Extbase\Persistence\Repository +{ + + public function initializeObject() + { + /** @var $querySettings \TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings */ + $querySettings = $this->objectManager->get(Typo3QuerySettings::class); + $querySettings->setRespectStoragePage(FALSE); + $this->setDefaultQuerySettings($querySettings); + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface + */ + public function getListByUids(array $uids = []) + { + $query = $this->createQuery(); + $query->matching( + $query->in('uid', $uids) + ); + return $query->execute(); + } + + /** + * @param QueryBuilder $query + * @param FilterSettings $filterSettings + */ + protected function addDateFilterConditions(QueryBuilder $query, FilterSettings $filterSettings) + { + // Date Start + if ($filterSettings->getDateFrom() !== null) { + $query + ->andWhere('date.date_start >= :dateStart') + ->setParameter('dateStart', $filterSettings->getDateFrom()->format('Y-m-d')) + ; + } + + // Date End + if ($filterSettings->getDateTo() !== null) { + $query + ->andWhere('date.date_end <= :dateEnd') + ->setParameter('dateEnd', $filterSettings->getDateTo()->format('Y-m-d')) + ; + + } + } + + /** + * @param QueryBuilder $query + * @param FilterSettings $filterSettings + */ + protected function addHotelFilterConditions(QueryBuilder $query, FilterSettings $filterSettings) + { + // Hotel + if ((int) $filterSettings->getHotelUid() > 0) { + $query + ->andWhere('date.hotel = :hotelUid') + ->setParameter('hotelUid', $filterSettings->getHotelUid()) + ; + } + // Hotel types + if (count($filterSettings->getHotelTypes()) > 0) { + $query + ->andWhere('date.hotel_type IN (:hotelTypes)') + ->setParameter('hotelTypes', $filterSettings->getHotelTypes(), Connection::PARAM_INT_ARRAY) + ; + } + } + + /** + * @param QueryBuilder $query + * @param FilterSettings $filterSettings + */ + protected function addCountryRegionAndCityFilterConditions(QueryBuilder $query, FilterSettings $filterSettings) + { + if (count($filterSettings->getCityUids()) > 0) { + $query + ->andWhere('date.city IN (:cityUids)') + ->setParameter('cityUids', $filterSettings->getCityUids(), Connection::PARAM_INT_ARRAY) + ; + } elseif (count($filterSettings->getRegionUids()) > 0) { + $query + ->andWhere( + $query->expr()->orX( + $query->expr()->in('date.region', $filterSettings->getRegionUids()), + $query->expr()->in('mm.uid_foreign', $filterSettings->getRegionUids() + )) + ) + ; + } elseif (count($filterSettings->getCountryUids()) > 0) { + $query + ->andWhere('date.country IN (:countryUids)') + ->setParameter('countryUids', $filterSettings->getCountryUids(), Connection::PARAM_INT_ARRAY) + ; + } + } + + /** + * @param QueryBuilder $query + * @param FilterSettings $filterSettings + */ + protected function addConceptFilterConditions(QueryBuilder $query, FilterSettings $filterSettings) + { + if (count($filterSettings->getConceptUids()) > 0) { + $query + ->andWhere('date.concept IN (:conceptUids)') + ->setParameter('conceptUids', $filterSettings->getConceptUids(), Connection::PARAM_INT_ARRAY) + ; + } + } + + /** + * @param QueryBuilder $query + * @param FilterSettings $filterSettings + */ + protected function addPaxFilterConditions(QueryBuilder $query, FilterSettings $filterSettings) + { + // Pax + if ((int) $filterSettings->getPax() > 0) { + $query + ->andWhere('date.available >= :pax') + ->setParameter('pax', $filterSettings->getPax()) + ; + } + } + + /** + * @param QueryBuilder $query + * @param FilterSettings $filterSettings + */ + protected function addPriceRangeFilterConditions(QueryBuilder $query, FilterSettings $filterSettings) + { + // Price range + $priceRange = (int) $filterSettings->getPriceRange(); + if ($priceRange > 0) { + list($priceMin, $priceMax) = FilterSettings::$priceRanges[$priceRange]; + $query + ->andWhere('date.min_price >= :priceMin') + ->andWhere('date.min_price < :priceMax') + ->setParameter('priceMin', $priceMin) + ->setParameter('priceMax', $priceMax) + ; + } + } + + /** + * @param QueryBuilder $query + * @param FilterSettings $filterSettings + */ + protected function addDurationFilterConditions(QueryBuilder $query, FilterSettings $filterSettings) + { + // Duration + if ((int) $filterSettings->getNights() === Date::DURATION_SHORT) { + $query + ->andWhere('date.nights <= :nights') + ->setParameter('nights', $filterSettings->getNights()) + ; + } elseif ((int) $filterSettings->getNights() === Date::DURATION_LONG) { + $query + ->andWhere('date.nights >= :nights') + ->setParameter('nights', $filterSettings->getNights()) + ; + } + } + + /** + * @param QueryBuilder $query + * @param FilterSettings $filterSettings + */ + protected function addHotelTypesFilterConditions(QueryBuilder $query, FilterSettings $filterSettings) + { + // Hotel types + if (count($filterSettings->getHotelTypes()) > 0) { + $query + ->andWhere('date.hotel_type IN (:hotelTypes)') + ->setParameter('hotelTypes', $filterSettings->getHotelTypes(), Connection::PARAM_INT_ARRAY) + ; + } + } + + /** + * @param QueryBuilder $query + * @param FilterSettings $filterSettings + */ + protected function addBoardTypesFilterConditions(QueryBuilder $query, FilterSettings $filterSettings) + { + // Board types + if (count($filterSettings->getBoardTypes()) > 0) { + $query + ->andWhere('date.board_bus_pro_id IN (:boardTypes)') + ->setParameter('boardTypes', $filterSettings->getBoardTypes(), Connection::PARAM_STR_ARRAY) + ; + } + } + + /** + * @param QueryBuilder $query + * @param FilterSettings $filterSettings + */ + protected function addRoomTypesFilterConditions(QueryBuilder $query, FilterSettings $filterSettings) + { + // Room types + if (count($filterSettings->getRoomTypes()) > 0) { + $query + ->andWhere('room.type IN (:roomTypes)') + ->setParameter('roomTypes', $filterSettings->getRoomTypes(), Connection::PARAM_INT_ARRAY) + ; + } + } + + /** + * @param QueryBuilder $query + * @param FilterSettings $filterSettings + */ + protected function addTransportationFilterConditions(QueryBuilder $query, FilterSettings $filterSettings) + { + // Transportation + if ((bool) $filterSettings->getBus() === true) { + $query->andWhere('date.bus_available = 1'); + } + } + + /** + * Adds general conditions for provided filtersettings + * + * @param QueryBuilder $query + * @param FilterSettings $filterSettings + * @param bool $constraintDates + */ + protected function addFiltersettingsConditions(QueryBuilder $query, FilterSettings $filterSettings, $constraintDates = true) + { + if ($constraintDates) { + $this->addDateFilterConditions($query, $filterSettings); + } + $this->addPriceRangeFilterConditions($query, $filterSettings); + $this->addCountryRegionAndCityFilterConditions($query, $filterSettings); + $this->addConceptFilterConditions($query, $filterSettings); + $this->addPaxFilterConditions($query, $filterSettings); + $this->addDurationFilterConditions($query, $filterSettings); + $this->addHotelTypesFilterConditions($query, $filterSettings); + $this->addBoardTypesFilterConditions($query, $filterSettings); + $this->addRoomTypesFilterConditions($query, $filterSettings); + $this->addTransportationFilterConditions($query, $filterSettings); + + // Default fulltext search in case autocompletion has not been used + if ((int) $filterSettings->getDestinationUid() === 0 && !empty($filterSettings->getDestinationName())) { + $query + ->andWhere($query->expr()->orX( + $query->expr()->like('LOWER(date.country_name) COLLATE utf8_bin',':destination'), + $query->expr()->like('LOWER(date.country_keywords) COLLATE utf8_bin', ':destination'), + $query->expr()->like('LOWER(date.region_name) COLLATE utf8_bin', ':destination'), + $query->expr()->like('LOWER(date.region_keywords) COLLATE utf8_bin', ':destination'), + $query->expr()->like('LOWER(date.city_name) COLLATE utf8_bin', ':destination'), + $query->expr()->like('LOWER(date.city_keywords) COLLATE utf8_bin', ':destination'), + $query->expr()->like('LOWER(date.hotel_name) COLLATE utf8_bin', ':destination'), + $query->expr()->like('LOWER(date.hotel_keywords) COLLATE utf8_bin', ':destination'), + $query->expr()->like('LOWER(date.product_name) COLLATE utf8_bin', ':destination'), + $query->expr()->like('LOWER(date.product_keywords) COLLATE utf8_bin', ':destination') + )) + ->setParameter('destination', '%' . mb_strtolower($filterSettings->getDestinationName()) . '%') + ; + } + + // Product + if ((int) $filterSettings->getProductUid() > 0) { + $query + ->andWhere('date.product = :productUid') + ->setParameter('productUid', $filterSettings->getProductUid()) + ; + } + + // Hotel + if ((int) $filterSettings->getHotelUid() > 0) { + $query + ->andWhere('date.hotel = :hotel') + ->setParameter(':hotel', $filterSettings->getHotelUid()) + ; + } + + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/CityRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/CityRepository.php new file mode 100644 index 00000000..b285bce6 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/CityRepository.php @@ -0,0 +1,58 @@ +, 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! + ***************************************************************/ + +class CityRepository extends AbstractRepository +{ + + /** + * @param int $regionUid + * @param string $season + * + * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface + */ + public function getTeasersByRegionAndSeason($regionUid, $season = 'w') + { + if ($season === null) { + $season = AbstractDestination::SEASON_WINTER; + } + $query = $this->createQuery(); + $constraints = [ + $query->equals('region', $regionUid), + $query->equals('season', $season), + $query->equals('excludeFromTeasergroups', 0) + ]; + return $query + ->matching($query->logicalAnd($constraints)) + ->execute() + ; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ConceptRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ConceptRepository.php new file mode 100644 index 00000000..31c17f46 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ConceptRepository.php @@ -0,0 +1,31 @@ +, 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! + ***************************************************************/ + +class ConceptRepository extends AbstractRepository +{} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ContingentRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ContingentRepository.php new file mode 100644 index 00000000..e972977e --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ContingentRepository.php @@ -0,0 +1,55 @@ +, 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 CalendR\Event\Provider\ProviderInterface; +use EP\EpProducts\Domain\Model\Hotel; + +class ContingentRepository extends AbstractRepository implements ProviderInterface +{ + /** + * @param \DateTime $dateFrom + * @param \DateTime $dateTo + * @param array $options + * @return \CalendR\Event\EventInterface[] + */ + public function getEvents(\DateTime $dateFrom, \DateTime $dateTo, array $options = []) + { + $query = $this->createQuery(); + $query->getQuerySettings()->setRespectStoragePage(false); + $constraints = [ + $query->greaterThanOrEqual('date', $dateFrom->format('Y-m-d')), + $query->lessThanOrEqual('date', $dateTo->format('Y-m-d')) + ]; + if (array_key_exists('hotel', $options) && $options['hotel'] instanceof Hotel) { + $constraints[] = $query->equals('hotel', $options['hotel']->getUid()); + } + $query->matching($query->logicalAnd($constraints)); + return $query->execute()->toArray(); + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/CountryRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/CountryRepository.php new file mode 100644 index 00000000..ec29a51c --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/CountryRepository.php @@ -0,0 +1,31 @@ +, 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! + ***************************************************************/ + +class CountryRepository extends AbstractRepository +{} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/DateRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/DateRepository.php new file mode 100644 index 00000000..0a8c09c1 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/DateRepository.php @@ -0,0 +1,237 @@ +, 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 Doctrine\DBAL\Connection; +use EP\EpProducts\Domain\Model\FilterSettings; +use EP\EpProducts\Domain\Model\Product; +use EP\EpProducts\Utility\DbUtility; + +class DateRepository extends AbstractRepository +{ + + /** + * @param Product $product + * + * @return array + */ + public function getDateRange(Product $product = null) + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + + $query = $qb + ->select('MIN(date_start) dateRangeFrom, MAX(date_end) dateRangeTo') + ->from('tx_epproducts_domain_model_date', 'date') + ->where('date_start >= NOW()') + ->andWhere('product_searchable = 1') + ; + + if ($product !== null) { + $query + ->andWhere('product = :productUid') + ->setParameter('productUid', $product->getUid()) + ; + } + + $dates = $query->execute()->fetch(); + + if ($dates['dateRangeFrom'] !== null && $dates['dateRangeTo'] !== null) { + $dateRangeFrom = \DateTime::createFromFormat('Y-m-d', $dates['dateRangeFrom']); + $dateRangeTo = \DateTime::createFromFormat('Y-m-d', $dates['dateRangeTo']); + } else { + $dateRangeFrom = new \DateTime('now'); + $dateRangeTo = clone $dateRangeFrom; + $dateRangeTo->add(new \DateInterval('P1Y')); + } + + return [$dateRangeFrom, $dateRangeTo]; + } + + /** + * @param FilterSettings $filterSettings + * @param array $excludedConceptUids + * + * @return array + */ + public function getFilterOptions(FilterSettings $filterSettings, $excludedConceptUids = []) + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + + $query = $qb + ->select( + 'date.concept conceptUid', 'date.concept_name conceptName', 'date.concept_sorting conceptSorting', + 'date.concept_code conceptCode', 'date.min_price minPrice', + 'date.country countryUid','date.country_name countryName', 'date.country_code countryCode', + 'date.region regionUid', 'date.region_name regionName', + 'date.nights nights', 'date.board boardType', 'date.board_bus_pro_id boardUid', + 'date.bus_available busAvailable', + 'date.hotel_type hotelType', + 'room.type roomType' + ) + ->from('tx_epproducts_domain_model_date', 'date') + ->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'room.date = date.uid') + ->leftJoin('date', 'tx_epproducts_product_region_mm', 'mm', 'mm.uid_local = date.product') + ->where('date.date_start >= NOW()') + ->andWhere('date.product_searchable = 1') + ->andWhere('date.hotel_type > 0') + ->orderBy('conceptSorting') + ->addOrderBy('countryName') + ->addOrderBy('regionName') + ->addOrderBy('nights') + ->addOrderBy('roomType') + ; + + if (count($excludedConceptUids) > 0) { + $query + ->andWhere('date.concept NOT IN (:excludedConceptUids)') + ->setParameter('excludedConceptUids', $excludedConceptUids, Connection::PARAM_INT_ARRAY) + ; + } + + $this->addFiltersettingsConditions($query, $filterSettings); + + return $query->execute()->fetchAll(); + } + + /** + * @param string $search + * @param FilterSettings $filterSettings + * + * @return array + */ + public function searchHotels($search, FilterSettings $filterSettings) + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + + $query = $qb + ->select('REPLACE(hotel_name, "\r\n", " ") name', 'hotel uid') + ->from('tx_epproducts_domain_model_date', 'date') + ->where('product_searchable = 1') + ->andWhere($qb->expr()->orX( + $qb->expr()->like('LOWER(hotel_name) COLLATE utf8_bin',':searchName'), + $qb->expr()->like('LOWER(hotel_keywords) COLLATE utf8_bin', ':searchKeywords') + )) + ->orderBy('hotel_name') + ->groupBy('hotel_name') + ->setParameters([ + 'searchName' => '%' . $search . '%', + 'searchKeywords' => '%' . $search . '%' + ]) + ; + + $this->addDateFilterConditions($query, $filterSettings); + $this->addDurationFilterConditions($query, $filterSettings); + $this->addPaxFilterConditions($query, $filterSettings); + $this->addConceptFilterConditions($query, $filterSettings); + + return $query->execute()->fetchAll(); + } + + /** + * @param string $search + * @param FilterSettings $filterSettings + * @param array $excludedConceptUids + * + * @return array + */ + public function searchProducts($search, FilterSettings $filterSettings, $excludedConceptUids = []) + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + + $query = $qb + ->select('CONCAT(REPLACE(product_name, "\r\n", " "), " (", concept_name, ")") name', 'product uid') + ->from('tx_epproducts_domain_model_date', 'date') + ->where('product_searchable = 1') + ->andWhere($qb->expr()->orX( + $qb->expr()->like('LOWER(product_name) COLLATE utf8_bin',':searchName'), + $qb->expr()->like('LOWER(product_keywords) COLLATE utf8_bin', ':searchKeywords'), + $qb->expr()->like('LOWER(country_name) COLLATE utf8_bin',':searchKeywords'), + $qb->expr()->like('LOWER(country_keywords) COLLATE utf8_bin', ':searchKeywords'), + $qb->expr()->like('LOWER(region_name) COLLATE utf8_bin', ':searchKeywords'), + $qb->expr()->like('LOWER(region_keywords) COLLATE utf8_bin', ':searchKeywords'), + $qb->expr()->like('LOWER(city_name) COLLATE utf8_bin', ':searchKeywords'), + $qb->expr()->like('LOWER(city_keywords) COLLATE utf8_bin', ':searchKeywords') + )) + ->orderBy('product_name') + ->groupBy('product_name') + ->setParameters([ + 'searchName' => '%' . $search . '%', + 'searchKeywords' => '%' . $search . '%' + ]) + ; + + if (count($excludedConceptUids) > 0) { + $qb + ->andWhere('concept NOT IN (:excludedConceptUids)') + ->setParameter('excludedConceptUids', $excludedConceptUids, Connection::PARAM_INT_ARRAY) + ; + } + $this->addDateFilterConditions($query, $filterSettings); + $this->addDurationFilterConditions($query, $filterSettings); + $this->addPaxFilterConditions($query, $filterSettings); + $this->addConceptFilterConditions($query, $filterSettings); + + return $query->execute()->fetchAll(); + } + + /** + * @param string $type + * @param string $search + * @param FilterSettings $filterSettings + * + * @return array + */ + public function searchDestinations($type, $search, FilterSettings $filterSettings) + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + + $query = $qb + ->select('REPLACE(' . $type . '_name, "\r\n", " ") name', $type . ' uid') + ->from('tx_epproducts_domain_model_date', 'date') + ->where('product_searchable = 1') + ->andWhere($qb->expr()->orX( + $qb->expr()->like('LOWER(' . $type . '_name) COLLATE utf8_bin',':searchName'), + $qb->expr()->like('LOWER(' . $type . '_keywords) COLLATE utf8_bin', ':searchKeywords') + )) + ->orderBy($type . '_name') + ->groupBy($type . '_name') + ->setParameters([ + 'searchName' => '%' . $search . '%', + 'searchKeywords' => '%' . $search . '%' + ]) + ; + + $this->addDateFilterConditions($query, $filterSettings); + $this->addDurationFilterConditions($query, $filterSettings); + $this->addPaxFilterConditions($query, $filterSettings); + $this->addConceptFilterConditions($query, $filterSettings); + + return $query->execute()->fetchAll(); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/FaqRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/FaqRepository.php new file mode 100644 index 00000000..91af0a04 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/FaqRepository.php @@ -0,0 +1,51 @@ +, 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! + ***************************************************************/ + +class FaqRepository extends AbstractRepository +{ + + /** + * @param string $uids + * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface + */ + public function findByUids($uids) + { + $query = $this->createQuery(); + $query->statement(' + SELECT * FROM tx_epproducts_domain_model_faq + WHERE uid IN (' . $uids . ')' . + ' ' .$GLOBALS['TSFE']->sys_page->enableFields('tx_epproducts_domain_model_faq') . + ' ORDER BY FIELD(uid, ' . $uids . ') + '); + return $query + ->execute() + ; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/HotelRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/HotelRepository.php new file mode 100644 index 00000000..c3c141da --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/HotelRepository.php @@ -0,0 +1,224 @@ +, 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 Doctrine\DBAL\Connection; +use EP\EpProducts\Domain\Model\Hotel; +use EP\EpProducts\Utility\DbUtility; + +class HotelRepository extends AbstractRepository +{ + /** + * @param int $hotelUid + * @return array + */ + public function getSingleByUid($hotelUid) + { + $qb = $this->getQueryBuilder(); + $qb + ->where('date.hotel = :hotelUid') + ->orderBy('date.min_price') + ->setParameter('hotelUid', $hotelUid) + ->setMaxResults(1) + ; + + return $qb->execute()->fetch(); + } + + /** + * @param int $productUid + * @return array + */ + public function getListByProduct($productUid) + { + $qb = $this->getQueryBuilder(); + $qb + ->andWhere('date.product = :productUid') + ->setParameter('productUid', $productUid) + ; + + return $qb->execute()->fetchAll(); + } + + /** + * @param array $criteria + * @return array + */ + public function getListByCriteria(array $criteria) + { + $qb = $this->getQueryBuilder(); + if ($criteria['regionUid']) { + $qb + ->andWhere('date.region = :regionUid') + ->setParameter('regionUid', $criteria['regionUid']) + ; + } + if ($criteria['countryUid']) { + $qb + ->andWhere('date.country = :countryUid') + ->setParameter('countryUid', $criteria['countryUid']) + ; + } + if ($criteria['conceptUid']) { + $qb + ->andWhere('date.concept = :conceptUid') + ->setParameter('conceptUid', $criteria['conceptUid']) + ; + } + if ($criteria['productUid']) { + $qb + ->andWhere('date.product = :productUid') + ->setParameter('productUid', $criteria['productUid']) + ; + } + if ($criteria['category']) { + $qb + ->andWhere('date.hotel_category = :category') + ->setParameter('category', $criteria['category']) + ; + } + if ($criteria['type']) { + $qb + ->andWhere('date.hotel_type = :type') + ->setParameter('type', $criteria['type']) + ; + } + + return $qb->execute()->fetchAll(); + } + + /** + * @param array $criteria + * @param array $excludedHotelUids + * @return array + */ + public function getDateIndependentListByCriteria(array $criteria, array $excludedHotelUids = []) + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb + ->select( + 'hotel.uid hotelUid', 'hotel.name hotelName', 'hotel.teaser hotelTeaser', + 'hotel.category hotelCategory', 'hotel.detail_page hotelDetailPage', + 'country.code countryCode', 'country.name country', + 'region.name region' + ) + ->from('tx_epproducts_domain_model_hotel', 'hotel') + ->leftJoin('hotel', 'tx_epproducts_domain_model_country', 'country', 'hotel.country = country.uid') + ->leftJoin('hotel', 'tx_epproducts_domain_model_region', 'region', 'hotel.region = region.uid') + ->where('hotel.hidden = 0') + ->andWhere('hotel.show_as_teaser = 1') + ->andWhere('hotel.deleted = 0') + ->orderBy('FIELD(hotel.type, ' . Hotel::TYPE_SPORTS_CLUB . ')', 'DESC') + ->addOrderBy('hotel.name', 'ASC') + ; + + if ($excludedHotelUids) { + $qb + ->andWhere('hotel.uid NOT IN (:excludedHotelUids)') + ->setParameter('excludedHotelUids', $excludedHotelUids, Connection::PARAM_INT_ARRAY) + ; + } + if ($criteria['productUid']) { + $qb + ->innerJoin('hotel', 'tx_epproducts_product_hotel_mm', 'mm', 'hotel.uid = mm.uid_foreign') + ->andWhere('mm.uid_local = :product') + ->setParameter('product', $criteria['productUid']) + ; + } + if ($criteria['countryUid']) { + $qb + ->andWhere('hotel.country = :country') + ->setParameter('country', $criteria['countryUid']) + ; + } + if ($criteria['regionUid']) { + $qb + ->andWhere('hotel.region = :region') + ->setParameter('region', $criteria['regionUid']) + ; + } + if ($criteria['category']) { + $qb + ->andWhere('hotel.category = :category') + ->setParameter('category', $criteria['category']) + ; + } + if ($criteria['type']) { + $qb + ->andWhere('hotel.type = :type') + ->setParameter('type', $criteria['type']) + ; + } + + return $qb->execute()->fetchAll(); + } + + /** + * @return \Doctrine\DBAL\Query\QueryBuilder + */ + protected function getQueryBuilder() + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + return $qb + ->select( + 'date.hotel hotelUid', 'date.hotel_name hotelName', 'date.hotel_teaser hotelTeaser', + 'date.hotel_category hotelCategory', 'date.hotel_detail_page hotelDetailPage', + 'date.date_start dateStart', 'date.date_end dateEnd', 'date.earlybird earlybird', + 'date.low_contingent lowContingent', 'date.board board', 'date.product_fact productFact', + 'date.hotel_fact hotelFact', 'date.region_fact regionFact', 'date.services_included servicesIncluded', + 'date.min_price minPrice', 'date.pseudo_price pseudoPrice', 'date.nights nights', + 'date.available available', 'date.country country', 'date.country_code countryCode', + 'date.region region' + ) + ->from('tx_epproducts_domain_model_date', 'date') + ->leftJoin('date', 'tx_epproducts_product_region_mm', 'mm', 'mm.uid_local = date.product') + ->where('date.product_searchable = 1') + ->addGroupBy('date.hotel') + ->addGroupBy('date.date_start') + ->addGroupBy('date.nights') + ->orderBy('FIELD(date.hotel_type, ' . Hotel::TYPE_SPORTS_CLUB . ')', 'DESC') + ; + } + + /** + * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface + */ + public function getMapList() + { + $query = $this->createQuery(); + $query->matching( + $query->logicalAnd( + $query->greaterThan('latitude', 0), + $query->greaterThan('longitude', 0) + ) + ); + + return $query->execute(); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/MatchCodeRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/MatchCodeRepository.php new file mode 100644 index 00000000..a5a4427e --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/MatchCodeRepository.php @@ -0,0 +1,31 @@ +, 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! + ***************************************************************/ + +class MatchCodeRepository extends AbstractRepository +{} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ProductRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ProductRepository.php new file mode 100644 index 00000000..90735581 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ProductRepository.php @@ -0,0 +1,268 @@ +, 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 Doctrine\DBAL\Connection; +use EP\EpProducts\Domain\Model\Date; +use EP\EpProducts\Domain\Model\FilterSettings; +use EP\EpProducts\Domain\Model\Hotel; +use EP\EpProducts\Domain\Model\Product; +use EP\EpProducts\Utility\DbUtility; + +class ProductRepository extends AbstractRepository +{ + + /** + * @param FilterSettings $filterSettings + * @param array $excludedConceptUids + * + * @return array + */ + public function getSearchResult(FilterSettings $filterSettings, $excludedConceptUids = []) + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + + $query = $qb + ->select( + 'date.concept conceptUid', 'date.concept_name conceptName', 'date.concept_code conceptCode', + 'date.product productUid', 'date.product_name productName', 'date.product_detail_page productDetailPage', + 'date.product_feature productFeature', + 'date.country countryUid','date.country_name countryName', 'date.country_code countryCode', + 'date.region regionUid', 'date.region_name regionName', 'date.region_feature regionFeature', + 'date.date_start dateStart', 'date.date_end dateEnd', + 'date.hotel hotelUid', 'date.hotel_name hotelName', 'date.hotel_category hotelCategory', + 'date.earlybird earlybird', 'date.low_contingent lowContingent', 'date.board board', + 'date.product_fact productFact', 'date.hotel_fact hotelFact', 'date.region_fact regionFact', + 'date.services_included servicesIncluded', 'date.min_price minPrice', 'date.nights nights', + 'date.available available', 'date.pseudo_price pseudoPrice' + ) + ->from('tx_epproducts_domain_model_date', 'date') + ->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'room.date = date.uid') + ->leftJoin('date', 'tx_epproducts_product_region_mm', 'mm', 'mm.uid_local = date.product') + ->where('date.product_searchable = 1') + ->andWhere('date.date_start >= NOW()') + ->groupBy('date.product') + ->addGroupBy('date.hotel') + ->addGroupBy('date.date_start') + ->addGroupBy('date.nights') + ->orderBy('date.concept_sorting') + ->addOrderBy('date.product_name') + ->addOrderBy('date.min_price') + ->addOrderBy('date.date_start') + ->addOrderBy('date.hotel_name') + ; + + if (count($excludedConceptUids) > 0) { + $qb + ->andWhere('concept NOT IN (:excludedConceptUids)') + ->setParameter('excludedConceptUids', $excludedConceptUids, Connection::PARAM_INT_ARRAY) + ; + } + + $this->addFiltersettingsConditions($query, $filterSettings); + + return $query->execute()->fetchAll(); + } + + /** + * @param FilterSettings $filterSettings + * @param array $excludedConceptUids + * @param int $limit + * + * @return array + */ + public function getTeasers(FilterSettings $filterSettings, $excludedConceptUids = [], $limit = 0) + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $query = $qb + ->select( + 'product productUid', 'product_name productName', 'product_detail_page productDetailPage', + 'product_feature productFeature', 'product_teaser productTeaser', 'product_fact productFact', + 'hotel hotelUid', 'hotel_fact hotelFact', 'hotel_name hotelName', 'hotel_category hotelCategory', + 'region_fact regionFact', 'region_name regionName', 'region_feature regionFeature', + 'country_name countryName', 'country_code countryCode', + 'date_start dateStart', 'date_end dateEnd', 'uid dateUid', 'min_price minPrice', + 'pseudo_price pseudoPrice', 'nights nights', 'available available', + 'skipass_included skipassIncluded', 'bus_included busIncluded', + 'earlybird earlybird', 'low_contingent lowContingent', + 'concept_code conceptCode', 'concept_name conceptName', + 'board board' + ) + ->from('tx_epproducts_domain_model_date', 'date') + ->leftJoin('date', 'tx_epproducts_product_region_mm', 'mm', 'mm.uid_local = date.product') + ->where('date_start >= NOW()') + ->groupBy('product') + ->addGroupBy('date.hotel') + ->addGroupBy('date.date_start') + ->addGroupBy('date.nights') + ->orderBy('concept_sorting') + ->addOrderBy('date_start') + ; + + if ($limit > 0) { + $query->setMaxResults($limit); + } + + if (!$filterSettings->getProductUid()) { + $query->andWhere('product_searchable = 1'); + } else { + $query + ->andWhere('product = :productUid') + ->setParameter('productUid', $filterSettings->getProductUid()) + ; + } + + $this->addDateFilterConditions($query, $filterSettings); + $this->addHotelFilterConditions($query, $filterSettings); + $this->addCountryRegionAndCityFilterConditions($query, $filterSettings); + $this->addConceptFilterConditions($query, $filterSettings); + $this->addTransportationFilterConditions($query, $filterSettings); + + if (count($excludedConceptUids) > 0) { + $qb + ->andWhere('concept NOT IN (:excludedConceptUids)') + ->setParameter('excludedConceptUids', $excludedConceptUids, Connection::PARAM_INT_ARRAY) + ; + } + + return $query->execute()->fetchAll(\PDO::FETCH_ASSOC); + } + + /** + * @param Product $product + * @param Hotel $hotel + * @param FilterSettings $filterSettings + * @param Date $date + * + * @return array + */ + public function getPricetable(Product $product, Hotel $hotel, FilterSettings $filterSettings, Date $date = null) + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + + $query = $qb + ->select( + 'date.uid dateUid', 'date.date_start dateStart', 'date.date_end dateEnd', 'date.bus_pro_id dateBusProId', + 'date.hotel hotelUid', 'date.hotel_bus_pro_id hotelBusProId', 'date.bus_included dateBusIncluded', + 'date.skipass_included dateSkipassIncluded', + 'room.uid as roomUid', 'room.bus_pro_id roomBusProId', 'room.name roomName', + 'room.price roomPrice', 'date.discount roomDiscount', 'date.bus_price busPrice', + 'room.services roomOptionalServices', 'room.nights roomNights', 'room.available roomAvailable' + ) + ->from('tx_epproducts_domain_model_date', 'date') + ->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'date.uid = room.date') + ->leftJoin('date', 'tx_epproducts_product_region_mm', 'mm', 'mm.uid_local = date.product') + ->orderBy('date.date_start', 'ASC') + ->addOrderBy('room.pax', 'ASC') + ->addOrderBy('room.price', 'ASC') + ->where('date.date_start >= NOW()') + ->andWhere('date.product = :product') + ->andWhere('date.hotel = :hotel') + ->setParameters([ + 'product' => $product->getUid(), + 'hotel' => $hotel->getUid(), + ]) + ; + + if ($date !== null) { + $query + ->andWhere('date.uid = :date') + ->setParameter('date', $date->getUid()) + ; + } + + $this->addFiltersettingsConditions($query, $filterSettings); + + return $query->execute()->fetchAll(); + } + + /** + * @param Product $product + * @param Hotel $hotel + * @param FilterSettings $filterSettings + * + * @return array + */ + public function getAvailableDates(Product $product, Hotel $hotel, FilterSettings $filterSettings) + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + + $query = $qb + ->select( + 'date.uid dateUid', 'date.date_start dateStart', 'date.date_end dateEnd', + 'date.min_price dateMinPrice', 'date.discount dateDiscount', 'date.bus_price busPrice', + 'date.nights dateNights', 'date.bus_included dateBusIncluded', 'date.services_included dateServicesIncluded', + 'date.services_general dateServicesGeneral', 'date.skipass_included dateSkipassIncluded', + 'date.bus_pro_id dateBusProId', 'date.hotel_bus_pro_id hotelBusProId', + 'SUM(room.available) available' + ) + ->from('tx_epproducts_domain_model_date', 'date') + ->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'room.date = date.uid') + ->leftJoin('date', 'tx_epproducts_product_region_mm', 'mm', 'mm.uid_local = date.product') + ->orderBy('date.date_start', 'ASC') + ->addOrderBy('date.min_price', 'ASC') + ->where('date.date_start >= NOW()') + ->andWhere('date.product = :product') + ->andWhere('date.hotel = :hotel') + ->groupBy('date.date_start') + ->setParameters([ + 'product' => $product->getUid(), + 'hotel' => $hotel->getUid(), + ]) + ; + + $this->addFiltersettingsConditions($query, $filterSettings); + + return $query->execute()->fetchAll(); + } + + /** + * @param Product $product + * + * @return array + */ + public function getEventPriceTable(Product $product) + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $query = $qb + ->select( + 'date.bus_pro_id dateBusProId', 'date.hotel_bus_pro_id hotelBusProId', 'date.date_end dateEnd', + 'date.hotel hotelUid', 'date.hotel_name hotelName', 'date.hotel_header_title hotelTitle', + 'date.hotel_category hotelCategory', + 'room.pax roomPax', 'room.price roomPrice', 'room.available available' + ) + ->from('tx_epproducts_domain_model_date', 'date') + ->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'room.date = date.uid') + ->where('date.product = :productUid') + ->setParameter('productUid', $product->getUid()) + ; + + return $query->execute()->fetchAll(); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RegionRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RegionRepository.php new file mode 100644 index 00000000..6c3a9d40 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RegionRepository.php @@ -0,0 +1,58 @@ +, 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! + ***************************************************************/ + +class RegionRepository extends AbstractRepository +{ + + /** + * @param int $countryUid + * @param string $season + * + * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface + */ + public function getTeasersByCountryAndSeason($countryUid, $season = 'w') + { + if ($season === null) { + $season = AbstractDestination::SEASON_WINTER; + } + $query = $this->createQuery(); + $constraints = [ + $query->equals('country', $countryUid), + $query->equals('season', $season), + $query->equals('excludeFromTeasergroups', 0) + ]; + return $query + ->matching($query->logicalAnd($constraints)) + ->execute() + ; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RoomMappingRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RoomMappingRepository.php new file mode 100644 index 00000000..7343dac0 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RoomMappingRepository.php @@ -0,0 +1,31 @@ +, 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! + ***************************************************************/ + +class RoomMappingRepository extends AbstractRepository +{} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RoomRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RoomRepository.php new file mode 100644 index 00000000..90a8e36e --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RoomRepository.php @@ -0,0 +1,31 @@ +, 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! + ***************************************************************/ + +class RoomRepository extends AbstractRepository +{} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/SnowreportRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/SnowreportRepository.php new file mode 100644 index 00000000..c7e69bd6 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/SnowreportRepository.php @@ -0,0 +1,69 @@ +, 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 Doctrine\DBAL\Connection; +use EP\EpProducts\Utility\DbUtility; + +class SnowreportRepository extends AbstractRepository +{ + + /** + * @param array $regionUids + * @return array + */ + public function getSnowreportsForRegions(array $regionUids = null) + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + + $query = $qb + ->select( + 'snowreport.*', + 'region.name regionName', 'region.uid regionUid', 'region.detail_page regionDetailPage', + 'country.name countryName', 'country.uid countryUid', 'country.code countryCode', 'country.detail_page countryDetailPage', + 'season_start seasonStart', 'season_end seasonEnd', + '(UNIX_TIMESTAMP() >= snowreport.season_start AND UNIX_TIMESTAMP() <= snowreport.season_end) inSeason' + ) + ->from('tx_epproducts_domain_model_snowreport', 'snowreport') + ->innerJoin('snowreport', 'tx_epproducts_domain_model_region', 'region', 'snowreport.uid = region.snowreport') + ->innerJoin('region', 'tx_epproducts_domain_model_country', 'country', 'region.country = country.uid') + ->where('region.snowreport > 0') + ->groupBy('snowreport.vendor_uid') + ->orderBy('region.name') + ; + + if ($regionUids) { + $qb + ->andWhere('region.uid IN (:regionUids)') + ->setParameter('regionUids', $regionUids, Connection::PARAM_INT_ARRAY) + ; + } + return $query->execute()->fetchAll(); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/TeammemberRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/TeammemberRepository.php new file mode 100644 index 00000000..525db19a --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/TeammemberRepository.php @@ -0,0 +1,38 @@ +, 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! + ***************************************************************/ + +class TeammemberRepository extends AbstractRepository +{ + /** + * @var array + */ + protected $defaultOrderings = [ + 'sorting' => 'ASC', + ]; +} diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/WebcamRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/WebcamRepository.php new file mode 100644 index 00000000..e063857c --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/WebcamRepository.php @@ -0,0 +1,31 @@ +, 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! + ***************************************************************/ + +class WebcamRepository extends AbstractRepository +{} diff --git a/web/typo3conf/ext/ep_products/Classes/Hook/PageLayoutView.php b/web/typo3conf/ext/ep_products/Classes/Hook/PageLayoutView.php new file mode 100644 index 00000000..98b26b1c --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Hook/PageLayoutView.php @@ -0,0 +1,259 @@ +, 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 TYPO3\CMS\Backend\Utility\BackendUtility; +use TYPO3\CMS\Backend\View\PageLayoutView as CorePageLayoutView; +use TYPO3\CMS\Backend\View\PageLayoutViewDrawItemHookInterface; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Object\ObjectManager; +use TYPO3\CMS\Extbase\Service\FlexFormService; + +class PageLayoutView implements PageLayoutViewDrawItemHookInterface +{ + + /** + * @param CorePageLayoutView $parentObject + * @param bool $drawItem + * @param string $headerContent + * @param string $itemContent + * @param array $row + */ + public function preProcess(CorePageLayoutView &$parentObject, &$drawItem, &$headerContent, &$itemContent, array &$row) { + // Country detail + if ($row['CType'] === 'list' && $row['list_type'] === 'epproducts_country_detail') { + $flexFormData = $this->getFlexFormData($row); + $drawItem = false; + $countryUid = $flexFormData['settings']['countryUid']; + $name = $this->getName('country', $countryUid); + $itemContent = 'Detailseite Land
' . $name; + } + + // Region teaser + if ($row['CType'] === 'list' && $row['list_type'] === 'epproducts_region_teasergroup') { + $flexFormData = $this->getFlexFormData($row); + $drawItem = false; + $countryUid = $flexFormData['settings']['countryUid']; + $name = $this->getName('country', $countryUid); + $itemContent = 'Teasergruppe Gebiete
' . $name; + } + + // Region detail + if ($row['CType'] === 'list' && $row['list_type'] === 'epproducts_region_detail') { + $flexFormData = $this->getFlexFormData($row); + $drawItem = false; + $regionUid = $flexFormData['settings']['regionUid']; + $name = $this->getName('region', $regionUid); + $itemContent = 'Detailseite Gebiet
' . $name; + } + + // City teaser + if ($row['CType'] === 'list' && $row['list_type'] === 'epproducts_city_teasergroup') { + $flexFormData = $this->getFlexFormData($row); + $drawItem = false; + $countryUid = $flexFormData['settings']['countryUid']; + $regionUid = $flexFormData['settings']['regionUid']; + $record = []; + if ((int) $regionUid > 0) { + $name = $this->getName('region', $regionUid); + } elseif ((int) $countryUid > 0) { + $name = $this->getName('country', $countryUid); + } + $itemContent = 'Teasergruppe Orte
'; + if (count($record) > 0) { + $itemContent .= $name; + } + } + + // City detail + if ($row['CType'] === 'list' && $row['list_type'] === 'epproducts_city_detail') { + $flexFormData = $this->getFlexFormData($row); + $drawItem = false; + $cityUid = $flexFormData['settings']['cityUid']; + $name = $this->getName('city', $cityUid); + $itemContent = 'Detailseite Ort
' . $name; + } + + // Hotel Teaser + if ($row['CType'] === 'list' && $row['list_type'] === 'epproducts_hotel_teasergroup') { + $flexFormData = $this->getFlexFormData($row); + $drawItem = false; + $countryUid = $flexFormData['settings']['countryUid']; + $regionUid = $flexFormData['settings']['reguionUid']; + $cityUid = $flexFormData['settings']['cityUid']; + $name = ''; + if ((int) $cityUid > 0) { + $name = $this->getName('city', $cityUid); + } elseif ((int) $regionUid > 0) { + $name = $this->getName('region', $regionUid); + } elseif ((int) $countryUid > 0) { + $name = $this->getName('country', $countryUid); + } + $itemContent = 'Teasergruppe Hotels
' . $name; + } + + // Hotel detail + if ($row['CType'] === 'list' && $row['list_type'] === 'epproducts_hotel_detail') { + $flexFormData = $this->getFlexFormData($row); + $drawItem = false; + $hotelUid = $flexFormData['settings']['hotelUid']; + $name = $this->getName('hotel', $hotelUid); + $itemContent = 'Detailseite Hotel
' . $name; + } + + // FAQ + if ($row['CType'] === 'list' && $row['list_type'] === 'epproducts_faq') { + $flexFormData = $this->getFlexFormData($row); + $faqUids = GeneralUtility::trimExplode(',', $flexFormData['settings']['faqUids']); + $drawItem = false; + $itemContent = 'FAQ
' . count($faqUids) . ' Frage(n)'; + } + + // Product pricetable + if ($row['CType'] === 'list' && $row['list_type'] === 'epproducts_product_pricetable') { + $flexFormData = $this->getFlexFormData($row); + $drawItem = false; + $itemContent = 'Buchungstabelle
'; + $productUid = $flexFormData['settings']['productUid']; + $record = BackendUtility::getRecord('tx_epproducts_domain_model_product', $productUid); + $itemContent .= $record['name']; + $hotelUid = $flexFormData['settings']['hotelUid']; + $record = BackendUtility::getRecord('tx_epproducts_domain_model_hotel', $hotelUid); + $itemContent .= ', ' . $record['name']; + } + + // Product detail + if ($row['CType'] === 'list' && $row['list_type'] === 'epproducts_product_detail') { + $flexFormData = $this->getFlexFormData($row); + $drawItem = false; + $itemContent = 'Produkt
'; + $productUid = $flexFormData['settings']['productUid']; + if ((int) $productUid === 0) { + $itemContent .= 'allgemein'; + } else { + $record = BackendUtility::getRecord('tx_epproducts_domain_model_product', $productUid); + $itemContent .= $record['name_internal'] ? $record['name_internal'] : $record['name']; + $hotelUid = $flexFormData['settings']['hotelUid']; + if ((int) $hotelUid > 0) { + $record = BackendUtility::getRecord('tx_epproducts_domain_model_hotel', $hotelUid); + $itemContent .= ', ' . $record['name']; + } + } + } + + // Product teaser + if ($row['CType'] === 'list' && $row['list_type'] === 'epproducts_product_teasergroup') { + $flexFormData = $this->getFlexFormData($row); + $mode = $this->getMode($flexFormData); + $drawItem = false; + switch ($mode) + { + case 'teasergroup': + $itemContent = 'Teasergruppe Produkte
'; + $filterParts = []; + $countryUid = $flexFormData['settings']['countryUid']; + if ((int) $countryUid > 0) { + $record = BackendUtility::getRecord('tx_epproducts_domain_model_country', $countryUid); + $filterParts[] = $record['name']; + } + $regionUid = $flexFormData['settings']['regionUid']; + if ((int) $regionUid > 0) { + $record = BackendUtility::getRecord('tx_epproducts_domain_model_region', $regionUid); + $filterParts[] = $record['name']; + } + $conceptUid = $flexFormData['settings']['conceptUid']; + if ((int) $conceptUid > 0) { + $record = BackendUtility::getRecord('tx_epproducts_domain_model_concept', $conceptUid); + $filterParts[] = $record['name']; + } + $hotelUid = $flexFormData['settings']['hotelUid']; + if ((int) $hotelUid > 0) { + $record = BackendUtility::getRecord('tx_epproducts_domain_model_hotel', $hotelUid); + $filterParts[] = $record['name']; + } + if ($flexFormData['settings']['dateFrom']) { + $filterParts[] = 'von ' . date('d.m.Y', $flexFormData['settings']['dateFrom']); + } + if ($flexFormData['settings']['dateTo']) { + $filterParts[] = 'bis ' . date('d.m.Y', $flexFormData['settings']['dateTo']); + } + if ((bool) $flexFormData['settings']['busAvailable'] === true) { + $filterParts[] = 'Busreisen'; + } + $itemContent .= implode(', ', $filterParts); + break; + case 'single': + $itemContent = 'Teaser Produkt
'; + $productUid = $flexFormData['settings']['productUid']; + $record = BackendUtility::getRecord('tx_epproducts_domain_model_product', $productUid); + $itemContent .= $record['name']; + $hotelUid = $flexFormData['settings']['hotelUid']; + if ((int) $hotelUid > 0) { + $record = BackendUtility::getRecord('tx_epproducts_domain_model_hotel', $hotelUid); + $itemContent .= ', ' . $record['name']; + } + break; + } + } + + } + + /** + * @param array $row + * @return array + */ + protected function getFlexFormData(array $row) + { + /** @var \TYPO3\CMS\Extbase\Service\FlexFormService $flexFormService */ + $flexFormService = GeneralUtility::makeInstance(FlexFormService::class); + return $flexFormService->convertFlexFormContentToArray($row['pi_flexform']); + } + + /** + * @param array $flexFormData + * @return string + */ + protected function getMode(array $flexFormData) + { + $controllerAction = $flexFormData['switchableControllerActions']; + return substr($controllerAction, strpos($controllerAction, '>') + 1); + } + + /** + * @param string $type + * @param integer $uid + * + * @return string + */ + protected function getName($type, $uid) + { + $record = BackendUtility::getRecord('tx_epproducts_domain_model_' . $type, $uid); + return $record['name']; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Hook/Tcemain.php b/web/typo3conf/ext/ep_products/Classes/Hook/Tcemain.php new file mode 100644 index 00000000..8e1c86d0 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Hook/Tcemain.php @@ -0,0 +1,125 @@ +, 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\Service\GeolocationService; +use TYPO3\CMS\Core\DataHandling\DataHandler; +use TYPO3\CMS\Core\Messaging\FlashMessage; +use TYPO3\CMS\Core\Messaging\FlashMessageService; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Object\ObjectManager; + +class Tcemain +{ + + /** + * @var array + */ + protected $tables = [ + 'tx_epproducts_domain_model_country', + 'tx_epproducts_domain_model_region', + 'tx_epproducts_domain_model_city' + ]; + + /** + * @param array $fields + * @param string $table + * @param int $id + * @param DataHandler $obj + */ + public function processDatamap_preProcessFieldArray(array &$fields, $table, $id, DataHandler $obj) + { + if ($fields['name'] !== '' && $fields['latitude'] === '' && $fields['longitude'] === '' && in_array($table, $this->tables)) { + $coordinates = GeolocationService::getCoordinates($fields['name']); + $fields['latitude'] = $coordinates['latitude']; + $fields['longitude'] = $coordinates['longitude']; + } + if ($table === 'tx_epproducts_domain_model_hotel' && $fields['address'] !== ''&& $fields['latitude'] === '' && $fields['longitude'] === '') { + $coordinates = GeolocationService::getCoordinates($fields['address']); + $fields['latitude'] = $coordinates['latitude']; + $fields['longitude'] = $coordinates['longitude']; + } + // Render flash message in case of duplicate entry + if ($table === 'tx_epproducts_domain_model_matchcode' && $fields['code'] !== '') { + $code = $fields['code']; + if (is_numeric($id)) { + $existing = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow( + 'uid', + 'tx_epproducts_domain_model_matchcode', + 'code="' . $code . '" AND uid != ' . $id . ' AND deleted=0' + ); + } else { + $existing = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow( + 'uid', + 'tx_epproducts_domain_model_matchcode', + 'code="' . $code . '" AND deleted=0' + ); + } + if ($existing) { + $this->addFlashMessage('Der Hotelcode ' . $code . ' ist schon vergeben worden.', 'Hinweis', FlashMessage::WARNING); + } + } + if ($table === 'tx_epproducts_domain_model_product' && $fields['code'] !== '') { + $code = $fields['code']; + if (is_numeric($id)) { + $existing = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow( + 'uid', + 'tx_epproducts_domain_model_product', + 'code="' . $code . '" AND uid != ' . $id . ' AND deleted=0' + ); + } else { + $existing = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow( + 'uid', + 'tx_epproducts_domain_model_product', + 'code="' . $code . ' AND deleted=0' + ); + } + if ($existing) { + $this->addFlashMessage('Der Productcode ' . $code . ' ist schon vergeben worden.', 'Hinweis', FlashMessage::WARNING); + } + } + } + + + + /** + * @param string $message + * @param string $title + * @param int $severity + */ + private function addFlashMessage($message, $title, $severity) + { + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + /** @var \TYPO3\CMS\Core\Messaging\FlashMessageService $flashMessageService */ + $flashMessageService = $objectManager->get(FlashMessageService::class); + $messageQueue = $flashMessageService->getMessageQueueByIdentifier(); + /** @var \TYPO3\CMS\Core\Messaging\FlashMessage $message */ + $message = GeneralUtility::makeInstance(FlashMessage::class, $message, $title, $severity, true); + $messageQueue->addMessage($message); + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Service/ContingentService.php b/web/typo3conf/ext/ep_products/Classes/Service/ContingentService.php new file mode 100644 index 00000000..780f4766 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/ContingentService.php @@ -0,0 +1,247 @@ +, 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 Doctrine\DBAL\Connection; +use EP\EpProducts\Domain\Model\Contingent; +use EP\EpProducts\Utility\DbUtility; +use TYPO3\CMS\Core\Log\Logger; +use TYPO3\CMS\Core\SingletonInterface; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; + +class ContingentService implements SingletonInterface +{ + const ROOMCODE_STATUS = 'BelKal'; + + /** + * @var ConfigurationManagerInterface + */ + protected $configurationManager; + + /** + * @var int + */ + protected $pid = 0; + + /** + * @var Connection + */ + protected $db; + + /** + * @var Logger + */ + protected $logger; + + /** + * @param ConfigurationManagerInterface $manager + */ + public function __construct(ConfigurationManagerInterface $manager) + { + $this->configurationManager = $manager; + $settings = GeneralUtility::removeDotsFromTS( + $this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT) + ); + if (isset($settings['plugin']['tx_epproducts']['persistence']['storagePid'])) { + $this->pid = $settings['plugin']['tx_epproducts']['persistence']['storagePid']; + } elseif (isset($settings['module']['tx_epproducts']['persistence']['storagePid'])) { + $this->pid = $settings['module']['tx_epproducts']['persistence']['storagePid']; + } + $this->db = DbUtility::getDbConnection(); + $this->logger = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Log\LogManager::class)->getLogger(__CLASS__); + } + + /** + * @param string $path + * @return int + */ + public function import($path) + { + $this->createTempTable(); + $this->logger->info('starting product import'); + $contingentCount = $this->parseXmlFilesInFolder($path); + $this->clearTable(); + $this->copyTable(); + $this->clearTempTable(); + return $contingentCount; + } + + /** + * @param string $path + * @return int + */ + public function parseXmlFilesInFolder($path) + { + $dateCount = 0; + $folder = opendir($path); + while (($fileName = readdir($folder)) !== false) { + if (strpos($fileName, 'HotelZimmer') === 0) { + $filePath = $path . '/' . $fileName; + $dateCount += $this->parseContingentXmlFile($filePath); + } + } + return $dateCount; + } + + /** + * @param string $file + * @return int + */ + public function parseContingentXmlFile($file) + { + libxml_use_internal_errors (true); + /** @var \SimpleXMLElement $xmlData */ + if (!$xmlData = simplexml_load_file($file)) { + libxml_clear_errors(); + return 0; + } + return $this->parseContingent($xmlData); + } + + public function createTempTable() + { + $this->db->exec('CREATE TABLE IF NOT EXISTS tx_epproducts_domain_model_contingent_temp LIKE tx_epproducts_domain_model_contingent'); + } + + public function clearTable() + { + $this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_contingent'); + } + + public function copyTable() + { + $this->db->exec('INSERT INTO tx_epproducts_domain_model_contingent SELECT * FROM tx_epproducts_domain_model_contingent_temp'); + } + + public function clearTempTable() + { + $this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_contingent_temp'); + } + + /** + * @param \SimpleXMLElement $xmlContingent + * @return int + */ + protected function parseContingent(\SimpleXMLElement $xmlContingent) + { + $hotelCode = (string) $xmlContingent['code']; + $sql = 'SELECT uid, groupsch_id FROM tx_epproducts_domain_model_hotel WHERE deleted = 0 AND hidden = 0 AND code = :code'; + $hotelData = $this->db->fetchAssoc($sql, ['code' => $hotelCode]); + + // Skip import in case hotel can't be found + if ($hotelData === false) { + $this->logger->warning('hotel not found', ['code' => $hotelCode]); + return 0; + } elseif (empty($xmlContingent->kapazitaeten)) { + $this->logger->warning('hotel has no contingents', ['code' => $hotelCode]); + return 0; + } else { + $roomTypes = $this->parseRoomTypes($xmlContingent->unterbringungen); + return $this->parseRooms($xmlContingent->kapazitaeten, $hotelData, $roomTypes); + } + } + + /** + * @param \SimpleXMLElement[] $xmlTypes + * @return array + */ + protected function parseRoomTypes($xmlTypes) + { + $types = []; + foreach ($xmlTypes->unterbringung as $xmlType) + { + $types[(string) $xmlType['idbuspro']] = [ + 'pax' => (int) $xmlType['pax_max'], + 'ctrl' => (string) $xmlType['code'] === self::ROOMCODE_STATUS, + ]; + } + return $types; + } + + /** + * @param \SimpleXMLElement|\SimpleXMLElement[] $xmlDates + * @param array $hotelData + * @param array $roomTypes + * + * @return int + */ + protected function parseRooms(\SimpleXMLElement $xmlDates, array $hotelData, array $roomTypes) + { + $dateCount = 0; + foreach ($xmlDates->kapazitaet as $xmlDate) + { + $totalPax = 0; + $totalAvailable = 0; + $status = Contingent::STATUS_OK; + $statusBlocked = false; + $statusOnRequest = false; + foreach ($xmlDate->zimmerliste->children() as $xmlRoom) + { + $roomTypeBusProId = (string) $xmlRoom['idbuspro']; + if (!array_key_exists($roomTypeBusProId, $roomTypes)) { + continue; + } + $roomType = $roomTypes[$roomTypeBusProId]; + if ($roomType['ctrl'] === true) { + if ((string) $xmlRoom['status'] === 'A') { + $statusOnRequest = true; + } + if ((string) $xmlRoom['status'] === 'S') { + $statusBlocked = true; + } + } else { + $totalPax += $roomType['pax'] * (int) $xmlRoom['kontingent']; + $available = (int) $xmlRoom['frei'] > 0 ? (int) $xmlRoom['frei'] : 0; + $totalAvailable += $roomType['pax'] * $available; + } + } + if ($statusBlocked) { + $status = Contingent::STATUS_BLOCKED; + } elseif ($statusOnRequest) { + $status = Contingent::STATUS_ONREQUEST; + } + $date = \DateTime::createFromFormat('d.m.Y', (string) $xmlDate['termin']); + $this->db->insert( + 'tx_epproducts_domain_model_contingent_temp', + [ + 'pid' => $this->pid, + 'hotel' => $hotelData['uid'], + 'groupsch_id' => $hotelData['groupsch_id'], + 'pax' => $totalPax, + 'available' => $totalAvailable, + 'status' => $status, + 'date' => $date->format('Y-m-d'), + ] + ); + $dateCount++; + } + return $dateCount; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Service/DateService.php b/web/typo3conf/ext/ep_products/Classes/Service/DateService.php new file mode 100644 index 00000000..aa84db2e --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/DateService.php @@ -0,0 +1,343 @@ +, 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\Date; +use EP\EpProducts\Domain\Model\FilterSettings; +use EP\EpProducts\Domain\Model\Hotel; +use EP\EpProducts\Domain\Model\Product; +use EP\EpProducts\Domain\Repository\DateRepository; +use EP\EpProducts\Domain\Repository\ProductRepository; +use EP\EpProducts\Utility\BookingUrlUtility; +use TYPO3\CMS\Core\SingletonInterface; + +class DateService implements SingletonInterface +{ + /** + * @var ProductRepository + */ + protected $productRepository; + + /** + * @var FilterService + */ + protected $filterService; + + /** + * @var DateRepository + */ + protected $dateRepository; + + /** + * @param ProductRepository $productRepository + * @param DateRepository $dateRepository + * @param FilterService $filterService + */ + public function __construct(ProductRepository $productRepository, DateRepository $dateRepository, FilterService $filterService) + { + $this->productRepository = $productRepository; + $this->filterService = $filterService; + $this->dateRepository = $dateRepository; + } + + /** + * @param Product $product + * @param Hotel $hotel + * @param FilterSettings|null $filterSettings + * @param Date|null $date + * @param string $template + * + * @return array + */ + public function getPriceTable + ( + Product $product, + Hotel $hotel, + FilterSettings $filterSettings = null, + Date $date = null, + $template = 'base' + ) + { + if ($filterSettings === null) { + $filterSettings = $this->filterService->getDefaultFilterSettings(); + } + $priceTableData = $this->productRepository->getPricetable($product, $hotel, $filterSettings, $date); + return $this->preprocessPriceTable($priceTableData, $template); + } + + /** + * @param Product $product + * @param Hotel $hotel + * @param FilterSettings|null $filterSettings + * + * @return array + */ + public function getDatesTable + ( + Product $product, + Hotel $hotel, + FilterSettings $filterSettings = null, + $template = 'base' + ) + { + if ($filterSettings === null) { + $filterSettings = $this->filterService->getDefaultFilterSettings(); + } + $dateTableData = $this->productRepository->getAvailableDates($product, $hotel, $filterSettings); + return $this->preprocessDateTable($dateTableData, $template); + } + + /** + * @param Product $product + * @param int $maxPax + * @param string $template + * @return array + */ + public function getEventPriceTable(Product $product, $maxPax = 99, $template = 'base') + { + $priceTableData = $this->productRepository->getEventPriceTable($product); + return $this->preprocessEventPriceTable($priceTableData, $maxPax, $template); + } + + /** + * @param FilterSettings $filterSettings + * @param string $search + * @param array $excludedConceptUids + * + * @return array + */ + public function getAutocompleteOptions(FilterSettings $filterSettings, $search, $excludedConceptUids = []) + { + $destinations = [ + 'country' => [ + 'label' => 'Länder', + 'options' => [], + ], + 'region' => [ + 'label' => 'Gebiete', + 'options' => [], + ], + 'city' => [ + 'label' => 'Orte', + 'options' => [], + ], + 'hotel' => [ + 'label' => 'Unterkünfte', + 'options' => [], + ], + 'product' => [ + 'label' => 'Reiseangebote', + 'options' => [], + ], + ]; + + $search = mb_strtolower(trim($search)); + + foreach ($destinations as $type => $dummy) + { + switch ($type) + { + case 'hotel': + $result = $this->dateRepository->searchHotels($search, $filterSettings); + break; + case 'product': + $result = $this->dateRepository->searchProducts($search, $filterSettings, $excludedConceptUids); + break; + default: + $result = $this->dateRepository->searchDestinations($type, $search, $filterSettings); + } + + foreach ($result as $row) + { + $destinations[$type]['options'][] = [ + 'uid' => $row['uid'], + 'name' => $row['name'], + ]; + } + } + + return $destinations; + } + + /** + * @param array $priceTableData + * @param string $template + * + * @return array + */ + public function preprocessPriceTable(array $priceTableData, $template) + { + $priceTable = []; + + foreach ($priceTableData as $row) + { + $dateStart = new \DateTime($row['dateStart']); + $dateEnd = new \DateTime($row['dateEnd']); + $bookingUrl = BookingUrlUtility::generateUrl( + $row['dateBusProId'], + $row['hotelBusProId'], + $row['dateEnd'], + $template + ); + $priceTable[] = [ + 'dateStart' => $dateStart->format('d.m.Y'), + 'dateEnd' => $dateEnd->format('d.m.Y'), + 'dateBusIncluded' => (bool) $row['dateBusIncluded'], + 'dateSkipassIncluded' => (bool) $row['dateSkipassIncluded'], + 'roomUid' => $row['roomUid'], + 'roomAvailable' => $row['roomAvailable'] && $row['roomPrice'], + 'roomName' => $row['roomName'], + 'roomPrice' => $row['roomPrice'], + 'roomBusPrice' => $row['busPrice'], + 'roomDiscount' => $row['roomDiscount'], + 'roomNights' => $row['roomNights'], + 'roomOptionalServices' => unserialize($row['roomOptionalServices']), + 'dateBusProId' => $row['dateBusProId'], + 'hotelBusProId' => $row['hotelBusProId'], + 'roomBusProId' => $row['roomBusProId'], + 'bookingUrl' => $bookingUrl, + ]; + } + + return $priceTable; + } + + /** + * @param array $dateTableData + * @param string $template + * + * @return array + */ + public function preprocessDateTable(array $dateTableData, $template) + { + $dateTable = []; + foreach ($dateTableData as $row) + { + $dateStart = new \DateTime($row['dateStart']); + $dateEnd = new \DateTime($row['dateEnd']); + $bookingUrl = BookingUrlUtility::generateUrl( + $row['dateBusProId'], + $row['hotelBusProId'], + $row['dateEnd'], + $template + ); + $dateTable[] = [ + 'dateUid' => $row['dateUid'], + 'dateStart' => $dateStart->format('d.m.y'), + 'dateEnd' => $dateEnd->format('d.m.y'), + 'dateMinPrice' => $row['dateMinPrice'], + 'dateBusPrice' => $row['dateBusPrice'], + 'dateDiscount' => $row['dateDiscount'], + 'dateNights' => $row['dateNights'], + 'dateBusIncluded' => (bool) $row['dateBusIncluded'], + 'dateSkipassIncluded' => (bool) $row['dateSkipassIncluded'], + 'dateServicesIncluded' => unserialize($row['dateServicesIncluded']), + 'dateServicesGeneral' => unserialize($row['dateServicesGeneral']), + 'available' => $row['available'], + 'bookingUrl' => $bookingUrl, + ]; + } + + return $dateTable; + } + + /** + * @param array $priceTableData + * @param int $maxPax + * @param string $template + * @return array + */ + public function preprocessEventPriceTable(array $priceTableData, $maxPax = 99, $template = 'base') + { + $priceTable = [ + Hotel::CATEGORY_STANDARD => [], + Hotel::CATEGORY_COMFORT => [], + Hotel::CATEGORY_DELUXE => [], + Hotel::CATEGORY_SUPER_DELUXE => [], + ]; + + foreach ($priceTableData as $row) + { + $categoryUid = $row['hotelCategory']; + $hotelUid = $row['hotelUid']; + if (!array_key_exists($hotelUid, $priceTable[$categoryUid])) { + $priceTable[$categoryUid][$hotelUid] = [ + 'category' => $categoryUid, + 'hotelName' => $row['hotelName'], + 'hotelTitle' => $row['hotelTitle'], + 'bookingUrl' => BookingUrlUtility::generateUrl( + $row['dateBusProId'], + $row['hotelBusProId'], + $row['dateEnd'], + $template + ), + 'rooms' => [], + ]; + } + + $roomPax = $row['roomPax']; + if ($roomPax > $maxPax) { + $roomPax = $maxPax; + } + + $entry =& $priceTable[$categoryUid][$hotelUid]['rooms']; + // Add new entry or replace possible existing entry that is not + // bookable with current record in case of matching category + // and pax + if (!array_key_exists($roomPax, $entry)) { + $entry[$roomPax] = [ + 'price' => $row['roomPrice'], + 'available' => $row['available'] && $row['roomPrice'], + + ] ; + } else { + $lastEntry = $entry[$roomPax]; + if (!$lastEntry['available'] || ($lastEntry['available'] && $row['available'] && ($lastEntry['price'] > $row['roomPrice']))) { + $entry[$roomPax] = [ + 'price' => $row['roomPrice'], + 'available' => $row['available'] && $row['roomPrice'], + ]; + } + } + } + + // Sort by category + foreach ($priceTable as $category => $rows) + { + uasort($rows, function ($a, $b) { + return strcmp( + $a['rooms'][Hotel::CATEGORY_SUPER_DELUXE]['price'], + $b['rooms'][Hotel::CATEGORY_SUPER_DELUXE]['price'] + ); + }); + $priceTable[$category] = $rows; + } + + return $priceTable; + } + +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_products/Classes/Service/FilterService.php b/web/typo3conf/ext/ep_products/Classes/Service/FilterService.php new file mode 100644 index 00000000..f78e74d7 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/FilterService.php @@ -0,0 +1,390 @@ +, 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\Date; +use EP\EpProducts\Domain\Model\FilterOptions; +use EP\EpProducts\Domain\Model\FilterSettings; +use EP\EpProducts\Domain\Model\Product; +use EP\EpProducts\Domain\Repository\DateRepository; +use TYPO3\CMS\Core\SingletonInterface; +use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Core\Utility\PathUtility; + +class FilterService implements SingletonInterface +{ + /** + * @var array + */ + static protected $cache = []; + + /** + * @var \EP\EpProducts\Domain\Repository\DateRepository + */ + protected $dateRepository; + + /** + * @param DateRepository $dateRepository + */ + public function __construct(DateRepository $dateRepository) + { + $this->dateRepository = $dateRepository; + } + + /** + * @param int $forcedConceptUid + * @param bool $respectBookableDaterange + * + * @return FilterSettings + */ + public function getDefaultFilterSettings($forcedConceptUid = null, $respectBookableDaterange = true) + { + list($dateFrom, $dateTo) = $this->constrainDateRange($this->getDateRange()); + if (!$respectBookableDaterange) { + $dateFrom = new \DateTime('now'); + } + $filterSettings = new FilterSettings($dateFrom, $dateTo); + if ($forcedConceptUid) { + $filterSettings->setConceptUids([ $forcedConceptUid ]); + } + + return $filterSettings; + } + + /** + * @param FilterSettings $filterSettings + * @param array $excludedConceptUids + * + * @return FilterOptions + */ + public function getFilterOptions(FilterSettings $filterSettings, $excludedConceptUids = []) + { + $key = md5(serialize($filterSettings) . serialize($excludedConceptUids)); + if (empty(static::$cache['filterOptions'][$key])) { + static::$cache['filterOptions'][$key] = $this->dateRepository->getFilterOptions($filterSettings, $excludedConceptUids); + } + $filterOptionsData = static::$cache['filterOptions'][$key]; + if (count($filterOptionsData) === 0) { + return null; + } + $dateRange = $this->constrainDateRange($this->getDateRange()); + return $this->preprocessFilterOptions($filterOptionsData, $dateRange); + } + + /** + * @param array $filterOptionsData + * @param array $dateRange + * + * @return FilterOptions + */ + public function preprocessFilterOptions(array $filterOptionsData, array $dateRange) + { + $priceRanges = []; + $busAvailable = false; + $nights = []; + $concepts = []; + $destinations = []; + $hotelTypes = []; + $roomTypes = []; + $boardTypes = []; + + $absPath = ExtensionManagementUtility::extPath('ep_theme'); + $baseUrl = '/' . PathUtility::stripPathSitePrefix($absPath); + + foreach ($filterOptionsData as $row) + { + // Bus + if ((bool) $row['busAvailable'] === true) { + $busAvailable = true; + } + + // Nights + $duration = (int) $row['nights'] <= 4 ? Date::DURATION_SHORT : Date::DURATION_LONG; + + if (!in_array($duration, $nights)) { + $nights[] = $duration; + } + + // Concepts + if (!array_key_exists($row['conceptUid'], $concepts)) { + $concepts[$row['conceptSorting']] = [ + 'uid' => $row['conceptUid'], + 'name' => $row['conceptName'], + 'code' => $row['conceptCode'], + ]; + } + + // Destinations + if (!array_key_exists($row['countryUid'], $destinations)) { + $destinations[$row['countryUid']] = [ + 'country' => [ + 'uid' => $row['countryUid'], + 'label' => $row['countryName'], + 'code' => $row['countryCode'], + 'flag' => $baseUrl . 'Resources/Public/images/' . strtolower($row['countryCode']) . '.png', + ], + 'regions' => [], + ]; + } + if (!array_key_exists($row['regionUid'], $destinations[$row['countryUid']]['regions'])) { + $destinations[$row['countryUid']]['regions'][$row['regionUid']] = [ + 'uid' => $row['regionUid'], + 'label' => $row['regionName'], + ]; + } + + // Hotel types + if (!in_array($row['hotelType'], $hotelTypes)) { + $hotelTypes[] = $row['hotelType']; + } + + // Room types + if (!in_array($row['roomType'], $roomTypes)) { + $roomTypes[] = $row['roomType']; + } + + // Board types + $boardType = [ + 'uid' => $row['boardUid'], + 'label' => $row['boardType'], + ]; + if ($row['boardUid'] && !in_array($boardType, $boardTypes)) { + $boardTypes[] = $boardType; + } + + // Price range + foreach (FilterSettings::$priceRanges as $index => $priceRange) + { + if (array_key_exists($index, $priceRanges)) { + continue; + } + list($min, $max) = $priceRange; + if ($row['minPrice'] >= $min && $row['minPrice'] < $max) { + $priceRanges[$index] = FilterSettings::$priceRanges[$index]; + } + } + } + + foreach ($destinations as $key => $value) + { + usort($value['regions'], function ($a, $b) { + return strcmp($a['label'], $b['label']); + }); + $destinations[$key] = $value; + } + + sort($nights); + ksort($priceRanges); + + usort($boardTypes, function ($a, $b) { + return strcmp($a['label'], $b['label']); + }); + + list ($dateMin, $dateMax) = $dateRange; + + $filterOptions = new FilterOptions(); + $filterOptions->setPriceRanges($priceRanges); + $filterOptions->setDateFrom($dateMin); + $filterOptions->setDateTo($dateMax); + $filterOptions->setConcepts($concepts); + $filterOptions->setDestinations($destinations); + $filterOptions->setHotelTypes($hotelTypes); + $filterOptions->setRoomTypes($roomTypes); + $filterOptions->setBoardTypes($boardTypes); + $filterOptions->setBusAvailable($busAvailable); + $filterOptions->setNights($nights); + + return $filterOptions; + } + + /** + * @param FilterSettings $filterSettings + * + * @return array + */ + public function getDateRange(FilterSettings $filterSettings = null) + { + $key = md5(serialize($filterSettings)); + if (empty(static::$cache['dateRange'][$key])) { + static::$cache['dateRange'][$key] = $this->dateRepository->getDateRange(); + } + return static::$cache['dateRange'][$key]; + } + + /** + * @param Product $product + * @param FilterSettings $filterSettings + * + * @return array + */ + public function getProductDateRange(Product $product, FilterSettings $filterSettings = null) + { + $key = md5($product->getUid() . serialize($filterSettings)); + if (empty(static::$cache['productDateRange'][$key])) { + static::$cache['productDateRange'][$key] = $this->dateRepository->getDateRange($product); + } + return $this->constrainDateRange(static::$cache['productDateRange'][$key], $filterSettings); + } + + /** + * @param array $dateRange + * @param FilterSettings $filterSettings + * + * @return array + */ + public function constrainDateRange(array $dateRange, FilterSettings $filterSettings = null) + { + list ($dateFrom, $dateTo) = $dateRange; + if ($filterSettings !== null) { + $filterSettingsDateFrom = $filterSettings->getDateFrom(); + if ($filterSettingsDateFrom !== null && $filterSettingsDateFrom > $dateFrom) { + $dateFrom = $filterSettings->getDateFrom(); + } + $filterSettingsDateTo = $filterSettings->getDateTo(); + if ($filterSettingsDateTo !== null && $filterSettingsDateTo < $dateTo) { + $dateTo = $filterSettings->getDateTo(); + } + } + return [$dateFrom, $dateTo]; + } + + /** + * @param FilterSettings $filterSettings + */ + public function sanitizeDateRange(FilterSettings $filterSettings) + { + list($validDateFrom, $validDateTo) = $this->getDateRange(); + $dateFrom = $filterSettings->getDateFrom(); + $dateTo = $filterSettings->getDateTo(); + if ($dateFrom !== null && $dateTo !== null && $dateFrom >= $dateTo) { + $dateTo = clone $dateFrom; + $dateTo->add(new \DateInterval('P14D')); + $filterSettings->setDateTo($dateTo); + } + if ($dateFrom !== null && $dateFrom < $validDateFrom) { + $filterSettings->setDateFrom($validDateFrom); + } + if ($dateTo !== null && $dateTo > $validDateTo) { + $filterSettings->setDateTo($validDateTo); + } + } + + /** + * @param FilterSettings $filterSettings + * @param int $conceptUid + * + * @return FilterSettings + */ + public function forceConceptUid(FilterSettings $filterSettings, $conceptUid = null) + { + if ($conceptUid) { + $conceptUids = $filterSettings->getConceptUids(); + if (!in_array($conceptUid, $conceptUids)) { + $conceptUids[] = (int) $conceptUid; + $filterSettings->setConceptUids($conceptUids); + } + } + + return $filterSettings; + } + + /** + * Converts destination type and destination id combo + * from searchbar into appropriate filter setting for + * further processing + * + * @param FilterSettings $filterSettings + */ + public function convertDestinationData(FilterSettings $filterSettings) + { + if ($filterSettings->getDestinationUid() === 0) { + return; + } + + $destinationUid = $filterSettings->getDestinationUid(); + $destinationType = $filterSettings->getDestinationType(); + + switch ($destinationType) + { + case FilterSettings::DESTINATION_TYPE_COUNTRY: + $filterSettings->setCountryUids([$destinationUid]); + break; + case FilterSettings::DESTINATION_TYPE_REGION: + $filterSettings->setRegionUids([$destinationUid]); + break; + case FilterSettings::DESTINATION_TYPE_CITY: + $filterSettings->setCityUids([$destinationUid]); + break; + case FilterSettings::DESTINATION_TYPE_HOTEL: + $filterSettings->setHotelUid($destinationUid); + break; + case FilterSettings::DESTINATION_TYPE_PRODUCT: + $filterSettings->setProductUid($destinationUid); + break; + } + + } + + /** + * @param array $settings + * @return FilterSettings + */ + public function getFiltersettingsFromSettings(array $settings) + { + $filterSettings = new FilterSettings(); + if (isset($settings['regionUid']) && (int) $settings['regionUid'] > 0) { + $filterSettings->setRegionUids([$settings['regionUid']]); + } elseif (isset($settings['countryUid']) && (int) $settings['countryUid'] > 0) { + $filterSettings->setCountryUids([$settings['countryUid']]); + } elseif (isset($settings['hotelUid']) && (int) $settings['hotelUid'] > 0) { + $filterSettings->setHotelUid($settings['hotelUid']); + } + if (isset($settings['conceptUid']) && (int) $settings['conceptUid'] > 0) { + $filterSettings->setConceptUids([$settings['conceptUid']]); + } + if (isset($settings['dateFrom']) && (int) $settings['dateFrom'] > 0) { + $dateFrom = new \DateTime(); + $dateFrom->setTimestamp($settings['dateFrom']); + $filterSettings->setDateFrom($dateFrom); + } + if (isset($settings['dateTo']) && (int) $settings['dateTo'] > 0) { + $dateTo = new \DateTime(); + $dateTo->setTimestamp($settings['dateTo']); + $filterSettings->setDateTo($dateTo); + } + if (isset($settings['busAvailable']) && (bool) $settings['busAvailable'] === true) { + $filterSettings->setBus(true); + } + if (array_key_exists('hotelTypes', $settings)) { + $hotelTypes = GeneralUtility::trimExplode(',', $settings['hotelTypes'], true); + $filterSettings->setHotelTypes($hotelTypes); + } + return $filterSettings; + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Service/FilterSettingsEncoder.php b/web/typo3conf/ext/ep_products/Classes/Service/FilterSettingsEncoder.php new file mode 100644 index 00000000..aa98ae12 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/FilterSettingsEncoder.php @@ -0,0 +1,107 @@ +, 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\FilterSettings; +use TYPO3\CMS\Core\Utility\GeneralUtility; + +class FilterSettingsEncoder +{ + /** + * @return array + */ + protected static function getMapping() + { + return [ + [ 'destinationName', 'string' ], + [ 'destinationUid', 'string' ], + [ 'destinationType', 'string' ], + [ 'countryUids', 'array' ], + [ 'regionUids', 'array' ], + [ 'cityUids', 'array' ], + [ 'conceptUids', 'array' ], + [ 'hotelUid', 'string' ], + [ 'productUid', 'string' ], + [ 'nights', 'string' ], + [ 'pax', 'string' ], + [ 'boardTypes', 'array' ], + [ 'hotelTypes', 'array' ], + [ 'roomTypes', 'array' ], + [ 'dateFrom', 'date' ], + [ 'dateTo', 'date' ], + [ 'bus', 'string' ], + ]; + } + + /** + * @param FilterSettings $filterSettings + * + * @return string + */ + public static function encode(FilterSettings $filterSettings) + { + $encoded = []; + foreach (static::getMapping() as $property) + { + list($name, $type) = $property; + $method = 'get' . ucfirst($name); + $value = $filterSettings->{$method}(); + if ($type === 'array') { + $encoded[] = implode(',', $value); + } elseif ($type === 'date') { + $encoded[] = ($value !== null) ? $value->format('Y-m-d') : ''; + } else { + $encoded[] = preg_replace('/\r|\n/', '', $value); + } + } + + return implode('|', $encoded); + } + + /** + * @param string $data + * + * @return array + */ + public static function decode($data) + { + $decoded = []; + $values = explode('|', $data); + foreach (static::getMapping() as $index => $property) + { + list($name, $type) = $property; + $value = $values[$index]; + if ($type === 'array') { + $value = GeneralUtility::trimExplode(',', $value, true); + } + $decoded[$name] = $value; + } + + return $decoded; + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Service/GeolocationService.php b/web/typo3conf/ext/ep_products/Classes/Service/GeolocationService.php new file mode 100644 index 00000000..c4176d24 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/GeolocationService.php @@ -0,0 +1,50 @@ +, 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! + ***************************************************************/ + +class GeolocationService +{ + + /** + * @param string $place + * + * @return array + */ + public static function getCoordinates($place) + { + $coordinates = []; + $apiUrl = urlencode('http://maps.googleapis.com/maps/api/geocode/xml?address=' . $place); + $result = @simplexml_load_file($apiUrl); + if ($result !== false) { + $coordinates['latitude'] = (string) $result->result->geometry->location->lat; + $coordinates['longitude'] = (string) $result->result->geometry->location->lng; + } + return $coordinates; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Service/HotelService.php b/web/typo3conf/ext/ep_products/Classes/Service/HotelService.php new file mode 100644 index 00000000..0848ead8 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/HotelService.php @@ -0,0 +1,268 @@ +, 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\Product; +use EP\EpProducts\Domain\Repository\HotelRepository; +use TYPO3\CMS\Core\SingletonInterface; + +class HotelService implements SingletonInterface +{ + + /** + * @var \EP\EpProducts\Domain\Repository\HotelRepository + */ + protected $hotelRepository; + /** + * @var ImageService + */ + protected $imageService; + + /** + * @param HotelRepository $hotelRepository + * @param ImageService $imageService + */ + public function __construct(HotelRepository $hotelRepository, ImageService $imageService) + { + $this->hotelRepository = $hotelRepository; + $this->imageService = $imageService; + } + + /** + * @param Product $product + * + * @return array + */ + public function getList(Product $product) + { + $hotelData = $this->hotelRepository->getListByProduct($product->getUid()); + return $this->preprocessHotelList($hotelData); + } + + /** + * @param int $hotelUid + * @return array + */ + public function getTeaser($hotelUid) + { + $hotelData = $this->hotelRepository->getSingleByUid($hotelUid); + + $hotelCategory = array_key_exists($hotelData['hotelCategory'], Hotel::$categoryLabels) ? + Hotel::$categoryLabels[$hotelData['hotelCategory']] : null; + + $dateStart = new \DateTime($hotelData['dateStart']); + $dateEnd = new \DateTime($hotelData['dateEnd']); + + return [ + 'minDateStart' => $dateStart, + 'maxDateEnd' => $dateEnd, + 'minPrice' => $hotelData['minPrice'], + 'pseudoPrice' => $hotelData['pseudoPrice'], + 'available' => $hotelData['available'], + 'detailPage' => $hotelData['hotelDetailPage'], + 'name' => $hotelData['hotelName'], + 'teaser' => $hotelData['hotelTeaser'], + 'category' => $hotelCategory, + 'images' => $this->imageService->getHotelImages($hotelUid), + 'country' => [ + 'name' => $hotelData['country'], + 'code' => $hotelData['countryCode'] + ], + 'region' => [ + 'name' => $hotelData['regionName'], + ] + ]; + } + + /** + * @param array $criteria + * @return array + */ + public function getTeasersByCriteria(array $criteria) + { + $teaserData = $this->hotelRepository->getListByCriteria($criteria); + + return $this->preprocessTeaserData($teaserData); + } + + /** + * @param array $criteria + * @param array $excludedHotelUids + * @return array + */ + public function getDateIndependentTeasersByCriteria(array $criteria, array $excludedHotelUids = []) + { + $teaserData = $this->hotelRepository->getDateIndependentListByCriteria($criteria, $excludedHotelUids); + + return $this->preprocessTeaserData($teaserData); + } + + /** + * @param array $teaserData + * @return array + */ + protected function preprocessTeaserData(array $teaserData) + { + $teasers = []; + foreach ($teaserData as $row) + { + $hotelUid = $row['hotelUid']; + + $hotelCategory = array_key_exists($row['hotelCategory'], Hotel::$categoryLabels) ? + Hotel::$categoryLabels[$row['hotelCategory']] : null; + + if (!array_key_exists($hotelUid, $teasers)) { + $teasers[$hotelUid] = [ + 'minDateStart' => null, + 'maxDateEnd' => null, + 'minPrice' => null, + 'pseudoPrice' => $row['pseudoPrice'], + 'available' => 0, + 'detailPage' => $row['hotelDetailPage'], + 'name' => $row['hotelName'], + 'teaser' => $row['hotelTeaser'], + 'category' => $hotelCategory, + 'images' => $this->imageService->getHotelImages($hotelUid), + 'country' => [ + 'name' => $row['country'], + 'code' => $row['countryCode'] + ], + 'region' => [ + 'name' => $row['regionName'], + ] + ]; + } + + $teaser =& $teasers[$hotelUid]; + $teaser['available'] += $row['available']; + + $dateStart = new \DateTime($row['dateStart']); + $dateEnd = new \DateTime($row['dateEnd']); + + if ($teaser['minDateStart'] === null || $teaser['minDateStart'] > $dateStart) { + $teaser['minDateStart'] = $dateStart; + } + + if ($teaser['maxDateEnd'] === null || $teaser['maxDateEnd'] < $dateEnd) { + $teaser['maxDateEnd'] = $dateEnd; + } + + if ($teaser['minPrice'] === null || $teaser['minPrice'] > $row['minPrice']) { + $teaser['minPrice'] = $row['minPrice']; + } + } + + return $teasers; + } + + /** + * @param array $hotelData + * + * @return array + */ + public function preprocessHotelList(array $hotelData) + { + $hotels = []; + foreach ($hotelData as $row) + { + if (!array_key_exists($row['hotelUid'], $hotels)) { + + $hotelCategory = array_key_exists($row['hotelCategory'], Hotel::$categoryLabels) ? + Hotel::$categoryLabels[$row['hotelCategory']] : null; + + $hotels[$row['hotelUid']] = [ + 'hotel' => [ + 'uid' => $row['hotelUid'], + 'name' => $row['hotelName'], + 'teaser' => $row['hotelTeaser'], + 'category' => $hotelCategory, + 'images' => $this->imageService->getHotelImages($row['hotelUid']), + 'fact' => $row['hotelFact'], + ], + 'available' => 0, + 'board' => $row['board'], + 'earlybird' => $row['earlybird'], + 'lowContingent' => $row['lowContingent'], + 'servicesIncluded' => unserialize($row['servicesIncluded']), + 'minDateStart' => null, + 'maxDateEnd' => null, + 'minPrice' => null, + 'dates' => [], + 'nights' => [], + ]; + } + + $hotel =& $hotels[$row['hotelUid']]; + + $hotel['available'] += $row['available']; + + if (!in_array($row['nights'], $hotel['nights'])) { + $hotel['nights'][] = $row['nights']; + } + + if (!in_array($row['dateStart'], $hotel['dates'])) { + $hotel['dates'][] = $row['dateStart']; + } + + $dateStart = new \DateTime($row['dateStart']); + $dateEnd = new \DateTime($row['dateEnd']); + + if ($hotel['minDateStart'] === null + || $hotel['minDateStart'] > $dateStart) { + $hotel['minDateStart'] = $dateStart; + } + + if ($hotel['maxDateEnd'] === null + || $hotel['maxDateEnd'] < $dateEnd) { + $hotel['maxDateEnd'] = $dateEnd; + } + + if ($hotel['minPrice'] === null + || $hotel['minPrice'] > $row['minPrice']) { + $hotel['minPrice'] = $row['minPrice']; + } + } + + uasort($hotels, function ($a, $b) { + // Set price to a very high value to sort hotels + // that are not bookable to end of list + if ($a['minPrice'] === null || !$a['available']) { + $a['minPrice'] = 9999; + } + if ($b['minPrice'] === null || !$b['available']) { + $b['minPrice'] = 9999; + } + + return strcmp($a['minPrice'], $b['minPrice']); + }); + + return $hotels; + } + +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_products/Classes/Service/ImageService.php b/web/typo3conf/ext/ep_products/Classes/Service/ImageService.php new file mode 100644 index 00000000..cc6d6bc9 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/ImageService.php @@ -0,0 +1,89 @@ +, 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 TYPO3\CMS\Core\Resource\FileRepository; +use TYPO3\CMS\Core\SingletonInterface; + +class ImageService implements SingletonInterface +{ + /** + * @var \TYPO3\CMS\Core\Resource\FileRepository + */ + protected $fileRepository; + + /** + * @param FileRepository $fileRepository + */ + public function __construct(FileRepository $fileRepository) + { + $this->fileRepository = $fileRepository; + } + + /** + * @var array + */ + static protected $cache = [ + 'imagesProduct' => [], + 'imagesHotel' => [], + ]; + + /** + * @param int $productUid + * @return array + */ + public function getProductImages($productUid) + { + if (!isset(self::$cache['imagesProduct'][$productUid])) { + self::$cache['imagesProduct'][$productUid] = $this->fileRepository->findByRelation( + 'tx_epproducts_domain_model_product', + 'teaser_images', + $productUid + ); + } + + return self::$cache['imagesProduct'][$productUid]; + } + + /** + * @param int $hotelUid + * @return array + */ + public function getHotelImages($hotelUid) + { + if (!isset(self::$cache['imagesHotel'][$hotelUid])) { + self::$cache['imagesHotel'][$hotelUid] = $this->fileRepository->findByRelation( + 'tx_epproducts_domain_model_hotel', + 'teaser_images', + $hotelUid + ); + } + + return self::$cache['imagesHotel'][$hotelUid]; + } + +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_products/Classes/Service/ImportService.php b/web/typo3conf/ext/ep_products/Classes/Service/ImportService.php new file mode 100644 index 00000000..4baac4a5 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/ImportService.php @@ -0,0 +1,738 @@ +, 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 Doctrine\DBAL\Connection; +use EP\EpProducts\Domain\Model\Room; +use EP\EpProducts\Utility\DbUtility; +use TYPO3\CMS\Core\Log\Logger; +use TYPO3\CMS\Core\SingletonInterface; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; +use TYPO3\CMS\Extbase\Service\CacheService; + +class ImportService implements SingletonInterface +{ + const CODE_PSEUDOPRICE = 'PDGS'; + const CODE_BABYROOM = 'Baby'; + const LABEL_BUS = 'Busfahrt'; + const LABEL_TRAIN = 'Zugfahrt'; + const STATUS_AVAILABLE = 'Frei'; + const STATUS_ON_REQUEST = 'Anfrage'; + const STATUS_STOP = 'Buchungsstop'; + + /** + * @var ConfigurationManagerInterface + */ + protected $configurationManager; + + /** + * @var int + */ + protected $pid = 0; + + /** + * @var array + */ + protected $roomMappings = []; + + /** + * @var array + */ + protected $hotelMappings = []; + + /** + * @var Connection + */ + protected $db; + + /** + * @var Logger + */ + protected $logger; + + /** + * @var CacheService + */ + protected $cacheService; + + /** + * @param ConfigurationManagerInterface $configurationManager + * @param CacheService $cacheService + */ + public function __construct(ConfigurationManagerInterface $configurationManager, CacheService $cacheService) + { + $this->configurationManager = $configurationManager; + $this->cacheService = $cacheService; + + $settings = GeneralUtility::removeDotsFromTS( + $this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT) + ); + + if (isset($settings['plugin']['tx_epproducts']['persistence']['storagePid'])) { + $this->pid = $settings['plugin']['tx_epproducts']['persistence']['storagePid']; + } elseif (isset($settings['module']['tx_epproducts']['persistence']['storagePid'])) { + $this->pid = $settings['module']['tx_epproducts']['persistence']['storagePid']; + } + } + + /** + * @param string $path + * @return int + */ + public function import($path) + { + $this->db = DbUtility::getDbConnection(); + $this->logger = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Log\LogManager::class)->getLogger(__CLASS__); + $this->getRoomMappings(); + $this->getHotelMappings(); + $this->createTempTables(); + $this->logger->info('starting product import'); + $dateCount = $this->parseXmlFilesInFolder($path); + $this->clearTables(); + $this->copyTables(); + $this->clearTempTables(); + $this->cacheService->clearPageCache(); + return $dateCount; + } + + /** + * @param $path + * + * @return bool + */ + public function checkActiveUpload($path) + { + $tempFile = $path . '/.pureftpd-upload.*'; + return count(glob($tempFile)) > 0; + } + + /** + * @param string $path + * @return int + */ + public function parseXmlFilesInFolder($path) + { + $dateCount = 0; + $folder = opendir($path); + while (($fileName = readdir($folder)) !== false) { + if (strpos($fileName, 'Ziel') === 0) { + $filePath = $path . '/' . $fileName; + $dateCount += $this->parseProductXmlFile($filePath); + } + } + return $dateCount; + } + + /** + * @param string $file + * @return int + */ + public function parseProductXmlFile($file) + { + /** @var \SimpleXMLElement $xmlData */ + $xmlData = simplexml_load_file($file); + + if ($xmlData->reise[0] === null) { + return 0; + } + + return $this->parseProduct($xmlData->reise[0]); + } + + public function createTempTables() + { + $this->db->exec('CREATE TABLE IF NOT EXISTS tx_epproducts_domain_model_date_temp LIKE tx_epproducts_domain_model_date'); + $this->db->exec('CREATE TABLE IF NOT EXISTS tx_epproducts_domain_model_room_temp LIKE tx_epproducts_domain_model_room'); + } + + public function clearTables() + { + $this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_date'); + $this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_room'); + } + + public function copyTables() + { + $this->db->exec('INSERT INTO tx_epproducts_domain_model_date SELECT * FROM tx_epproducts_domain_model_date_temp'); + $this->db->exec('INSERT INTO tx_epproducts_domain_model_room SELECT * FROM tx_epproducts_domain_model_room_temp'); + } + + public function clearTempTables() + { + $this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_date_temp'); + $this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_room_temp'); + } + + /** + * @param \SimpleXMLElement $xmlProduct + * @return int + */ + protected function parseProduct(\SimpleXMLElement $xmlProduct) + { + $code = (string) $xmlProduct->attributes()['code']; + $busProId = (int) $xmlProduct->attributes()['idbuspro']; + $dateCount = 0; + + $sql = ' + SELECT p.uid uid, p.name product_name, p.bus_pro_id bus_pro_id, p.searchable product_searchable, + p.detail_page product_detail_page, p.keywords product_keywords, p.teaser product_teaser, + p.feature product_feature, p.subline product_subline, p.country country, p.region region, p.city city, + cnt.name country_name, cnt.code country_code, cnt.keywords country_keywords, r.name region_name, + r.keywords region_keywords, r.feature region_feature, c.name city_name, c.keywords city_keywords, + p.concept concept, con.name concept_name, con.code concept_code, con.sorting concept_sorting + FROM tx_epproducts_domain_model_product p + INNER JOIN tx_epproducts_domain_model_country cnt ON p.country = cnt.uid + INNER JOIN tx_epproducts_domain_model_region r ON p.region = r.uid + INNER JOIN tx_epproducts_domain_model_city c ON p.city = c.uid + INNER JOIN tx_epproducts_domain_model_concept con ON p.concept = con.uid + WHERE p.deleted = 0 AND p.hidden = 0 AND p.code = :code + '; + + $products = $this->db->fetchAll($sql, ['code' => $code]); + + // Skip import in case product can't be found + if (count($products) === 0) { + $this->logger->warning('product not found', ['code' => $code]); + return 0; + } + + foreach ($products as $product) + { + if (empty($product['bus_pro_id'])) { + $this->db->update( + 'tx_epproducts_domain_model_product', + ['bus_pro_id' => $busProId], + ['uid' => $product['uid']] + ); + } + $product['product_fact'] = $this->getTopFactForRecord('tx_epproducts_product_fact_mm', $product['uid']); + $product['region_fact'] = $this->getTopFactForRecord('tx_epproducts_region_fact_mm', $product['region']); + foreach ($xmlProduct->termin as $xmlDate) + { + $dateCount += $this->parseDates($xmlDate, $product); + } + } + + return $dateCount; + } + + /** + * @param \SimpleXMLElement $xmlDate + * @param array $product + * @return int + */ + protected function parseDates(\SimpleXMLElement $xmlDate, array $product) + { + $dateCount = 0; + foreach ($xmlDate->hotel as $xmlHotel) + { + $date = $this->createDateRecord($product, $xmlDate); + if ($this->parseHotel($xmlHotel, $date) !== false) { + $this->db->insert( + 'tx_epproducts_domain_model_date_temp', + $date + ); + $dateUid = $this->db->lastInsertId(); + $this->db->update( + 'tx_epproducts_domain_model_room_temp', + ['date' => $dateUid], + ['date' => '0'] + ); + $dateCount++; + } + } + $this->db->update( + 'tx_epproducts_domain_model_product', + ['dates' => $dateCount], + ['uid' => $product['uid']] + ); + return $dateCount; + } + + /** + * @param array $product + * @param \SimpleXMLElement $xmlDate + * + * @return array + */ + protected function createDateRecord(array $product, \SimpleXMLElement $xmlDate) + { + $dateStart = \DateTime::createFromFormat('d.m.Y', (string) $xmlDate->attributes()['termin']); + $dateEnd = \DateTime::createFromFormat('d.m.Y', (string) $xmlDate->attributes()['bis']); + $nights = $dateStart->diff($dateEnd)->format('%d'); + + $busProId = (int) $xmlDate->attributes()['idbuspro']; + $code = (string) $xmlDate->attributes()['code']; + + $date = [ + 'pid' => $this->pid, + 'product' => $product['uid'], + 'product_name' => $product['product_name'], + 'product_fact' => $product['product_fact'], + 'product_searchable' => $product['product_searchable'], + 'product_detail_page' => $product['product_detail_page'], + 'product_keywords' => $product['product_keywords'], + 'product_feature' => $product['product_feature'], + 'product_teaser' => $product['product_teaser'], + 'product_subline' => $product['product_subline'], + 'country' => $product['country'], + 'country_name' => $product['country_name'], + 'country_code' => $product['country_code'], + 'country_keywords' => $product['country_keywords'], + 'region' => $product['region'], + 'region_name' => $product['region_name'], + 'region_fact' => $product['region_fact'], + 'region_keywords' => $product['region_keywords'], + 'region_feature' => $product['region_feature'], + 'city' => $product['city'], + 'city_name' => $product['city_name'], + 'city_keywords' => $product['city_keywords'], + 'concept' => $product['concept'], + 'concept_name' => $product['concept_name'], + 'concept_code' => $product['concept_code'], + 'concept_sorting' => $product['concept_sorting'], + 'date_start' => $dateStart->format('Y-m-d'), + 'date_end' => $dateEnd->format('Y-m-d'), + 'nights' => $nights, + 'bus_pro_id' => $busProId, + 'code' => $code, + ]; + + $skiPass = $this->parseSelectionGroup($xmlDate, 'Leistungen Skipass'); + $servicesBoard = $this->parseSelectionGroup($xmlDate, 'Leistungen Verpflegung'); + $servicesIncluded = $this->parseSelectionGroup($xmlDate, 'Leistungen Sonstige'); + $combinedServices = []; + if ($skiPass) { + array_push($combinedServices, ...$skiPass); + } + if ($servicesBoard) { + array_push($combinedServices, ...$servicesBoard); + } + if ($servicesIncluded) { + array_push($combinedServices, ...$servicesIncluded); + } + $date['services_included'] = serialize($combinedServices); + + if ($servicesBoard) { + $date['board'] = reset($servicesBoard); + $date['board_bus_pro_id'] = key($servicesBoard); + } + + $skiPassIncluded = (int) (count($skiPass) > 0); + $date['skipass_included'] = $skiPassIncluded; + + $servicesTransportation = $this->parseService($xmlDate, 'lei_befoerderung'); + $discount = $this->determineDiscount($servicesTransportation); + $date['discount'] = $discount; + + $this->processBusConditions($servicesTransportation, $date); + + $servicesTransportationOptional = []; + if (array_key_exists('BUS', $servicesTransportation)) { + $servicesTransportationOptional = array_filter($servicesTransportation['BUS'], function ($service) { + return $service['price'] !== 0; + }); + } + if (array_key_exists('BAH', $servicesTransportation)) { + $servicesTransportationOptional = array_merge( + $servicesTransportationOptional, + $servicesTransportation['BAH'] + ); + } + + if ($discount) { + $servicesTransportationOptional[] = [ + 'label' => 'Rabatt bei Eigenanreise', + 'price' => $discount, + ]; + } + + $servicesGeneral = $this->parseService($xmlDate, 'lei_sonstiges', true); + + $combinedServices = []; + + if (count($servicesTransportationOptional)) { + $this->addServices(['BUS' => $servicesTransportationOptional], $combinedServices); + } + + if (count($servicesGeneral)) { + $this->addServices($servicesGeneral, $combinedServices); + } + + foreach ($combinedServices as $key => $list) + { + uasort($list, function ($a, $b) { + return strcmp($a['label'], $b['label']); + }); + $combinedServices[$key] = $list; + } + $date['services_general'] = serialize($combinedServices); + + return $date; + } + + /** + * @param \SimpleXMLElement $xmlHotel + * @param array $date + * + * @return bool + */ + protected function parseHotel(\SimpleXMLElement $xmlHotel, array &$date) + { + $code = (string) $xmlHotel->attributes()['code']; + $busProId = (string) $xmlHotel->attributes()['idbuspro']; + + if (!array_key_exists($code, $this->hotelMappings)) { + $this->logger->warning('hotel not found', ['code' => $code]); + return false; + } + + $hotel = $this->hotelMappings[$code]; + $hotel['fact'] = $this->getTopFactForRecord('tx_epproducts_hotel_fact_mm', $hotel['uid']); + + $services = []; + $generalServices = unserialize($date['services_general']); + $hotelServices = $this->parseService($xmlHotel, 'lei_sonstiges', true); + $this->addServices($generalServices, $services); + $this->addServices($hotelServices, $services); + foreach ($services as $key => $list) + { + uasort($list, function ($a, $b) { + return strcmp($a['label'], $b['label']); + }); + $services[$key] = $list; + } + + $this->parseRooms($xmlHotel, $hotel['uid'], $date, $services); + $date['hotel'] = $hotel['uid']; + $date['hotel_bus_pro_id'] = $busProId; + $date['hotel_fact'] = $hotel['fact']; + $date['hotel_name'] = $hotel['name']; + $date['hotel_type'] = $hotel['type']; + $date['hotel_keywords'] = $hotel['keywords']; + $date['hotel_header_title'] = $hotel['header_title']; + $date['hotel_category'] = $hotel['category']; + $date['hotel_teaser'] = $hotel['teaser']; + $date['hotel_detail_page'] = $hotel['detail_page']; + return true; + } + + /** + * @param \SimpleXMLElement $xmlHotel + * @param int $hotelUid + * @param array $date + * @param array $services + */ + protected function parseRooms(\SimpleXMLElement $xmlHotel, $hotelUid, array &$date, array $services) + { + $minPrice = 0; + $availableTotal = 0; + $boardCode = ''; + $count = 0; + + foreach ($xmlHotel->xpath('zimmer/preis') as $roomXml) + { + $code = (string) $roomXml->attributes()['zimmercode']; + + if ($code === static::CODE_PSEUDOPRICE) { + $price = (int) $roomXml->attributes()['preis']; + $date['pseudo_price'] = $price; + continue; + } + + $roomTypeKey = mb_strtolower($code); + if (array_key_exists($roomTypeKey, $this->roomMappings)) { + $roomType = $this->roomMappings[$roomTypeKey]; + } else { + $this->logger->warning('room type not found', ['code' => $code]); + continue; + } + + $available = (int) $roomXml->attributes()['verfuegbar']; + $price = (int) $roomXml->attributes()['preis']; + + // Skip rooms with zero price and zero availability. + // Hint: Rooms with price, zero availability AND status stop will be + // marked 'fully booked' by convention + if (!$available && !$price) { + continue; + } + + $pax = (int) $roomXml->attributes()['MaxPax']; + $availableTotal += $available * $pax; + + if ($code !== static::CODE_BABYROOM && ($minPrice === 0 || $price < $minPrice)) { + $minPrice = $price; + } + + if ($roomXml->attributes()['status'] === static::STATUS_STOP && $price && !$available) { + $status = Room::ROOM_STATUS_FULLY_BOOKED; + } elseif ($roomXml->attributes()['status'] === static::STATUS_ON_REQUEST) { + $status = Room::ROOM_STATUS_ON_REQUEST; + } else { + $status = Room::ROOM_STATUS_AVAILABLE; + } + + $boardCode = (string) $roomXml->attributes()['vpcode']; + + $room = [ + 'pid' => $this->pid, + 'date' => 0, + 'hotel' => $hotelUid, + 'bus_pro_id' => (int) $roomXml->attributes()['idbuspro_zimmer'], + 'code' => $code, + 'type' => $roomType, + 'name' => (string) $roomXml->attributes()['zimmertext'], + 'pax' => $pax, + 'nights' => (int) $roomXml->attributes()['naechte'], + 'price' => $price, + 'available' => $available * $pax, + 'status' => $status, + 'services' => serialize($services), + ]; + + $this->db->insert( + 'tx_epproducts_domain_model_room_temp', + $room + ); + + $count++; + } + + $date['board_code'] = $boardCode; + $date['min_price'] = $minPrice; + $date['available'] = $availableTotal; + $date['rooms'] = $count; + } + + /** + * @param array $services + * + * @return int + */ + protected function determineDiscount(array $services) + { + foreach ($services as $key => $section) + { + foreach ($section as $service) + { + if ($service['price'] < 0) { + return $service['price']; + } + } + } + + return 0; + } + + /** + * @param \SimpleXMLElement $xmlData + * @param string $serviceLabel + * @param bool $skipWithoutPrice + * + * @return array + */ + protected function parseService(\SimpleXMLElement $xmlData, $serviceLabel, $skipWithoutPrice = false) + { + $data = []; + $services = $xmlData->xpath($serviceLabel . '/leistung'); + foreach ($services as $service) + { + // Skip transportation service direction 'back' + if ($service->richtung && (string) $service->richtung === 'RUECK') { + continue; + } + + // Skip services with status 'Buchungsstop' + $status = (string) $service->status; + if ($status === 'Buchungsstop') { + continue; + } + + // Skip services of subcategory 'SON' and 'EIN' + $type = (string) $service->attributes()['unterart']; + if ($type === 'SON' || $type === 'EIN') { + continue; + } + + // Force usage of new types + if ($type === 'SKI' || $type === 'SNO') { + $type = 'VER'; + } + + $price = (int) $service->preis; + + if ($skipWithoutPrice && $price === 0) { + continue; + } + + $label = (string) $service->text; + if ($type === 'BUS') { + $label = static::LABEL_BUS; + } elseif ($type === 'BAH') { + $label = static::LABEL_TRAIN; + } + + if (!array_key_exists($type, $data)) { + $data[$type] = []; + } + + $data[$type][] = [ + 'label' => $label, + 'price' => $price, + ]; + } + + return $data; + } + + /** + * @param \SimpleXMLElement $xmlDate + * @param string $label + * + * @return array + */ + protected function parseSelectionGroup(\SimpleXMLElement $xmlDate, $label) + { + $data = []; + $selectionGroup = $xmlDate->xpath('selektiongruppe[@bezeichnung="' . $label . '"]/selektion'); + foreach ($selectionGroup as $selection) + { + $attributes = $selection->attributes(); + $data[] = (string) $attributes['bezeichnung']; + } + + return $data; + } + + /** + * @param array $services + * @param array $date + */ + protected function processBusConditions(array $services, array &$date) + { + if (!array_key_exists('BUS', $services)) { + return; + } + + foreach ($services['BUS'] as $service) + { + $date['bus_available'] = 1; + $date['bus_price'] = $service['price']; + $date['bus_included'] = ((int) $service['price'] === 0); + } + } + + /** + * @return array + */ + protected function getRoomMappings() + { + $sql = 'SELECT code, type FROM tx_epproducts_domain_model_roommapping'; + $roomMappings = $this->db->fetchAll($sql); + foreach ($roomMappings as $mapping) + { + $this->roomMappings[mb_strtolower($mapping['code'])] = $mapping['type']; + } + } + + /** + * @return array + */ + protected function getHotelMappings() + { + $sql = ' + SELECT u.code code, u.uid uid, h.name name, h.type type, + h.earlybird earlybird, h.low_contingent low_contingent, + h.keywords keywords, h.header_title header_title, + h.category category, h.teaser teaser, h.detail_page detail_page + FROM ( + SELECT hotel.code code, hotel.uid uid + FROM tx_epproducts_domain_model_hotel hotel + WHERE hotel.code != "" AND hotel.deleted = 0 AND hotel.hidden = 0 + UNION SELECT matchcode.code code, matchcode.entity uid + FROM tx_epproducts_domain_model_matchcode matchcode + WHERE matchcode.deleted = 0 AND matchcode.hidden = 0 + ORDER BY code + ) u + LEFT JOIN tx_epproducts_domain_model_hotel h ON u.uid = h.uid + '; + $rows = $this->db->fetchAll($sql); + foreach ($rows as $row) + { + $this->hotelMappings[$row['code']] = [ + 'uid' => $row['uid'], + 'type' => $row['type'], + 'name' => $row['name'], + 'earlybird' => $row['earlybird'], + 'low_contingent' => $row['low_contingent'], + 'keywords' => $row['keywords'], + 'header_title' => $row['header_title'], + 'category' => $row['category'], + 'teaser' => $row['teaser'], + 'detail_page' => $row['detail_page'], + ]; + } + } + + /** + * @param string $table + * @param int $uid + * + * @return array + */ + protected function getTopFactForRecord($table, $uid) + { + $sql = ' + SELECT f.name + FROM ' . $table . ' mm + INNER JOIN tx_epproducts_domain_model_fact f ON mm.uid_foreign = f.uid + WHERE mm.uid_local = :uid + ORDER BY mm.sorting + LIMIT 0,1 + '; + + return $this->db->fetchColumn($sql, ['uid' => $uid]); + } + + /** + * @param array $services + * @param array $list + */ + protected function addServices(array $services, array &$list) + { + foreach ($services as $key => $section) + { + if (!array_key_exists($key, $list)) { + $list[$key] = []; + } + $list[$key] = array_merge($list[$key], $section); + } + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Service/LabelService.php b/web/typo3conf/ext/ep_products/Classes/Service/LabelService.php new file mode 100644 index 00000000..a1803e8a --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/LabelService.php @@ -0,0 +1,96 @@ +, 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 TYPO3\CMS\Backend\Utility\BackendUtility; + +class LabelService +{ + + /** + * @param array $parameters + * @param array $parentObject + */ + public function getProductLabel(&$parameters, $parentObject) + { + $product = BackendUtility::getRecord('tx_epproducts_domain_model_product', $parameters['row']['uid']); + $parameters['title'] = $product['name_internal']; + if (!empty($product['code'])) { + $parameters['title'] .= ' (' . $product['code'] . ')'; + } + } + + /** + * @param array $parameters + * @param array $parentObject + */ + public function getHotelLabel(&$parameters, $parentObject) + { + $hotel = BackendUtility::getRecord('tx_epproducts_domain_model_hotel', $parameters['row']['uid']); + $parameters['title'] = $hotel['name']; + if (!empty($hotel['code'])) { + $parameters['title'] .= ' (' . $hotel['code'] . ')'; + } + } + + /** + * @param array $parameters + * @param array $parentObject + */ + public function getDateLabel(&$parameters, $parentObject) + { + $date = BackendUtility::getRecord('tx_epproducts_domain_model_date', $parameters['row']['uid']); + $dateFrom = new \DateTime($date['date_start']); + $dateTo = new \DateTime($date['date_end']); + $parameters['title'] = $dateFrom->format('d.m.Y') . ' - ' . $dateTo->format('d.m.Y'); + } + + /** + * @param array $parameters + * @param array $parentObject + */ + public function getOfficetipLabel(&$parameters, $parentObject) + { + $officetip = BackendUtility::getRecord('tx_epproducts_domain_model_officetip', $parameters['row']['uid']); + $author = BackendUtility::getRecord('tx_epproducts_domain_model_teammember', $officetip['author']); + $parameters['title'] = sprintf('%s (%s)', substr($officetip['label'], 0, 30), $author['name']); + } + + /** + * @param array $parameters + * @param array $parentObject + */ + public function getContingentLabel(&$parameters, $parentObject) + { + $contingent = BackendUtility::getRecord('tx_epproducts_domain_model_contingent', $parameters['row']['uid']); + $hotel = BackendUtility::getRecord('tx_epproducts_domain_model_hotel', $contingent['hotel']); + $date = new \DateTime($contingent['date']); + $parameters['title'] = sprintf('%s: %s (%d/%d)', $date->format('d.m.Y'), $hotel['name'], $contingent['available'], $contingent['pax']); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Service/LogService.php b/web/typo3conf/ext/ep_products/Classes/Service/LogService.php new file mode 100644 index 00000000..27486808 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/LogService.php @@ -0,0 +1,179 @@ +, 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\FilterSettings; +use EP\EpProducts\Utility\DbUtility; +use TYPO3\CMS\Backend\Utility\BackendUtility; +use TYPO3\CMS\Core\SingletonInterface; + +class LogService implements SingletonInterface +{ + + /** + * @return array + */ + public function dumpSearchLogEpreisen() + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $result = $qb + ->select('DATE_FORMAT(FROM_UNIXTIME(logs.time_micro), "%d.%m.%Y, %H:%i Uhr") date', 'logs.data data') + ->from('tx_epproducts_log', 'logs') + ->orderBy('time_micro') + ->execute() + ->fetchAll() + ; + $csv = [ + [ + 'Datum/Uhrzeit', + 'Destinationstyp', + 'Destinationsname', + 'Konzept', + 'Preisbereich', + 'Personenzahl', + 'Startdatum', + 'Enddatum', + 'Seite', + 'Seiten ID', + ], + ]; + $labels = $this->fetchEntityLabels(); + foreach ($result as $row) + { + $data = json_decode(substr($row['data'], 2)); + $searchParams = $data->searchParams; + $priceRange = null; + if ($searchParams->priceRange) { + list ($priceFrom, $priceTo) = FilterSettings::$priceRanges[$searchParams->priceRange]; + $priceRange = sprintf('%s - %s', $priceFrom, $priceTo); + } + $pageTitle = ''; + if ($searchParams->pageUid) { + $page = BackendUtility::getRecord('pages', $searchParams->pageUid); + $pageTitle = $page['title']; + } + $csv[] = [ + $row['date'], + $searchParams->destinationType, + $labels[$searchParams->destinationType][$searchParams->destinationUid], + $labels['concept'][$searchParams->conceptUid], + $priceRange, + $searchParams->pax, + $searchParams->dateFrom, + $searchParams->dateTo, + $pageTitle, + $searchParams->pageUid, + ]; + } + + return $csv; + } + + /** + * @return array + */ + public function dumpSearchLogEpevents() + { + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $result = $qb + ->select('DATE_FORMAT(FROM_UNIXTIME(logs.time_micro), "%d.%m.%Y, %H:%i Uhr") date', 'logs.data data') + ->from('tx_epevents_log', 'logs') + ->orderBy('time_micro') + ->execute() + ->fetchAll() + ; + $csv = [ + [ + 'Datum/Uhrzeit', + 'Suchbegriff', + 'Seite', + 'Seiten ID', + ], + ]; + foreach ($result as $row) + { + $data = json_decode(substr($row['data'], 2)); + $pageTitle = ''; + if ($data->pageUid) { + $page = BackendUtility::getRecord('pages', $data->pageUid); + $pageTitle = $page['title']; + } + $csv[] = [ + $row['date'], + $data->search, + $pageTitle, + $data->pageUid, + ]; + } + return $csv; + } + + /** + * @return array + */ + private function fetchEntityLabels() + { + $labels = [ + 'country' => [], + 'region' => [], + ]; + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $result = $qb + ->select('uid', 'name') + ->from('tx_epproducts_domain_model_country', 'c') + ->execute() + ->fetchAll() + ; + foreach ($result as $row) + { + $labels['country'][$row['uid']] = $row['name']; + } + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $result = $qb + ->select('uid', 'name') + ->from('tx_epproducts_domain_model_region') + ->execute() + ->fetchAll() + ; + foreach ($result as $row) + { + $labels['region'][$row['uid']] = $row['name']; + } + $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $result = $qb + ->select('uid', 'name') + ->from('tx_epproducts_domain_model_concept') + ->execute() + ->fetchAll() + ; + foreach ($result as $row) + { + $labels['concept'][$row['uid']] = $row['name']; + } + return $labels; + } +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_products/Classes/Service/ProductService.php b/web/typo3conf/ext/ep_products/Classes/Service/ProductService.php new file mode 100644 index 00000000..7d3058c8 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/ProductService.php @@ -0,0 +1,210 @@ +, 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\FilterSettings; +use EP\EpProducts\Domain\Model\Hotel; +use EP\EpProducts\Domain\Repository\HotelRepository; +use EP\EpProducts\Domain\Repository\ProductRepository; +use TYPO3\CMS\Core\SingletonInterface; + +class ProductService implements SingletonInterface +{ + + /** + * @var ProductRepository + */ + protected $productRepository; + + /** + * @var HotelRepository + */ + protected $hotelRepository; + + /** + * @var ImageService + */ + protected $imageService; + + /** + * @param ProductRepository $productRepository + * @param HotelRepository $hotelRepository + * @param ImageService $imageService + */ + public function __construct( + ProductRepository $productRepository, + HotelRepository $hotelRepository, + ImageService $imageService + ) + { + $this->productRepository = $productRepository; + $this->hotelRepository = $hotelRepository; + $this->imageService = $imageService; + } + + /** + * @param FilterSettings $filterSettings + * + * @return array + */ + public function getTeaser(FilterSettings $filterSettings) + { + $teaserData = $this->productRepository->getTeasers($filterSettings); + $teasers = $this->preprocessTeasergroup($teaserData); + return reset($teasers); + } + + /** + * @param FilterSettings $filterSettings + * @param array $excludedConceptUids + * @param int $limit + * + * @return array + */ + public function getTeasergroup(FilterSettings $filterSettings, $excludedConceptUids = [], $limit = 0) + { + $teaserData = $this->productRepository->getTeasers($filterSettings, $excludedConceptUids); + return $this->preprocessTeasergroup($teaserData, $limit); + } + + /** + * @param array $teaserData + * @param int $limit + * + * @return array + */ + public function preprocessTeasergroup(array $teaserData, $limit = 0) + { + $data = []; + + foreach ($teaserData as $row) + { + if (!array_key_exists($row['productUid'], $data)) { + $data[$row['productUid']] = $this->createTeaserData($row); + } + + $teaser =& $data[$row['productUid']]; + + if (!in_array($row['nights'], $teaser['nights'])) { + $teaser['nights'][] = $row['nights']; + } + + if (!in_array($row['dateStart'], $teaser['dates'])) { + $teaser['dates'][] = $row['dateStart']; + } + + if (!$teaser['skipassIncluded'] && $row['skipassIncluded']) { + $teaser['skipassIncluded'] = true; + } + + if (!$teaser['busIncluded'] && $row['busIncluded']) { + $teaser['busIncluded'] = true; + } + + $dateStart = new \DateTime($row['dateStart']); + $dateEnd = new \DateTime($row['dateEnd']); + + if ($teaser['minDateStart'] === null || $teaser['minDateStart'] > $dateStart) { + $teaser['minDateStart'] = $dateStart; + } + + if ($teaser['maxDateEnd'] === null || $teaser['maxDateEnd'] < $dateEnd) { + $teaser['maxDateEnd'] = $dateEnd; + } + + if ($teaser['minPrice'] === null || $teaser['minPrice'] > $row['minPrice']) { + $teaser['minPrice'] = $row['minPrice']; + } + + if ($teaser['hotelUid'] !== $row['hotelUid']) { + $teaser['hotelCount']++; + } + } + + if ($limit > 0) { + return array_slice($data, 0, $limit); + } + + return $data; + } + + /** + * @param array $teaserData + * + * @return array + */ + public function createTeaserData(array $teaserData) + { + $hotelCategory = array_key_exists($teaserData['hotelCategory'], Hotel::$categoryLabels) ? + Hotel::$categoryLabels[$teaserData['hotelCategory']] : null; + + return [ + 'minDateStart' => null, + 'maxDateEnd' => null, + 'minPrice' => null, + 'hotelCount' => 0, + 'pseudoPrice' => $teaserData['pseudoPrice'], + 'board' => $teaserData['board'], + 'earlybird' => $teaserData['earlybird'], + 'lowContingent' => $teaserData['lowContingent'], + 'servicesIncluded' => unserialize($teaserData['servicesIncluded']), + 'product' => [ + 'uid' => $teaserData['productUid'], + 'name' => $teaserData['productName'], + 'subline' => $teaserData['productSubline'], + 'detailPage' => $teaserData['productDetailPage'], + 'fact' => $teaserData['productFact'], + 'feature' => $teaserData['productFeature'], + 'teaser' => $teaserData['productTeaser'], + 'images' => $this->imageService->getProductImages($teaserData['productUid']), + ], + 'concept' => [ + 'name' => $teaserData['conceptName'], + 'code' => $teaserData['conceptCode'], + ], + 'hotel' => [ + 'name' => $teaserData['hotelName'], + 'category' => $hotelCategory, + 'fact' => $teaserData['hotelFact'], + 'uid' => $teaserData['hotelUid'], + 'images' => $this->imageService->getHotelImages($teaserData['hotelUid']), + ], + 'country' => [ + 'name' => $teaserData['countryName'], + 'code' => $teaserData['countryCode'], + ], + 'region' => [ + 'name' => $teaserData['regionName'], + 'fact' => $teaserData['regionFact'], + 'feature' => $teaserData['regionFeature'], + ], + 'dates' => [], + 'nights' => [], + ]; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Service/SearchService.php b/web/typo3conf/ext/ep_products/Classes/Service/SearchService.php new file mode 100644 index 00000000..fd7b228e --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/SearchService.php @@ -0,0 +1,182 @@ +, 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\FilterSettings; +use EP\EpProducts\Domain\Model\Hotel; +use EP\EpProducts\Domain\Model\SearchResult; +use EP\EpProducts\Domain\Repository\ProductRepository; +use TYPO3\CMS\Core\SingletonInterface; + +class SearchService implements SingletonInterface +{ + /** + * @var ProductRepository + */ + protected $productRepository; + + /** + * @var ImageService + */ + protected $imageService; + + /** + * @param ProductRepository $productRepository + * @param ImageService $imageService + */ + public function __construct(ProductRepository $productRepository, ImageService $imageService) + { + $this->productRepository = $productRepository; + $this->imageService = $imageService; + } + + /** + * @param FilterSettings $filterSettings + * @param array $excludedConceptUids + * + * @return SearchResult + */ + public function getSearchResult(FilterSettings $filterSettings, $excludedConceptUids = []) + { + $searchResultData = $this->productRepository->getSearchResult($filterSettings, $excludedConceptUids); + return $this->preprocessSearchresult($searchResultData); + } + + /** + * @param array $searchResultData + * + * @return SearchResult + */ + public function preprocessSearchresult(array $searchResultData) + { + $data = []; + $total = 0; + + foreach ($searchResultData as $row) + { + // Concepts + if (!array_key_exists($row['conceptUid'], $data)) { + $data[$row['conceptUid']] = [ + 'concept' => [ + 'uid' => $row['conceptUid'], + 'name' => $row['conceptName'], + 'code' => $row['conceptCode'], + ], + 'items' => [], + ]; + } + + $items =& $data[$row['conceptUid']]['items']; + + // Use compound key, hotel is not unique + $key = $row['hotelUid'] . ':' . $row['productUid']; + + $hotelCategory = array_key_exists($row['hotelCategory'], Hotel::$categoryLabels) ? + Hotel::$categoryLabels[$row['hotelCategory']] : null; + + if (!array_key_exists($key, $items)) { + $items[$key] = [ + 'minDateStart' => null, + 'maxDateEnd' => null, + 'minPrice' => null, + 'earlybird' => $row['earlybird'], + 'lowContingent' => $row['lowContingent'], + 'servicesIncluded' => unserialize($row['servicesIncluded']), + 'hotel' => [ + 'uid' => $row['hotelUid'], + 'name' => $row['hotelName'], + 'teaser' => $row['hotelTeaser'], + 'images' => $this->imageService->getHotelImages($row['hotelUid']), + 'fact' => $row['hotelFact'], + 'category' => $hotelCategory, + ], + 'country' => [ + 'code' => $row['countryCode'], + 'name' => $row['countryName'], + ], + 'region' => [ + 'name' => $row['regionName'], + 'fact' => $row['regionFact'], + 'feature' => $row['regionFeature'], + ], + 'product' => [ + 'uid' => $row['productUid'], + 'detailPage' => $row['productDetailPage'], + 'name' => $row['productName'], + 'subline' => $row['productSubline'], + 'feature' => $row['productFeature'], + 'fact' => $row['productFact'], + ], + 'board' => $row['board'], + 'dates' => [], + 'nights' => [], + ]; + $total++; + } + + $item =& $items[$key]; + + if (!in_array($row['nights'], $item['nights'])) { + $item['nights'][] = $row['nights']; + } + + if (!in_array($row['dateStart'], $item['dates'])) { + $item['dates'][] = $row['dateStart']; + } + + $dateStart = new \DateTime($row['dateStart']); + $dateEnd = new \DateTime($row['dateEnd']); + + if ($item['minDateStart'] === null + || $item['minDateStart'] > $dateStart) { + $item['minDateStart'] = $dateStart; + } + + if ($item['maxDateEnd'] === null + || $item['maxDateEnd'] < $dateEnd) { + $item['maxDateEnd'] = $dateEnd; + } + + if ($item['minPrice'] === null + || $item['minPrice'] > $row['minPrice']) { + $item['minPrice'] = $row['minPrice']; + } + + } + + // Sort products by minprice within concept sections + foreach ($data as $conceptUid => &$section) + { + uasort($section['items'], function ($a, $b) { + return strcmp($a['minPrice'], $b['minPrice']); + }); + } + + return new SearchResult($data, $total); + } + +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_products/Classes/Service/SnowreportService.php b/web/typo3conf/ext/ep_products/Classes/Service/SnowreportService.php new file mode 100644 index 00000000..e08778b5 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/SnowreportService.php @@ -0,0 +1,210 @@ +, 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\Snowreport; +use EP\EpProducts\Domain\Model\Webcam; +use EP\EpProducts\Utility\SettingsUtility; +use TYPO3\CMS\Core\SingletonInterface; +use TYPO3\CMS\Core\Utility\GeneralUtility; + +class SnowreportService implements SingletonInterface +{ + const XML_FILE_PATH = 'fileadmin/snowreport/snowreport.xml'; + const XML_FILE_URL = 'http://www.skiresort-service.com/xml-feed/'; + + /** + * @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager + * @inject + */ + protected $persistenceManager; + + /** + * @var \EP\EpProducts\Domain\Repository\SnowreportRepository + * @inject + */ + protected $snowreportRepository; + + /** + * @var \EP\EpProducts\Domain\Repository\WebcamRepository + * @inject + */ + protected $webcamRepository; + + /** + * @var \EP\EpProducts\Domain\Repository\RegionRepository + * @inject + */ + protected $regionRepository; + + /** + * @var array + */ + protected static $map = [ + 'region_id' => 'vendor_uid', + 'region_name' => 'region_name', + 'region_offen' => 'opened', + 'gletschergebiet' => 'glacier', + 'schneehoehe_berg' => 'snow_level_mountain', + 'schneehoehe_tal' => 'snow_level_valley', + 'schneequalitaet' => 'snow_quality', + 'letzter_schneefall' => 'last_snowfall', + 'lifte_gesamt' => 'lifts_total', + 'offene_lifte' => 'lifts_opened', + 'letzte_aktualisierung' => 'last_update', + 'hoehemax' => 'height_max', + 'hoehemin' => 'height_min', + 'datum_saisonstart' => 'season_start', + 'datum_saisonende' => 'season_end', + ]; + + /** + * @return int + */ + public function importSnowReportData() + { + $count = 0; + $file = GeneralUtility::getFileAbsFileName(self::XML_FILE_PATH); + $xmlData = simplexml_load_file($file); + + $snowReportStoragePid = SettingsUtility::get('snowReportStoragePid'); + + foreach ($xmlData->schneemeldung as $reportXml) + { + $vendorUid = (int) $reportXml->region_id; + $result = $this->snowreportRepository->findByVendorUid($vendorUid); + if ($result->count() === 0) { + $snowreport = new Snowreport(); + $this->snowreportRepository->add($snowreport); + } else { + $snowreport = $result->getFirst(); + } + + $row = []; + foreach (static::$map as $key => $column) + { + $valueRaw = trim($reportXml->{$key}); + + if ($valueRaw === 'true') { + $value = true; + } elseif ($valueRaw === 'false') { + $value = false; + } elseif (preg_match('/^\d{4}\-\d{2}\-\d{2}$/', $valueRaw)) { + $date = new \DateTime($valueRaw); + $value = $date->getTimestamp(); + } else { + $value = (string) $valueRaw; + } + + $row[$column] = $value; + } + + $snowreport->setPid($snowReportStoragePid); + $snowreport->setVendorUid($vendorUid); + $snowreport->setRegionName($row['region_name']); + $snowreport->setOpened($row['opened']); + $snowreport->setGlacier($row['glacier']); + $snowreport->setSnowLevelMountain($row['snow_level_mountain']); + $snowreport->setSnowLevelValley($row['snow_level_valley']); + $snowreport->setSnowQuality($row['snow_quality']); + $snowreport->setLastSnowfall($row['last_snowfall']); + $snowreport->setLiftsTotal($row['lifts_total']); + $snowreport->setLiftsOpened($row['lifts_opened']); + $snowreport->setLastUpdate($row['last_update']); + $snowreport->setHeightMax($row['height_max']); + $snowreport->setHeightMin($row['height_min']); + $snowreport->setSeasonStart($row['season_start']); + $snowreport->setSeasonEnd($row['season_end']); + + if ($reportXml->webcam) { + $this->importWebcamData($reportXml->webcam, $snowreport); + } + + if ($snowreport->_isNew()) { + $this->persistenceManager->persistAll(); + } else { + $this->snowreportRepository->update($snowreport); + } + + $count++; + } + + $this->persistenceManager->persistAll(); + + $GLOBALS['BE_USER']->simplelog('Snowreport XML import successful (' . $count . ' records).', 'ex_epproducts'); + + return $count; + } + + /** + * @param \SimpleXMLElement $xml + * @param Snowreport $snowreport + */ + public function importWebcamData(\SimpleXMLElement $xml, Snowreport $snowreport) + { + $snowReportStoragePid = SettingsUtility::get('snowReportStoragePid'); + foreach ($xml->children() as $item) + { + $vendorUid = (int) $item->uid; + $result = $this->webcamRepository->findByVendorUid($vendorUid); + if ($result->count() === 0) { + $webcam = new Webcam(); + $webcam->setVendorUid($vendorUid); + $webcam->setPid($snowReportStoragePid); + $webcam->setUrl((string) $item->url); + $webcam->setName((string) $item->dt); + $webcam->setAvailable((string) $item->verf === 'true'); + $this->webcamRepository->add($webcam); + $snowreport->addWebcam($webcam); + } else { + $webcam = $result->getFirst(); + $webcam->setAvailable((string) $item->verf === 'true'); + } + } + } + + public function downloadReportsXml() + { + $path = GeneralUtility::getFileAbsFileName(self::XML_FILE_PATH); + $backupPath = $path . '.bak'; + + @copy($path, $backupPath); + @unlink($path); + + $url = self::XML_FILE_URL; + exec("wget -O {$path} {$url}", $output, $return); + if (!$return) { + @unlink($backupPath); + return; + } + + $GLOBALS['BE_USER']->simplelog('Snowreport XML download failed. Keeping existing file.', 'ex_epproducts'); + @rename($backupPath, $path); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Service/StaticSearchParamsRequestService.php b/web/typo3conf/ext/ep_products/Classes/Service/StaticSearchParamsRequestService.php new file mode 100644 index 00000000..853ebf54 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Service/StaticSearchParamsRequestService.php @@ -0,0 +1,74 @@ +, 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\FilterSettings; +use TYPO3\CMS\Core\Database\DatabaseConnection; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Core\Utility\HttpUtility; + +class StaticSearchParamsRequestService +{ + const PREFIX_PATH_SEGMENT = 'reiseauswahl'; + const SEARCH_RESULT_URI = '/skireisen/suche/'; + const REDIRECT_RESPONSE_CODE = 302; + + public function handleRequest() + { + $currentUri = GeneralUtility::getIndpEnv('REQUEST_URI'); + + $uri = strtolower(parse_url($currentUri, \PHP_URL_PATH)); + + /** @var DatabaseConnection $db */ + $db = $GLOBALS['TYPO3_DB']; + + $row = $db->exec_SELECTgetSingleRow( + '*', + 'tx_epproducts_domain_model_staticsearchparams', + 'CONCAT( + "/", + "' . self::PREFIX_PATH_SEGMENT . '", + "/", tx_epproducts_domain_model_staticsearchparams.path_segment, + "/" + )=LOWER(' . $db->fullQuoteStr($uri, 'tx_epproducts_domain_model_staticsearchparams') . ')' + . ' AND tx_epproducts_domain_model_staticsearchparams.deleted=0 AND tx_epproducts_domain_model_staticsearchparams.hidden=0' + ); + + if ($row === false) { + return; + } + + $filterSettings = FilterSettings::fromStaticSearchParams($row); + $encodedFilterSettings = FilterSettingsEncoder::encode($filterSettings); + + $redirect = self::SEARCH_RESULT_URI . $encodedFilterSettings; + + HttpUtility::redirect($redirect, constant('\TYPO3\CMS\Core\Utility\HttpUtility::HTTP_STATUS_' . self::REDIRECT_RESPONSE_CODE)); + exit; + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Task/ImportContingentsTask.php b/web/typo3conf/ext/ep_products/Classes/Task/ImportContingentsTask.php new file mode 100644 index 00000000..3acc2f7d --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Task/ImportContingentsTask.php @@ -0,0 +1,47 @@ +, 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\Service\ContingentService; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Object\ObjectManager; +use TYPO3\CMS\Scheduler\Task\AbstractTask; + +class ImportContingentsTask extends AbstractTask +{ + public function execute() + { + /** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */ + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + /** @var \EP\EpProducts\Service\ContingentService $importService */ + $importService = $objectManager->get(ContingentService::class); + $path = GeneralUtility::getFileAbsFileName('fileadmin/xmlexportzimmer'); + $importService->import($path); + return true; + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Task/ImportProductsTask.php b/web/typo3conf/ext/ep_products/Classes/Task/ImportProductsTask.php new file mode 100644 index 00000000..0bc1d532 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Task/ImportProductsTask.php @@ -0,0 +1,55 @@ +, 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\Service\ImportService; +use TYPO3\CMS\Core\Messaging\FlashMessage; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Object\ObjectManager; +use TYPO3\CMS\Scheduler\Task\AbstractTask; + +class ImportProductsTask extends AbstractTask +{ + public function execute() + { + /** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */ + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + /** @var \EP\EpProducts\Service\ImportService $importService */ + $importService = $objectManager->get(ImportService::class); + $path = GeneralUtility::getFileAbsFileName('fileadmin/xmlexport'); + if ($importService->checkActiveUpload($path)) { + $message = GeneralUtility::makeInstance(FlashMessage::class, 'Import aborted due to active file upload', '', FlashMessage::WARNING); + $flashMessageService = $objectManager->get(\TYPO3\CMS\Core\Messaging\FlashMessageService::class); + $messageQueue = $flashMessageService->getMessageQueueByIdentifier(); + $messageQueue->addMessage($message); + return false; + } + $importService->import($path); + return true; + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Task/ImportSnowreportTask.php b/web/typo3conf/ext/ep_products/Classes/Task/ImportSnowreportTask.php new file mode 100644 index 00000000..d90d2668 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Task/ImportSnowreportTask.php @@ -0,0 +1,46 @@ +, 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\Service\SnowreportService; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Object\ObjectManager; +use TYPO3\CMS\Scheduler\Task\AbstractTask; + +class ImportSnowreportTask extends AbstractTask +{ + public function execute() + { + /** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */ + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + $snowreportService = $objectManager->get(SnowreportService::class); + $snowreportService->downloadReportsXml(); + $snowreportService->importSnowReportData(); + return true; + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Traits/RequestArgumentTypeConversionTrait.php b/web/typo3conf/ext/ep_products/Classes/Traits/RequestArgumentTypeConversionTrait.php new file mode 100644 index 00000000..fa5271f5 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Traits/RequestArgumentTypeConversionTrait.php @@ -0,0 +1,151 @@ +, 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\FilterSettings; +use EP\EpProducts\Domain\Model\SearchParams; +use EP\EpProducts\Service\FilterService; +use EP\EpProducts\Service\FilterSettingsEncoder; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Object\ObjectManager; + +trait RequestArgumentTypeConversionTrait +{ + + /** + * Converts array to searchparams object + * @param null $forcedConceptUid + */ + public function processSearchParamsArgument($forcedConceptUid = null) + { + if ($this->request->hasArgument('searchParams')) { + + $searchParams = (array) $this->request->getArgument('searchParams'); + + $searchParams['dateFrom'] = !empty($searchParams['dateFrom']) ? new \DateTime($searchParams['dateFrom']) : null; + $searchParams['dateTo'] = !empty($searchParams['dateTo']) ? new \DateTime($searchParams['dateTo']) : null; + + $searchParamsObject = new SearchParams(); + + foreach ($searchParams as $key => $value) { + $setter = 'set' . ucfirst($key); + $value = static::convertType($value); + if (method_exists($searchParamsObject, $setter)) { + $searchParamsObject->{$setter}($value); + } + } + + if ($forcedConceptUid) { + $searchParamsObject->setConceptUid($forcedConceptUid); + } + + $this->request->setArgument('searchParams', $searchParamsObject); + } + } + + /** + * Converts urlencoded json or array to filtersettings object + * @param null $forcedConceptUid + */ + public function processFilterSettingsArgument($forcedConceptUid = null) + { + if ($this->request->hasArgument('filterSettings')) { + + /** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */ + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + + $filterSettingsRaw = $this->request->getArgument('filterSettings'); + + if (is_array($filterSettingsRaw)) { + $filterSettings = (array) $filterSettingsRaw; + } elseif (is_string($filterSettingsRaw)) { + $filterSettingsString = urldecode($filterSettingsRaw); + $filterSettings = FilterSettingsEncoder::decode($filterSettingsString); + } + + if ($filterSettingsRaw instanceof FilterSettings) { + $filterSettingsObject = $filterSettingsRaw; + } else { + $filterSettings['dateFrom'] = !empty($filterSettings['dateFrom']) ? new \DateTime($filterSettings['dateFrom']) : null; + $filterSettings['dateTo'] = !empty($filterSettings['dateTo']) ? new \DateTime($filterSettings['dateTo']) : null; + + if (!empty($filterSettings['bus']) && is_string($filterSettings['bus'])) { + $filterSettings['bus'] = ($filterSettings['bus'] === 'true'); + } + + $filterSettingsObject = new FilterSettings(); + + foreach ($filterSettings as $key => $value) { + $setter = 'set' . ucfirst($key); + $value = static::convertType($value); + if (method_exists($filterSettingsObject, $setter)) { + $filterSettingsObject->{$setter}($value); + } + } + } + + if ($forcedConceptUid) { + $conceptUids = $filterSettingsObject->getConceptUids(); + $conceptUids[] = $forcedConceptUid; + $filterSettingsObject->setConceptUids($conceptUids); + } + + /** @var \EP\EpProducts\Service\FilterService $filterService */ + $filterService = $objectManager->get(FilterService::class); + + $filterService->convertDestinationData($filterSettingsObject); + $filterService->sanitizeDateRange($filterSettingsObject); + + $this->request->setArgument('filterSettings', $filterSettingsObject); + } + } + + /** + * Converts numeric scalars and numeric elements of arrays + * to integers and string scalars to booleans if applicable + * + * @param mixed $value + * @return mixed + */ + static protected function convertType($value) + { + if (is_string($value) && (strtolower($value) === 'true' || strtolower($value) === 'false')) { + return strtolower($value) === 'true'; + } + if (is_numeric($value)) { + return (int) $value; + } + if (is_array($value)) { + return array_map(function($item) { + return static::convertType($item); + }, $value); + } + return $value; + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Utility/BookingUrlUtility.php b/web/typo3conf/ext/ep_products/Classes/Utility/BookingUrlUtility.php new file mode 100644 index 00000000..0eb75eb8 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Utility/BookingUrlUtility.php @@ -0,0 +1,81 @@ +, 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! + ***************************************************************/ + +class BookingUrlUtility +{ + + const COOKIE_NAME = 'ep_trk'; + const COOKIE_NAME_BPN = 'bpn_cookie'; + const URL_BASE = 'https://bpn.ep-reisen.de/buspronet/maske_buchung.php'; + + /** + * @param int $bookingId + * @param int $hotelId + * @param string $dateEnd + * @param string $template + * @return string + */ + public static function generateUrl($bookingId, $hotelId, $dateEnd, $template = 'base') + { + $query = [ + 'id' => $bookingId, + 'hotelid' => $hotelId, + ]; + + if ($dateEnd) { + $query['ruecktermin'] = date('d.m.Y', strtotime($dateEnd)); + } + + if ($template) { + $query['templatezusatz'] = '_' . $template; + } + + $cookie = $_COOKIE[static::COOKIE_NAME]; + if (strpos($cookie, '?') !== false) { + $items = GeneralUtility::trimExplode('?', $cookie); + $cookie = $items[0]; + } + $bpnCookie = $_COOKIE[static::COOKIE_NAME_BPN]; + + if (!empty($bpnCookie)) { + $query['agenturcode'] = $bpnCookie; + } elseif (!empty($cookie)) { + if (preg_match('/^P[a-zA-Z0-9]*/', $cookie)) { + $query['agenturcode'] = $cookie; + } else { + $query['crminfo'] = $cookie; + } + } + + return static::URL_BASE . '?' . http_build_query($query, '', '&'); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Utility/DateUtility.php b/web/typo3conf/ext/ep_products/Classes/Utility/DateUtility.php new file mode 100644 index 00000000..12b3a396 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Utility/DateUtility.php @@ -0,0 +1,86 @@ +, 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! + ***************************************************************/ + +class DateUtility +{ + + /** + * @param \DateTime $dateFrom + * @param \DateTime $dateTo + * @param bool $includeLabel* + * @param string $format + * + * @return string + */ + public static function formatDateRange(\DateTime $dateFrom = null, \DateTime $dateTo = null, $includeLabel = true, $format = 'd.m.Y') + { + if ($dateFrom === null && $dateTo === null) { + return ''; + } + $label = (bool) $includeLabel ? 'im Zeitraum ' : ''; + if ($dateFrom !== null && $dateTo === null) { + return $label . 'ab ' . $dateFrom->format($format); + } + if ($dateFrom === null && $dateTo !== null) { + return $label . '-' . $dateTo->format($format); + } + return $label . $dateFrom->format($format) . '-' . $dateTo->format($format); + } + + /** + * @param string|int $fromYear + * @param string|int $fromMonth + * @param int $months + * + * @return array + */ + public static function getDateRange($fromYear = null, $fromMonth = null, $months = 6) + { + $now = new \DateTime('now'); + $currentMonth = (int) $now->format('m'); + $currentYear = (int) $now->format('Y'); + + if ($fromYear === null || (int) $fromYear < $currentYear) { + $fromYear = $currentYear; + } + + if ($fromMonth === null || ((int) $fromYear === $currentYear && (int) $fromMonth < $currentMonth)) { + $fromMonth = $currentMonth; + } + + $begin = new \DateTime(); + $begin->setDate($fromYear, $fromMonth, 1); + $begin->setTime(0, 0, 0); + $end = clone $begin; + $end->add(new \DateInterval('P' . $months . 'M')); + $end->setTime(23, 59, 59); + + return [ $begin, $end ]; + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Utility/DbUtility.php b/web/typo3conf/ext/ep_products/Classes/Utility/DbUtility.php new file mode 100644 index 00000000..736537f7 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Utility/DbUtility.php @@ -0,0 +1,64 @@ +, 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 Doctrine\DBAL\Configuration; +use Doctrine\DBAL\Connection; +use Doctrine\DBAL\DriverManager; + +class DbUtility +{ + /** + * @var Connection + */ + protected static $connection; + + /** + * @param string $configIndex + * + * @return Connection + */ + public static function getDbConnection($configIndex = 'DB') + { + if (static::$connection === null) { + $config = new Configuration(); + $connectionParams = [ + 'dbname' => $GLOBALS['TYPO3_CONF_VARS'][$configIndex]['database'], + 'user' => $GLOBALS['TYPO3_CONF_VARS'][$configIndex]['username'], + 'password' => $GLOBALS['TYPO3_CONF_VARS'][$configIndex]['password'], + 'host' => $GLOBALS['TYPO3_CONF_VARS'][$configIndex]['host'], + 'unix_socket' => $GLOBALS['TYPO3_CONF_VARS'][$configIndex]['socket'], + 'charset' => 'utf8', + 'driver' => 'mysqli', + ]; + static::$connection = DriverManager::getConnection($connectionParams, $config); + } + + return static::$connection; + } +} diff --git a/web/typo3conf/ext/ep_products/Classes/Utility/SessionUtility.php b/web/typo3conf/ext/ep_products/Classes/Utility/SessionUtility.php new file mode 100644 index 00000000..a71dc123 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Utility/SessionUtility.php @@ -0,0 +1,74 @@ +, 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! + ***************************************************************/ + +class SessionUtility +{ + + /** + * @param string $key + * @param mixed $value + */ + static public function init($key, $value) + { + if (static::get($key) === false) { + static::set($key, $value); + } + } + + /** + * @param string $key + * @param mixed $value + */ + static public function set($key, $value) + { + $serializedValue = serialize($value); + $GLOBALS['TSFE']->fe_user->setKey('ses', $key, $serializedValue); + $GLOBALS['TSFE']->fe_user->storeSessionData(); + } + + /** + * @param string $key + * + * @return mixed|null + */ + static public function get($key) + { + $value = $GLOBALS['TSFE']->fe_user->getKey('ses', $key); + return unserialize($value); + } + + /** + * @param string $key + */ + static public function remove($key) + { + static::set($key, null); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Utility/SettingsUtility.php b/web/typo3conf/ext/ep_products/Classes/Utility/SettingsUtility.php new file mode 100644 index 00000000..5df72390 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Utility/SettingsUtility.php @@ -0,0 +1,56 @@ +, 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 TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManager; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; +use TYPO3\CMS\Extbase\Object\ObjectManager; + +class SettingsUtility +{ + + /** + * @param string $key + * @return string|array + */ + static public function get($key = null) + { + /** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */ + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + $configurationManager = $objectManager->get(ConfigurationManager::class); + $settings = GeneralUtility::removeDotsFromTS($configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT)); + + if ($key !== null && array_key_exists($key, $settings['plugin']['tx_epproducts']['settings'])) { + return $settings['plugin']['tx_epproducts']['settings'][$key]; + } + + return $settings['plugin']['tx_epproducts']['settings']; + } + +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_city_detail.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_city_detail.xml new file mode 100644 index 00000000..5b0f42f0 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_city_detail.xml @@ -0,0 +1,31 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_city + ORDER BY name + 1 + 1 + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_city_teaser.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_city_teaser.xml new file mode 100644 index 00000000..a98c0d93 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_city_teaser.xml @@ -0,0 +1,79 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_country + ORDER BY name + + + + 0 + + + 0 + 1 + + + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_region + ORDER BY name + + + + 0 + + + 0 + 1 + + + + + + 0 + + + select + selectSingle + + + Winter + w + + + Sommer + s + + + 1 + 1 + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_concept_detail.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_concept_detail.xml new file mode 100644 index 00000000..8155d8c3 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_concept_detail.xml @@ -0,0 +1,46 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_concept + ORDER BY name + + + Alle + 0 + + + 0 + 1 + + + + + + 0 + + + check + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_country.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_country.xml new file mode 100644 index 00000000..7e9cb9b4 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_country.xml @@ -0,0 +1,46 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_country + ORDER BY name + + + + 0 + + + 0 + 1 + + + + + + 0 + + + check + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_faq.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_faq.xml new file mode 100644 index 00000000..7937046a --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_faq.xml @@ -0,0 +1,32 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectMultipleSideBySide + tx_epproducts_domain_model_faq + ORDER BY label + 1 + 50 + 10 + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_hotel_detail.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_hotel_detail.xml new file mode 100644 index 00000000..0911fa31 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_hotel_detail.xml @@ -0,0 +1,46 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_hotel + ORDER BY name + + + Alle + 0 + + + 0 + 1 + + + + + + 0 + + + check + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_hotel_detail_event.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_hotel_detail_event.xml new file mode 100644 index 00000000..11a518bb --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_hotel_detail_event.xml @@ -0,0 +1,51 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_product + ORDER BY name + 1 + 1 + + + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_hotel + ORDER BY name + + + Alle + 0 + + + 1 + 1 + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_hotel_teaser.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_hotel_teaser.xml new file mode 100644 index 00000000..ad3aa0fd --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_hotel_teaser.xml @@ -0,0 +1,213 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + + + vierspaltig + 4 + + + dreispaltig + 3 + + + zweispaltig + 2 + + + 1 + 1 + + + + + + 0 + + FIELD:settings.productUid:REQ:FALSE + + select + selectSingle + tx_epproducts_domain_model_country + ORDER BY name + + + Keine Zuordnung + 0 + + + 0 + 1 + + + + + + 0 + + FIELD:settings.productUid:REQ:FALSE + + select + selectSingle + tx_epproducts_domain_model_region + ORDER BY name + + + Keine Zuordnung + 0 + + + 0 + 1 + + + + + + 0 + + FIELD:settings.productUid:REQ:FALSE + + select + selectSingle + tx_epproducts_domain_model_city + ORDER BY name + + + Keine Zuordnung + 0 + + + 0 + 1 + + + + + + + FIELD:settings.productUid:REQ:FALSE + + select + selectSingle + tx_epproducts_domain_model_concept + ORDER BY name + + + Keine Zuordnung + 0 + + + 0 + 1 + + + + + + + reload + + select + selectSingle + tx_epproducts_domain_model_product + ORDER BY name + + + Keine Zuordnung + 0 + + + 0 + 1 + + + + + + + FIELD:settings.productUid:REQ:TRUE + + select + selectSingle + + + Alle + 0 + + + Standard + 1 + + + Komfort + 2 + + + Deluxe + 3 + + + Superdeluxe + 4 + + + 0 + 1 + + + + + + + + select + selectCheckBox + + + Ferienwohnung + 1 + + + Sportclub + 2 + + + Appartment + 3 + + + Gästerhaus + 4 + + + Pension + 5 + + + 0 + 10 + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_hotel_teaser_date_independent.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_hotel_teaser_date_independent.xml new file mode 100644 index 00000000..a76832cf --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_hotel_teaser_date_independent.xml @@ -0,0 +1,172 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + + + vierspaltig + 4 + + + dreispaltig + 3 + + + zweispaltig + 2 + + + 1 + 1 + + + + + + 0 + + FIELD:settings.productUid:REQ:FALSE + + select + selectSingle + tx_epproducts_domain_model_country + ORDER BY name + + + Keine Zuordnung + 0 + + + 0 + 1 + + + + + + 0 + + FIELD:settings.productUid:REQ:FALSE + + select + selectSingle + tx_epproducts_domain_model_region + ORDER BY name + + + Keine Zuordnung + 0 + + + 0 + 1 + + + + + + + reload + + select + selectSingle + tx_epproducts_domain_model_product + ORDER BY name + + + Keine Zuordnung + 0 + + + 0 + 1 + + + + + + + FIELD:settings.productUid:REQ:TRUE + + select + selectSingle + + + Alle + 0 + + + Standard + 1 + + + Komfort + 2 + + + Deluxe + 3 + + + Superdeluxe + 4 + + + 0 + 1 + + + + + + + + select + selectCheckBox + + + Ferienwohnung + 1 + + + Sportclub + 2 + + + Appartment + 3 + + + Gästerhaus + 4 + + + Pension + 5 + + + 0 + 10 + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_maps.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_maps.xml new file mode 100644 index 00000000..c973c2e2 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_maps.xml @@ -0,0 +1,47 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectMultipleSideBySide + tx_epproducts_domain_model_hotel + AND tx_epproducts_domain_model_hotel.latitude != "" AND tx_epproducts_domain_model_hotel.longitude != "" ORDER BY name + 0 + 50 + 10 + + + + + + 0 + + + select + selectMultipleSideBySide + tx_epproducts_domain_model_product + AND tx_epproducts_domain_model_product.detail_page != 0 ORDER BY name_internal + 0 + 50 + 10 + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_pricetable.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_pricetable.xml new file mode 100644 index 00000000..3e12e06f --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_pricetable.xml @@ -0,0 +1,64 @@ + + + 1 + + + + + + Konfiguration + + array + + + + + reload + + select + Pricetable->event + + + Preistabelle Eventreise + Pricetable->event + + + + + + + + + + check + 0 + + + + + + + + input + trim + + + + + + + + select + selectSingle + tx_epproducts_domain_model_product + ORDER BY name + 1 + 1 + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_product_detail.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_product_detail.xml new file mode 100644 index 00000000..2b1670af --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_product_detail.xml @@ -0,0 +1,66 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_product + ORDER BY name + + + Alle + 0 + + + 0 + 1 + + + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_hotel + ORDER BY name + + + Alle + 0 + + + 0 + 1 + + + + + + 0 + + + check + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_product_pricetable.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_product_pricetable.xml new file mode 100644 index 00000000..11a518bb --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_product_pricetable.xml @@ -0,0 +1,51 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_product + ORDER BY name + 1 + 1 + + + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_hotel + ORDER BY name + + + Alle + 0 + + + 1 + 1 + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_product_teaser.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_product_teaser.xml new file mode 100644 index 00000000..1f8c829f --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_product_teaser.xml @@ -0,0 +1,230 @@ + + + 1 + + + + + + Konfiguration + + array + + + + + reload + + select + Product->teasergroup + + + Teasergruppe + Product->teasergroup + + + Einzelteaser + Product->teaser + + + + + + + + + teasergroup]]> + + select + selectSingle + tx_epproducts_domain_model_country + ORDER BY name + + + Keine Zuordnung + 0 + + + 0 + 1 + + + + + + + teasergroup]]> + + select + selectSingle + tx_epproducts_domain_model_region + ORDER BY name + + + Keine Zuordnung + 0 + + + 0 + 1 + + + + + + + teasergroup]]> + + select + selectSingle + tx_epproducts_domain_model_concept + ORDER BY name + + + Keine Zuordnung + 0 + + + 0 + 1 + + + + + + + + select + selectSingle + tx_epproducts_domain_model_hotel + ORDER BY name + + + Alle + 0 + + + 0 + 1 + + + + + + + teasergroup]]> + + check + + + + + + + teasergroup]]> + + input + 10 + date + + + + + + + teasergroup]]> + + input + 10 + date + + + + + + + teaser]]> + + select + selectSingle + tx_epproducts_domain_model_product + ORDER BY name + + + Alle + 0 + + + 0 + 1 + + + + + + + teasergroup]]> + + select + selectSingle + + + Spalten + cols + + + Reihen + rows + + + + + + + + + teasergroup]]> + + select + selectCheckBox + + + Ferienwohnung + 1 + + + Sportclub + 2 + + + Apartment + 3 + + + Gästehaus + 4 + + + Pension + 5 + + + 0 + 10 + + + + + + 0 + + + check + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_region_detail.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_region_detail.xml new file mode 100644 index 00000000..46baa674 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_region_detail.xml @@ -0,0 +1,40 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_region + ORDER BY name + 1 + 1 + + + + + + 0 + + + check + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_region_teaser.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_region_teaser.xml new file mode 100644 index 00000000..69dd9420 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_region_teaser.xml @@ -0,0 +1,53 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectSingle + tx_epproducts_domain_model_country + ORDER BY name + 1 + 1 + + + + + + 0 + + + select + selectSingle + + + Winter + w + + + Sommer + s + + + 1 + 1 + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_snowreport.xml b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_snowreport.xml new file mode 100644 index 00000000..6e865c86 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/FlexForms/flexform_snowreport.xml @@ -0,0 +1,32 @@ + + + 1 + + + + + + Konfiguration + + array + + + + 0 + + + select + selectMultipleSideBySide + tx_epproducts_domain_model_region + AND tx_epproducts_domain_model_region.snowreport > 0 ORDER BY name + 0 + 99 + 10 + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_badge.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_badge.php new file mode 100644 index 00000000..e7420a22 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_badge.php @@ -0,0 +1,162 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_badge', + 'default_sortby' => 'ORDER BY title', + 'label' => 'title', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'headline,subline', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_badge.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, title, subtitle, link', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, title, subtitle, link', + ], + ], + 'palettes' => [ + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_badge', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_badge.pid=###CURRENT_PID### AND tx_epproducts_domain_model_badge.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'title' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_badge.title', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'subtitle' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_badge.subtitle', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'link' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_badge.link', + 'config' => [ + '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' + ] + ], + ] + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_city.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_city.php new file mode 100644 index 00000000..3c797a5e --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_city.php @@ -0,0 +1,438 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city', + 'default_sortby' => 'ORDER BY name', + 'label' => 'name_internal', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,headline,teaser,description,party,leisure,teaser_images,header_images, images,latitude,longitude,country,region,facts,', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_city.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, detail_page, exclude_from_teasergroups, name, name_internal, headline, teaser, keywords, description, party, leisure, teaser_images, images, latitude, longitude, season, country, region, facts, officetip,header_title,header_subtitle', + ], + 'types' => [ + '1' => [ + 'showitem' => '--palette--;;top, name_internal, --palette--;;name, --palette--;;destinations, teaser, keywords, description, party, leisure, facts, officetip, --div--;Bilder/Dateien, teaser_images, header_images, images', + 'columnsOverrides' => [ + 'teaser' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'party' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'leisure' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + 'top' => ['showitem' => 'hidden,detail_page,exclude_from_teasergroups'], + 'name' => ['showitem' => 'name,headline,--linebreak--,header_title,header_subtitle'], + 'destinations' => ['showitem' => 'country,region,city,latitude,longitude,season'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_city', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_city.pid=###CURRENT_PID### AND tx_epproducts_domain_model_city.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'detail_page' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.detail_page', + 'config' => [ + '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' + ] + ], + ] + ], + 'exclude_from_teasergroups' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.exclude_from_teasergroups', + 'config' => [ + 'type' => 'check', + ], + ], + 'season' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.season', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Winter', \EP\EpProducts\Domain\Model\AbstractDestination::SEASON_WINTER], + ['Sommer', \EP\EpProducts\Domain\Model\AbstractDestination::SEASON_SUMMER], + ], + ] + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.name', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'name_internal' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.name_internal', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'keywords' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.keywords', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 3, + 'eval' => 'trim', + ], + ], + 'headline' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.headline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'teaser' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.teaser', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'header_title' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.header_title', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'header_subtitle' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.header_subtitle', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'description' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.description', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'party' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.party', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'leisure' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.leisure', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'teaser_images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.teaser_images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'teaser_images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'header_images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.header_images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'header_images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'latitude' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.latitude', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ] + ], + 'longitude' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.longitude', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ] + ], + 'country' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.country', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_country', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'region' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.region', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_region', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'officetip' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.officetip', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_officetip', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + 'facts' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.facts', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'foreign_table' => 'tx_epproducts_domain_model_fact', + 'MM' => 'tx_epproducts_city_fact_mm', + 'size' => 10, + 'autoSizeMax' => 30, + 'maxitems' => 9999, + 'multiple' => 0, + 'wizards' => [ + '_VERTICAL' => 1, + 'add' => [ + 'type' => 'script', + 'title' => 'hinzufügen', + 'icon' => 'actions-add', + 'params' => [ + 'table' => 'tx_epproducts_domain_model_fact', + 'pid' => '###PAGE_TSCONFIG_ID###', + 'setValue' => 'prepend' + ], + 'module' => [ + 'name' => 'wizard_add' + ] + ], + ], + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_concept.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_concept.php new file mode 100644 index 00000000..12d955f0 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_concept.php @@ -0,0 +1,315 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept', + 'default_sortby' => 'ORDER BY name', + 'sortby' => 'sorting', + 'label' => 'name', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,description,detail_page,', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_concept.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, bus_pro_id, name, headline, code, + description, description_extended, teaser, detail_page, teaser_images, header_images,header_title, + header_subtitle', + ], + 'types' => [ + '1' => [ + 'showitem' => '--palette--;;top, --palette--;;naming, --palette--;;header, teaser, description, description_extended, + --div--;Bilder/Dateien, teaser_images, header_images', + 'columnsOverrides' => [ + 'teaser' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'description_extended' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + 'top' => ['showitem' => 'hidden,detail_page,code'], + 'naming' => ['showitem' => 'name,headline'], + 'header' => ['showitem' => 'header_title,header_subtitle'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_concept', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_concept.pid=###CURRENT_PID### AND tx_epproducts_domain_model_concept.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + 'sorting' => [ + 'config' => [ + 'type' => 'passthrough' + ] + ], + + 'bus_pro_id' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept.bus_pro_id', + 'config' => [ + 'type' => 'none', + 'format' => 'int', + ], + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept.name', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'code' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept.code', + 'config' => [ + 'type' => 'input', + 'size' => 5, + 'eval' => 'trim,lower,required' + ], + ], + 'description' => [ + 'exclude' => 0, + 'label' => 'Konzeptbeschreibung (oben)', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'description_extended' => [ + 'exclude' => 0, + 'label' => 'Konzeptbeschreibung (unten)', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'teaser' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept.teaser', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'headline' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept.headline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'header_title' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept.header_title', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'header_subtitle' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept.header_subtitle', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'detail_page' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept.detail_page', + 'config' => [ + 'type' => 'input', + 'size' => 4, + 'eval' => 'int', + 'wizards' => [ + 'link' => [ + 'type' => 'popup', + 'title' => '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' + ] + ], + ] + ], + 'teaser_images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept.teaser_images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'teaser_images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'header_images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept.header_images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'header_images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'products' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept.products', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'foreign_table' => 'tx_epproducts_domain_model_product', + 'size' => 10, + 'autoSizeMax' => 30, + 'maxitems' => 9999, + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_contingent.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_contingent.php new file mode 100644 index 00000000..b2b7b684 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_contingent.php @@ -0,0 +1,186 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_contingent', + 'label' => 'date', + 'label_userFunc' => \EP\EpProducts\Service\LabelService::class . '->getContingentLabel', + 'default_sortby' => 'ORDER BY date', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => true, + 'versioningWS' => 2, + 'versioning_followPages' => true, + 'hideTable' => true, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'code', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_contingent.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'date,pax,available,status,hotel,groupsch_id', + ], + 'types' => [ + '1' => ['showitem' => 'date, pax, available, status, hotel,groupsch_id'], + ], + 'palettes' => [], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_contingent', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_contingent.pid=###CURRENT_PID### AND tx_epproducts_domain_model_contingent.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'pax' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_contingent.pax', + 'config' => [ + 'type' => 'input', + 'size' => 3, + 'eval' => 'int,required' + ], + ], + 'available' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_contingent.available', + 'config' => [ + 'type' => 'input', + 'size' => 3, + 'eval' => 'int,required' + ], + ], + 'date' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_contingent.date', + 'config' => [ + 'dbType' => 'date', + 'type' => 'input', + 'size' => 7, + 'eval' => 'date,required', + 'checkbox' => 0, + 'default' => '0000-00-00' + ], + ], + 'hotel' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_contingent.hotel', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_hotel', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'status' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_contingent.status', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'minitems' => 1, + 'maxitems' => 1, + 'items' => [ + [ 'Ok', \EP\EpProducts\Domain\Model\Contingent::STATUS_OK ], + [ 'Buchungsstop', \EP\EpProducts\Domain\Model\Contingent::STATUS_BLOCKED ], + [ 'auf Anfrage', \EP\EpProducts\Domain\Model\Contingent::STATUS_ONREQUEST ], + ] + ], + ], + 'groupsch_id' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_contingent.groupsch_id', + 'config' => [ + 'type' => 'input', + 'size' => 8, + 'eval' => 'trim,int' + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_country.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_country.php new file mode 100644 index 00000000..9533b994 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_country.php @@ -0,0 +1,426 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country', + 'label' => 'name_internal', + 'default_sortby' => 'ORDER BY name_internal', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'code,name,headline,teaser,description,teaser_images,images,latitude,longitude,facts,', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_country.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, detail_page, code, name, + name_internal, headline, teaser, keywords, description, description_extended, teaser_images, header_images, + images, latitude, longitude, season, facts, officetip, snowreport, header_title, header_subtitle', + ], + 'types' => [ + '1' => [ + 'showitem' => ' + --palette--;;top, name_internal, --palette--;;name, headline, --palette--;;geolocation, keywords, + --div--;Texte, teaser, description, description_extended, + --div--;Verknüpfungen, facts, snowreport, officetip, + --div--;Bilder/Dateien, teaser_images, header_images, images', + 'columnsOverrides' => [ + 'teaser' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'description_extended' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + 'top' => ['showitem' => 'hidden,detail_page'], + 'name' => ['showitem' => 'code,name,--linebreak--,header_title,header_subtitle'], + 'geolocation' => ['showitem' => 'latitude,longitude,season'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_country', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_country.pid=###CURRENT_PID### AND tx_epproducts_domain_model_country.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'detail_page' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.detail_page', + 'config' => [ + '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' + ] + ], + ] + ], + 'code' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.code', + 'config' => [ + 'type' => 'input', + 'size' => 2, + 'eval' => 'trim,required' + ], + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.name', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'name_internal' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.name_internal', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'season' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.season', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Winter', \EP\EpProducts\Domain\Model\AbstractDestination::SEASON_WINTER], + ['Sommer', \EP\EpProducts\Domain\Model\AbstractDestination::SEASON_SUMMER], + ], + ] + ], + 'keywords' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.keywords', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 3, + 'eval' => 'trim', + ], + ], + 'headline' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.headline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'teaser' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.teaser', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'description' => [ + 'exclude' => 0, + 'label' => 'Beschreibung (oben)', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'description_extended' => [ + 'exclude' => 0, + 'label' => 'Beschreibung (unten)', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'header_title' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.header_title', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'header_subtitle' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.header_subtitle', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'teaser_images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.teaser_images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'teaser_images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'header_images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.header_images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'header_images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'latitude' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.latitude', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ] + ], + 'longitude' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.longitude', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ] + ], + 'officetip' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.officetip', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_officetip', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + 'snowreport' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.snowreport', + 'config' => [ + 'type' => 'select', + 'items' => [ + ['Keine Zuordnung', 0] + ], + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_snowreport', + 'foreign_table_where' => 'ORDER BY tx_epproducts_domain_model_snowreport.region_name', + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + 'facts' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country.facts', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'foreign_table' => 'tx_epproducts_domain_model_fact', + 'MM' => 'tx_epproducts_country_fact_mm', + 'size' => 10, + 'autoSizeMax' => 30, + 'maxitems' => 9999, + 'multiple' => 0, + 'wizards' => [ + '_VERTICAL' => 1, + 'add' => [ + 'type' => 'script', + 'title' => 'hinzufügen', + 'icon' => 'actions-add', + 'params' => [ + 'table' => 'tx_epproducts_domain_model_fact', + 'pid' => '###PAGE_TSCONFIG_ID###', + 'setValue' => 'prepend' + ], + 'module' => [ + 'name' => 'wizard_add' + ] + ], + ], + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_date.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_date.php new file mode 100644 index 00000000..7c320257 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_date.php @@ -0,0 +1,295 @@ + [ + 'title' => 'Termin', + 'label' => 'bus_pro_id', + 'label_userFunc' => \EP\EpProducts\Service\LabelService::class . '->getDateLabel', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + 'hideTable' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'bus_pro_id,code,date_start,date_end,', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_date.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, bus_pro_id, hotel_bus_pro_id, + code, date_start, date_end, nights, board, board_code, board_bus_pro_id, bus_included, bus_available, + skipass_included, services_included, services_general, discount, min_price, pseudo_price, available', + ], + 'types' => [ + '1' => ['showitem' => 'hidden, bus_pro_id, hotel_bus_pro_id, code, date_start, date_end, nights, board, + board_code, board_bus_pro_id, bus_included, bus_available, skipass_included, services_included, + services_general, discount, min_price, pseudo_price, available'], + ], + 'palettes' => [ + '1' => ['showitem' => ''], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_date', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_date.pid=###CURRENT_PID### AND tx_epproducts_domain_model_date.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'bus_pro_id' => [ + 'exclude' => 0, + 'label' => 'BusPro ID', + 'config' => [ + 'type' => 'none', + 'format' => 'int', + ], + ], + 'hotel_bus_pro_id' => [ + 'exclude' => 0, + 'label' => 'Hotel BusPro ID', + 'config' => [ + 'type' => 'none', + 'format' => 'int', + ], + ], + 'code' => [ + 'exclude' => 0, + 'label' => 'Kürzel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'date_start' => [ + 'exclude' => 0, + 'label' => 'Datum von', + 'config' => [ + 'dbType' => 'date', + 'type' => 'input', + 'size' => 7, + 'eval' => 'date', + 'checkbox' => 0, + 'default' => '0000-00-00' + ], + ], + 'date_end' => [ + 'exclude' => 0, + 'label' => 'Datum bis', + 'config' => [ + 'dbType' => 'date', + 'type' => 'input', + 'size' => 7, + 'eval' => 'date', + 'checkbox' => 0, + 'default' => '0000-00-00' + ], + ], + 'nights' => [ + 'exclude' => 0, + 'label' => 'Nächte', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim', + ], + ], + 'board' => [ + 'exclude' => 0, + 'label' => 'Verpflegung', + 'config' => [ + 'type' => 'none', + ], + ], + 'board_code' => [ + 'exclude' => 0, + 'label' => 'Verpflegung Code', + 'config' => [ + 'type' => 'none', + ], + ], + 'board_bus_pro_id' => [ + 'exclude' => 0, + 'label' => 'Verpflegung BusPro ID', + 'config' => [ + 'type' => 'none', + 'format' => 'int', + ], + ], + 'bus_included' => [ + 'exclude' => 0, + 'label' => 'Bus inklusive', + 'config' => [ + 'type' => 'check', + 'default' => 0 + ] + ], + 'bus_available' => [ + 'exclude' => 0, + 'label' => 'Bus verfügbar', + 'config' => [ + 'type' => 'check', + 'default' => 0 + ] + ], + 'skipass_included' => [ + 'exclude' => 0, + 'label' => 'Skipass inklusive', + 'config' => [ + 'type' => 'check', + 'default' => 0 + ] + ], + 'bus_price' => [ + 'exclude' => 0, + 'label' => 'Bus Preis', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim', + ], + ], + 'services_included' => [ + 'exclude' => 0, + 'label' => 'Inklusivleistungen', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim' + ] + ], + 'services_general' => [ + 'exclude' => 0, + 'label' => 'Leistungen', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim' + ] + ], + 'discount' => [ + 'exclude' => 0, + 'label' => 'Rabatt', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim', + ], + ], + 'min_price' => [ + 'exclude' => 0, + 'label' => 'ab Preis', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim', + ], + ], + 'pseudo_price' => [ + 'exclude' => 0, + 'label' => 'Pseudopreis', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim', + ], + ], + 'available' => [ + 'exclude' => 0, + 'label' => 'verfügbar', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim', + ], + ], + ] +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_fact.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_fact.php new file mode 100644 index 00000000..2146a0da --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_fact.php @@ -0,0 +1,150 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_fact', + 'label' => 'label', + 'default_sortby' => 'ORDER BY label', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,tags,', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_fact.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, label, name, keywords', + ], + 'types' => [ + '1' => ['showitem' => 'hidden, label, name'], + ], + 'palettes' => [ + '1' => ['showitem' => ''], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_fact', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_fact.pid=###CURRENT_PID### AND tx_epproducts_domain_model_fact.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'name' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_fact.name', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'label' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_fact.label', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'keywords' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_fact.keywords', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim' + ] + ], + + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_faq.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_faq.php new file mode 100644 index 00000000..3682dd55 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_faq.php @@ -0,0 +1,156 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_faq', + 'label' => 'label', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'question,answer,', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_faq.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, label, question, answer', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, label, question, answer', + 'columnsOverrides' => [ + 'answer' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + '1' => ['showitem' => ''], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_faq', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_faq.pid=###CURRENT_PID### AND tx_epproducts_domain_model_faq.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'label' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_faq.label', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'question' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_faq.question', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'answer' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_faq.answer', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim,required' + ] + ], + + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_hotel.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_hotel.php new file mode 100644 index 00000000..55e951a8 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_hotel.php @@ -0,0 +1,569 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel', + 'default_sortby' => 'ORDER BY name', + 'label' => 'name', + 'label_userFunc' => \EP\EpProducts\Service\LabelService::class . '->getHotelLabel', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,headline,teaser,description,features,room_types,additional_information,teaser_images, + header_images,images,code,type,category,country,region,city,teamer,products,', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_hotel.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, detail_page, keywords, + address, longitude, latitude, headline, teaser, description, features, room_types, additional_information, + teaser_images, header_images, images, code, type, category, country, region, city, facts, teamer, products, + header_title,header_subtitle, earlybird, low_contingent, show_as_teaser', + ], + 'types' => [ + '1' => [ + 'showitem' => '--palette--;;top, --palette--;;name, headline, --palette--;;geolocation, + --palette--;;destinations, --palette--;;categories, keywords, + --div--;Texte, teaser, description, features, room_types, additional_information, + --div--;Verknüpfungen, facts, teamer, additional_codes, + --div--;Bilder/Dateien, teaser_images, header_images, images', + 'columnsOverrides' => [ + 'teaser' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'features' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'room_types' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'additional_information' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + 'top' => ['showitem' => 'hidden,earlybird,low_contingent,show_as_teaser,--linebreak--,groupsch_id,detail_page'], + 'geolocation' => ['showitem' => 'address, longitude, latitude'], + 'destinations' => ['showitem' => 'country,region,city'], + 'name' => ['showitem' => 'name,code,--linebreak--,header_title,header_subtitle'], + 'categories' => ['showitem' => 'type,category'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_hotel', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_hotel.pid=###CURRENT_PID### AND tx_epproducts_domain_model_hotel.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'earlybird' => [ + 'exclude' => 0, + 'label' => 'Frühbucher', + 'config' => [ + 'type' => 'check', + ], + ], + 'low_contingent' => [ + 'exclude' => 0, + 'label' => 'wenige Betten', + 'config' => [ + 'type' => 'check', + ], + ], + 'show_as_teaser' => [ + 'exclude' => 0, + 'label' => 'als Teaser anzeigen', + 'config' => [ + 'type' => 'check', + ], + ], + 'detail_page' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.detail_page', + 'config' => [ + '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' + ] + ], + ] + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.name', + 'config' => [ + 'type' => 'text', + 'cols' => 30, + 'rows' => 2, + 'eval' => 'trim,required' + ], + ], + 'keywords' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.keywords', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 3, + 'eval' => 'trim', + ], + ], + 'headline' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.headline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'teaser' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.teaser', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'description' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.description', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'header_title' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.header_title', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'header_subtitle' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.header_subtitle', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'features' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.features', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'room_types' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.room_types', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'additional_information' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.additional_information', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'teaser_images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.teaser_images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'teaser_images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'header_images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.header_images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'header_images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'code' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.code', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'groupsch_id' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.groupsch_id', + 'config' => [ + 'type' => 'input', + 'size' => 8, + 'eval' => 'trim,int' + ], + ], + 'type' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.type', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Unbestimmt', 0], + ['Ferienwohnung', \EP\EpProducts\Domain\Model\Hotel::TYPE_HOLIDAY_FLAT], + ['Sportclub', \EP\EpProducts\Domain\Model\Hotel::TYPE_SPORTS_CLUB], + ['Appartment', \EP\EpProducts\Domain\Model\Hotel::TYPE_APPARTMENT], + ['Gästehaus', \EP\EpProducts\Domain\Model\Hotel::TYPE_GUESTHOUSE], + ['Pension', \EP\EpProducts\Domain\Model\Hotel::TYPE_PENSION], + ], + 'size' => 1, + 'minItems' => 1, + 'maxItems' => 1 + ], + ], + 'category' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.category', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Unbestimmt', 0], + ['Standard', \EP\EpProducts\Domain\Model\Hotel::CATEGORY_STANDARD], + ['Komfort', \EP\EpProducts\Domain\Model\Hotel::CATEGORY_COMFORT], + ['Deluxe', \EP\EpProducts\Domain\Model\Hotel::CATEGORY_DELUXE], + ['Super Deluxe', \EP\EpProducts\Domain\Model\Hotel::CATEGORY_SUPER_DELUXE], + ], + 'size' => 1, + 'minItems' => 1, + 'maxItems' => 1 + ] + ], + 'country' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.country', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_country', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'region' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.region', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_region', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'city' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.city', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_city', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'facts' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.facts', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'foreign_table' => 'tx_epproducts_domain_model_fact', + 'MM' => 'tx_epproducts_hotel_fact_mm', + 'size' => 10, + 'autoSizeMax' => 30, + 'maxitems' => 9999, + 'multiple' => 0, + 'wizards' => [ + '_VERTICAL' => 1, + 'add' => [ + 'type' => 'script', + 'title' => 'hinzufügen', + 'icon' => 'actions-add', + 'params' => [ + 'table' => 'tx_epproducts_domain_model_fact', + 'pid' => '###PAGE_TSCONFIG_ID###', + 'setValue' => 'prepend' + ], + 'module' => [ + 'name' => 'wizard_add' + ] + ], + ], + ], + ], + 'products' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.products', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'foreign_table' => 'tx_epproducts_domain_model_product', + 'MM' => 'tx_epproducts_product_hotel_mm', + 'MM_opposite_field' => 'hotels', + 'size' => 10, + 'autoSizeMax' => 30, + 'maxitems' => 9999, + 'multiple' => 0, + ], + ], + 'teamer' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.teamer', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'enableMultiSelectFilterTextfield' => true, + 'foreign_table' => 'tx_epproducts_domain_model_teammember', + 'MM' => 'tx_epproducts_hotel_teammember_mm', + 'size' => 10, + 'autoSizeMax' => 30, + 'maxitems' => 9999, + 'multiple' => 1, + ], + ], + 'additional_codes' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.additional_codes', + 'config' => array( + 'type' => 'inline', + 'foreign_table' => 'tx_epproducts_domain_model_matchcode', + 'foreign_field' => 'entity', + 'foreign_match_fields' => [ + 'entity_type' => 'hotel', + ], + 'maxitems' => 10, + 'appearance' => array( + 'collapseAll' => 1, + 'levelLinksPosition' => 'top', + 'showSynchronizationLink' => 0, + 'showPossibleLocalizationRecords' => 0, + 'showAllLocalizationLink' => 0, + 'expandSingle' => 1, + ), + ), + ], + 'latitude' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.latitude', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ] + ], + 'longitude' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.longitude', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ] + ], + 'address' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel.address', + 'config' => [ + 'type' => 'text', + 'cols' => 30, + 'rows' => 5, + 'eval' => 'trim', + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_journey.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_journey.php new file mode 100644 index 00000000..76b09719 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_journey.php @@ -0,0 +1,184 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_journey', + 'default_sortby' => 'ORDER BY name', + 'label' => 'name', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,by_car,by_bus,', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_journey.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, by_car, by_bus, image', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, name, by_car, by_bus, image', + 'columnsOverrides' => [ + 'by_car' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'by_bus' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_city', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_city.pid=###CURRENT_PID### AND tx_epproducts_domain_model_city.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'name' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_journey.name', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'by_car' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_journey.by_car', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'by_bus' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_journey.by_bus', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'image' => [ + 'exclude' => 0, + 'label' => 'Bild', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1, + 'minitems' => 0, + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_matchcode.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_matchcode.php new file mode 100644 index 00000000..f6d87d0b --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_matchcode.php @@ -0,0 +1,144 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_matchcode', + 'label' => 'code', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + 'hideTable' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'code', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_matchcode.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'code,entity_type', + ], + 'types' => [ + '1' => ['showitem' => 'code'], + ], + 'palettes' => [ + '1' => ['showitem' => ''], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_matchcode', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_matchcode.pid=###CURRENT_PID### AND tx_epproducts_domain_model_matchcode.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'code' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_matchcode.code', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'entity_type' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ic_events/Resources/Private/Language/locallang.xlf:tx_icevents_domain_model_matchcode.entity_type', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + [ + 'Hotel', + 'hotel', + ], + ], + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_officetip.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_officetip.php new file mode 100644 index 00000000..80a0750e --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_officetip.php @@ -0,0 +1,151 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_officetip', + 'label' => 'label', + 'label_userFunc' => \EP\EpProducts\Service\LabelService::class . '->getOfficetipLabel', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'text,author,product,', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_officetip.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, text, author', + ], + 'types' => [ + '1' => ['showitem' => '--palette--;;top, text'], + ], + 'palettes' => [ + 'top' => ['showitem' => 'label,author,hidden'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_officetip', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_officetip.pid=###CURRENT_PID### AND tx_epproducts_domain_model_officetip.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'label' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_officetip.label', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'text' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_officetip.text', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim,required' + ] + ], + 'author' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_officetip.author', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_teammember', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_product.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_product.php new file mode 100644 index 00000000..d2287e47 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_product.php @@ -0,0 +1,717 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product', + 'label' => 'name_internal', + 'label_userFunc' => \EP\EpProducts\Service\LabelService::class . '->getProductLabel', + 'default_sortby' => 'ORDER BY name_internal', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,headline', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_product.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, searchable, bookable, + detail_page, name, name_internal, subline, keywords, headline, code, feature, bus_pro_id, teaser, teaser_long, + concept_description, board_description, additional_services, programme_description, ski_pass_description, + rating_average, rating_votes_count, teaser_images, header_images, images, concept, country, region, city, + journey, facts, officetip, hotels, calendar_hotel, faqs,header_title,header_subtitle, alt_product, alt_label, + video, banner, additional_regions,badge', + ], + 'types' => [ + '1' => [ + 'showitem' => '--palette--;;top, name_internal, --palette--;;name, --palette--;;header, + --palette--;;destinations, --palette--;;rating, keywords, feature, + --palette--;Alternative;alternative, + --div--;Texte, teaser, teaser_long, concept_description, board_description, additional_services, + programme_description, ski_pass_description, + --div--;Verknüpfungen, journey, --palette--;;concept, hotels, facts, faqs, officetip, + additional_regions, badge, + --div--;Bilder/Dateien, teaser_images, header_images, images, banner, video', + 'columnsOverrides' => [ + 'teaser' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'teaser_long' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'concept_description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'board_description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'additional_services' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'programme_description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'ski_pass_description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + 'destinations' => ['showitem' => 'country,region,city'], + 'top' => ['showitem' => 'searchable, bookable, detail_page'], + 'name' => ['showitem' => 'name,code'], + 'alternative' => ['showitem' => 'alt_product, alt_label'], + 'header' => ['showitem' => 'headline,subline,--linebreak--,header_title,header_subtitle'], + 'rating' => ['showitem' => 'rating_average,rating_votes_count'], + 'concept' => ['showitem' => 'concept,calendar_hotel'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_product', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_product.pid=###CURRENT_PID### AND tx_epproducts_domain_model_product.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'searchable' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.searchable', + 'config' => [ + 'type' => 'check', + ], + ], + 'bookable' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.bookable', + 'config' => [ + 'type' => 'check', + ], + ], + 'detail_page' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.detail_page', + 'config' => [ + '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' + ] + ], + ] + ], + 'bus_pro_id' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.bus_pro_id', + 'config' => [ + 'type' => 'none', + 'format' => 'int', + ], + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.name', + 'config' => [ + 'type' => 'text', + 'cols' => 30, + 'rows' => 2, + 'eval' => 'trim,required' + ], + ], + 'name_internal' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.name_internal', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'subline' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.subline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'keywords' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.keywords', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 3, + 'eval' => 'trim', + ], + ], + 'headline' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.headline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'code' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.code', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'feature' => [ + 'exclude' => 0, + 'label' => 'Leistung für Teaser', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'teaser' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.teaser', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'teaser_long' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.teaser_long', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'header_title' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.header_title', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'header_subtitle' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city.header_subtitle', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'concept_description' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.concept_description', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'board_description' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.board_description', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'additional_services' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.additional_services', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'programme_description' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.programme_description', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'ski_pass_description' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.ski_pass_description', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'rating_average' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.rating_average', + 'config' => [ + 'type' => 'input', + 'size' => 5, + 'eval' => 'double2' + ], + ], + 'rating_votes_count' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.rating_votes_count', + 'config' => [ + 'type' => 'input', + 'size' => 10, + 'eval' => 'int' + ], + ], + 'teaser_images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.teaser_images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'teaser_images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'header_images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.header_images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'header_images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'images' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.images', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'concept' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.concept', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_concept', + 'foreign_table_where' => 'AND 1=1 ORDER BY name', + 'minItems' => 1, + 'maxitems' => 1, + ], + ], + 'country' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.country', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_country', + 'foreign_table_where' => 'AND 1=1 ORDER BY name', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'region' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.region', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_region', + 'foreign_table_where' => 'AND 1=1 ORDER BY name', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'city' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.city', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_city', + 'foreign_table_where' => 'AND 1=1 ORDER BY name', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'journey' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.journey', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_journey', + 'foreign_table_where' => 'AND 1=1 ORDER BY name', + 'items' => [ + ['Keine Zuordnung', 0] + ], + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + 'facts' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.facts', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'foreign_table' => 'tx_epproducts_domain_model_fact', + 'foreign_table_where' => 'AND 1=1 ORDER BY tx_epproducts_domain_model_fact.name', + 'MM' => 'tx_epproducts_product_fact_mm', + 'size' => 10, + 'autoSizeMax' => 30, + 'maxitems' => 9999, + 'multiple' => 0, + 'wizards' => [ + '_VERTICAL' => 1, + 'add' => [ + 'type' => 'script', + 'title' => 'hinzufügen', + 'icon' => 'actions-add', + 'params' => [ + 'table' => 'tx_epproducts_domain_model_fact', + 'pid' => '###PAGE_TSCONFIG_ID###', + 'setValue' => 'prepend' + ], + 'module' => [ + 'name' => 'wizard_add' + ] + ], + ], + ], + ], + 'hotels' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.hotels', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'enableMultiSelectFilterTextfield' => true, + 'foreign_table' => 'tx_epproducts_domain_model_hotel', + 'foreign_table_where' => 'AND 1=1 ORDER BY tx_epproducts_domain_model_hotel.name', + 'MM' => 'tx_epproducts_product_hotel_mm', + 'size' => 10, + 'autoSizeMax' => 30, + 'minItems' => 1, + 'maxitems' => 9999, + 'multiple' => 0, + ], + ], + 'calendar_hotel' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.calendar_hotel', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_hotel', + 'foreign_table_where' => 'AND 1=1 ORDER BY tx_epproducts_domain_model_hotel.name', + 'items' => [ + [ 'Kein Kalender', 0 ], + ], + ], + ], + 'officetip' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.officetip', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_officetip', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + 'faqs' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.faqs', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'foreign_table' => 'tx_epproducts_domain_model_faq', + 'foreign_table_where' => 'AND 1=1 ORDER BY tx_epproducts_domain_model_faq.label', + 'MM' => 'tx_epproducts_product_faq_mm', + 'size' => 10, + 'autoSizeMax' => 30, + 'maxitems' => 9999, + 'multiple' => 0, + 'wizards' => [ + '_VERTICAL' => 1, + 'add' => [ + 'type' => 'script', + 'title' => 'hinzufügen', + 'icon' => 'actions-add', + 'params' => [ + 'table' => 'tx_epproducts_domain_model_faq', + 'pid' => '###PAGE_TSCONFIG_ID###', + 'setValue' => 'prepend' + ], + 'module' => [ + 'name' => 'wizard_add' + ] + ], + ], + ], + ], + 'alt_product' => [ + 'exclude' => 0, + 'label' => 'Produkt', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_product', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_product.uid != ###THIS_UID### ORDER BY tx_epproducts_domain_model_product.name_internal', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + 'alt_label' => [ + 'exclude' => 0, + 'label' => 'Button Label', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'video' => [ + 'exclude' => 0, + 'label' => 'Video (Vimeo ID)', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'banner' => [ + 'exclude' => 0, + 'label' => 'Banner für Sidebar', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'banner', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'additional_regions' => [ + 'exclude' => 0, + 'label' => 'Weitere Gebiete', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'foreign_table' => 'tx_epproducts_domain_model_region', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_region.deleted = 0 ORDER BY tx_epproducts_domain_model_region.name', + 'MM' => 'tx_epproducts_product_region_mm', + 'size' => 10, + 'autoSizeMax' => 30, + 'maxitems' => 9999, + 'multiple' => 0, + ], + ], + 'badge' => [ + 'exclude' => 0, + 'label' => 'Badge', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_badge', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_badge.deleted = 0 ORDER BY tx_epproducts_domain_model_badge.title', + 'items' => [ + ['Keine Auswahl', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_region.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_region.php new file mode 100644 index 00000000..0ffcb6e1 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_region.php @@ -0,0 +1,615 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_region', + 'label' => 'name_internal', + 'default_sortby' => 'ORDER BY name_internal', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,headline,teaser,ski_area,ski_pass,description,news', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_region.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, detail_page, + exclude_from_teasergroups, name, name_internal, headline, teaser, keywords, ski_area, ski_pass, + description, news, length, height, lifts, feature, teaser_images, header_images, images, region_maps, + latitude, longitude, country, facts, snowreport, webcam, officetip,header_title,header_subtitle, + award_image, award_link, award_label', + ], + 'types' => [ + '1' => [ + 'showitem' => '--palette--;;top, name_internal, --palette--;;name, --palette--;;destinations, + --palette--;;livedata, teaser, keywords, facts, officetip,--palette--;Auszeichnung;award, + --div--;Texte, ski_area, ski_area_extended, ski_pass, description, news, + --div--;Daten, --palette--;;dimensions, + --div--;Bilder/Dateien, teaser_images, header_images, images, region_maps', + 'columnsOverrides' => [ + 'teaser' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'ski_area' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'ski_area_extended' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'ski_pass' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + 'news' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + 'top' => ['showitem' => 'hidden,detail_page,exclude_from_teasergroups'], + 'name' => ['showitem' => 'name,headline,--linebreak--,header_title,header_subtitle'], + 'destinations' => ['showitem' => 'country,season,latitude,longitude'], + 'dimensions' => ['showitem' => 'length,height,lifts'], + 'livedata' => ['showitem' => 'snowreport,webcam,--linebreak--,feature'], + 'award' => ['showitem' => 'award_link, award_label, --linebreak--, award_image'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_region', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_region.pid=###CURRENT_PID### AND tx_epproducts_domain_model_region.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'detail_page' => [ + 'exclude' => 0, + 'label' => 'Detailseite', + 'config' => [ + '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' + ] + ], + ] + ], + 'exclude_from_teasergroups' => [ + 'exclude' => 0, + 'label' => 'Nicht in Teasergruppen', + 'config' => [ + 'type' => 'check', + ], + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'Name', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'name_internal' => [ + 'exclude' => 0, + 'label' => 'Name intern', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'season' => [ + 'exclude' => 0, + 'label' => 'Saison', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Winter', \EP\EpProducts\Domain\Model\AbstractDestination::SEASON_WINTER], + ['Sommer', \EP\EpProducts\Domain\Model\AbstractDestination::SEASON_SUMMER], + ], + ] + ], + 'keywords' => [ + 'exclude' => 0, + 'label' => 'Keywords für Suchschlitz', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 3, + 'eval' => 'trim', + ], + ], + 'headline' => [ + 'exclude' => 0, + 'label' => 'Headline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'teaser' => [ + 'exclude' => 0, + 'label' => 'Teaser', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'header_title' => [ + 'exclude' => 0, + 'label' => 'Header Title', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'header_subtitle' => [ + 'exclude' => 0, + 'label' => 'Header Subtitle', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'ski_area' => [ + 'exclude' => 0, + 'label' => 'Das Skigebiet/Highlights (oben)', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'ski_area_extended' => [ + 'exclude' => 0, + 'label' => 'Das Skigebiet/Highlights (unten)', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'ski_pass' => [ + 'exclude' => 0, + 'label' => 'Der Skipass', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'description' => [ + 'exclude' => 0, + 'label' => 'Anfänger, Snowpark, Freeriden', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'news' => [ + 'exclude' => 0, + 'label' => 'Aktuell', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'length' => [ + 'exclude' => 0, + 'label' => 'Pisten', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'height' => [ + 'exclude' => 0, + 'label' => 'Höhe', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'lifts' => [ + 'exclude' => 0, + 'label' => 'Lifte', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'feature' => [ + 'exclude' => 0, + 'label' => 'Feature für Teaser', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'teaser_images' => [ + 'exclude' => 0, + 'label' => 'Teaserbild(er)', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'teaser_images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'header_images' => [ + 'exclude' => 0, + 'label' => 'Headerbild(er)', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'header_images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'images' => [ + 'exclude' => 0, + 'label' => 'Galeriebilder', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'images', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 10 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'region_maps' => [ + 'exclude' => 0, + 'label' => 'Gebietskarten', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'region_maps', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 5 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'latitude' => [ + 'exclude' => 0, + 'label' => 'Breitengrad', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ] + ], + 'longitude' => [ + 'exclude' => 0, + 'label' => 'Längengrad', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ] + ], + 'country' => [ + 'exclude' => 0, + 'label' => 'Land', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_country', + 'minitems' => 1, + 'maxitems' => 1, + ], + ], + 'facts' => [ + 'exclude' => 0, + 'label' => 'Facts', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectMultipleSideBySide', + 'foreign_table' => 'tx_epproducts_domain_model_fact', + 'MM' => 'tx_epproducts_region_fact_mm', + 'size' => 10, + 'autoSizeMax' => 30, + 'maxitems' => 9999, + 'multiple' => 0, + 'wizards' => [ + '_VERTICAL' => 1, + 'add' => [ + 'type' => 'script', + 'title' => 'hinzufügen', + 'icon' => 'actions-add', + 'params' => [ + 'table' => 'tx_epproducts_domain_model_fact', + 'pid' => '###PAGE_TSCONFIG_ID###', + 'setValue' => 'prepend' + ], + 'module' => [ + 'name' => 'wizard_add' + ] + ], + ], + ], + ], + 'officetip' => [ + 'exclude' => 0, + 'label' => 'Officetip', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_officetip', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + 'snowreport' => [ + 'exclude' => 0, + 'label' => 'Gebiet für Schneehöhen', + 'config' => [ + 'type' => 'select', + 'items' => [ + ['Keine Zuordnung', 0] + ], + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_snowreport', + 'foreign_table_where' => 'ORDER BY tx_epproducts_domain_model_snowreport.region_name', + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + 'webcam' => [ + 'exclude' => 0, + 'label' => 'Webcam', + 'config' => [ + 'type' => 'select', + 'items' => [ + ['Keine Zuordnung', 0] + ], + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_webcam', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_webcam.snowreport=###REC_FIELD_snowreport### ORDER BY tx_epproducts_domain_model_webcam.name', + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + 'award_image' => [ + 'exclude' => 0, + 'label' => 'Bild', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'award_image', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'award_link' => [ + 'exclude' => 0, + 'label' => 'Link', + 'config' => [ + 'type' => 'input', + 'size' => 32, + 'eval' => 'trim', + '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' + ] + ], + ] + ], + 'award_label' => [ + 'exclude' => 0, + 'label' => 'Label', + 'config' => [ + 'type' => 'input', + 'size' => 32, + 'eval' => 'trim', + 'default' => 'Auszeichnung Skigebiet', + ] + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_roommapping.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_roommapping.php new file mode 100644 index 00000000..05d6ff8e --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_roommapping.php @@ -0,0 +1,149 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_roommapping', + 'label' => 'code', + 'default_sortby' => 'ORDER BY code', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,tags,', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_roommapping.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, code, type', + ], + 'types' => [ + '1' => ['showitem' => 'code, type'], + ], + 'palettes' => [ + '1' => ['showitem' => ''], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_roommapping', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_roommapping.pid=###CURRENT_PID### AND tx_epproducts_domain_model_roommapping.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'code' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_roommapping.code', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'type' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_roommapping.type', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['Einzelzimmer', \EP\EpProducts\Domain\Model\Room::ROOM_TYPE_FOR_ONE], + ['Doppelzimmer und Apartm. f. 2 Pers.', \EP\EpProducts\Domain\Model\Room::ROOM_TYPE_FOR_TWO], + ['Zimmer und Apartm. f. 3 Pers.', \EP\EpProducts\Domain\Model\Room::ROOM_TYPE_FOR_THREE], + ['Zimmer und Apartm. f. 4 Pers.', \EP\EpProducts\Domain\Model\Room::ROOM_TYPE_FOR_FOUR], + ['Zimmer und Apartm. mit Anderen', \EP\EpProducts\Domain\Model\Room::ROOM_TYPE_WITH_OTHERS], + ['weitere Zimmer und Apartments', \EP\EpProducts\Domain\Model\Room::ROOM_TYPE_OTHER], + ], + 'size' => 1, + 'minItems' => 1, + 'maxItems' => 1 + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_snowreport.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_snowreport.php new file mode 100644 index 00000000..d394c944 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_snowreport.php @@ -0,0 +1,289 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport', + 'label' => 'region_name', + 'default_sortby' => 'ORDER BY region_name', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'regionName,', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_snowreport.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, vendor_uid, region_name, glacier, height_max, height_min, opened, snow_level_mountain, snow_level_valley, snow_quality, last_snowfall, lifts_total, lifts_opened, last_update, season_start, season_end, webcams', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, vendor_uid, region_name, glacier, height_max, height_min, opened, snow_level_mountain, snow_level_valley, snow_quality, last_snowfall, lifts_total, lifts_opened, last_update, season_start, season_end, --div--;Webcams, webcams', + ], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_snowreport', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_snowreport.pid=###CURRENT_PID### AND tx_epproducts_domain_model_snowreport.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + 'endtime' => [ + 'exclude' => 0, + 'l10n_mode' => 'mergeIfNotBlank', + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.endtime', + 'config' => [ + 'type' => 'input', + 'size' => 13, + 'max' => 20, + 'eval' => 'date', + 'checkbox' => 0, + 'default' => 0, + 'range' => [ + 'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y')) + ], + ], + ], + + 'pid' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + 'vendor_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_nowreport.vendor_uid', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'region_name' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.region_name', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'glacier' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.glacier', + 'config' => [ + 'type' => 'check', + ], + ], + 'height_max' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.height_max', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'int' + ], + ], + 'height_min' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.height_min', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'int' + ], + ], + 'opened' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.opened', + 'config' => [ + 'type' => 'check', + ], + ], + 'snow_level_mountain' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.snow_level_mountain', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'int' + ], + ], + 'snow_level_valley' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.snow_level_valley', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'int' + ], + ], + 'snow_quality' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.snow_quality', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'last_snowfall' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.last_snowfall', + 'config' => [ + 'type' => 'input', + 'size' => 13, + 'max' => 20, + 'eval' => 'date', + 'checkbox' => 0, + 'default' => 0, + 'range' => [ + 'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y')) + ], + ], + ], + 'lifts_total' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.lifts_total', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'int' + ], + ], + 'lifts_opened' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.lifts_opened', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'int' + ], + ], + 'last_update' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.last_update', + 'config' => [ + 'type' => 'input', + 'size' => 13, + 'max' => 20, + 'eval' => 'date', + 'checkbox' => 0, + 'default' => 0, + 'range' => [ + 'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y')) + ], + ], + ], + 'webcams' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.webcams', + 'config' => [ + 'type' => 'inline', + 'foreign_table' => 'tx_epproducts_domain_model_webcam', + 'foreign_field' => 'snowreport', + ], + ], + 'season_start' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.season_start', + 'config' => [ + 'type' => 'input', + 'size' => 13, + 'max' => 20, + 'eval' => 'date', + 'checkbox' => 0, + 'default' => 0, + 'range' => [ + 'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y')) + ], + ], + ], + 'season_end' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_snowreport.season_end', + 'config' => [ + 'type' => 'input', + 'size' => 13, + 'max' => 20, + 'eval' => 'date', + 'checkbox' => 0, + 'default' => 0, + 'range' => [ + 'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y')) + ], + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_staticsearchparams.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_staticsearchparams.php new file mode 100644 index 00000000..1204cf0f --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_staticsearchparams.php @@ -0,0 +1,249 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_staticsearchparams', + 'label' => 'name', + 'default_sortby' => 'ORDER BY name', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,path_segment', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_product.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, path_segment, + country, region, concept, hotel, product, date_from, date_to, hotel_types, bus', + ], + 'types' => [ + '1' => [ + 'showitem' => 'name, path_segment, country, region, concept, hotel, product, date_from, + date_to, hotel_types, bus', + ], + ], + 'palettes' => [], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_product', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_product.pid=###CURRENT_PID### AND tx_epproducts_domain_model_product.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + + 'bus' => [ + 'exclude' => 0, + 'label' => 'Bus', + 'config' => [ + 'type' => 'check', + ], + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'Name', + 'config' => [ + 'type' => 'input', + 'cols' => 30, + 'eval' => 'trim,required' + ], + ], + 'path_segment' => [ + 'exclude' => 0, + 'label' => 'URL Segment', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required,unique,alphanum_x,lower' + ], + ], + 'concept' => [ + 'exclude' => 0, + 'label' => 'Konzept', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_concept', + 'foreign_table_where' => 'AND 1=1 ORDER BY name', + 'minItems' => 0, + 'maxitems' => 1, + 'items' => [ + [ 'Keine Auswahl', 0 ], + ] + ], + ], + 'country' => [ + 'exclude' => 0, + 'label' => 'Land', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_country', + 'foreign_table_where' => 'AND 1=1 ORDER BY name', + 'minitems' => 0, + 'maxitems' => 1, + 'items' => [ + [ 'Keine Auswahl', 0 ], + ] + ], + ], + 'region' => [ + 'exclude' => 0, + 'label' => 'Gebiet', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_region', + 'foreign_table_where' => 'AND 1=1 ORDER BY name', + 'minitems' => 0, + 'maxitems' => 1, + 'items' => [ + [ 'Keine Auswahl', 0 ], + ] + ], + ], + 'hotel' => [ + 'exclude' => 0, + 'label' => 'Hotel', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_hotel', + 'foreign_table_where' => 'AND 1=1 ORDER BY tx_epproducts_domain_model_hotel.name', + 'minitems' => 0, + 'maxitems' => 1, + 'items' => [ + [ 'Keine Auswahl', 0 ], + ] + ], + ], + 'hotel_types' => [ + 'exclude' => 0, + 'label' => 'Unterkunftsarten', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectCheckBox', + 'items' => [ + [ 'Keine Auswahl', 0 ], + [ 'Standard', \EP\EpProducts\Domain\Model\Hotel::CATEGORY_STANDARD ], + [ 'Komfort', \EP\EpProducts\Domain\Model\Hotel::CATEGORY_COMFORT ], + [ 'Deluxe', \EP\EpProducts\Domain\Model\Hotel::CATEGORY_DELUXE ], + [ 'Superdeluxe', \EP\EpProducts\Domain\Model\Hotel::CATEGORY_SUPER_DELUXE ], + ], + 'minitems' => 0, + 'maxitems' => 99, + ] + ], + 'date_from' => [ + 'exclude' => 0, + 'label' => 'Datum von', + 'config' => [ + 'dbType' => 'date', + 'type' => 'input', + 'size' => 7, + 'eval' => 'date', + 'checkbox' => 0, + 'default' => '0000-00-00' + ] + ], + 'date_to' => [ + 'exclude' => 0, + 'label' => 'Datum bis', + 'config' => [ + 'dbType' => 'date', + 'type' => 'input', + 'size' => 7, + 'eval' => 'date', + 'checkbox' => 0, + 'default' => '0000-00-00' + ] + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_teammember.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_teammember.php new file mode 100644 index 00000000..39e518a3 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_teammember.php @@ -0,0 +1,208 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_teammember', + 'label' => 'name', + 'default_sortby' => 'ORDER BY name', + 'sortby' => 'sorting', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name,email,', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_teammember.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, email, phone, tasks, description, image', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, --palette--;;top, --palette--;;contact, description, image', + 'columnsOverrides' => [ + 'description' => [ + 'defaultExtras' => 'richtext[]:rte_transform[mode=ts_links]', + ], + ], + ], + ], + 'palettes' => [ + 'top' => ['showitem' => 'name,tasks'], + 'contact' => ['showitem' => 'email,phone'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_teammember', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_teammember.pid=###CURRENT_PID### AND tx_epproducts_domain_model_teammember.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + 'sorting' => [ + 'config' => [ + 'type' => 'passthrough' + ] + ], + + 'name' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_teammember.name', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'email' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_teammember.email', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'phone' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_teammember.phone', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'tasks' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_teammember.tasks', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'description' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_teammember.description', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 15, + 'eval' => 'trim', + ], + ], + 'image' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_teammember.image', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image', + [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:images.addFileReference' + ], + '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' + ], + ], + 'maxitems' => 1, + 'minitems' => 1, + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_webcam.php b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_webcam.php new file mode 100644 index 00000000..a08859fd --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TCA/tx_epproducts_domain_model_webcam.php @@ -0,0 +1,168 @@ + [ + 'title' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_webcam', + 'label' => 'name', + 'default_sortby' => 'ORDER BY name', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'name', + 'iconfile' => 'EXT:ep_products/Resources/Public/Icons/tx_epproducts_domain_model_webcam.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, url, vendor_uid, available, snowreport', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, name, url, vendor_uid, available, snowreport', + ], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_epproducts_domain_model_snowreport', + 'foreign_table_where' => 'AND tx_epproducts_domain_model_snowreport.pid=###CURRENT_PID### AND tx_epproducts_domain_model_snowreport.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + 'endtime' => [ + 'exclude' => 0, + 'l10n_mode' => 'mergeIfNotBlank', + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.endtime', + 'config' => [ + 'type' => 'input', + 'size' => 13, + 'max' => 20, + 'eval' => 'date', + 'checkbox' => 0, + 'default' => 0, + 'range' => [ + 'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y')) + ], + ], + ], + + 'pid' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + 'name' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_webcam.name', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'url' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_webcam.url', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'vendor_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_webcam.vendor_uid', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'available' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_webcam.available', + 'config' => [ + 'type' => 'check', + ], + ], + 'snowreport' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_webcam.snowreport', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingleBox', + 'foreign_table' => 'tx_epproducts_domain_model_snowreport', + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_products/Configuration/TypoScript/constants.txt b/web/typo3conf/ext/ep_products/Configuration/TypoScript/constants.txt new file mode 100644 index 00000000..6ade03fb --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TypoScript/constants.txt @@ -0,0 +1,40 @@ +plugin.tx_epproducts { + settings { + # cat=plugin.tx_epproducts//a; type=string; label=Products storage PID + productsStoragePid = + # cat=plugin.tx_epproducts//a; type=string; label=Hotels storage PID + hotelsStoragePid = + # cat=plugin.tx_epproducts//a; type=string; label=Concepts storage PID + conceptsStoragePid = + # cat=plugin.tx_epproducts//a; type=string; label=Facts storage PID + factsStoragePid = + # cat=plugin.tx_epproducts//a; type=string; label=Faqs storage PID + faqsStoragePid = + # cat=plugin.tx_epproducts//a; type=string; label=Destinations storage PID + destinationsStoragePid = + # cat=plugin.tx_epproducts//a; type=string; label=Teammember storage PID + teammemberStoragePid = + # cat=plugin.tx_epproducts//a; type=string; label=Officetip storage PID + officetipStoragePid = + # cat=plugin.tx_epproducts//a; type=string; label=Snow report storage PID + snowReportStoragePid = + # cat=plugin.tx_epproducts//a; type=string; label=Default search page UID + defaultSearchPageUid = + # cat=plugin.tx_epproducts//a; type=string; label=Default product detail page UID + defaultDetailPageUid = + # cat=plugin.tx_epproducts//a; type=string; label=Exclude products with concept UIDs from search result (CSV) + excludedConceptUids = + # cat=plugin.tx_epproducts//a; type=string; label=Force concept UID in all search related parts + forcedConceptUid = + # cat=plugin.tx_epproducts//a; type=string; label=Don't show availability info for products with these concept UIDs + noInfoConceptUids = + # cat=plugin.tx_epproducts//a; type=string; label=Room types for pricetables (CSV) + priceTableRoomTypes = 1,2,3,4,5,6,7,8,9,10 + # cat=plugin.tx_epproducts//a; type=string; label=Ignore following IPs in searchlog + searchLogIgnoreIps = + } + persistence { + # cat=plugin.tx_epproducts//a; type=string; label=Default storage PID + storagePid = + } +} diff --git a/web/typo3conf/ext/ep_products/Configuration/TypoScript/setup.txt b/web/typo3conf/ext/ep_products/Configuration/TypoScript/setup.txt new file mode 100644 index 00000000..ede298a7 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Configuration/TypoScript/setup.txt @@ -0,0 +1,155 @@ +plugin.tx_epproducts { + view { + layoutRootPaths.0 = EXT:ep_theme/Resources/Private/Layouts/Product/ + templateRootPaths.0 = EXT:ep_theme/Resources/Private/Templates/ + partialRootPaths.0 = EXT:ep_theme/Resources/Private/Partials/ + } + persistence { + storagePid = {$plugin.tx_epproducts.persistence.storagePid} + classes { + EP\EpProducts\Domain\Model\Product.newRecordStoragePid = {$plugin.tx_epproducts.settings.productsStoragePid} + EP\EpProducts\Domain\Model\Hotel.newRecordStoragePid = {$plugin.tx_epproducts.settings.hotelsStoragePid} + EP\EpProducts\Domain\Model\Country.newRecordStoragePid = {$plugin.tx_epproducts.settings.destinationsStoragePid} + EP\EpProducts\Domain\Model\Region.newRecordStoragePid = {$plugin.tx_epproducts.settings.destinationsStoragePid} + EP\EpProducts\Domain\Model\City.newRecordStoragePid = {$plugin.tx_epproducts.settings.destinationsStoragePid} + EP\EpProducts\Domain\Model\Journey.newRecordStoragePid = {$plugin.tx_epproducts.settings.destinationsStoragePid} + EP\EpProducts\Domain\Model\Concept.newRecordStoragePid = {$plugin.tx_epproducts.settings.conceptsStoragePid} + EP\EpProducts\Domain\Model\Fact.newRecordStoragePid = {$plugin.tx_epproducts.settings.factsStoragePid} + EP\EpProducts\Domain\Model\Faq.newRecordStoragePid = {$plugin.tx_epproducts.settings.faqsStoragePid} + EP\EpProducts\Domain\Model\Teammember.newRecordStoragePid = {$plugin.tx_epproducts.settings.teammemberStoragePid} + EP\EpProducts\Domain\Model\Officetip.newRecordStoragePid = {$plugin.tx_epproducts.settings.officetipStoragePid} + EP\EpProducts\Domain\Model\Room.newRecordStoragePid = {$plugin.tx_epproducts.persistence.storagePid} + EP\EpProducts\Domain\Model\Date.newRecordStoragePid = {$plugin.tx_epproducts.persistence.storagePid} + EP\EpProducts\Domain\Model\MatchCode.newRecordStoragePid = {$plugin.tx_epproducts.persistence.storagePid} + } + } + settings { + destinationsStoragePid = {$plugin.tx_epproducts.settings.destinationsStoragePid} + snowReportStoragePid = {$plugin.tx_epproducts.settings.snowReportStoragePid} + defaultSearchPageUid = {$plugin.tx_epproducts.settings.defaultSearchPageUid} + defaultDetailPageUid = {$plugin.tx_epproducts.settings.defaultDetailPageUid} + excludedConceptUids = {$plugin.tx_epproducts.settings.excludedConceptUids} + forcedConceptUid = {$plugin.tx_epproducts.settings.forcedConceptUid} + noInfoConceptUids = {$plugin.tx_epproducts.settings.noInfoConceptUids} + priceTableRoomTypes = {$plugin.tx_epproducts.settings.priceTableRoomTypes} + searchLogIgnoreIps = {$plugin.tx_epproducts.settings.searchLogIgnoreIps} + groupsPageUid = {$plugin.tx_eptheme.settings.groupsPageUid} + groupsContactFormPageUid = {$plugin.tx_eptheme.settings.groupsContactFormPageUid} + datePickerPresets { + 1 { + label = Silvester + dateFrom = 2017-12-25 + dateTo = 2018-01-06 + } + 2 { + label = Karneval + dateFrom = 2018-02-03 + dateTo = 2018-02-17 + } + 3 { + label = Ostern + dateFrom = 2018-03-24 + dateTo = 2018-04-05 + } + } + } +} + +config.tx_extbase.persistence.classes { + EP\EpProducts\Domain\Model\Log.mapping { + tableName = tx_epproducts_log + columns { + data.mapOnProperty = data + time_micro.mapOnProperty = timeMicro + } + } +} + +module.tx_epproducts { + settings < plugin.tx_epproducts.settings + persistence < plugin.tx_epproducts.persistence +} + +# Register Ajax page types (json and html output) +tx_epproducts_ajax_json = PAGE +tx_epproducts_ajax_json { + typeNum = 1701 + config { + disableAllHeaderCode = 1 + additionalHeaders.10.header = Content-type: application/json + additionalHeaders.20.header = X-Robots-Tag: noindex, nofollow, noarchive + xhtml_cleaning = 0 + admPanel = 0 + debug = 0 + no_cache = 1 + } + + 10 = USER_INT + 10 { + userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run + extensionName = EpProducts + pluginName = ajax + vendorName = EP + controller = AjaxSearch + action = searchresult + switchableControllerActions { + AjaxSearch { + 2 = searchresult + 4 = pricetable + } + AjaxDate { + 1 = dates + } + AjaxSearchbar { + 1 = options + 2 = reset + } + AjaxFilterpanel { + 1 = options + 2 = autocomplete + } + AjaxContent { + 1 = country + 2 = region + 3 = city + 4 = hotel + 5 = product + 6 = journey + 7 = webcam + } + AjaxTable { + 1 = pricetable + 2 = pricetableHtml + 3 = eventPricetable + } + AjaxCalendar { + 1 = range + } + } + + settings =< plugin.tx_epproducts.settings + persistence =< plugin.tx_epproducts.persistence + view =< plugin.tx_epproducts.view + } +} + +tx_epproducts_ajax_html < tx_epproducts_ajax_json +tx_epproducts_ajax_html.typeNum = 1702 +tx_epproducts_ajax_html.config.additionalHeaders.10.header = Content-type:text/html + +lib.bookingWidget = USER +lib.bookingWidget { + userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run + extensionName = EpProducts + pluginName = booking + vendorName = EP + controller = Product + action = booking + switchableControllerActions { + Product { + 1 = booking + } + } + settings =< plugin.tx_epproducts.settings + view =< plugin.tx_epproducts.view +} diff --git a/web/typo3conf/ext/ep_products/README.md b/web/typo3conf/ext/ep_products/README.md new file mode 100644 index 00000000..714800be --- /dev/null +++ b/web/typo3conf/ext/ep_products/README.md @@ -0,0 +1,17 @@ +Queries for plugin renaming +=========================== + +```mysql +update tt_content set list_type='epproducts_searchbar' where list_type='epproducts_pi1'; +update tt_content set list_type='epproducts_product_detail' where list_type='epproducts_pi3'; +update tt_content set list_type='epproducts_searchresult' where list_type='epproducts_pi2'; +update tt_content set list_type='epproducts_product_teasergroup' where list_type='epproducts_pi4'; +update tt_content set list_type='epproducts_country_detail' where list_type='epproducts_pi5'; +update tt_content set list_type='epproducts_region_teasergroup' where list_type='epproducts_pi6'; +update tt_content set list_type='epproducts_region_detail' where list_type='epproducts_pi10'; +update tt_content set list_type='epproducts_city_teasergroup' where list_type='epproducts_pi7'; +update tt_content set list_type='epproducts_city_detail' where list_type='epproducts_pi11'; +update tt_content set list_type='epproducts_hotel_teasergroup' where list_type='epproducts_pi8'; +update tt_content set list_type='epproducts_hotel_detail' where list_type='epproducts_pi12'; +update tt_content set list_type='epproducts_faq' where list_type='epproducts_pi9'; +``` diff --git a/web/typo3conf/ext/ep_products/Resources/Private/.htaccess b/web/typo3conf/ext/ep_products/Resources/Private/.htaccess new file mode 100644 index 00000000..96d0729c --- /dev/null +++ b/web/typo3conf/ext/ep_products/Resources/Private/.htaccess @@ -0,0 +1,11 @@ +# Apache < 2.3 + + Order allow,deny + Deny from all + Satisfy All + + +# Apache >= 2.3 + + Require all denied + diff --git a/web/typo3conf/ext/ep_products/Resources/Private/Language/locallang.xlf b/web/typo3conf/ext/ep_products/Resources/Private/Language/locallang.xlf new file mode 100644 index 00000000..acf95bef --- /dev/null +++ b/web/typo3conf/ext/ep_products/Resources/Private/Language/locallang.xlf @@ -0,0 +1,601 @@ + + + +
+ + + Termin + + + Produkt + + + Detailseite + + + Erscheint im Suchergebnis + + + Online buchbar + + + Name + + + Name intern + + + Subline + + + Keywords für Suchschlitz + + + Headline + + + Header Title + + + Header Subtitle + + + BusPro ID + + + Code + + + Teaser (Aufzählung) + + + Teaser (Fließtext) + + + Konzeptbeschreibung + + + Verpflegung + + + Zusatzleistungen + + + Programm + + + Skipass + + + Durchschnittliche Bewertung + + + Abgebene Stimmen + + + Teaserbild(er) + + + Headerbild(er) + + + Galeriebilder + + + Konzept + + + Destinationen + + + Land + + + Gebiet + + + Stadt/Ort + + + Anreise + + + Facts + + + FAQs + + + Termine + + + Hotels + + + Hotel für Belegungskalender + + + Officetip + + + Konzept + + + BusPro ID + + + Bezeichnung + + + Kürzel + + + Teaser + + + Headline + + + Header Title + + + Header Subtitle + + + Beschreibung + + + Detailseite + + + Teaserbild(er) + + + Headerbild(er) + + + Land + + + Detailseite + + + Code + + + Name + + + Name intern + + + Saison + + + Keywords für Suchschlitz + + + Headline + + + Teaser + + + Header Title + + + Header Subtitle + + + Beschreibung + + + Teaserbild(er) + + + Headerbild(er) + + + Galeriebilder + + + Breitengrad + + + Längengrad + + + Facts + + + Officetip + + + Gebiet für Schneehöhen + + + Gebiet + + + Stadt/Ort + + + Detailseite + + + Nicht in Teasergruppen + + + Name + + + Name intern + + + Saison + + + Keywords für Suchschlitz + + + Headline + + + Teaser + + + Header Title + + + Header Subtitle + + + Der Ort + + + Party + + + Freizeitangebot + + + Teaserbild(er) + + + Headerbild(er) + + + Galeriebilder + + + Breitengrad + + + Längengrad + + + Land + + + Gebiet + + + Facts + + + Officetip + + + Fact + + + Bezeichnung + + + Name + + + Keywords für Suchschlitz + + + Hotel + + + Detailseite + + + Name + + + Headline + + + Teaser + + + Header Title + + + Header Subtitle + + + Die Unterkunft + + + Ausstattung + + + Zimmerarten/Apartmentbeschreibung + + + Zusatzinformationen + + + Code + + + groups.ch ID + + + Zusätzliche Codes + + + Typ + + + Kategorie + + + Land + + + Gebiet + + + Stadt/Ort + + + Teamer + + + Produkte + + + Facts + + + Keywords für Suchschlitz + + + Teaserbild(er) + + + Headerbild(er) + + + Galeriebilder + + + Anschrift + + + Breitengrad + + + Längengrad + + + Zimmer + + + BusPro ID + + + Code + + + Typ + + + Preis + + + Nächte + + + Pax + + + verfügbar + + + Status + + + Termin + + + Hotel + + + Faq + + + Bezeichnung + + + Frage + + + Code + + + Code + + + Antwort + + + Office-Tipp + + + Bezeichnung + + + Text + + + Autor + + + Produkt + + + Mitarbeiter/Teamer + + + Name + + + E-Mail + + + Bild + + + Beschreibung + + + Telefon + + + Aufgaben + + + Zimmermapping + + + Code + + + Typ + + + Anreise + + + Name + + + PKW/Eigenanreise + + + Busanreise + + + + Schneereport + + + Schneereport ID + + + Skigebiet + + + Gletscher + + + Höhe max + + + Höhe min + + + Gebiet geöffnet + + + Schneehöhe Berg + + + Schneehöhe Tal + + + Schneequalität + + + Letzter Schneefall + + + Lifte gesamt + + + Lifte geöffnet + + + Letzte Aktualisierung + + + Webcams + + + Webcam + + + Bezeichnung + + + URL + + + UID + + + Pseudopreis + + + Kontingent + + + Datum + + + Hotel + + + Pax + + + Status + + + groups.ch ID + + + verfügbar + + + Badge + + + Titel + + + Untertitel + + + Link + + + Statisches Suchergebnis + + + + Deine Suche %s%s ergab %s Treffer + + + Deine Suche %s ergab leider keine genauen Treffer, aber vielleicht blablabla + + + + diff --git a/web/typo3conf/ext/ep_products/Resources/Private/Language/locallang_mod.xlf b/web/typo3conf/ext/ep_products/Resources/Private/Language/locallang_mod.xlf new file mode 100644 index 00000000..6fa16e75 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Resources/Private/Language/locallang_mod.xlf @@ -0,0 +1,17 @@ + + + +
+ + + E&P + + + Produktspezifische Funktionen + + + Produkte + + + + diff --git a/web/typo3conf/ext/ep_products/Resources/Private/Layouts/Backend.html b/web/typo3conf/ext/ep_products/Resources/Private/Layouts/Backend.html new file mode 100644 index 00000000..a606ca0f --- /dev/null +++ b/web/typo3conf/ext/ep_products/Resources/Private/Layouts/Backend.html @@ -0,0 +1 @@ + diff --git a/web/typo3conf/ext/ep_products/Resources/Private/Templates/Backend/index.html b/web/typo3conf/ext/ep_products/Resources/Private/Templates/Backend/index.html new file mode 100644 index 00000000..018c6ab9 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Resources/Private/Templates/Backend/index.html @@ -0,0 +1,42 @@ + + + + + +

E&P Funktionen

+ +

+ + + Produktdaten aus BusProNet importieren + +

+

+ + + Kontingentdaten aus BusProNet importieren + +

+

+ + + Schneehöhen importieren + +

+

+ + + Suchschlitz Auswertung EP Reisen (CSV Download) + +

+

+ + + Suchschlitz Auswertung EP Events (CSV Download) + +

+
+ + diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/logo.svg b/web/typo3conf/ext/ep_products/Resources/Public/Icons/logo.svg new file mode 100644 index 00000000..c55419df --- /dev/null +++ b/web/typo3conf/ext/ep_products/Resources/Public/Icons/logo.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/relation.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/relation.gif new file mode 100644 index 00000000..db61d7e1 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/relation.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_badge.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_badge.gif new file mode 100644 index 00000000..e6c57ec8 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_badge.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_city.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_city.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_city.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_concept.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_concept.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_concept.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_contingent.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_contingent.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_contingent.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_country.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_country.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_country.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_date.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_date.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_date.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_fact.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_fact.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_fact.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_faq.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_faq.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_faq.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_hotel.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_hotel.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_hotel.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_journey.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_journey.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_journey.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_matchcode.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_matchcode.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_matchcode.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_officetip.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_officetip.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_officetip.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_product.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_product.gif new file mode 100644 index 00000000..6cc5f163 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_product.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_region.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_region.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_region.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_room.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_room.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_room.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_roommapping.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_roommapping.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_roommapping.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_snowreport.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_snowreport.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_snowreport.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_teammember.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_teammember.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_teammember.gif differ diff --git a/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_webcam.gif b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_webcam.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_products/Resources/Public/Icons/tx_epproducts_domain_model_webcam.gif differ diff --git a/web/typo3conf/ext/ep_products/ext_emconf.php b/web/typo3conf/ext/ep_products/ext_emconf.php new file mode 100644 index 00000000..7ebf872b --- /dev/null +++ b/web/typo3conf/ext/ep_products/ext_emconf.php @@ -0,0 +1,36 @@ + 'E&P Products', + 'description' => 'Implementation of all product related logic and models', + 'category' => 'plugin', + 'author' => 'Björn Fromme', + 'author_email' => 'fromme@dreipunktnull.com', + 'state' => 'beta', + 'internal' => '', + 'uploadfolder' => '1', + 'createDirs' => '', + 'clearCacheOnLoad' => 0, + 'version' => '1.0.0', + 'constraints' => [ + 'depends' => [ + 'typo3' => '7.6.0-7.9.99', + 'ep_theme' => '1.0.0-1.9.9', + ], + 'conflicts' => [ + ], + 'suggests' => [ + ], + ], + 'autoload' => [ + 'psr-4' => [ + 'CalendR\\' => 'vendor/yohang/calendr/src/CalendR', + 'EP\\EpProducts\\' => 'Classes/', + 'Doctrine\\DBAL\\' => 'vendor/doctrine/dbal/lib', + 'Doctrine\\Common\\' => 'vendor/doctrine/common/lib', + 'Doctrine\\Common\\Collections\\' => 'vendor/doctrine/collections/lib', + 'Doctrine\\Common\\Cache\\' => 'vendor/doctrine/cache/lib', + 'Symfony\\Component\\OptionsResolver\\' => 'vendor/symfony/options-resolver', + ] + ] +]; diff --git a/web/typo3conf/ext/ep_products/ext_icon.gif b/web/typo3conf/ext/ep_products/ext_icon.gif new file mode 100644 index 00000000..9fc0f1d0 Binary files /dev/null and b/web/typo3conf/ext/ep_products/ext_icon.gif differ diff --git a/web/typo3conf/ext/ep_products/ext_localconf.php b/web/typo3conf/ext/ep_products/ext_localconf.php new file mode 100644 index 00000000..db716277 --- /dev/null +++ b/web/typo3conf/ext/ep_products/ext_localconf.php @@ -0,0 +1,346 @@ + $_EXTKEY, + 'title' => 'EP Produkt Import', + 'description' => 'Importiert Reisedaten aus busProNet', +]; + +$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks']['EP\EpProducts\Task\ImportContingentsTask'] = [ + 'extension' => $_EXTKEY, + 'title' => 'EP Kontingent Import', + 'description' => 'Importiert Kontingentdaten aus busProNet', +]; + +$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks']['EP\EpProducts\Task\ImportSnowreportTask'] = [ + 'extension' => $_EXTKEY, + 'title' => 'EP Schneehöhen Import', + 'description' => 'Importiert Schneehöhen', +]; + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'searchbar', + [ + 'Search' => 'searchbar', + ], + [ + 'Search' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'searchbox', + [ + 'Search' => 'searchbox', + ], + [ + 'Search' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'searchresult', + [ + 'Search' => 'searchresult', + ], + [ + 'Search' => 'searchresult', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'product_detail', + [ + 'Product' => 'detail,hotelList', + ], + [ + 'Product' => 'detail,hotelList', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'product_teasergroup', + [ + 'Product' => 'teasergroup', + ], + [ + 'Product' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'product_pricetable', + [ + 'Product' => 'pricetable', + ], + [ + 'Product' => 'pricetable', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'booking', + [ + 'Product' => 'booking', + ], + [ + 'Product' => 'booking', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'country_detail', + [ + 'Country' => 'detail', + ], + [ + 'Country' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'region_teasergroup', + [ + 'Region' => 'teasergroup', + ], + [ + 'Region' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'region_detail', + [ + 'Region' => 'detail', + ], + [ + 'Region' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'city_teasergroup', + [ + 'City' => 'teasergroup', + ], + [ + 'City' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'city_detail', + [ + 'City' => 'detail', + ], + [ + 'City' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'hotel_teasergroup', + [ + 'Hotel' => 'teasergroup', + ], + [ + 'Hotel' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'hotel_teasergroup_nodate', + [ + 'Hotel' => 'dateIndependentTeasergroup', + ], + [ + 'Hotel' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'hotel_detail', + [ + 'Hotel' => 'detail', + ], + [ + 'Hotel' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'hotel_detail_event', + [ + 'Hotel' => 'detailEvent', + ], + [ + 'Hotel' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'faq', + [ + 'Faq' => 'detail', + ], + [ + 'Faq' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'concept_teasergroup', + [ + 'Concept' => 'teasergroup', + ], + [ + 'Concept' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'concept_detail', + [ + 'Concept' => 'detail', + ], + [ + 'Concept' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'snowreport_list', + [ + 'Snowreport' => 'list', + ], + [ + 'Snowreport' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'teammembers', + [ + 'Team' => 'list, show', + ], + [ + 'Team' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'newsletter', + [ + 'Newsletter' => 'index', + ], + [ + 'Newsletter' => 'index', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'maps', + [ + 'Map' => 'general', + ], + [ + 'Map' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'pricetable', + [ + 'Pricetable' => 'event', + ], + [ + 'Pricetable' => '', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.' . $_EXTKEY, + 'ajax', + [ + 'AjaxSearch' => 'searchresult', + 'AjaxDate' => 'dates', + 'AjaxFilterpanel' => 'options,autocomplete', + 'AjaxSearchbar' => 'options,reset', + 'AjaxContent' => 'country,region,city,hotel,product,journey,webcam', + 'AjaxTable' => 'pricetable,pricetableHtml,eventPricetable', + 'AjaxCalendar' => 'range', + ], + [ + 'AjaxSearch' => 'searchresult', + 'AjaxDate' => 'dates', + 'AjaxFilterpanel' => 'options,autocomplete', + 'AjaxSearchbar' => 'options,reset', + 'AjaxContent' => 'webcam', + 'AjaxTable' => 'pricetable,pricetableHtml,eventPricetable', + 'AjaxCalendar' => 'range', + ] +); + +$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['tt_content_drawItem']['ep_products'] = + \EP\EpProducts\Hook\PageLayoutView::class; + +$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'gclid'; +$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_searchresult[searchParams]'; +$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_product_detail[filterSettings]'; +$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_product_detail[origin]'; +$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_product_detail[referringPageUid]'; + +$GLOBALS['TYPO3_CONF_VARS']['LOG']['EP']['EpProducts']['Controller']['writerConfiguration'] = [ + \TYPO3\CMS\Core\Log\LogLevel::INFO => [ + 'TYPO3\\CMS\\Core\\Log\\Writer\\DatabaseWriter' => [ + 'logTable' => 'tx_epproducts_log' + ], + ], +]; + +if (!is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['checkAlternativeIdMethods-PostProc'])) { + $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['checkAlternativeIdMethods-PostProc'] = []; +} +array_unshift( + $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['checkAlternativeIdMethods-PostProc'], + \EP\EpProducts\Service\StaticSearchParamsRequestService::class . '->handleRequest' +); diff --git a/web/typo3conf/ext/ep_products/ext_tables.php b/web/typo3conf/ext/ep_products/ext_tables.php new file mode 100644 index 00000000..8c262c94 --- /dev/null +++ b/web/typo3conf/ext/ep_products/ext_tables.php @@ -0,0 +1,223 @@ + 'index, importProducts, importContingents, importSnowReport, dumpSearchLogEpreisen, dumpSearchLogEpevents', + ], + [ + 'access' => 'user,group', + 'labels' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang_mod.xlf', + 'icon' => 'EXT:ep_products/Resources/Public/Icons/logo.svg' + ] +); diff --git a/web/typo3conf/ext/ep_products/ext_tables.sql b/web/typo3conf/ext/ep_products/ext_tables.sql new file mode 100644 index 00000000..ff080628 --- /dev/null +++ b/web/typo3conf/ext/ep_products/ext_tables.sql @@ -0,0 +1,1196 @@ +# noinspection SqlNoDataSourceInspectionForFile +# +# Table structure for table 'tx_epproducts_domain_model_product' +# +CREATE TABLE tx_epproducts_domain_model_product ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + searchable tinyint(4) unsigned DEFAULT '1' NOT NULL, + bookable tinyint(4) unsigned DEFAULT '1' NOT NULL, + name varchar(255) DEFAULT '' NOT NULL, + name_internal varchar(255) DEFAULT '' NOT NULL, + subline varchar(255) DEFAULT '' NOT NULL, + headline varchar(255) DEFAULT '' NOT NULL, + code varchar(255) DEFAULT '' NOT NULL, + feature varchar(255) DEFAULT '' NOT NULL, + bus_pro_id int(11) unsigned NOT NULL default '0', + detail_page int(11) unsigned NOT NULL default '0', + description text NOT NULL, + teaser text NOT NULL, + teaser_long text NOT NULL, + header_title varchar(255) DEFAULT '' NOT NULL, + header_subtitle varchar(255) DEFAULT '' NOT NULL, + keywords text NOT NULL, + concept_description text NOT NULL, + board_description text NOT NULL, + additional_services text NOT NULL, + programme_description text NOT NULL, + ski_pass_description text NOT NULL, + rating_average varchar(255) DEFAULT '' NOT NULL, + rating_votes_count int(11) unsigned NOT NULL default '0', + teaser_images int(11) unsigned NOT NULL default '0', + header_images int(11) unsigned NOT NULL default '0', + images int(11) unsigned NOT NULL default '0', + concept int(11) unsigned DEFAULT '0' NOT NULL, + country int(11) unsigned DEFAULT '0' NOT NULL, + region int(11) unsigned DEFAULT '0' NOT NULL, + additional_regions int(11) unsigned DEFAULT '0' NOT NULL, + city int(11) unsigned DEFAULT '0' NOT NULL, + journey int(11) unsigned DEFAULT '0' NOT NULL, + facts int(11) unsigned DEFAULT '0' NOT NULL, + dates int(11) unsigned DEFAULT '0' NOT NULL, + hotels int(11) unsigned DEFAULT '0' NOT NULL, + calendar_hotel int(11) unsigned DEFAULT '0' NOT NULL, + faqs int(11) unsigned DEFAULT '0' NOT NULL, + officetip int(11) unsigned DEFAULT '0' NOT NULL, + alt_product int(11) unsigned DEFAULT '0' NOT NULL, + alt_label varchar(255) DEFAULT '' NOT NULL, + video varchar(255) DEFAULT '' NOT NULL, + banner int(11) unsigned NOT NULL default '0', + badge int(11) unsigned NOT NULL default '0', + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_date' +# +CREATE TABLE tx_epproducts_domain_model_date ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + bus_pro_id int(11) DEFAULT '0' NOT NULL, + hotel_bus_pro_id int(11) DEFAULT '0' NOT NULL, + code varchar(255) DEFAULT '' NOT NULL, + date_start date DEFAULT '0000-00-00', + date_end date DEFAULT '0000-00-00', + nights int(11) DEFAULT '0' NOT NULL, + board varchar(255) DEFAULT '' NOT NULL, + board_bus_pro_id int(11) DEFAULT '0' NOT NULL, + board_code varchar(64) DEFAULT '' NOT NULL, + bus_included tinyint(1) unsigned DEFAULT '0' NOT NULL, + bus_available tinyint(1) unsigned DEFAULT '0' NOT NULL, + skipass_included tinyint(1) unsigned DEFAULT '0' NOT NULL, + bus_price int(11) DEFAULT '0' NOT NULL, + services_included text NOT NULL, + services_general text NOT NULL, + discount int(11) DEFAULT '0' NOT NULL, + min_price int(11) DEFAULT '0' NOT NULL, + pseudo_price int(11) DEFAULT '0' NOT NULL, + available int(11) DEFAULT '0' NOT NULL, + product int(11) unsigned DEFAULT '0', + product_name varchar(255) DEFAULT '' NOT NULL, + product_subline varchar(255) DEFAULT '' NOT NULL, + product_fact varchar(255) DEFAULT '' NOT NULL, + product_searchable tinyint(4) unsigned DEFAULT '0' NOT NULL, + product_detail_page int(11) unsigned NOT NULL default '0', + product_keywords text NOT NULL, + product_teaser text NOT NULL, + product_feature varchar(255) DEFAULT '' NOT NULL, + concept int(11) unsigned DEFAULT '0', + concept_name varchar(255) DEFAULT '' NOT NULL, + concept_code varchar(32) DEFAULT '' NOT NULL, + concept_sorting int(11) DEFAULT '0' NOT NULL, + country int(11) unsigned DEFAULT '0', + country_name varchar(255) DEFAULT '' NOT NULL, + country_code char(2) DEFAULT '' NOT NULL, + country_keywords text NOT NULL, + region int(11) unsigned DEFAULT '0', + region_name varchar(255) DEFAULT '' NOT NULL, + region_fact varchar(255) DEFAULT '' NOT NULL, + region_keywords text NOT NULL, + region_feature varchar(255) DEFAULT '' NOT NULL, + city int(11) unsigned DEFAULT '0', + city_name varchar(255) DEFAULT '' NOT NULL, + city_keywords text NOT NULL, + hotel int(11) unsigned DEFAULT '0', + hotel_category int(11) DEFAULT '0' NOT NULL, + hotel_name varchar(255) DEFAULT '' NOT NULL, + hotel_header_title varchar(255) DEFAULT '' NOT NULL, + hotel_fact varchar(255) DEFAULT '' NOT NULL, + hotel_type tinyint(4) unsigned DEFAULT '0' NOT NULL, + hotel_keywords text NOT NULL, + hotel_teaser text NOT NULL, + hotel_detail_page int(11) unsigned NOT NULL default '0', + earlybird tinyint(4) unsigned DEFAULT '0' NOT NULL, + low_contingent tinyint(4) unsigned DEFAULT '0' NOT NULL, + rooms int(11) unsigned DEFAULT '0', + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid), + KEY aggregates (date_start,date_end,min_price), + KEY relations (product,date_start), + KEY groups (product,hotel) +); + +# +# Table structure for table 'tx_epproducts_domain_model_hotel' +# +CREATE TABLE tx_epproducts_domain_model_hotel ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + earlybird tinyint(4) unsigned DEFAULT '0' NOT NULL, + low_contingent tinyint(4) unsigned DEFAULT '0' NOT NULL, + show_as_teaser tinyint(4) unsigned DEFAULT '0' NOT NULL, + detail_page int(11) unsigned NOT NULL default '0', + name varchar(255) DEFAULT '' NOT NULL, + headline varchar(255) DEFAULT '' NOT NULL, + description text NOT NULL, + keywords text NOT NULL, + features text NOT NULL, + room_types text NOT NULL, + additional_information text NOT NULL, + teaser text NOT NULL, + header_title varchar(255) DEFAULT '' NOT NULL, + header_subtitle varchar(255) DEFAULT '' NOT NULL, + teaser_images int(11) unsigned NOT NULL default '0', + header_images int(11) unsigned NOT NULL default '0', + images int(11) unsigned NOT NULL default '0', + code varchar(255) DEFAULT '' NOT NULL, + groupsch_id varchar(8) DEFAULT '' NOT NULL, + type varchar(255) DEFAULT '' NOT NULL, + category int(11) DEFAULT '0' NOT NULL, + country int(11) unsigned DEFAULT '0', + region int(11) unsigned DEFAULT '0', + city int(11) unsigned DEFAULT '0', + teamer int(11) unsigned DEFAULT '0' NOT NULL, + products int(11) unsigned DEFAULT '0' NOT NULL, + rooms int(11) unsigned DEFAULT '0' NOT NULL, + facts int(11) unsigned DEFAULT '0' NOT NULL, + additional_codes int(11) unsigned DEFAULT '0' NOT NULL, + address varchar(255) DEFAULT '' NOT NULL, + latitude varchar(255) DEFAULT '' NOT NULL, + longitude varchar(255) DEFAULT '' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_room' +# +CREATE TABLE tx_epproducts_domain_model_room ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + bus_pro_id int(11) DEFAULT '0' NOT NULL, + name varchar(255) DEFAULT '' NOT NULL, + code varchar(255) DEFAULT '' NOT NULL, + type int(11) DEFAULT '0' NOT NULL, + price int(11) DEFAULT '0' NOT NULL, + services text NOT NULL, + nights int(11) DEFAULT '0' NOT NULL, + pax int(11) DEFAULT '0' NOT NULL, + available int(11) DEFAULT '0' NOT NULL, + status int(11) DEFAULT '0' NOT NULL, + date int(11) unsigned DEFAULT '0', + hotel int(11) unsigned DEFAULT '0', + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid), + KEY constraints (date,type) +); + +# +# Table structure for table 'tx_epproducts_domain_model_roommapping' +# +CREATE TABLE tx_epproducts_domain_model_roommapping ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + code varchar(255) DEFAULT '' NOT NULL, + type int(11) DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_concept' +# +CREATE TABLE tx_epproducts_domain_model_concept ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + sorting int(11) DEFAULT '0' NOT NULL, + bus_pro_id int(11) DEFAULT '0' NOT NULL, + name varchar(255) DEFAULT '' NOT NULL, + code varchar(255) DEFAULT '' NOT NULL, + description text NOT NULL, + description_extended text NOT NULL, + detail_page int(11) DEFAULT '0' NOT NULL, + products int(11) DEFAULT '0' NOT NULL, + teaser text NOT NULL, + headline varchar(255) DEFAULT '' NOT NULL, + header_title varchar(255) DEFAULT '' NOT NULL, + header_subtitle varchar(255) DEFAULT '' NOT NULL, + teaser_images int(11) unsigned NOT NULL default '0', + header_images int(11) unsigned NOT NULL default '0', + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_country' +# +CREATE TABLE tx_epproducts_domain_model_country ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + detail_page int(11) unsigned NOT NULL default '0', + code char(2) DEFAULT '' NOT NULL, + name varchar(255) DEFAULT '' NOT NULL, + name_internal varchar(255) DEFAULT '' NOT NULL, + season char(1) DEFAULT '' NOT NULL, + headline varchar(255) DEFAULT '' NOT NULL, + teaser text NOT NULL, + header_title varchar(255) DEFAULT '' NOT NULL, + header_subtitle varchar(255) DEFAULT '' NOT NULL, + keywords text NOT NULL, + description text NOT NULL, + description_extended text NOT NULL, + teaser_images int(11) unsigned NOT NULL default '0', + header_images int(11) unsigned NOT NULL default '0', + images int(11) unsigned NOT NULL default '0', + latitude varchar(255) DEFAULT '' NOT NULL, + longitude varchar(255) DEFAULT '' NOT NULL, + facts int(11) unsigned DEFAULT '0' NOT NULL, + officetip int(11) unsigned DEFAULT '0' NOT NULL, + snowreport int(11) unsigned DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_region' +# +CREATE TABLE tx_epproducts_domain_model_region ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + detail_page int(11) unsigned NOT NULL default '0', + exclude_from_teasergroups tinyint(4) unsigned DEFAULT '0' NOT NULL, + name varchar(255) DEFAULT '' NOT NULL, + name_internal varchar(255) DEFAULT '' NOT NULL, + season char(1) DEFAULT '' NOT NULL, + headline varchar(255) DEFAULT '' NOT NULL, + teaser text NOT NULL, + header_title varchar(255) DEFAULT '' NOT NULL, + header_subtitle varchar(255) DEFAULT '' NOT NULL, + keywords text NOT NULL, + description text NOT NULL, + ski_area text NOT NULL, + ski_area_extended text NOT NULL, + ski_pass text NOT NULL, + news text NOT NULL, + length varchar(255) DEFAULT '' NOT NULL, + height varchar(255) DEFAULT '' NOT NULL, + lifts varchar(255) DEFAULT '' NOT NULL, + feature varchar(255) DEFAULT '' NOT NULL, + teaser_images int(11) unsigned NOT NULL default '0', + header_images int(11) unsigned NOT NULL default '0', + images int(11) unsigned NOT NULL default '0', + region_maps int(11) unsigned NOT NULL default '0', + latitude varchar(255) DEFAULT '' NOT NULL, + longitude varchar(255) DEFAULT '' NOT NULL, + country int(11) unsigned DEFAULT '0', + cities int(11) unsigned DEFAULT '0' NOT NULL, + products int(11) unsigned DEFAULT '0' NOT NULL, + facts int(11) unsigned DEFAULT '0' NOT NULL, + hotels int(11) unsigned DEFAULT '0' NOT NULL, + snowreport int(11) unsigned DEFAULT '0', + webcam int(11) unsigned DEFAULT '0', + officetip int(11) unsigned DEFAULT '0', + award_image int(11) unsigned NOT NULL default '0', + award_link varchar(255) DEFAULT '' NOT NULL, + award_label varchar(255) DEFAULT '' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_city' +# +CREATE TABLE tx_epproducts_domain_model_city ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + detail_page int(11) unsigned NOT NULL default '0', + exclude_from_teasergroups tinyint(4) unsigned DEFAULT '0' NOT NULL, + name varchar(255) DEFAULT '' NOT NULL, + name_internal varchar(255) DEFAULT '' NOT NULL, + season char(1) DEFAULT '' NOT NULL, + headline varchar(255) DEFAULT '' NOT NULL, + teaser text NOT NULL, + header_title varchar(255) DEFAULT '' NOT NULL, + header_subtitle varchar(255) DEFAULT '' NOT NULL, + keywords text NOT NULL, + description text NOT NULL, + party text NOT NULL, + leisure text NOT NULL, + teaser_images int(11) unsigned NOT NULL default '0', + header_images int(11) unsigned NOT NULL default '0', + images int(11) unsigned NOT NULL default '0', + latitude varchar(255) DEFAULT '' NOT NULL, + longitude varchar(255) DEFAULT '' NOT NULL, + country int(11) unsigned DEFAULT '0', + region int(11) unsigned DEFAULT '0', + officetip int(11) unsigned DEFAULT '0', + facts int(11) unsigned DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_fact' +# +CREATE TABLE tx_epproducts_domain_model_fact ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + label varchar(255) DEFAULT '' NOT NULL, + name varchar(255) DEFAULT '' NOT NULL, + keywords text NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_matchcode' +# +CREATE TABLE tx_epproducts_domain_model_matchcode ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + code varchar(255) DEFAULT '' NOT NULL, + entity int(11) unsigned DEFAULT '0', + entity_type varchar(255) DEFAULT '' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_faq' +# +CREATE TABLE tx_epproducts_domain_model_faq ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + label varchar(255) DEFAULT '' NOT NULL, + question varchar(255) DEFAULT '' NOT NULL, + answer text NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_officetip' +# +CREATE TABLE tx_epproducts_domain_model_officetip ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + label varchar(255) DEFAULT '' NOT NULL, + text text NOT NULL, + author int(11) unsigned DEFAULT '0', + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_teammember' +# +CREATE TABLE tx_epproducts_domain_model_teammember ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + name varchar(255) DEFAULT '' NOT NULL, + email varchar(255) DEFAULT '' NOT NULL, + phone varchar(255) DEFAULT '' NOT NULL, + tasks varchar(255) DEFAULT '' NOT NULL, + description text NOT NULL, + image int(11) DEFAULT '0' NOT NULL, + sorting int(11) DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_journey' +# +CREATE TABLE tx_epproducts_domain_model_journey ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + name varchar(255) DEFAULT '' NOT NULL, + by_car text NOT NULL, + by_bus text NOT NULL, + image int(11) DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_snowreport' +# +CREATE TABLE tx_epproducts_domain_model_snowreport ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + vendor_uid int(11) unsigned DEFAULT '0', + region_name varchar(255) DEFAULT '' NOT NULL, + glacier tinyint(4) unsigned DEFAULT '0' NOT NULL, + alpes tinyint(4) unsigned DEFAULT '0' NOT NULL, + height_max int(11) DEFAULT '0' NOT NULL, + height_min int(11) DEFAULT '0' NOT NULL, + opened tinyint(4) unsigned DEFAULT '0' NOT NULL, + snow_level_mountain int(11) DEFAULT '0' NOT NULL, + snow_level_valley int(11) DEFAULT '0' NOT NULL, + snow_quality varchar(255) DEFAULT '' NOT NULL, + last_snowfall int(11) unsigned DEFAULT '0' NOT NULL, + lifts_total int(11) DEFAULT '0' NOT NULL, + lifts_opened int(11) DEFAULT '0' NOT NULL, + last_update int(11) unsigned DEFAULT '0' NOT NULL, + webcams int(11) unsigned DEFAULT '0', + season_start int(11) unsigned DEFAULT '0' NOT NULL, + season_end int(11) unsigned DEFAULT '0' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_webcam' +# +CREATE TABLE tx_epproducts_domain_model_webcam ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + vendor_uid varchar(32) DEFAULT '' NOT NULL, + available tinyint(4) unsigned DEFAULT '0' NOT NULL, + snowreport int(11) unsigned DEFAULT '0', + name varchar(255) DEFAULT '' NOT NULL, + url varchar(255) DEFAULT '' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_contingent' +# +CREATE TABLE tx_epproducts_domain_model_contingent ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + pax int(11) unsigned DEFAULT '0' NOT NULL, + available int(11) unsigned DEFAULT '0' NOT NULL, + date date DEFAULT '0000-00-00', + hotel int(11) unsigned DEFAULT '0', + status tinyint(4) unsigned DEFAULT '0' NOT NULL, + groupsch_id varchar(8) DEFAULT '' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_badge' +# +CREATE TABLE tx_epproducts_domain_model_badge ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + title varchar(255) DEFAULT '' NOT NULL, + subtitle varchar(255) DEFAULT '' NOT NULL, + link int(11) unsigned NOT NULL default '0', + page int(11) unsigned DEFAULT '0', + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + +# +# Table structure for table 'tx_epproducts_domain_model_staticsearchparams' +# +CREATE TABLE tx_epproducts_domain_model_staticsearchparams ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + name varchar(255) DEFAULT '' NOT NULL, + path_segment varchar(255) DEFAULT '' NOT NULL, + date_from date DEFAULT '0000-00-00', + date_to date DEFAULT '0000-00-00', + bus tinyint(1) unsigned DEFAULT '0' NOT NULL, + product int(11) unsigned DEFAULT '0', + concept int(11) unsigned DEFAULT '0', + country int(11) unsigned DEFAULT '0', + region int(11) unsigned DEFAULT '0', + hotel int(11) unsigned DEFAULT '0', + hotel_types varchar(255) DEFAULT '' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid), + KEY path_segment (path_segment) +); + +# +# Table structure for table 'tx_epproducts_product_hotel_mm' +# +CREATE TABLE tx_epproducts_product_hotel_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); + +# +# Table structure for table 'tx_epproducts_product_region_mm' +# +CREATE TABLE tx_epproducts_product_region_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); + +# +# Table structure for table 'tx_epproducts_hotel_teammember_mm' +# +CREATE TABLE tx_epproducts_hotel_teammember_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); + +# +# Table structure for table 'tx_epproducts_product_faq_mm' +# +CREATE TABLE tx_epproducts_product_faq_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); + +# +# Table structure for table 'tx_epproducts_product_fact_mm' +# +CREATE TABLE tx_epproducts_product_fact_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); + +# +# Table structure for table 'tx_epproducts_hotel_fact_mm' +# +CREATE TABLE tx_epproducts_hotel_fact_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); + +# +# Table structure for table 'tx_epproducts_country_fact_mm' +# +CREATE TABLE tx_epproducts_country_fact_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); + +# +# Table structure for table 'tx_epproducts_region_fact_mm' +# +CREATE TABLE tx_epproducts_region_fact_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); + +# +# Table structure for table 'tx_epproducts_city_fact_mm' +# +CREATE TABLE tx_epproducts_city_fact_mm ( + uid_local int(11) unsigned DEFAULT '0' NOT NULL, + uid_foreign int(11) unsigned DEFAULT '0' NOT NULL, + sorting int(11) unsigned DEFAULT '0' NOT NULL, + sorting_foreign int(11) unsigned DEFAULT '0' NOT NULL, + + KEY uid_local (uid_local), + KEY uid_foreign (uid_foreign) +); + +# +# Table structure for table 'tx_epproducts_log' +# +CREATE TABLE tx_epproducts_log ( + request_id varchar(13) DEFAULT '' NOT NULL, + time_micro double(16,4) NOT NULL default '0.0000', + component varchar(255) DEFAULT '' NOT NULL, + level tinyint(1) unsigned DEFAULT '0' NOT NULL, + message text, + data text, + + KEY request (request_id) +); \ No newline at end of file diff --git a/web/typo3conf/ext/ep_theme/.babelrc b/web/typo3conf/ext/ep_theme/.babelrc new file mode 100644 index 00000000..3c078e9f --- /dev/null +++ b/web/typo3conf/ext/ep_theme/.babelrc @@ -0,0 +1,5 @@ +{ + "presets": [ + "es2015" + ] +} diff --git a/web/typo3conf/ext/ep_theme/.jshintrc b/web/typo3conf/ext/ep_theme/.jshintrc new file mode 100644 index 00000000..e0e07301 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/.jshintrc @@ -0,0 +1,21 @@ +{ + "node": true, + "browser": true, + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 2, + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "single", + "undef": true, + "unused": true, + "strict": true, + "trailing": true, + "smarttabs": true, + "jquery": true +} diff --git a/web/typo3conf/ext/ep_theme/Classes/.htaccess b/web/typo3conf/ext/ep_theme/Classes/.htaccess new file mode 100755 index 00000000..3418e55a --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/web/typo3conf/ext/ep_theme/Classes/Controller/AjaxFormController.php b/web/typo3conf/ext/ep_theme/Classes/Controller/AjaxFormController.php new file mode 100644 index 00000000..7c6d2621 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/Controller/AjaxFormController.php @@ -0,0 +1,93 @@ +, 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\EpTheme\Service\EmailService; +use EP\EpTheme\Domain\Model\Dto\ContactForm; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; +use TYPO3\CMS\Extbase\Utility\LocalizationUtility; + +class AjaxFormController extends ActionController +{ + + /** + * @var EmailService + */ + protected $emailService; + + /** + * @param EmailService $service + */ + public function injectEmailService(EmailService $service) + { + $this->emailService = $service; + } + + /** + * @param ContactForm $contactForm + * @return string + */ + public function processFormAction(ContactForm $contactForm) + { + $response['status'] = 'ok'; + $this->emailService->send( + $this->settings['contactFormToEmail'], + $this->settings['contactFormToName'], + 'Kontaktformular E&P Reisen', + 'Email/ContactForm', + [ 'contactForm' => $contactForm ] + ); + + return json_encode($response); + } + + /** + * @return string + */ + protected function errorAction() { + $formErrors = []; + if ($this->arguments->getValidationResults()->hasErrors()) { + foreach ($this->arguments->getValidationResults()->getFlattenedErrors() as $key => $errors) + { + list($formName, $fieldName) = explode('.', $key); + $errorsRaw = []; + foreach ($errors as $error) + { + $translationKey = sprintf('tx_eptheme.message.%s.%s', $key, $error->getCode()); + $errorsRaw[] = LocalizationUtility::translate($translationKey, 'ep_theme'); + } + $formErrors[$fieldName] = implode(', ', $errorsRaw); + } + } + + $response['status'] = 'validation'; + $response['errors'] = $formErrors; + + return json_encode($response); + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/Controller/FormController.php b/web/typo3conf/ext/ep_theme/Classes/Controller/FormController.php new file mode 100644 index 00000000..e5c08194 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/Controller/FormController.php @@ -0,0 +1,76 @@ +, 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\EpTheme\Domain\Model\Dto\ContactForm; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; + +class FormController extends ActionController +{ + /** + * @param ContactForm $contactForm + */ + public function simpleFormAction(ContactForm $contactForm = null) + { + if ($contactForm === null) { + $pageUrl = $this->getCurrentPageUrl(); + $contactForm = new ContactForm($pageUrl, ContactForm::FORM_TYPE_SIMPLE); + } + $this->view->assign('contactForm', $contactForm); + } + + /** + * @param ContactForm $contactForm + */ + public function fullFormAction(ContactForm $contactForm = null) + { + if ($contactForm === null) { + $pageUrl = $this->getCurrentPageUrl(); + $contactForm = new ContactForm($pageUrl, ContactForm::FORM_TYPE_FULL); + } + $this->view->assign('contactForm', $contactForm); + } + + /** + * @return string + */ + private function getCurrentPageUrl() + { + if (GeneralUtility::_GET('ref')) { + $pageUid = GeneralUtility::_GET('ref'); + } else { + $pageUid = $GLOBALS['TSFE']->id; + } + return $this->uriBuilder + ->reset() + ->setCreateAbsoluteUri(true) + ->setTargetPageUid($pageUid) + ->build() + ; + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/DataProcessing/ContextProcessor.php b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/ContextProcessor.php new file mode 100644 index 00000000..bd92a9fd --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/ContextProcessor.php @@ -0,0 +1,77 @@ +, 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 TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; +use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface; + +class ContextProcessor implements DataProcessorInterface +{ + + /** + * @param ContentObjectRenderer $cObj + * @param array $contentObjectConfiguration + * @param array $processorConfiguration + * @param array $processedData + * + * @return array + */ + public function process( + ContentObjectRenderer $cObj, + array $contentObjectConfiguration, + array $processorConfiguration, + array $processedData + ) { + $data = $cObj->data; + $processedData['context'] = []; + $countryUid = (int) $data['tx_eptheme_context_country']; + if ($countryUid > 0) { + $processedData['context']['country'] = $this->getContextRecord($countryUid, 'tx_epproducts_domain_model_country'); + } + $regionUid = (int) $data['tx_eptheme_context_region']; + if ($regionUid > 0) { + $processedData['context']['region'] = $this->getContextRecord($regionUid, 'tx_epproducts_domain_model_region'); + } + return $processedData; + } + + /** + * @param int $uid + * @param string $table + * @return array + */ + private function getContextRecord($uid, $table) + { + $where = $GLOBALS['TSFE']->sys_page->enableFields($table); + return $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow( + '*', + $table, + $table . '.uid=' . $uid . $where + ); + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/DataProcessing/FlexFormProcessor.php b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/FlexFormProcessor.php new file mode 100644 index 00000000..6fb83bed --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/FlexFormProcessor.php @@ -0,0 +1,61 @@ +, 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 TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Service\FlexFormService; +use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; +use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface; + +class FlexFormProcessor implements DataProcessorInterface +{ + + /** + * @param ContentObjectRenderer $cObj + * @param array $contentObjectConfiguration + * @param array $processorConfiguration + * @param array $processedData + * + * @return array + */ + public function process( + ContentObjectRenderer $cObj, + array $contentObjectConfiguration, + array $processorConfiguration, + array $processedData + ) { + $data = $cObj->data; + if (array_key_exists('pi_flexform', $data)) { + /** @var \TYPO3\CMS\Extbase\Service\FlexFormService $flexFormService */ + $flexFormService = GeneralUtility::makeInstance(FlexFormService::class); + $processedData['data']['flexForm'] = $flexFormService->convertFlexFormContentToArray($data['pi_flexform']); + } + return $processedData; + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/DataProcessing/SliderProcessor.php b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/SliderProcessor.php new file mode 100644 index 00000000..67807635 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/SliderProcessor.php @@ -0,0 +1,96 @@ +, 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 TYPO3\CMS\Core\Resource\FileRepository; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; +use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface; + +class SliderProcessor implements DataProcessorInterface +{ + + /** + * @param ContentObjectRenderer $cObj + * @param array $contentObjectConfiguration + * @param array $processorConfiguration + * @param array $processedData + * + * @return array + */ + public function process( + ContentObjectRenderer $cObj, + array $contentObjectConfiguration, + array $processorConfiguration, + array $processedData + ) { + $page = $cObj->data; + $pageUid = $page['uid']; + + if ((int) $page['tx_eptheme_slides'] === 0) { + $pageUid = $this->getParentPageWithSlides(); + } + + if ($pageUid === null) { + return $processedData; + } + + $slides = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows( + 'uid, headline, subline, button, page_uid', + 'tx_eptheme_domain_model_slide', + 'page=' . $pageUid . $GLOBALS['TSFE']->sys_page->enableFields('tx_eptheme_domain_model_slide') + ); + + if (is_array($slides) && count($slides) > 0) { + $fileRepository = GeneralUtility::makeInstance(FileRepository::class); + foreach ($slides as $slide) + { + $processedData['slides'][$slide['uid']] = $slide; + $processedData['slides'][$slide['uid']]['image'] = $fileRepository->findByRelation('tx_eptheme_domain_model_slide', 'images', $slide['uid']); + } + } + + return $processedData; + } + + /** + * @return null|int + */ + protected function getParentPageWithSlides() + { + $rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($GLOBALS['TSFE']->id); + foreach ($rootLine as $parentPage) + { + if ((int) $parentPage['tx_eptheme_slides'] > 0) { + return (int) $parentPage['uid']; + } + } + return null; + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/DataProcessing/TeaserImageProcessor.php b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/TeaserImageProcessor.php new file mode 100644 index 00000000..3553c2d0 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/TeaserImageProcessor.php @@ -0,0 +1,59 @@ +, 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 TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; +use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface; +use TYPO3\CMS\Frontend\Resource\FileCollector; + +class TeaserImageProcessor implements DataProcessorInterface +{ + + /** + * @param ContentObjectRenderer $cObj + * @param array $contentObjectConfiguration + * @param array $processorConfiguration + * @param array $processedData + * + * @return array + */ + public function process( + ContentObjectRenderer $cObj, + array $contentObjectConfiguration, + array $processorConfiguration, + array $processedData + ) { + $imageFileCollector = GeneralUtility::makeInstance(FileCollector::class); + $imageFileCollector->addFilesFromRelation('tt_content', 'assets', $cObj->data); + $processedData['teaserImage'] = reset($imageFileCollector->getFiles()); + + return $processedData; + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/DataProcessing/TeaserProcessor.php b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/TeaserProcessor.php new file mode 100644 index 00000000..f04bbfbc --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/TeaserProcessor.php @@ -0,0 +1,131 @@ +, 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\FilterSettings; +use EP\EpProducts\Domain\Repository\CityRepository; +use EP\EpProducts\Domain\Repository\ConceptRepository; +use EP\EpProducts\Domain\Repository\CountryRepository; +use EP\EpProducts\Domain\Repository\HotelRepository; +use EP\EpProducts\Domain\Repository\ProductRepository; +use EP\EpProducts\Domain\Repository\RegionRepository; +use EP\EpProducts\Service\HotelService; +use EP\EpProducts\Service\ProductService; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Object\ObjectManager; +use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; +use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface; + +class TeaserProcessor implements DataProcessorInterface +{ + + /** + * @param ContentObjectRenderer $cObj + * @param array $contentObjectConfiguration + * @param array $processorConfiguration + * @param array $processedData + * + * @return array + */ + public function process( + ContentObjectRenderer $cObj, + array $contentObjectConfiguration, + array $processorConfiguration, + array $processedData + ) { + /** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */ + $objectManager = GeneralUtility::makeInstance(ObjectManager::class); + + if ((int) $processedData['data']['tx_eptheme_context_city'] > 0) { + /** @var \EP\EpProducts\Domain\Repository\CityRepository $repository */ + $repository = $objectManager->get(CityRepository::class); + /** @var \EP\EpProducts\Domain\Model\City $city */ + $city = $repository->findByIdentifier($processedData['data']['tx_eptheme_context_city']); + $processedData['city'] = $city; + } + if ((int) $processedData['data']['tx_eptheme_context_region'] > 0) { + /** @var \EP\EpProducts\Domain\Repository\RegionRepository $repository */ + $repository = $objectManager->get(RegionRepository::class); + /** @var \EP\EpProducts\Domain\Model\Region $region */ + $region = $repository->findByIdentifier($processedData['data']['tx_eptheme_context_region']); + $processedData['region'] = $region; + } + if ((int) $processedData['data']['tx_eptheme_context_country'] > 0) { + /** @var \EP\EpProducts\Domain\Repository\CountryRepository $repository */ + $repository = $objectManager->get(CountryRepository::class); + /** @var \EP\EpProducts\Domain\Model\Country $country */ + $country = $repository->findByIdentifier($processedData['data']['tx_eptheme_context_country']); + $processedData['country'] = $country; + } + if ((int) $processedData['data']['tx_eptheme_context_hotel'] > 0) { + /** @var \EP\EpProducts\Service\HotelService $service */ + $service = $objectManager->get(HotelService::class); + /** @var array $hotel */ + $hotel = $service->getTeaser($processedData['data']['tx_eptheme_context_hotel']); + $processedData['hotel'] = $hotel; + } + if ((int) $processedData['data']['tx_eptheme_context_concept'] > 0) { + /** @var \EP\EpProducts\Domain\Repository\ConceptRepository $repository */ + $repository = $objectManager->get(ConceptRepository::class); + /** @var \EP\EpProducts\Domain\Model\Concept $concept */ + $concept = $repository->findByIdentifier($processedData['data']['tx_eptheme_context_concept']); + $processedData['concept'] = $concept; + } + if ((int) $processedData['data']['tx_eptheme_context_product'] > 0) { + $productUid = (int) $processedData['data']['tx_eptheme_context_product']; + $hotelUid = (int) $processedData['data']['tx_eptheme_context_hotel']; + + $filterSettings = new FilterSettings(); + $filterSettings->setProductUid($productUid); + $filterSettings->setHotelUid($hotelUid); + + $dateFromTimestamp = (int) $processedData['data']['tx_eptheme_context_date_from']; + if ($dateFromTimestamp > 0) { + $dateFrom = new \DateTime(); + $dateFrom->setTimestamp($dateFromTimestamp); + $filterSettings->setDateFrom($dateFrom); + } + $dateToTimestamp = (int) $processedData['data']['tx_eptheme_context_date_to']; + if ($dateToTimestamp > 0) { + $dateTo = new \DateTime(); + $dateTo->setTimestamp($dateToTimestamp); + $filterSettings->setDateTo($dateTo); + } + + /** @var \EP\EpProducts\Service\ProductService $productService */ + $productService = $objectManager->get(ProductService::class); + $processedData['teaser'] = $productService->getTeaser($filterSettings); + $processedData['teaser']['forceHotelUid'] = $hotelUid; + } + + $processedData['referringPageUid'] = $GLOBALS['TSFE']->id; + + return $processedData; + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/Domain/Model/Dto/ContactForm.php b/web/typo3conf/ext/ep_theme/Classes/Domain/Model/Dto/ContactForm.php new file mode 100644 index 00000000..159b1018 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/Domain/Model/Dto/ContactForm.php @@ -0,0 +1,284 @@ +, 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! + ***************************************************************/ + +class ContactForm +{ + const FORM_TYPE_SIMPLE = 1; + const FORM_TYPE_FULL = 2; + + /** + * @var int + */ + protected $formType = 1; + + /** + * @var string + * @validate NotEmpty + */ + protected $name; + + /** + * @var string + */ + protected $company; + + /** + * @var string + * @validate NotEmpty + * @validate EmailAddress + */ + protected $email; + + /** + * @var string + * @validate NotEmpty + */ + protected $phone; + + /** + * @var string + */ + protected $period; + + /** + * @var string + */ + protected $duration; + + /** + * @var string + */ + protected $pax; + + /** + * @var string + */ + protected $age; + + /** + * @var string + */ + protected $children; + + /** + * @var string + */ + protected $inquiry; + + /** + * @var string + */ + protected $pageUrl; + + /** + * @param string $pageUrl + * @param int $formType + */ + public function __construct($pageUrl = null, $formType = 1) + { + $this->pageUrl = $pageUrl; + $this->formType = $formType; + } + + /** + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * @param string $name + */ + public function setName($name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function getCompany() + { + return $this->company; + } + + /** + * @param string $company + */ + public function setCompany($company) + { + $this->company = $company; + } + + /** + * @return string + */ + public function getEmail() + { + return $this->email; + } + + /** + * @param string $email + */ + public function setEmail($email) + { + $this->email = $email; + } + + /** + * @return string + */ + public function getPhone() + { + return $this->phone; + } + + /** + * @param string $phone + */ + public function setPhone($phone) + { + $this->phone = $phone; + } + + /** + * @return string + */ + public function getPeriod() + { + return $this->period; + } + + /** + * @param string $period + */ + public function setPeriod($period) + { + $this->period = $period; + } + + /** + * @return string + */ + public function getDuration() + { + return $this->duration; + } + + /** + * @param string $duration + */ + public function setDuration($duration) + { + $this->duration = $duration; + } + + /** + * @return string + */ + public function getPax() + { + return $this->pax; + } + + /** + * @param string $pax + */ + public function setPax($pax) + { + $this->pax = $pax; + } + + /** + * @return string + */ + public function getAge() + { + return $this->age; + } + + /** + * @param string $age + */ + public function setAge($age) + { + $this->age = $age; + } + + /** + * @return string + */ + public function getChildren() + { + return $this->children; + } + + /** + * @param string $children + */ + public function setChildren($children) + { + $this->children = $children; + } + + /** + * @return string + */ + public function getInquiry() + { + return $this->inquiry; + } + + /** + * @param string $inquiry + */ + public function setInquiry($inquiry) + { + $this->inquiry = $inquiry; + } + + /** + * @return string + */ + public function getPageUrl() + { + return $this->pageUrl; + } + + /** + * @param string $pageUrl + */ + public function setPageUrl($pageUrl) + { + $this->pageUrl = $pageUrl; + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/Hook/PageLayoutView.php b/web/typo3conf/ext/ep_theme/Classes/Hook/PageLayoutView.php new file mode 100644 index 00000000..a858a8c4 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/Hook/PageLayoutView.php @@ -0,0 +1,140 @@ +, 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 TYPO3\CMS\Backend\Utility\BackendUtility; +use TYPO3\CMS\Backend\View\PageLayoutView as CorePageLayoutView; +use TYPO3\CMS\Backend\View\PageLayoutViewDrawItemHookInterface; + +class PageLayoutView implements PageLayoutViewDrawItemHookInterface +{ + + /** + * @param CorePageLayoutView $parentObject + * @param bool $drawItem + * @param string $headerContent + * @param string $itemContent + * @param array $row + */ + public function preProcess(CorePageLayoutView &$parentObject, &$drawItem, &$headerContent, &$itemContent, array &$row) + { + switch ($row['CType']) + { + case 'teaser_country': + if ((int) $row['tx_eptheme_context_country'] > 0) { + $drawItem = false; + $country = BackendUtility::getRecord('tx_epproducts_domain_model_country', $row['tx_eptheme_context_country']); + $itemContent = 'Teaser Land
' . $country['name']; + } + break; + case 'teaser_region': + if ((int) $row['tx_eptheme_context_region'] > 0) { + $drawItem = false; + $region = BackendUtility::getRecord('tx_epproducts_domain_model_region', $row['tx_eptheme_context_region']); + $itemContent = 'Teaser Gebiet
' . $region['name']; + } + break; + case 'teaser_city': + if ((int) $row['tx_eptheme_context_city'] > 0) { + $drawItem = false; + $city = BackendUtility::getRecord('tx_epproducts_domain_model_city', $row['tx_eptheme_context_city']); + $itemContent = 'Teaser Ort
' . $city['name']; + } + break; + case 'teaser_hotel': + if ((int) $row['tx_eptheme_context_hotel'] > 0) { + $drawItem = false; + $hotel = BackendUtility::getRecord('tx_epproducts_domain_model_hotel', $row['tx_eptheme_context_hotel']); + $itemContent = 'Teaser Hotel
' . $hotel['name']; + } + break; + case 'teaser_concept': + if ((int) $row['tx_eptheme_context_concept'] > 0) { + $drawItem = false; + $concept = BackendUtility::getRecord('tx_epproducts_domain_model_concept', $row['tx_eptheme_context_concept']); + $itemContent = 'Teaser Konzept
' . $concept['name']; + } + break; + case 'teaser_product': + if ((int) $row['tx_eptheme_context_product'] > 0) { + $drawItem = false; + $product = BackendUtility::getRecord('tx_epproducts_domain_model_product', $row['tx_eptheme_context_product']); + $itemContent = 'Teaser Product
' . $product['name']; + if ((int) $row['tx_eptheme_context_hotel'] > 0) { + $hotel = BackendUtility::getRecord('tx_epproducts_domain_model_hotel', + $row['tx_eptheme_context_hotel']); + $itemContent .= ', ' . $hotel['name']; + } + } + break; + case 'gmap': + if ((int) $row['tx_eptheme_context_region'] > 0) { + $drawItem = false; + $region = BackendUtility::getRecord('tx_epproducts_domain_model_region', $row['tx_eptheme_context_region']); + $itemContent = 'Google Map
' . $region['name']; + if ((int) $row['tx_eptheme_context_hotel'] > 0) { + $hotel = BackendUtility::getRecord('tx_epproducts_domain_model_hotel', + $row['tx_eptheme_context_hotel']); + $itemContent .= ', ' . $hotel['name']; + } + } + break; + case 'disturber': + $drawItem = false; + switch ($row['layout']) + { + case 1: + $size = 'groß'; + break; + case 2: + $size = 'Event klein'; + break; + case 3: + $size = 'Event groß'; + break; + default: + $size = 'klein'; + } + $itemContent = 'Störer ' . $size . ''; + break; + case 'deal_of_the_week': + if ((int) $row['tx_eptheme_context_product'] > 0) { + $drawItem = false; + $product = BackendUtility::getRecord('tx_epproducts_domain_model_product', $row['tx_eptheme_context_product']); + $itemContent = 'Deal der Woche
' . $product['name']; + } + break; + case 'lineup': + $drawItem = false; + $itemContent = 'Lineup
' . $row['tx_eptheme_lineup'] . ' Einträge'; + break; + default: + } + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/Hook/Tcemain.php b/web/typo3conf/ext/ep_theme/Classes/Hook/Tcemain.php new file mode 100644 index 00000000..051ad035 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/Hook/Tcemain.php @@ -0,0 +1,63 @@ +, 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 TYPO3\CMS\Backend\Utility\BackendUtility; +use TYPO3\CMS\Core\DataHandling\DataHandler; + +class Tcemain +{ + /** + * @param array $fields + * @param string $table + * @param string $table + * @param int $id + * @param DataHandler $dataHandler + */ + public function processDatamap_preProcessFieldArray(array &$fields, $table, $id, DataHandler $dataHandler) + { + // Get country code from associated country entity and store in page record + if ($table === 'pages') { + $countryUid = (int) $fields['tx_eptheme_context_country']; + if ($countryUid === 0) { + $fields['tx_eptheme_context_country_code'] = ''; + } else { + $country = BackendUtility::getRecord('tx_epproducts_domain_model_country', $countryUid); + if ($country !== null) { + $fields['tx_eptheme_context_country_code'] = $country['code']; + } + } + } + // Force unused colPos for content elements appended to news records + if ($table === 'tt_content') { + if (isset($dataHandler->datamap['tx_news_domain_model_news'])) { + $fields['colPos'] = 1848; + } + } + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/Service/EmailService.php b/web/typo3conf/ext/ep_theme/Classes/Service/EmailService.php new file mode 100644 index 00000000..afb1faff --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/Service/EmailService.php @@ -0,0 +1,110 @@ +, 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 TYPO3\CMS\Core\Mail\MailMessage; +use TYPO3\CMS\Core\SingletonInterface; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; +use TYPO3\CMS\Fluid\View\StandaloneView; + +class EmailService implements SingletonInterface +{ + + /** + * @var ConfigurationManagerInterface + */ + protected $configurationManager; + + /** + * @var array + */ + protected $settings; + + /** + * @param ConfigurationManagerInterface $manager + */ + 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']; + } + + /** + * @param string $toEmail + * @param string $toName + * @param string $subject + * @param string $templateName + * @param array $variables + * @return bool + */ + public function send($toEmail, $toName, $subject, $templateName, array $variables = []) + { + $fromEmail = $this->settings['settings']['contactFormToEmail']; + $fromName = $this->settings['settings']['contactFormToName']; + + /** @var MailMessage $message */ + $message = GeneralUtility::makeInstance(MailMessage::class); + $message + ->setTo([$toEmail => $toName]) + ->setFrom([$fromEmail => $fromName]) + ->setSubject($subject) + ; + + $view = $this->getView($templateName); + $view->assignMultiple($variables); + $message->setBody($view->render(), 'text/html'); + + $message->send(); + + return $message->isSent(); + } + + /** + * @param string $templateName + * @param string $format + * @return StandaloneView + */ + protected function getView($templateName, $format = 'html') + { + /** @var StandaloneView $view */ + $view = GeneralUtility::makeInstance(StandaloneView::class); + $view->setFormat($format); + $view->getRequest()->setControllerExtensionName('ep_events'); + + $view->setTemplateRootPaths($this->settings['view']['templateRootPaths']); + $view->setLayoutRootPaths($this->settings['view']['layoutRootPaths']); + $view->setPartialRootPaths($this->settings['view']['partialRootPaths']); + $view->setTemplate($templateName); + + return $view; + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/Userfuncs/Tca.php b/web/typo3conf/ext/ep_theme/Classes/Userfuncs/Tca.php new file mode 100644 index 00000000..e9596f08 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/Userfuncs/Tca.php @@ -0,0 +1,49 @@ +getConfiguration( + ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT + ); + $pageUid = $configuration['plugin.']['tx_eptheme.']['settings.']['blogDetailPageUid']; + $parameters = [ + 'tx_news_pi1' => [ + 'news' => $uid, + ] + ]; + + return \tx_pagepath_api::getPagePath($pageUid, $parameters); + } + + public function getDeeplinkForPage($PA, $fObj) + { + if (!is_numeric($PA['row']['uid'])) { + return 'Wird nach dem Speichern angezeigt.'; + } + $pageUid = $PA['row']['uid']; + + return \tx_pagepath_api::getPagePath($pageUid); + } + + public function getDeeplinkForStaticSearchparams($PA, $fObj) + { + if (!is_numeric($PA['row']['uid'])) { + return 'Wird nach dem Speichern angezeigt.'; + } + + return 'https://www.ep-reisen.de/reiseauswahl/' . $PA['row']['path_segment']; + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/ArgumentPrefixViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/ArgumentPrefixViewHelper.php new file mode 100644 index 00000000..a3359fa2 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/ArgumentPrefixViewHelper.php @@ -0,0 +1,53 @@ +, 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class ArgumentPrefixViewHelper extends AbstractViewHelper +{ + + /** + * @param string $pluginName + * @param string $extensionName + * + * @return string + */ + public function render($pluginName = null, $extensionName = null) + { + $request = $this->controllerContext->getRequest(); + if ($pluginName === null) { + $pluginName = $request->getPluginName(); + } + if ($extensionName === null) { + $extensionName = $request->getControllerExtensionName(); + } + return strtolower(implode('_', ['tx', $extensionName, $pluginName])); + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Calendar/ContingentViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Calendar/ContingentViewHelper.php new file mode 100644 index 00000000..1818aab7 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Calendar/ContingentViewHelper.php @@ -0,0 +1,149 @@ +, 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 CalendR\Event\Collection\Basic; +use CalendR\Period\Day; +use CalendR\Period\Month; +use EP\EpProducts\Domain\Model\Contingent; +use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class ContingentViewHelper extends AbstractViewHelper +{ + const LEVEL_GREEN = 1; + const LEVEL_YELLOW = 2; + const LEVEL_RED = 3; + + public function render(Month $month, Day $day, Basic $events) + { + if (!$month->includes($day)) { + return ''; + } + $now = new \DateTime('now'); + if ($now > $day->getBegin()) { + $class = [ 'text-muted' ]; + return $this->getHtml($class, $day->format('d')); + } + $contingents = $events->find($day); + if (count($contingents) === 0) { + $percentage = 100; + $level = static::LEVEL_GREEN; + } else { + $contingent = reset($contingents); + $percentage = $contingent->getPercentageAvailable(); + $status = $contingent->getStatus(); + $level = $this->getOccupancyLevel($percentage, $status); + } + $previousDay = $day->getPrevious(); + $previousContingents = $events->find($previousDay); + if (count($previousContingents) === 0) { + $previousLevel = static::LEVEL_GREEN; + } else { + $previousContingent = reset($previousContingents); + $previousPercentage = $previousContingent->getPercentageAvailable(); + $previousStatus = $previousContingent->getStatus(); + $previousLevel = $this->getOccupancyLevel($previousPercentage, $previousStatus); + } + + if ($previousLevel !== $level) { + $class = $this->getTransientLabelClasses($previousLevel, $level); + } else { + $class = $this->getLabelClasses($percentage, $level); + } + + return $this->getHtml($class, $day->format('d')); + } + + /** + * @param int $percentage + * @param int $level + * + * @return array + */ + protected function getLabelClasses($percentage, $level) + { + $classes = $this->getTransientLabelClasses($level); + $classes[] = 'available-' . $percentage; + return $classes; + } + + /** + * @param int $levelFrom + * @param int|null $levelTo + * + * @return array + */ + protected function getTransientLabelClasses($levelFrom, $levelTo = null) + { + $classes = [ 'label' ]; + if ($levelFrom === static::LEVEL_RED) { + $class = 'label-danger'; + } elseif ($levelFrom === static::LEVEL_YELLOW) { + $class = 'label-warning'; + } else { + $class = 'label-success'; + } + if ($levelTo === static::LEVEL_RED) { + $class .= '-danger'; + } elseif ($levelTo === static::LEVEL_YELLOW) { + $class .= '-warning'; + } elseif ($levelTo !== null) { + $class .= '-success'; + } + $classes[] = $class; + return $classes; + } + + /** + * @param int $percentage + * @param int $status + * + * @return int + */ + protected function getOccupancyLevel($percentage, $status) + { + if ($percentage <= 20 || $status === Contingent::STATUS_BLOCKED) { + return static::LEVEL_RED; + } + if (($percentage > 20 && $percentage <= 80) || $status === Contingent::STATUS_ONREQUEST) { + return static::LEVEL_YELLOW; + } + return static::LEVEL_GREEN; + } + + /** + * @param array $class + * @param string $label + * @return string + */ + protected function getHtml(array $class, $label) + { + $cssClass = ' class="' . implode(' ', $class) . '"'; + return sprintf('%s', $cssClass, $label); + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Calendar/IncludesViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Calendar/IncludesViewHelper.php new file mode 100644 index 00000000..60143193 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Calendar/IncludesViewHelper.php @@ -0,0 +1,53 @@ +, 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractConditionViewHelper; + +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); + } + + /** + * @param array $arguments + * @return bool + */ + protected static function evaluateCondition($arguments = null) + { + /** @var \CalendR\Period\Range $range */ + $range = $arguments['range']; + /** @var \CalendR\Period\PeriodInterface $period */ + $period = $arguments['period']; + return $range->includes($period); + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/ComfortCategoryViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/ComfortCategoryViewHelper.php new file mode 100644 index 00000000..4a139f59 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/ComfortCategoryViewHelper.php @@ -0,0 +1,70 @@ +, 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class ComfortCategoryViewHelper extends AbstractViewHelper +{ + + /** + * @param Hotel $hotel + * + * @return string + */ + public function render(Hotel $hotel) + { + $flag = '%s'; + + switch ($hotel->getCategory()) + { + case Hotel::CATEGORY_STANDARD: + $icon = 'S'; + $tooltip = 'Kategorie: Standard'; + break; + case Hotel::CATEGORY_COMFORT: + $icon = 'C'; + $tooltip = 'Kategorie: Komfort'; + break; + case Hotel::CATEGORY_DELUXE: + $icon = 'D'; + $tooltip = 'Kategorie: Deluxe'; + break; + case Hotel::CATEGORY_SUPER_DELUXE: + $icon = 'SD'; + $tooltip = 'Kategorie: Superdeluxe'; + break; + default: + return ''; + } + + return sprintf($flag, $tooltip, $icon); + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/ContainerViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/ContainerViewHelper.php new file mode 100644 index 00000000..131ba064 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/ContainerViewHelper.php @@ -0,0 +1,65 @@ +, 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class ContainerViewHelper extends AbstractViewHelper +{ + /** + * @var array + */ + protected $columnsWithoutContainers = [ 0, 1, 3 ]; + + /** + * @param array $data + * @param string $content + * @param string $cssClasses + * + * @return string + */ + public function render(array $data, $content = null, $cssClasses = null) + { + if ($content === null) { + $content = $this->renderChildren(); + } + $classes = []; + if (in_array($data['colPos'], $this->columnsWithoutContainers, false)) { + $classes[] = 'container'; + } else { + $classes[] = 'in-column'; + } + if ($cssClasses !== null) { + $classes[] = $cssClasses; + } + if (count($classes) > 0) { + return '
' . $content . '
'; + } + return $content; + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/ContextClassesViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/ContextClassesViewHelper.php new file mode 100644 index 00000000..b7009bcc --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/ContextClassesViewHelper.php @@ -0,0 +1,57 @@ +, 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class ContextClassesViewHelper extends AbstractViewHelper +{ + + /** + * @param array $context + * + * @return string + */ + public function render(array $context) + { + $classes = []; + if (isset($context['country'])) { + $classes[] = mb_strtolower($context['country']['name']); + } + if (isset($context['region'])) { + $classes[] = mb_strtolower($context['region']['name']); + } + + $classesString = implode(' ', $classes); + + $classesString = str_replace(['ä', 'ö', 'ü', 'ß'], ['ae', 'oe', 'ue', 'ss'], $classesString); + + return $classesString; + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/DateRangeViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/DateRangeViewHelper.php new file mode 100644 index 00000000..4db0d788 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/DateRangeViewHelper.php @@ -0,0 +1,49 @@ +, 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\Utility\DateUtility; +use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class DateRangeViewHelper extends AbstractViewHelper +{ + + /** + * @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') + { + return DateUtility::formatDateRange($dateFrom, $dateTo, $includeLabel, $format); + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/FilterSettingsEncoderViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/FilterSettingsEncoderViewHelper.php new file mode 100644 index 00000000..4051be96 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/FilterSettingsEncoderViewHelper.php @@ -0,0 +1,53 @@ +, 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\Service\FilterSettingsEncoder; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class FilterSettingsEncoderViewHelper extends AbstractViewHelper +{ + /** + * @param string $argument + * + * @return string + */ + public function render($argument = null) + { + if ($argument === null) { + $argument = $this->renderChildren(); + } + if ($argument === null) { + return ''; + } + /** @var \EP\EpProducts\Service\FilterSettingsEncoder $encoder */ + $encoder = GeneralUtility::makeInstance(FilterSettingsEncoder::class); + return $encoder->encode($argument); + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/FlagiconSourceViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/FlagiconSourceViewHelper.php new file mode 100644 index 00000000..2b8b61f7 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/FlagiconSourceViewHelper.php @@ -0,0 +1,61 @@ +, 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\Country; +use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class FlagiconSourceViewHelper extends AbstractViewHelper +{ + + public function 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.'); + } + + public function render() + { + $code = null; + + if (is_object($this->arguments['country']) && $this->arguments['country'] instanceof Country) { + /** @var \EP\EpProducts\Domain\Model\Country $country */ + $country = $this->arguments['country']; + $code = strtolower($country->getCode()); + } elseif (!empty($this->arguments['countryCode'])) { + $code = strtolower($this->arguments['countryCode']); + } + + if ($code !== null) { + return 'EXT:ep_theme/Resources/Public/images/' . $code . '.png'; + } + + return ''; + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/GmapsStaticMapViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/GmapsStaticMapViewHelper.php new file mode 100644 index 00000000..e2b3fbb1 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/GmapsStaticMapViewHelper.php @@ -0,0 +1,89 @@ +, 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¢er=%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('%s', $url, $source->getName(), $source->getName()); + + return $tag; + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/GmapsUrlViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/GmapsUrlViewHelper.php new file mode 100644 index 00000000..e910d2eb --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/GmapsUrlViewHelper.php @@ -0,0 +1,59 @@ +, 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\Fluid\Core\ViewHelper\AbstractViewHelper; + +class GmapsUrlViewHelper extends AbstractViewHelper +{ + const URLBASE = 'http://maps.google.com/maps?q=%s,%s&t=%s&z=%d'; + + /** + * @param Hotel $hotel + * @param Region $region + * @param string $type + * @param int $zoom + * + * @return string + */ + public function render(Hotel $hotel = null, Region $region = null, $type = 'p', $zoom = 10) + { + 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 'http://www.google.de/maps'; + } + return sprintf(static::URLBASE, $source->getLatitude(), $source->getLongitude(), $type, $zoom); + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/HotelCategoryViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/HotelCategoryViewHelper.php new file mode 100644 index 00000000..8bd3e16c --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/HotelCategoryViewHelper.php @@ -0,0 +1,54 @@ +, 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class HotelCategoryViewHelper extends AbstractViewHelper +{ + /** + * @var array + */ + static protected $categoryLabels = [ + Hotel::CATEGORY_STANDARD => 'Standard', + Hotel::CATEGORY_COMFORT => 'Comfort', + Hotel::CATEGORY_DELUXE => 'Deluxe', + Hotel::CATEGORY_SUPER_DELUXE => 'Super Deluxe', + ]; + + /** + * @param int $category + * + * @return string + */ + public function render($category) + { + return static::$categoryLabels[$category]; + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/NightsOptionsViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/NightsOptionsViewHelper.php new file mode 100644 index 00000000..6362f0e6 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/NightsOptionsViewHelper.php @@ -0,0 +1,60 @@ +, 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class NightsOptionsViewHelper extends AbstractViewHelper +{ + + /** + * @param array $options + * + * @return string + */ + public function render(array $options = null) + { + if ($options === null) { + return ''; + } + sort($options); + $optionsCount = count($options); + $lastOption = array_pop($options); + $output = ''; + if ($optionsCount > 2) { + $output .= implode(', ' , $options) . ' oder ' . $lastOption; + } elseif ($optionsCount === 2) { + $output .= reset($options) . ' oder ' . $lastOption; + } else { + $output = $lastOption; + } + $output .= (int) $lastOption > 1 ? ' Nächte' : ' Nacht'; + return $output; + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/RatingViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/RatingViewHelper.php new file mode 100644 index 00000000..ba341df9 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/RatingViewHelper.php @@ -0,0 +1,61 @@ +, 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\Product; +use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class RatingViewHelper extends AbstractViewHelper +{ + + /** + * @param Product $product + * + * @return string + */ + public function render(Product $product) + { + $ratingAverage = $product->getRatingAverage(); + $ratingVotesCount = $product->getRatingVotesCount(); + $fullStars = floor($ratingAverage); + $halfStar = ($ratingAverage - $fullStars) > 0; + $ratingAverageLabel = number_format($ratingAverage, 1, ',', '.'); + + $content = ''; + for ($i = 1; $i <= $fullStars; $i++) + { + $content .= ''; + } + if ($halfStar) { + $content .= ''; + } + $content .= sprintf('%s Sterne (%d)', $ratingAverageLabel, $ratingVotesCount); + return $content; + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/TopnavItemViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/TopnavItemViewHelper.php new file mode 100644 index 00000000..ee40b960 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/TopnavItemViewHelper.php @@ -0,0 +1,55 @@ +, 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class TopnavItemViewHelper extends AbstractViewHelper +{ + + /** + * @param string $item + * + * @return string + */ + public function render($item = null) + { + if ($item === null) { + $item = $this->renderChildren(); + } + + $parts = explode(' ', $item); + if (count($parts) === 1) { + return $item; + } + $hiddenMobileText = array_shift($parts); + $linkText = implode(' ', $parts); + return '' . $hiddenMobileText . ' ' . $linkText; + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/AjaxViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/AjaxViewHelper.php new file mode 100644 index 00000000..f95140ab --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/AjaxViewHelper.php @@ -0,0 +1,94 @@ +, 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 TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; +use TYPO3\CMS\Fluid\ViewHelpers\Uri\ActionViewHelper; + +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) + { + $configurationManager = $manager; + $settings = GeneralUtility::removeDotsFromTS($configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT)); + $this->settings = $settings['plugin']['tx_eptheme']['settings']; + } + + /** + * @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 + */ + 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) + { + if (array_key_exists('defaultAjaxUid', $this->settings)) { + $pageUid = $this->settings['defaultAjaxUid']; + } + if (strtolower(trim($format)) === 'json') { + $pageType = self::PAGE_TYPE_JSON; + } else { + $pageType = self::PAGE_TYPE_HTML; + } + if ($pageUid === null) { + $rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($GLOBALS['TSFE']->id); + $rootPage = array_pop($rootLine); + $pageUid = $rootPage['uid']; + } + return parent::render($action, $arguments, $controller, $extensionName, $pluginName, $pageUid, $pageType, $noCache, $noCacheHash, $section, '', $linkAccessRestrictedPages, $additionalParams, $absolute, $addQueryString, $argumentsToBeExcludedFromQueryString, $addQueryStringMethod); + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/BookingViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/BookingViewHelper.php new file mode 100644 index 00000000..b18b6460 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/BookingViewHelper.php @@ -0,0 +1,72 @@ +, 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\Utility\BookingUrlUtility; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; +use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class BookingViewHelper extends AbstractViewHelper +{ + /** + * @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_theme']; + } + + /** + * @param int $bookingId + * @param int $hotelId + * @param string $template + * + * @return string + */ + public function render($bookingId, $hotelId, $template = null) + { + if ($template === null) { + $template = $this->settings['bpnBookingUrlTemplateCode']; + } + return BookingUrlUtility::generateUrl($bookingId, $hotelId, $template); + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/ExternalImageViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/ExternalImageViewHelper.php new file mode 100644 index 00000000..5b0b584d --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/ExternalImageViewHelper.php @@ -0,0 +1,45 @@ +, 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class ExternalImageViewHelper extends AbstractViewHelper +{ + /** + * @param string $url + * + * @return string + */ + public function render($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; + } +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/ProductViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/ProductViewHelper.php new file mode 100644 index 00000000..7766086b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/ProductViewHelper.php @@ -0,0 +1,100 @@ +, 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\Product; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; +use TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class ProductViewHelper extends AbstractViewHelper +{ + + /** + * @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_epproducts']; + } + + /** + * @param Product $product + * @param Hotel|null $hotel + * @param bool $linkHotel + * @param int $referringPageUid + * @param string $origin + * + * @return string + */ + public function render(Product $product, Hotel $hotel = null, $linkHotel = false, $referringPageUid = null, $origin = null) + { + if ($product->getDetailPage()) { + return $this + ->controllerContext + ->getUriBuilder() + ->reset() + ->setTargetPageUid($product->getDetailPage()) + ->build() + ; + } + $pageUid = $this->settings['defaultDetailPageUid']; + $arguments = [ 'product' => $product ]; + if ((int) $referringPageUid > 0) { + $arguments['referringPageUid'] = $referringPageUid; + } + if ($origin !== null) { + $arguments['origin'] = $origin; + } + if ((bool) $linkHotel && $hotel !== null) { + $arguments['hotel'] = $hotel; + } + return $this + ->controllerContext + ->getUriBuilder() + ->reset() + ->setTargetPageUid($pageUid) + ->uriFor('detail', $arguments, 'Product', 'epproducts', 'product_detail') + ; + } + +} diff --git a/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/VideoViewHelper.php b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/VideoViewHelper.php new file mode 100644 index 00000000..37c5400d --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/VideoViewHelper.php @@ -0,0 +1,51 @@ +, 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 TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper; + +class VideoViewHelper extends AbstractViewHelper +{ + /** + * @param string $value + * @param int $layout + * @return string + */ + public function render($value, $layout = 1) + { + // YouTube + if ((int) $layout === 0) { + return $value . '?rel=0&controls=0&showinfo=0'; + } + // Vimeo + if ((int) $layout === 1) { + return sprintf('https://player.vimeo.com/video/%d?html5=1', $value); + } + return ''; + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/.htaccess b/web/typo3conf/ext/ep_theme/Configuration/.htaccess new file mode 100755 index 00000000..3418e55a --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/web/typo3conf/ext/ep_theme/Configuration/FlexForms/flexform_disturber.xml b/web/typo3conf/ext/ep_theme/Configuration/FlexForms/flexform_disturber.xml new file mode 100644 index 00000000..2fdfd637 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/FlexForms/flexform_disturber.xml @@ -0,0 +1,64 @@ + + + 1 + + + + + + Konfiguration + + array + + +
1
+ array + + + Button + array + + + + + 1 + + + input + trim + 30 + + <_PADDING type="integer">2 + + popup + Link + EXT:backend/Resources/Public/Images/FormFieldWizard/wizard_link.gif + + wizard_link + + wizard + + + height=300,width=500,status=0,menubar=0,scrollbars=1 + + + + + + + + +
+
+
+
+
+
diff --git a/web/typo3conf/ext/ep_theme/Configuration/PageTS/Extensions/GridElements.ts b/web/typo3conf/ext/ep_theme/Configuration/PageTS/Extensions/GridElements.ts new file mode 100644 index 00000000..b63c904e --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/PageTS/Extensions/GridElements.ts @@ -0,0 +1,154 @@ +tx_gridelements.setup { + quarters { + title = Teaserreihe vierspaltig (25%/25%/25%/25%) + topLevelLayout = 1 + icon = EXT:ep_theme/Resources/Public/images/icons/tx_eptheme_gridelements_quarters.png + config { + colCount = 4 + rowCount = 1 + rows { + 1 { + columns { + 1 { + name = Spalte 1 + colPos = 41 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,nlform + } + 2 { + name = Spalte 2 + colPos = 42 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,nlform + } + 3 { + name = Spalte 3 + colPos = 43 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,nlform + } + 4 { + name = Spalte 4 + colPos = 44 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,nlform + } + } + } + } + } + } + thirds { + title = Teaserreihe dreispaltig (33%/33%/33%) + topLevelLayout = 1 + icon = EXT:ep_theme/Resources/Public/images/icons/tx_eptheme_gridelements_thirds.png + config { + colCount = 3 + rowCount = 1 + rows { + 1 { + columns { + 1 { + name = Spalte 1 + colPos = 31 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,nlform + } + 2 { + name = Spalte 2 + colPos = 32 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,nlform + } + 3 { + name = Spalte 3 + colPos = 33 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,nlform + } + } + } + } + } + } + halves { + title = Teaserreihe zweispaltig (50%/50%) + topLevelLayout = 1 + icon = EXT:ep_theme/Resources/Public/images/icons/tx_eptheme_gridelements_halves.png + config { + colCount = 2 + rowCount = 1 + rows { + 1 { + columns { + 1 { + name = Spalte 1 + colPos = 21 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,ytvideo,mailform,nlform + } + 2 { + name = Spalte 2 + colPos = 22 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,ytvideo,mailform,nlform + } + } + } + } + } + } + halfAndTwoQuarters { + title = Teaserreihe dreispaltig (50%/25%/25%) + topLevelLayout = 1 + icon = EXT:ep_theme/Resources/Public/images/icons/tx_eptheme_gridelements_half_and_two_quarters.png + config { + colCount = 4 + rowCount = 1 + rows { + 1 { + columns { + 1 { + name = Spalte 1 + colPos = 51 + colspan = 2 + allowed = textmedia,teaser,list + } + 2 { + name = Spalte 2 + colPos = 52 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,nlform + } + 3 { + name = Spalte 3 + colPos = 53 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,nlform + } + } + } + } + } + } + twoQuartersAndHalf { + title = Teaserreihe dreispaltig (25%/25%/50%) + topLevelLayout = 1 + icon = EXT:ep_theme/Resources/Public/images/icons/tx_eptheme_gridelements_two_quarters_and_half.png + config { + colCount = 4 + rowCount = 1 + rows { + 1 { + columns { + 1 { + name = Spalte 1 + colPos = 61 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,nlform + } + 2 { + name = Spalte 2 + colPos = 62 + allowed = textmedia,teaser,teaser_country,teaser_region,teaser_city,teaser_hotel,teaser_concept,teaser_product,list,gmap,nlform + } + 3 { + name = Spalte 3 + colPos = 63 + colspan = 2 + allowed = textmedia,teaser,list,gmap,nlform + } + } + } + } + } + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/PageTS/Mod/WebLayout/BackendLayouts.ts b/web/typo3conf/ext/ep_theme/Configuration/PageTS/Mod/WebLayout/BackendLayouts.ts new file mode 100644 index 00000000..c1b2a155 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/PageTS/Mod/WebLayout/BackendLayouts.ts @@ -0,0 +1,151 @@ +mod { + web_layout.BackendLayouts { + frontpage { + title = Startseite + config { + backend_layout { + colCount = 1 + rowCount = 1 + rows { + 1 { + columns { + 1 { + name = Content + colPos = 0 + } + } + } + } + } + } + } + frontpageEvent < .frontpage + frontpageEvent.title = Startseite Events + detail { + title = Detailseite + config { + backend_layout { + colCount = 1 + rowCount = 2 + rows { + 1 { + columns { + 1 { + name = Content + colPos = 0 + } + } + } + 2 { + columns { + 1 { + name = Teaserbereich + colPos = 1 + } + } + } + } + } + } + } + subpage < .detail + subpage.title = Unterseite + search < .detail + search.title = Suchergebnis + search.config.backend_layout.rowCount = 0 + subpageSidebarLeft { + title = Unterseite mit Sidebar (links) + config { + backend_layout { + colCount = 4 + rowCount = 3 + rows { + 1 { + columns { + 1 { + name = Headline + colPos = 3 + colspan = 4 + } + } + } + 2 { + columns { + 1 { + name = Sidebar + colPos = 2 + colspan = 1 + } + } + columns { + 2 { + name = Content + colPos = 4 + colspan = 3 + } + } + } + 3 { + columns { + 1 { + name = Teaserbereich + colPos = 1 + colspan = 4 + } + } + } + } + } + } + } + subpageSidebarRight { + title = Unterseite mit Sidebar (rechts) + config { + backend_layout { + colCount = 4 + rowCount = 3 + rows { + 1 { + columns { + 1 { + name = Headline + colPos = 3 + colspan = 4 + } + } + } + 2 { + columns { + 1 { + name = Content + colPos = 4 + colspan = 3 + } + } + columns { + 2 { + name = Sidebar + colPos = 2 + colspan = 1 + } + } + } + 3 { + columns { + 1 { + name = Teaserbereich + colPos = 1 + colspan = 4 + } + } + } + } + } + } + } + subpageSidebarRightEvent < .subpageSidebarRight + subpageSidebarRightEvent.title = Unterseite Events mit Sidebar (rechts) + subpageSidebarLeftEvent < .subpageSidebarLeft + subpageSidebarLeftEvent.title = Unterseite Events mit Sidebar (links) + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/PageTS/Mod/Wizards/NewContentElement.ts b/web/typo3conf/ext/ep_theme/Configuration/PageTS/Mod/Wizards/NewContentElement.ts new file mode 100644 index 00000000..64e560eb --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/PageTS/Mod/Wizards/NewContentElement.ts @@ -0,0 +1,128 @@ +mod { + wizards.newContentElement.wizardItems { + teaser { + header = Teaser + elements { + teaser { + iconIdentifier = content-image + title = Teaser allgemein + description = Teaser mit konfigurierbarem Kontext + tt_content_defValues.CType = teaser + } + teaser_country { + iconIdentifier = content-image + title = Teaser Land + description = Teaser für ein auswählbares Land + tt_content_defValues.CType = teaser_country + } + teaser_region { + iconIdentifier = content-image + title = Teaser Gebiet + description = Teaser für ein auswählbares Gebiet + tt_content_defValues.CType = teaser_region + } + teaser_city { + iconIdentifier = content-image + title = Teaser Ort + description = Teaser für einen auswählbaren Ort + tt_content_defValues.CType = teaser_city + } + teaser_hotel { + iconIdentifier = content-image + title = Teaser Hotel + description = Teaser für ein auswählbares Hotel + tt_content_defValues.CType = teaser_hotel + } + teaser_concept { + iconIdentifier = content-image + title = Teaser Konzept + description = Teaser für ein auswählbares Konzept + tt_content_defValues.CType = teaser_concept + } + teaser_product { + iconIdentifier = content-image + title = Teaser Produkt + description = Teaser für ein auswählbares Produkt + tt_content_defValues.CType = teaser_product + } + } + show := addToList(teaser, teaser_country, teaser_region, teaser_city, teaser_hotel, teaser_concept, teaser_product) + } + disturber { + header = Störer + elements { + disturber { + iconIdentifier = content-image + title = Störer + description = Störer mit Bild, mehreren Buttons und Kontaktinfo + tt_content_defValues.CType = disturber + } + deal_of_the_week { + iconIdentifier = content-image + title = Deal der Woche + description = Störer 'Deal der Woche' mit link auf Produkt + tt_content_defValues.CType = deal_of_the_week + } + } + show := addToList(disturber, deal_of_the_week) + } + special { + elements { + lineup { + iconIdentifier = content-image + title = Lineup + description = Links/rechts alternierende Boxen + tt_content_defValues.CType = lineup + } + event_pricetable { + iconIdentifier = content-image + title = Event Preistabelle + description = Preistabelle nach Verfügbarkeit + tt_content_defValues.CType = event_pricetable + } + nlform { + iconIdentifier = content-image + title = Newsletter Anmeldung + description = Anmeldeformular + tt_content_defValues.CType = nlform + } + } + show := addToList(lineup, event_pricetable, nlform) + } + common { + elements { + gmap { + iconIdentifier = content-image + title = Google Map + description = Google Map für Hotel oder Gebiet + tt_content_defValues.CType = gmap + } + contact { + iconIdentifier = content-image + title = Ansprechpartner + description = Kontaktbox mit Ansprechpartner für Sidebar + tt_content_defValues.CType = contact + } + calendar { + iconIdentifier = content-image + title = Belegungskalender + description = Belegungskalender zu einem ausgewählten Vertragspartner + tt_content_defValues.CType = calendar + } + ytvideo { + iconIdentifier = content-image + title = YouTube Video + description = Responsiv eingebettetes Video + tt_content_defValues.CType = ytvideo + } + button { + iconIdentifier = content-image + title = Button + description = Button mit Referrer Übertragung + tt_content_defValues.CType = button + } + } + show := addToList(gmap, contact, calendar, ytvideo, button) + } + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/PageTS/RTE.ts b/web/typo3conf/ext/ep_theme/Configuration/PageTS/RTE.ts new file mode 100644 index 00000000..15768312 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/PageTS/RTE.ts @@ -0,0 +1,42 @@ +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 + } + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/PageTS/TCEFORM.ts b/web/typo3conf/ext/ep_theme/Configuration/PageTS/TCEFORM.ts new file mode 100644 index 00000000..7252c067 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/PageTS/TCEFORM.ts @@ -0,0 +1,151 @@ +TCEFORM { + tt_content { + imageorient.removeItems = 0,1,2,8,9,25,26 + imageorient.disabled = 1 + imagecols.disabled = 1 + image_noRows.disabled = 1 + imageborder.disabled = 1 + imagewidth.disabled = 1 + imageheight.disabled = 1 + image_link.disabled = 1 + image_zoom = 1 + image_compression.disabled = 1 + image_effects.disabled = 1 + image_frames.disabled = 1 + imagecaption_position.disabled = 1 + layout.types.text.disabled = 1 + layout.types.textpic.disabled = 1 + layout.types.bullets.disabled = 1 + layout.types.html.disabled = 1 + layout.types.image.disabled = 1 + layout.types.list.disabled = 1 + layout.types.menu.disabled = 1 + layout.types.shortcut.disabled = 1 + layout.types.table.disabled = 1 + layout.types.uploads.disabled = 1 + layout.types.mailform.disabled = 1 + layout.types.login.disabled = 1 + + header_layout { + altLabels { + 1 = H1 + 2 = H2 + 3 = H3 + 4 = H4 + 5 = H5 + } + addItems { + 6 = H1 (mit Unterstreichung) + 7 = H2 (mit Unterstreichung) + 8 = H1 (mit Topline) + 9 = H2 (mit Topline) + } + } + + layout.types.textmedia { + removeItems = 1 + altLabels { + 2 = Slider + 3 = Link Panel + } + addItems { + 4 = Slider (ohne Thumbnails) + 5 = Partnerlogos + } + } + + layout.types.gridelements_pi1 { + removeItems = 1,2,3 + } + + layout.types.teaser { + removeItems = 2,3 + altLabels { + 0 = einspaltig + 1 = zweispaltig + } + } + + layout.types.disturber { + altLabels { + 0 = klein + 1 = groß + 2 = Event klein + 3 = Event groß + } + } + + layout.types.teaser_product { + removeItems = 0,2 + altLabels { + 1 = einspaltig + 3 = mehrspaltig/quer + } + } + + layout.types.ytvideo { + removeItems = 2,3 + altLabels { + 0 = YouTube + 1 = Vimeo + } + } + + colPos { + label = Slot + altLabels.1848 = Blogeintrag + } + + table_bgColor.disabled = 1 + table_border.disabled = 1 + table_cellspacing.disabled = 1 + table_cellpadding.disabled = 1 + filelink_size.disabled = 1 + uploads_description.disabled = 1 + uploads_type.disabled = 1 + rowDescription.disabled = 1 + categories.disabled = 1 + header_link = 1 + date.disabled = 1 + select_key.disabled = 1 + linkToTop.disabled = 1 + header_position.disabled = 1 + header.label = Headline + subheader.label = Topline + fe_group.disabled = 1 + editlock.disabled = 1 + tx_epevents_configurator_travel_type.disabled = 1 + sys_language_uid.disabled = 1 + } + + pages { + cache_tags.disabled = 1 + fe_login_mode.disabled = 1 + layout.disabled = 1 + abstract.disabled = 1 + author.disabled = 1 + author_email.disabled = 1 + lastUpdated.disabled = 1 + newUntil.disabled = 1 + alias.disabled = 1 + notes.disabled = 1 + categories.disabled = 1 + sys_language_uid.disabled = 1 + l18n_cfg.disabled = 1 + module.disabled = 0 + media.disabled = 1 + } + + tx_news_domain_model_news { + notes.disabled = 1 + keywords.disabled = 1 + editlock.disabled = 1 + fe_group.disabled = 1 + type.disabled = 1 + sys_language_uid.disabled = 1 + author_email.disabled = 1 + starttime.disabled = 1 + endtime.disabled = 1 + } + +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/PageTS/main.ts b/web/typo3conf/ext/ep_theme/Configuration/PageTS/main.ts new file mode 100644 index 00000000..9358a767 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/PageTS/main.ts @@ -0,0 +1,5 @@ + + + + + diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/pages.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/pages.php new file mode 100644 index 00000000..0ff60838 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/pages.php @@ -0,0 +1,135 @@ + [ + 'config' => [ + 'type' => 'passthrough' + ], + ], + 'tx_eptheme_context_country' => [ + 'exclude' => 0, + 'label' => 'Land', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_country', + 'foreign_table_where' => 'ORDER BY name', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ] + ], + 'tx_eptheme_context_region' => [ + 'exclude' => 0, + 'label' => 'Gebiet', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_region', + 'foreign_table_where' => 'ORDER BY name', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ] + ], + 'tx_eptheme_hide_searchbar' => [ + 'exclude' => 0, + 'label' => 'Suchschlitz NICHT anzeigen', + 'config' => [ + 'type' => 'check' + ] + ], + 'tx_eptheme_bodyclass' => [ + 'exclude' => 0, + 'label' => 'CSS Klasse(n) für Body Tag', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ] + ], + 'tx_eptheme_slides' => [ + 'exclude' => 0, + 'label' => 'Slides', + 'displayCond' => 'FIELD:backend_layout:!IN:pagets__detail,pagets__booking', + 'config' => [ + 'type' => 'inline', + 'foreign_table' => 'tx_eptheme_domain_model_slide', + 'foreign_field' => 'page', + 'foreign_sortby' => 'sorting', + 'maxitems' => 5, + 'appearance' => [ + 'useSortable' => 1, + 'collapseAll' => 1, + 'levelLinksPosition' => 'top', + 'showSynchronizationLink' => 0, + 'showPossibleLocalizationRecords' => 0, + 'showAllLocalizationLink' => 0 + ], + ], + ], + 'tx_eptheme_badge' => [ + 'exclude' => 0, + 'label' => 'Badge', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_badge', + 'foreign_table_where' => 'ORDER BY title', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + 'deeplink' => [ + 'exclude' => 0, + 'label' => 'Seitenurl', + 'config' => [ + 'type' => 'user', + 'userFunc' => \EP\EpTheme\Userfuncs\Tca::class . '->getDeeplinkForPage', + ] + ] + ]; + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns( + 'pages', + $temporaryColumns + ); + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( + 'pages', + '--div--;Kontext, + tx_eptheme_context_country,tx_eptheme_context_region, + tx_eptheme_hide_searchbar,tx_eptheme_bodyclass, + --div--;Slider, + tx_eptheme_slides, + --div--;Badge, + tx_eptheme_badge', + '1,4' + ); + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( + 'pages', + 'deeplink', + '', + 'before:doktype' + ); + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::registerPageTSConfigFile( + 'ep_theme', + 'Configuration/TypoScript/pageTSconfig.ts', + 'EP Theme' + ); + +}); + diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/sys_file_reference.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/sys_file_reference.php new file mode 100644 index 00000000..8e6771c0 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/sys_file_reference.php @@ -0,0 +1,20 @@ + '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', + ], +]; diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/sys_template.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/sys_template.php new file mode 100644 index 00000000..276ac78d --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/sys_template.php @@ -0,0 +1,9 @@ + [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_country', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_country', + 'foreign_table_where' => 'ORDER BY name', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ] + ], + 'tx_eptheme_context_region' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_region', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_region', + 'foreign_table_where' => 'ORDER BY name', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ] + ], + 'tx_eptheme_context_city' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_city', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_city', + 'foreign_table_where' => 'ORDER BY name', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ] + ], + 'tx_eptheme_context_hotel' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_hotel', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_hotel', + 'foreign_table_where' => 'ORDER BY name', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ] + ], + 'tx_eptheme_context_concept' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_concept', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_concept', + 'foreign_table_where' => 'ORDER BY name', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ] + ], + 'tx_eptheme_context_product' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_products/Resources/Private/Language/locallang.xlf:tx_epproducts_domain_model_product', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_product', + 'foreign_table_where' => 'ORDER BY name', + 'items' => [ + ['Keine Zuordnung', 0], + ], + 'minitems' => 0, + 'maxitems' => 1, + ] + ], + 'tx_eptheme_context_date_from' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang.xlf:tx_eptheme_context.date_from', + 'config' => [ + 'type' => 'input', + 'size' => 12, + 'eval' => 'date', + ] + ], + 'tx_eptheme_context_date_to' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang.xlf:tx_eptheme_context.date_to', + 'config' => [ + 'type' => 'input', + 'size' => 12, + 'eval' => 'date', + ] + ], + 'button' => [ + 'exclude' => 0, + 'label' => 'Button Label', + 'config' => [ + 'type' => 'input', + 'default' => 'Details', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'tx_eptheme_lineup' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup.items', + 'config' => [ + 'type' => 'inline', + 'foreign_table' => 'tx_eptheme_domain_model_lineup', + 'foreign_field' => 'tt_content', + 'foreign_sortby' => 'sorting', + 'maxitems' => 99, + 'appearance' => [ + 'useSortable' => 1, + 'collapseAll' => 1, + 'levelLinksPosition' => 'top', + 'showSynchronizationLink' => 0, + 'showPossibleLocalizationRecords' => 0, + 'showAllLocalizationLink' => 0 + ], + ], + + ], + 'tx_eptheme_contact' => [ + 'exclude' => 0, + 'label' => 'Mitarbeiter', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tx_epproducts_domain_model_teammember', + 'foreign_table_where' => 'ORDER BY name', + 'minitems' => 1, + 'maxitems' => 1, + ] + ], + ]; + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('tt_content', $ttContentColumns); + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addFieldsToPalette( + 'tt_content', + 'header', + '--linebreak--, + subheader;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:subheader_formlabel,--linebreak--', + 'after:header_layout' + ); + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_button.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_button.php new file mode 100644 index 00000000..442fb587 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_button.php @@ -0,0 +1,44 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + --palette--;;tx_eptheme_button, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + 'columnsOverrides' => [ + 'header' => [ + 'label' => 'Buttonlabel', + ], + 'header_link' => [ + 'label' => 'URL/Seite', + ], + ], + ]; + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_calendar.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_calendar.php new file mode 100644 index 00000000..a4e84bde --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_calendar.php @@ -0,0 +1,30 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + tx_eptheme_context_hotel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_contact.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_contact.php new file mode 100644 index 00000000..899817d1 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_contact.php @@ -0,0 +1,30 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + tx_eptheme_contact, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_disturber.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_disturber.php new file mode 100644 index 00000000..bc6c7918 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_disturber.php @@ -0,0 +1,89 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + --palette--;' . $frontendLanguageFilePrefix . 'palette.header;header,bodytext,pi_flexform, + --div--;Bild, + assets, + --div--;' . $frontendLanguageFilePrefix . 'tabs.appearance, + layout;' . $frontendLanguageFilePrefix . 'layout_formlabel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + 'columnsOverrides' => [ + 'bodytext' => [ + 'label' => 'Text', + 'defaultExtras' => 'richtext:rte_transform[mode=ts_css]' + ], + 'assets' => [ + 'label' => 'Bild', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('assets', [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'Hinzufügen' + ], + 'foreign_types' => $GLOBALS['TCA']['tt_content']['columns']['image']['config']['foreign_types'], + 'maxitems' => 1, + 'minitems' => 0, + ], $GLOBALS['TYPO3_CONF_VARS']['SYS']['mediafile_ext']) + ] + ] + ]; + + $GLOBALS['TCA']['tt_content']['types']['deal_of_the_week'] = [ + 'showitem' => ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, header, + --palette--;Kontext, tx_eptheme_context_product, tx_eptheme_context_hotel, header_link, bodytext, + --div--;' . $frontendLanguageFilePrefix . 'tabs.appearance, + layout;' . $frontendLanguageFilePrefix . 'layout_formlabel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + 'columnsOverrides' => [ + 'bodytext' => [ + 'label' => 'Text', + 'config' => [ + 'rows' => 2, + ] + ], + ] + ]; + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue( + '*', + 'FILE:EXT:ep_theme/Configuration/FlexForms/flexform_disturber.xml', + 'disturber' + ); + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_event_pricetable.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_event_pricetable.php new file mode 100644 index 00000000..4a23161d --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_event_pricetable.php @@ -0,0 +1,30 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + tx_eptheme_context_product, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_gmap.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_gmap.php new file mode 100644 index 00000000..d4466b1c --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_gmap.php @@ -0,0 +1,30 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + tx_eptheme_context_region, tx_eptheme_context_hotel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_lineup.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_lineup.php new file mode 100644 index 00000000..6deb1b4c --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_lineup.php @@ -0,0 +1,30 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + tx_eptheme_lineup, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_nlform.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_nlform.php new file mode 100644 index 00000000..5753acd0 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_nlform.php @@ -0,0 +1,33 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general', + 'columnsOverrides' => [ + 'header_link' => [ + 'label' => 'YouTube URL/Vimeo ID', + ], + 'layout' => [ + 'label' => 'Typ', + ], + ], + ]; + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_teaser.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_teaser.php new file mode 100644 index 00000000..c9fbeeaf --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_teaser.php @@ -0,0 +1,204 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + --palette--;' . $frontendLanguageFilePrefix . 'palette.header;header,bodytext,button, + --div--;Bild, + assets, + --div--;Kontext, + tx_eptheme_context_country,tx_eptheme_context_region, tx_eptheme_context_hotel, tx_eptheme_context_concept, + --div--;' . $frontendLanguageFilePrefix . 'tabs.appearance, + layout;' . $frontendLanguageFilePrefix . 'layout_formlabel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + 'columnsOverrides' => [ + 'bodytext' => [ + 'label' => 'Teasertext', + 'defaultExtras' => 'richtext:rte_transform[mode=ts_css]' + ], + 'header' => [ + 'config' => [ + 'type' => 'text', + 'rows' => 2, + ] + ], + 'assets' => [ + 'label' => 'Teaserbild', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig('assets', [ + 'appearance' => [ + 'createNewRelationLinkTitle' => 'Hinzufügen' + ], + 'foreign_types' => $GLOBALS['TCA']['tt_content']['columns']['image']['config']['foreign_types'], + 'maxitems' => 1, + 'minitems' => 0, + ], $GLOBALS['TYPO3_CONF_VARS']['SYS']['mediafile_ext']) + ] + ] + ]; + + $GLOBALS['TCA']['tt_content']['types']['teaser_country'] = [ + 'showitem' => ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + --palette--;Kontext, tx_eptheme_context_country, + --div--;' . $frontendLanguageFilePrefix . 'tabs.appearance, + layout;' . $frontendLanguageFilePrefix . 'layout_formlabel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + + $GLOBALS['TCA']['tt_content']['types']['teaser_region'] = [ + 'showitem' => ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + --palette--;Kontext, tx_eptheme_context_region, + --div--;' . $frontendLanguageFilePrefix . 'tabs.appearance, + layout;' . $frontendLanguageFilePrefix . 'layout_formlabel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + + $GLOBALS['TCA']['tt_content']['types']['teaser_city'] = [ + 'showitem' => ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + --palette--;Kontext, tx_eptheme_context_city, + --div--;' . $frontendLanguageFilePrefix . 'tabs.appearance, + layout;' . $frontendLanguageFilePrefix . 'layout_formlabel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + + $GLOBALS['TCA']['tt_content']['types']['teaser_hotel'] = [ + 'showitem' => ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + --palette--;Kontext, tx_eptheme_context_hotel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.appearance, + layout;' . $frontendLanguageFilePrefix . 'layout_formlabel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + + $GLOBALS['TCA']['tt_content']['types']['teaser_concept'] = [ + 'showitem' => ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + --palette--;Kontext, tx_eptheme_context_concept, + --div--;' . $frontendLanguageFilePrefix . 'tabs.appearance, + layout;' . $frontendLanguageFilePrefix . 'layout_formlabel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + + $GLOBALS['TCA']['tt_content']['types']['teaser_product'] = [ + 'showitem' => ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + --palette--;Kontext, tx_eptheme_context_product, tx_eptheme_context_hotel, + tx_eptheme_context_date_from, tx_eptheme_context_date_to, + --div--;' . $frontendLanguageFilePrefix . 'tabs.appearance, + layout;' . $frontendLanguageFilePrefix . 'layout_formlabel, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + ]; + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_ytvideo.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_ytvideo.php new file mode 100644 index 00000000..6d9230e6 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tt_content_element_ytvideo.php @@ -0,0 +1,38 @@ + ' + --palette--;' . $frontendLanguageFilePrefix . 'palette.general;general, + layout, header_link, + --div--;' . $frontendLanguageFilePrefix . 'tabs.access, + hidden;' . $frontendLanguageFilePrefix . 'field.default.hidden, + --div--;' . $frontendLanguageFilePrefix . 'tabs.extended + ', + 'columnsOverrides' => [ + 'header_link' => [ + 'label' => 'YouTube URL/Vimeo ID', + ], + 'layout' => [ + 'label' => 'Typ', + ], + ], + ]; + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tx_epproducts_domain_model_staticsearchparams.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tx_epproducts_domain_model_staticsearchparams.php new file mode 100644 index 00000000..5bc2612d --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tx_epproducts_domain_model_staticsearchparams.php @@ -0,0 +1,30 @@ + [ + 'exclude' => 0, + 'label' => 'Deeplink', + 'config' => [ + 'type' => 'user', + 'userFunc' => \EP\EpTheme\Userfuncs\Tca::class . '->getDeeplinkForStaticSearchparams', + ] + ] + ]; + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns( + 'tx_epproducts_domain_model_staticsearchparams', + $temporaryColumns + ); + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( + 'tx_epproducts_domain_model_staticsearchparams', + 'deeplink', + '', + 'before:name' + ); + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tx_news_domain_model_news.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tx_news_domain_model_news.php new file mode 100644 index 00000000..fea8e098 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/Overrides/tx_news_domain_model_news.php @@ -0,0 +1,30 @@ + [ + 'exclude' => 0, + 'label' => 'Deeplink', + 'config' => [ + 'type' => 'user', + 'userFunc' => \EP\EpTheme\Userfuncs\Tca::class . '->getDeeplinkForNews', + ] + ] + ]; + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns( + 'tx_news_domain_model_news', + $temporaryColumns + ); + + \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes( + 'tx_news_domain_model_news', + 'deeplink', + '', + 'before:title' + ); + +}); diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/tx_eptheme_domain_model_lineup.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/tx_eptheme_domain_model_lineup.php new file mode 100644 index 00000000..8e5e476f --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/tx_eptheme_domain_model_lineup.php @@ -0,0 +1,227 @@ + [ + 'title' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup', + 'default_sortby' => 'ORDER BY name', + 'label' => 'name', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + 'hideTable' => TRUE, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'headline,subline', + 'iconfile' => 'EXT:ep_theme/Resources/Public/images/icons/tx_eptheme_domain_model_lineup.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, name, description, image, + facebook_url, twitter_url, youtube_url, instagram_url', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, name, description, image, --palette--;;social', + 'columnsOverrides' => [ + 'description' => [ + 'defaultExtras' => 'richtext[]', + ], + ], + ], + ], + 'palettes' => [ + 'social' => ['showitem' => 'facebook_url, twitter_url, youtube_url, instagram_url'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_eptheme_domain_model_lineup', + 'foreign_table_where' => 'AND tx_eptheme_domain_model_lineup.pid=###CURRENT_PID### AND tx_eptheme_domain_model_lineup.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + 'sorting' => [ + 'config' => [ + 'type' => 'passthrough' + ], + ], + + 'name' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup.name', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'description' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang.xlf:tx_eptheme_domain_model_lineup.description', + 'config' => [ + 'type' => 'text', + 'cols' => 40, + 'rows' => 10, + 'eval' => 'trim', + ], + ], + 'image' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup.image', + 'config' => \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getFileFieldTCAConfig( + 'image', + [ + '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' + ], + ], + 'maxitems' => 1 + ], + $GLOBALS['TYPO3_CONF_VARS']['GFX']['imagefile_ext'] + ), + ], + 'facebook_url' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup.facebook_url', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'twitter_url' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup.twitter_url', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'instagram_url' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup.instagram_url', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'youtube_url' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup.youtube_url', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'tt_content' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_lineup.tt_content', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'tt_content', + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_theme/Configuration/TCA/tx_eptheme_domain_model_slide.php b/web/typo3conf/ext/ep_theme/Configuration/TCA/tx_eptheme_domain_model_slide.php new file mode 100644 index 00000000..9445b312 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TCA/tx_eptheme_domain_model_slide.php @@ -0,0 +1,218 @@ + [ + 'title' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_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, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'headline,subline', + 'iconfile' => 'EXT:ep_theme/Resources/Public/images/icons/tx_eptheme_domain_model_slide.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, headline, subline, button, + page_uid, image', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, headline, subline, --palette--;;linkbutton, image', + ], + ], + 'palettes' => [ + 'linkbutton' => ['showitem' => 'button, page_uid'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_eptheme_domain_model_slide', + 'foreign_table_where' => 'AND tx_eptheme_domain_model_slide.pid=###CURRENT_PID### AND tx_eptheme_domain_model_slide.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + 'sorting' => [ + 'config' => [ + 'type' => 'passthrough' + ], + ], + + 'headline' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_slide.headline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'subline' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_slide.subline', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim' + ], + ], + 'button' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_slide.button', + 'config' => [ + 'type' => 'input', + 'size' => 20, + 'eval' => 'trim' + ], + ], + 'page_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_slide.page_uid', + 'config' => [ + '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' + ] + ], + ] + ], + 'image' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_slide.image', + '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'] + ), + ], + 'page' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_theme/Resources/Private/Language/locallang_db.xlf:tx_eptheme_domain_model_slide.page', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'pages', + 'minitems' => 0, + 'maxitems' => 1, + ], + ], + ], +]; diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/button.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/button.ts new file mode 100644 index 00000000..3c9a336c --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/button.ts @@ -0,0 +1,8 @@ +tt_content.button =< lib.fluidContent +tt_content.button { + templateName = Button + variables { + referrerPid = TEXT + referrerPid.data = TSFE:id + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/calendar.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/calendar.ts new file mode 100644 index 00000000..e6f26879 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/calendar.ts @@ -0,0 +1,14 @@ +tt_content.calendar =< lib.fluidContent +tt_content.calendar { + templateName = Calendar + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor + 10 { + table = tx_epproducts_domain_model_hotel + where.data = field:tx_eptheme_context_hotel + where.wrap = uid=| + pidInList = 5 + as = hotel + } + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/contact.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/contact.ts new file mode 100644 index 00000000..433afb93 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/contact.ts @@ -0,0 +1,23 @@ +tt_content.contact =< lib.fluidContent +tt_content.contact { + templateName = Contact + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor + 10 { + table = tx_epproducts_domain_model_teammember + where.data = field:tx_eptheme_contact + where.wrap = uid=| + pidInList = {$plugin.tx_eptheme.settings.teamMemberStoragePid} + as = contact + + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor + 10 { + references.fieldName = image + references.table = tx_epproducts_domain_model_teammember + as = image + } + } + } + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/disturber.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/disturber.ts new file mode 100644 index 00000000..538509f5 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/disturber.ts @@ -0,0 +1,16 @@ +tt_content.deal_of_the_week =< lib.fluidContent +tt_content.deal_of_the_week { + templateName = DealOfTheWeek + dataProcessing { + 10 = EP\EpTheme\DataProcessing\TeaserProcessor + } +} + +tt_content.disturber =< lib.fluidContent +tt_content.disturber { + templateName = Disturber + dataProcessing { + 10 = EP\EpTheme\DataProcessing\TeaserImageProcessor + 20 = EP\EpTheme\DataProcessing\FlexFormProcessor + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/event_pricetable.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/event_pricetable.ts new file mode 100644 index 00000000..105d575d --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/event_pricetable.ts @@ -0,0 +1,10 @@ +tt_content.event_pricetable =< lib.fluidContent +tt_content.event_pricetable { + templateName = EventPricetable + variables { + forcePartnerIdSelect = TEXT + forcePartnerIdSelect.value = {$plugin.tx_eptheme.settings.forcePartnerIdSelect} + partnerIdSelectLabel = TEXT + partnerIdSelectLabel.value = {$plugin.tx_eptheme.settings.partnerIdSelectLabel} + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/gmap.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/gmap.ts new file mode 100644 index 00000000..6ba33011 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/gmap.ts @@ -0,0 +1,8 @@ +tt_content.gmap =< tt_content.teaser_product +tt_content.gmap { + templateName = Gmap + dataProcessing { + 10 = EP\EpTheme\DataProcessing\TeaserProcessor + } + settings.teaserTextMaxChars = {$plugin.tx_eptheme.settings.teaserTextMaxChars} +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/lineup.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/lineup.ts new file mode 100644 index 00000000..45640dd9 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/lineup.ts @@ -0,0 +1,24 @@ +tt_content.lineup =< lib.fluidContent +tt_content.lineup { + templateName = Lineup + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor + 10 { + table = tx_eptheme_domain_model_lineup + where.data = field:uid + where.wrap = tt_content=| + orderBy = sorting + as = items + + dataProcessing { + 10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor + 10 { + references.fieldName = image + references.table = tx_eptheme_domain_model_lineup + as = image + } + } + } + } +} + diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/list.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/list.ts new file mode 100644 index 00000000..192f9a79 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/list.ts @@ -0,0 +1,4 @@ +tt_content.list.dataProcessing { + 10 = EP\EpTheme\DataProcessing\FlexFormProcessor +} + diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/nlform.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/nlform.ts new file mode 100644 index 00000000..3d677590 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/nlform.ts @@ -0,0 +1,4 @@ +tt_content.nlform =< lib.fluidContent +tt_content.nlform { + templateName = NewsletterForm +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/teaser.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/teaser.ts new file mode 100644 index 00000000..822e3904 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/teaser.ts @@ -0,0 +1,29 @@ +tt_content.teaser =< lib.fluidContent +tt_content.teaser { + templateName = Teaser + dataProcessing { + 10 = EP\EpTheme\DataProcessing\ContextProcessor + 20 = EP\EpTheme\DataProcessing\TeaserImageProcessor + } + settings.teaserTextMaxChars = {$plugin.tx_eptheme.settings.teaserTextMaxChars} +} + +tt_content.teaser_country < lib.fluidContent +tt_content.teaser_country { + templateName = TeaserCountry + dataProcessing { + 10 = EP\EpTheme\DataProcessing\TeaserProcessor + } + settings.teaserTextMaxChars = {$plugin.tx_eptheme.settings.teaserTextMaxChars} +} + +tt_content.teaser_region =< tt_content.teaser_country +tt_content.teaser_region.templateName = TeaserRegion +tt_content.teaser_city =< tt_content.teaser_country +tt_content.teaser_city.templateName = TeaserCity +tt_content.teaser_hotel =< tt_content.teaser_country +tt_content.teaser_hotel.templateName = TeaserHotel +tt_content.teaser_concept =< tt_content.teaser_country +tt_content.teaser_concept.templateName = TeaserConcept +tt_content.teaser_product =< tt_content.teaser_country +tt_content.teaser_product.templateName = TeaserProduct diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/ytvideo.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/ytvideo.ts new file mode 100644 index 00000000..355907e0 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/ContentElements/ytvideo.ts @@ -0,0 +1,4 @@ +tt_content.ytvideo =< lib.fluidContent +tt_content.ytvideo { + templateName = YoutubeVideo +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/EpProducts.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/EpProducts.ts new file mode 100644 index 00000000..b00b9fa6 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/EpProducts.ts @@ -0,0 +1,17 @@ + + +plugin.tx_epproducts { + view { + layoutRootPaths.10 = EXT:ep_theme/Resources/Private/Layouts/Product/ + templateRootPaths.10 = EXT:ep_theme/Resources/Private/Templates/ + partialRootPaths.10 = EXT:ep_theme/Resources/Private/Partials/ + } + settings { + teaserTextMaxChars = {$plugin.tx_eptheme.settings.teaserTextMaxChars} + infoPageUid = {$plugin.tx_eptheme.settings.infoPageUid} + defaultContactFormPageUid = {$plugin.tx_eptheme.settings.defaultContactFormPageUid} + phoneNumber = {$plugin.tx_eptheme.settings.phoneNumber} + bpnBookingUrlTemplateCode = {$plugin.tx_eptheme.settings.bpnBookingUrlTemplateCode} + showSkipassBadge = {$plugin.tx_eptheme.settings.showSkipassBadge} + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/FluidStyledContent.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/FluidStyledContent.ts new file mode 100644 index 00000000..be6cf9e3 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/FluidStyledContent.ts @@ -0,0 +1,8 @@ + + +lib.fluidContent { + 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 + settings < plugin.tx_eptheme.settings +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/Form.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/Form.ts new file mode 100644 index 00000000..b22a8467 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/Form.ts @@ -0,0 +1,8 @@ + + +plugin.tx_form { + view { + templateRootPaths.100 = EXT:ep_theme/Resources/Private/Templates/Form/ + partialRootPaths.100 = EXT:ep_theme/Resources/Private/Partials/Form/ + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/GridElements.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/GridElements.ts new file mode 100644 index 00000000..8224cdd1 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/GridElements.ts @@ -0,0 +1,20 @@ + + +tt_content.gridelements_pi1.20.10.setup { + quarters < lib.gridelements.defaultGridSetup + quarters { + cObject = FLUIDTEMPLATE + cObject { + templateName = Quarters + templateRootPaths.0 = EXT:ep_theme/Resources/Private/Templates/Gridelements/ + layoutRootPaths.0 = EXT:ep_theme/Resources/Private/Layouts/Gridelements/ + partialRootPaths.0 = EXT:ep_theme/Resources/Private/Partials/ + } + } + thirds < .quarters + thirds.cObject.templateName = Thirds + halves < .quarters + halves.cObject.templateName = Halves + halfAndTwoQuarters < .quarters + halfAndTwoQuarters.cObject.templateName = HalfAndTwoQuarters +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/Mailform.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/Mailform.ts new file mode 100644 index 00000000..788d5df3 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/Mailform.ts @@ -0,0 +1,3 @@ +plugin.tx_form._CSS_DEFAULT_STYLE > +tt_content.mailform.10 > +tt_content.mailform.20.stdWrap.wrap = | diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/News.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/News.ts new file mode 100644 index 00000000..f7d2d007 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/News.ts @@ -0,0 +1,13 @@ + + +plugin.tx_news { + view { + templateRootPaths.100 = EXT:ep_theme/Resources/Private/Templates/News/ + partialRootPaths.100 = EXT:ep_theme/Resources/Private/Partials/News/ + } + settings { + link.skipControllerAndAction = 1 + disqusLocale = de + tagListPageUid = {$plugin.tx_eptheme.settings.blogTagListPageUid} + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/PbSocial.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/PbSocial.ts new file mode 100644 index 00000000..ebe99468 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Extensions/PbSocial.ts @@ -0,0 +1,12 @@ + + +plugin.tx_pbsocial { + settings { + load-jquery = 0 + } + view { + templateRootPaths.100 = EXT:ep_theme/Resources/Private/Templates/SocialMedia/ + layoutRootPaths.100 = EXT:ep_theme/Resources/Private/Layouts/SocialMedia/ + partialRootPaths.100 = EXT:ep_theme/Resources/Private/Partials/SocialMedia/ + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/DynamicContent.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/DynamicContent.ts new file mode 100644 index 00000000..99c580ad --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/DynamicContent.ts @@ -0,0 +1,49 @@ +lib.dynamicContent = COA +lib.dynamicContent { + 5 = LOAD_REGISTER + 5 { + colPos.cObject = TEXT + colPos.cObject { + field = colPos + ifEmpty.cObject = TEXT + ifEmpty.cObject { + value.current = 1 + ifEmpty = 0 + } + } + pageUid.cObject = TEXT + pageUid.cObject { + field = pageUid + ifEmpty.data = TSFE:id + } + contentFromPid.cObject = TEXT + contentFromPid.cObject { + data = DB:pages:{register:pageUid}:content_from_pid + data.insertData = 1 + } + wrap.cObject = TEXT + wrap.cObject { + field = wrap + } + } + 20 = CONTENT + 20 { + table = tt_content + select { + includeRecordsWithoutDefaultTranslation = 1 + orderBy = sorting + where = colPos={register:colPos} + where.insertData = 1 + pidInList.data = register:pageUid + pidInList.override.data = register:contentFromPid + } + stdWrap { + dataWrap = {register:wrap} + required = 1 + } + } + 90 = RESTORE_REGISTER +} + +lib.dynamicContentSlide =< lib.dynamicContent +lib.dynamicContentSlide.20.slide = -1 diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/ParseFunc.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/ParseFunc.ts new file mode 100644 index 00000000..ba6c1280 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/ParseFunc.ts @@ -0,0 +1,132 @@ +lib.parseFunc { + makelinks = 1 + makelinks { + http { + keep = path + extTarget = _blank + } + mailto { + keep = path + } + } + tags { + link = TEXT + link { + current = 1 + typolink { + parameter { + data = parameters : allParams + } + extTarget = _blank + } + parseFunc.constants = 1 + } + a = TEXT + a { + current = 1 + typolink { + parameter.data = parameters:href + title.data = parameters:title + ATagParams.data = parameters:allParams + target.data = parameters:target + extTarget = _blank + extTarget.override.data = parameters:target + } + } + } + allowTags := addToList(a, abbr, acronym, address, article, aside, b, bdo) + allowTags := addToList(big, blockquote, br, caption, center, cite, code, col) + allowTags := addToList(colgroup, dd, del, dfn, dl, div, dt, em, font) + allowTags := addToList(footer, header, h1, h2, h3, h4, h5, h6, hr, i, img) + allowTags := addToList(ins, kbd, label, li, link, meta, nav, ol, p, pre, q) + allowTags := addToList(samp, sdfield, section, small, span, strike, strong) + allowTags := addToList(style, sub, sup, table, thead, tbody, tfoot, td, th) + allowTags := addToList(tr, title, tt, u, ul, var) + denyTags = * + sword = | + constants = 1 + nonTypoTagStdWrap { + HTMLparser = 1 + HTMLparser { + keepNonMatchedTags = 1 + htmlSpecialChars = 2 + } + } +} + + +lib.parseFunc_RTE < lib.parseFunc +lib.parseFunc_RTE { + externalBlocks := addToList(article, aside, blockquote, div, dd, dl, footer) + externalBlocks := addToList(header, nav, ol, section, table, ul, pre) + externalBlocks { + ol { + stripNL = 1 + stdWrap { + parseFunc = < lib.parseFunc + } + } + ul { + stripNL = 1 + stdWrap { + parseFunc = < lib.parseFunc + } + } + table { + stripNL = 1 + stdWrap { + wrap =
|
+ } + callRecursive = 1 + callRecursive.tagStdWrap.HTMLparser = 1 + callRecursive.tagStdWrap.HTMLparser.tags.table { + fixAttrib.class.default = table table-condensed table-striped + } + HTMLtableCells = 1 + HTMLtableCells { + default.stdWrap { + parseFunc = < lib.parseFunc_RTE + parseFunc { + nonTypoTagStdWrap { + encapsLines { + nonWrappedTag = + } + } + } + } + } + } + pre { + stripNL = 1 + } + div { + stripNL = 1 + callRecursive = 1 + } + blockquote < .div + article < .div + aside < .div + footer < .div + header < .div + nav < .div + section < .div + dl < .div + dd < .div + } + nonTypoTagStdWrap { + encapsLines { + encapsTagList = p, pre, h1, h2, h3, h4, h5, h6, hr, dt + remapTag.DIV = P + nonWrappedTag = P + innerStdWrap_all.ifBlank =   + addAttributes.P.class > + } + } + nonTypoTagStdWrap { + HTMLparser = 1 + HTMLparser { + keepNonMatchedTags = 1 + htmlSpecialChars = 2 + } + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/SearchBar.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/SearchBar.ts new file mode 100644 index 00000000..395d1e8f --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/SearchBar.ts @@ -0,0 +1,21 @@ +lib.searchBar = USER +lib.searchBar { + userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run + extensionName = EpProducts + pluginName = searchbar + vendorName = EP + controller = Search + action = searchbar + switchableControllerActions { + Search { + 1 = searchbar + } + } + settings =< plugin.tx_epproducts.settings + settings.searchPageUid < plugin.tx_epproducts.settings.defaultSearchPageUid + persistence =< plugin.tx_epproducts.persistence + view =< plugin.tx_epproducts.view +} + +lib.searchBarFixed < lib.searchBar +lib.searchBarFixed.settings.fixed = true diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/SearchBox.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/SearchBox.ts new file mode 100644 index 00000000..e73fe3b6 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/SearchBox.ts @@ -0,0 +1,18 @@ +lib.searchBox = USER +lib.searchBox { + userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run + extensionName = EpProducts + pluginName = searchbox + vendorName = EP + controller = Search + action = searchbox + switchableControllerActions { + Search { + 1 = searchbox + } + } + settings =< plugin.tx_epproducts.settings + settings.searchPageUid < plugin.tx_epproducts.settings.defaultSearchPageUid + persistence =< plugin.tx_epproducts.persistence + view =< plugin.tx_epproducts.view +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/SearchResult.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/SearchResult.ts new file mode 100644 index 00000000..332330a2 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/SearchResult.ts @@ -0,0 +1,18 @@ +lib.searchresult = USER +lib.searchresult { + userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run + extensionName = EpProducts + pluginName = searchresult + vendorName = EP + controller = Search + action = searchresult + switchableControllerActions { + Search { + 1 = searchresult + } + } + settings =< plugin.tx_epproducts.settings + settings.searchPageHeaderImage = {$plugin.tx_eptheme.settings.searchPageHeaderImage} + persistence =< plugin.tx_epproducts.persistence + view =< plugin.tx_epproducts.view +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/Sitemap.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/Sitemap.ts new file mode 100644 index 00000000..dacf0ce7 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Library/Sitemap.ts @@ -0,0 +1,136 @@ +lib.tue_sitemapcsv = COA_INT +lib.tue_sitemapcsv { + 5 = TEXT + 5 { + value ( +"URL";"Latest change";"Doktype";"Title";"Nav Title";"Description" + ) + } + 10 = COA + 10 { + 10 = TEXT + 10 { + typolink { + forceAbsoluteUrl = 1 + parameter.field = uid + returnLast = url + } + wrap = "|"; + replacement.10 { + search = " + replace = "" + } + } + 20 = CONTENT + 20 { + table = tt_content + select { + pidInList.field = uid + orderBy = tstamp DESC + languageField = sys_language_uid + max = 1 + } + renderObj = COA + renderObj { + 10 = TEXT + 10 { + field = tstamp + date = c + postCObject = TEXT + postCObject { + field = tstamp + age = " Minutes| Hours| Days| Years| Minute| Hour| Day| Year" + noTrimWrap = | (vor |)| + } + if { + value.field = tstamp + isLessThan.data = DB:pages:{field:uid}:tstamp + isLessThan.data.insertData = 1 + } + } + } + stdWrap { + ifEmpty.cObject < lib.tue_sitemapcsv.10.20.renderObj.10 + ifEmpty.cObject.if > + replacement < lib.tue_sitemapcsv.10.10.replacement + wrap < lib.tue_sitemapcsv.10.10.wrap + } + } + 30 = CASE + 30 { + key.field = doktype + 1 = TEXT + 1.value = Standard + 3 = TEXT + 3.value = External URL + 4 = TEXT + 4.value = Shortcut + 6 = TEXT + 6.value = Backend User Section + stdWrap { + replacement < lib.tue_sitemapcsv.10.10.replacement + wrap < lib.tue_sitemapcsv.10.10.wrap + } + } + 40 = TEXT + 40 { + field = title + replacement < lib.tue_sitemapcsv.10.10.replacement + wrap < lib.tue_sitemapcsv.10.10.wrap + } + 50 = TEXT + 50 { + field = nav_title + replacement < lib.tue_sitemapcsv.10.10.replacement + wrap < lib.tue_sitemapcsv.10.10.wrap + } + 60 = TEXT + 60 { + field = description + replacement < lib.tue_sitemapcsv.10.10.replacement + wrap < lib.tue_sitemapcsv.10.10.wrap + } + 100 = TEXT + 100 { + value ( + + + ) + } + } + 20 = HMENU + 20 { + includeNotInMenu = 1 + 1 = TMENU + 1 { + noBlur = 1 + expAll = 1 + NO { + doNotShowLink = 1 + allStdWrap.cObject < lib.tue_sitemapcsv.10 + } + } + 2 < .1 + 3 < .1 + 4 < .1 + 5 < .1 + 6 < .1 + } +} + +[globalVar = TSFE : beUserLogin > 0] + sitemapcsv = PAGE + sitemapcsv { + typeNum = 888 + config { + disableAllHeaderCode = 1 + xhtml_cleaning = 0 + admPanel = 0 + debug = 0 + no_cache = 1 + additionalHeaders = Content-type:text/csv;charset=utf-8|Content-Disposition:attachment; filename="sitemap.csv" + } + 10 < lib.tue_sitemapcsv + } +[global] + diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/Ajax.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/Ajax.ts new file mode 100644 index 00000000..2fe34e45 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/Ajax.ts @@ -0,0 +1,30 @@ +ajax_page_json = PAGE +ajax_page_json { + typeNum = 1803 + config { + disableAllHeaderCode = 1 + additionalHeaders.10.header = Content-type:application/json + xhtml_cleaning = 0 + admPanel = 0 + debug = 0 + no_cache = 1 + } + + 10 = USER_INT + 10 { + userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run + extensionName = EpTheme + pluginName = Ajax + vendorName = EP + controller = AjaxForm + action = processForm + switchableControllerActions { + AjaxForm { + 1 = processForm + } + } + settings =< plugin.tx_eptheme.settings + persistence =< plugin.tx_eptheme.persistence + view =< plugin.tx_eptheme.view + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/Main.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/Main.ts new file mode 100644 index 00000000..88da8448 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/Main.ts @@ -0,0 +1,120 @@ +page = PAGE +page { + meta { + viewport = width=device-width, initial-scale=1, maximum-scale=1 + X-UA-Compatible = ie=edge + } + + bodyTagCObject = TEXT + bodyTagCObject.stdWrap.wrap = + bodyTagCObject.stdWrap.field = tx_eptheme_bodyclass + bodyTagCObject.stdWrap.override = {$plugin.tx_eptheme.settings.defaultBodyclass} + bodyTagCObject.stdWrap.override.if.isFalse.field = tx_eptheme_bodyclass + + shortcutIcon = EXT:ep_theme/Resources/Public/images/favicon_ep.ico + + includeJSFooterlibs { + vendor = EXT:ep_theme/Resources/Public/js/vendor.min.js + gmaps = {$plugin.tx_eptheme.settings.googleMapsJsApiUrl} + gmaps.external = 1 + gmaps.async = 1 + gmaps.disableCompression = 1 + } + + includeJSFooter { + main = EXT:ep_theme/Resources/Public/js/main.min.js + main.async = 1 + } + + includeCSS { + main = EXT:ep_theme/Resources/Public/css/main.min.css + } + + 10 = FLUIDTEMPLATE + 10 { + file { + cObject = TEXT + cObject { + data = levelfield: -1, backend_layout_next_level, slide + override { + data = TSFE:page|backend_layout + } + + ifEmpty = Default + split { + token = pagets__ + 1.current = 1 + 1.wrap = | + } + + wrap = typo3conf/ext/ep_theme/Resources/Private/Templates/Page/|.html + case = ucfirst + } + } + + layoutRootPaths.0 = EXT:ep_theme/Resources/Private/Layouts/ + partialRootPaths.0 = EXT:ep_theme/Resources/Private/Partials/ + templateRootPaths.0 = EXT:ep_theme/Resources/Private/Templates/ + + dataProcessing { + 10 = EP\EpTheme\DataProcessing\ContextProcessor + 20 = EP\EpTheme\DataProcessing\SliderProcessor + 30 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor + 30 { + table = tx_epproducts_domain_model_badge + where.data = field:tx_eptheme_badge + where.wrap = uid=| + pidInList = {$plugin.tx_eptheme.settings.badgeStoragePid} + as = badge + if { + equals.field = backend_layout + value = pagets__detail + negate = 1 + } + } + } + + settings < plugin.tx_eptheme.settings + } + + headerData.999 = TEXT + headerData.999.value ( + + + + + ) + headerData.999.stdWrap.if.isTrue = {$plugin.tx_eptheme.settings.googleTagManagerId} +} + +[applicationContext = Development] + page.includeCSS.main.disableCompression = 1 +[end] diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/XMLSitemap.ts b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/XMLSitemap.ts new file mode 100644 index 00000000..cfa35964 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/Page/XMLSitemap.ts @@ -0,0 +1,83 @@ +xmlSitemap = PAGE +xmlSitemap { + typeNum = 1848 + config { + xhtml_cleaning = none + no_cache = 1 + disableAllHeaderCode = 1 + additionalHeaders = Content-Type: text/xml; charset=utf-8 + simulateStaticDocuments = 0 + tx_realurl_enable = 1 + } + + + wrap ( + + | + ) + + 10 = COA + 10 { + 10 = HMENU + 10 { + special = list + + # Ausgangspunkt / Root Seite + special.value = {$plugin.tx_eptheme.settings.xmlSitemapRootPageUid} + + excludeDoktypes = 2,3,5,6,7,199,254,255 + excludeUidList = {$plugin.tx_eptheme.settings.xmlSitemapExcludeUids} + includeNotInMenu = 1 + + 1 = TMENU + 1 { + expAll = 1 + NO { + doNotLinkIt = 1 + stdWrap { + cObject = COA + cObject { + wrap = | + 10 = TEXT + 10 { + typolink { + parameter.field = uid + returnLast = url + forceAbsoluteUrl = 1 + } + wrap = | + } + 20 = TEXT + 20 { + field = SYS_LASTCHANGED + strftime = %Y-%m-%dT%H:%M:%SZ + wrap = | + } + 30 = TEXT + 30.value = 1.0 + if.isFalse.field = shortcut + } + } + } + } + 2 < .1 + 2.NO.stdWrap.cObject.30.value = 0.9 + 3 < .1 + 3.NO.stdWrap.cObject.30.value = 0.8 + 4 < .1 + 4.NO.stdWrap.cObject.30.value = 0.7 + 5 < .1 + 5.NO.stdWrap.cObject.30.value = 0.6 + 6 < .1 + 6.NO.stdWrap.cObject.30.value = 0.5 + 7 < .6 + 8 < .6 + 9 < .6 + 10 < .6 + } + } +} diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/constants.txt b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/constants.txt new file mode 100644 index 00000000..c537c6b6 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/constants.txt @@ -0,0 +1,134 @@ +# customsubcategory=100=Social links +# customsubcategory=200=Navigations and page UIDs +# customsubcategory=300=Google related +# customsubcategory=400=Contact data +# customsubcategory=500=Template +# customsubcategory=600=XML Sitemap +# customsubcategory=700=Event dates +# customsubcategory=800=Badges + +plugin.tx_eptheme { + settings { + # cat=eptheme/200/100; type=string; label=Top navigation PID + topNavPid = + # cat=eptheme/200/110; type=string; label=Main navigation PID + mainNavPid = + # cat=eptheme/200/120; type=string; label=Footer navigation PID + footerNavPid = + # cat=eptheme/200/130; type=string; label=Default homepage UID + defaultHomeUid = + # cat=eptheme/200/140; type=string; label=Default page UID for ajax requests + defaultAjaxUid = + # cat=eptheme/200/150; type=string; label=Default contact form page UID + defaultContactFormPageUid = + # cat=eptheme/200/160; type=string; label=Legal notice page UID + legalNoticePageUid = + # cat=eptheme/200/170; type=string; label=Terms and conditions page UID + termsAndConditionsPageUid = + # cat=eptheme/200/180; type=string; label=Data protection page UID + dataProtectionPageUid = + # cat=eptheme/200/190; type=string; label=Cookie policy page UID + cookiePolicyPageUid = + # cat=eptheme/200/200; type=string; label=FAQ page UID + faqPageUid = + # cat=eptheme/200/210; type=string; label=Info page UID + infoPageUid = + # cat=eptheme/200/220; type=string; label=Groups page UID + groupsPageUid = + # cat=eptheme/200/225; type=string; label=Blog detail page UID + blogDetailPageUid = + # cat=eptheme/200/230; type=string; label=Blog tag list page UID + blogTagListPageUid = + # cat=eptheme/200/240; type=string; label=Groups contact form page UID + groupsContactFormPageUid = + + # cat=eptheme/400/100; type=string; label=Phone number general + phoneNumber = 0221 - 272 276 0 + # cat=eptheme/400/110; type=string; label=Phone number WhatsApp + whatsApp = 0221 - 272 276 0 + # cat=eptheme/400/100; type=string; label=Phone number general + phoneNumberLink = +492212722760 + # cat=eptheme/400/110; type=string; label=Phone number WhatsApp + whatsAppNumberLink = 492212722760 + # cat=eptheme/400/120; type=string; label=Business hours days + businessHoursDays = Montag - Freitag + # cat=eptheme/400/130; type=string; label=Business hours time + businessHoursTime = 08:30 bis 18:30 + # cat=eptheme/400/140; type=string; label=Contact form email to + contactFormToEmail = + # cat=eptheme/400/150; type=string; label=Contact form name to + contactFormToName = + + # cat=eptheme/100/100; type=string; label=Facebook URL + facebookUrl = + # cat=eptheme/100/120; type=string; label=Instagram URL + instagramUrl = + # cat=eptheme/100/130; type=string; label=Youtube URL + youtubeUrl = + + # cat=eptheme; type=string; label=Slider storage PID + sliderStoragePid = + # cat=eptheme; type=string; label=Teammember storage PID + teamMemberStoragePid = + + # cat=eptheme/500/100; type=string; label=Teasertext max characters + teaserTextMaxChars = 120 + # cat=eptheme/500/110; type=string; label=Default bodyclass + defaultBodyclass = subpage + # cat=eptheme/500/120; type=string; label=Logo image + logoImage = EXT:ep_theme/Resources/Public/images/logo_wide.svg + # cat=eptheme/500/130; type=string; label=Force active topnav uid + forceActiveTopnavUid = + # cat=eptheme/500/140; type=string; label=Booking URL template code + bpnBookingUrlTemplateCode = base + # cat=eptheme/500/150; type=string; label=Search page header image + searchPageHeaderImage = + + # cat=eptheme/800/100; type=boolean; label=Show 'skipass inklusive' badge + showSkipassBadge = 1 + # cat=eptheme/800/100; type=string; label=Custom badge storage PID + badgeStoragePid = + + # cat=eptheme/600/100; type=string; label=XML sitemap root page UID + xmlSitemapRootPageUid = + # cat=eptheme/600/110; type=string; label=XML sitemap page UIDs to exclude + xmlSitemapExcludeUids = + + # cat=eptheme/300/100; type=string; label=Google Tag Manager ID + googleTagManagerId = + # cat=eptheme/300/110; type=string; label=Google Static Maps Base Url + googleStaticMapsBaseUrl = https://maps.googleapis.com/maps/api/staticmap?key=AIzaSyDDOforD1O_j4xXy2nJybC2yQqbUAw9ClY + # cat=eptheme/300/120; type=string; label=Google Maps Js API Url + googleMapsJsApiUrl = https://maps.googleapis.com/maps/api/js?key=AIzaSyDDOforD1O_j4xXy2nJybC2yQqbUAw9ClY + + # cat=eptheme.events/700/100; type=string; label=Event date day from + eventDateDayFrom = + # cat=eptheme.events/700/110; type=string; label=Event date day to + eventDateDayTo = + # cat=eptheme.events/700/120; type=string; label=Event date month + eventDateMonth = + + # cat=eptheme.events; type=string; label=Event herounit claim + eventHeroClaim = + # cat=eptheme.events; type=string; label=Event herounit description + eventHeroDescription = + # cat=eptheme.events; type=string; label=Event disturber headline + eventDisturberHeadline = Absolut
Unschlagbarer
Preis + # cat=eptheme.events; type=string; label=Event disturber list items + eventDisturberListitems = 7 Übernachtungen in Top Apartments;6 Tage Skipass Val Thoerens;Ski & Boarderweek Event-Ticket + # cat=eptheme.events; type=string; label=Event disturber button label + eventDisturberButtonLabel = Jetzt ab 249€ buchen + # cat=eptheme.events; type=string; label=Event disturber button link + eventDisturberButtonLink = + # cat=eptheme.events; type=boolean; label=Force Partner ID selection + forcePartnerIdSelect = + # cat=eptheme.events; type=string; label=Partner ID selection label + partnerIdSelectLabel = + } +} + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Configuration/TypoScript/setup.txt b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/setup.txt new file mode 100644 index 00000000..1679c424 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Configuration/TypoScript/setup.txt @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +plugin.tx_eptheme { + settings < lib.fluidContent.settings + settings { + footerNavPid = {$plugin.tx_eptheme.settings.footerNavPid} + mainNavPid = {$plugin.tx_eptheme.settings.mainNavPid} + topNavPid = {$plugin.tx_eptheme.settings.topNavPid} + legalNoticePageUid = {$plugin.tx_eptheme.settings.legalNoticePageUid} + termsAndConditionsPageUid = {$plugin.tx_eptheme.settings.termsAndConditionsPageUid} + dataProtectionPageUid = {$plugin.tx_eptheme.settings.dataProtectionPageUid} + cookiePolicyPageUid = {$plugin.tx_eptheme.settings.cookiePolicyPageUid} + infoPageUid = {$plugin.tx_eptheme.settings.infoPageUid} + groupsPageUid = {$plugin.tx_eptheme.settings.groupsPageUid} + facebookUrl = {$plugin.tx_eptheme.settings.facebookUrl} + youtubeUrl = {$plugin.tx_eptheme.settings.youtubeUrl} + instagramUrl = {$plugin.tx_eptheme.settings.instagramUrl} + phoneNumber = {$plugin.tx_eptheme.settings.phoneNumber} + whatsApp = {$plugin.tx_eptheme.settings.whatsApp} + phoneNumberLink = {$plugin.tx_eptheme.settings.phoneNumberLink} + whatsAppNumberLink = {$plugin.tx_eptheme.settings.whatsAppNumberLink} + businessHoursDays = {$plugin.tx_eptheme.settings.businessHoursDays} + businessHoursTime = {$plugin.tx_eptheme.settings.businessHoursTime} + teaserTextMaxChars = {$plugin.tx_eptheme.settings.teaserTextMaxChars} + faqPageUid = {$plugin.tx_eptheme.settings.faqPageUid} + defaultHomeUid = {$plugin.tx_eptheme.settings.defaultHomeUid} + defaultAjaxUid = {$plugin.tx_eptheme.settings.defaultAjaxUid} + defaultContactFormPageUid = {$plugin.tx_eptheme.settings.defaultContactFormPageUid} + defaultSearchPageUid = {$plugin.tx_epproducts.settings.defaultSearchPageUid} + defaultDetailPageUid = {$plugin.tx_epproducts.settings.defaultDetailPageUid} + logoImage = {$plugin.tx_eptheme.settings.logoImage} + defaultTitle < sitetitle + forceActiveTopnavUid = {$plugin.tx_eptheme.settings.forceActiveTopnavUid} + eventDateDayFrom = {$plugin.tx_eptheme.settings.eventDateDayFrom} + eventDateDayTo = {$plugin.tx_eptheme.settings.eventDateDayTo} + eventDateMonth = {$plugin.tx_eptheme.settings.eventDateMonth} + eventHeroClaim = {$plugin.tx_eptheme.settings.eventHeroClaim} + eventHeroDescription = {$plugin.tx_eptheme.settings.eventHeroDescription} + eventDisturberHeadline = {$plugin.tx_eptheme.settings.eventDisturberHeadline} + eventDisturberListitems = {$plugin.tx_eptheme.settings.eventDisturberListitems} + eventDisturberButtonLabel = {$plugin.tx_eptheme.settings.eventDisturberButtonLabel} + eventDisturberButtonLink = {$plugin.tx_eptheme.settings.eventDisturberButtonLink} + googleTagManagerId = {$plugin.tx_eptheme.settings.googleTagManagerId} + bpnBookingUrlTemplateCode = {$plugin.tx_eptheme.settings.bpnBookingUrlTemplateCode} + googleStaticMapsBaseUrl = {$plugin.tx_eptheme.settings.googleStaticMapsBaseUrl} + googleMapsJsApiUrl = {$plugin.tx_eptheme.settings.googleMapsJsApiUrl} + datePickerPresets < plugin.tx_epproducts.settings.datePickerPresets + searchPageHeaderImage = {$plugin.tx_eptheme.settings.searchPageHeaderImage} + showSkipassBadge = {$plugin.tx_eptheme.settings.showSkipassBadge} + forcePartnerIdSelect = {$plugin.tx_eptheme.settings.forcePartnerIdSelect} + contactFormToEmail = {$plugin.tx_eptheme.settings.contactFormToEmail} + contactFormToName = {$plugin.tx_eptheme.settings.contactFormToName} + groupsContactFormPageUid = {$plugin.tx_eptheme.settings.groupsContactFormPageUid} + blogDetailPageUid = {$plugin.tx_eptheme.settings.blogDetailPageUid} + } + view { + templateRootPaths.0 = EXT:ep_theme/Resources/Private/Templates + partialRootPaths.0 = EXT:ep_theme/Resources/Private/Partials + layoutRootPaths.0 = EXT:ep_theme/Resources/Private/Layouts + } +} + +tt_content.stdWrap.innerWrap > +lib.stdheader.3.headerClass > + + + + + +config { + doctype = html5 + removeDefaultCSS = 1 + removePageCss = 1 + removeDefaultJS = 0 + disablePrefixComment = 1 + inlineStyle2TempFile = 0 + tx_realurl_enable = 1 + absRefPrefix = / + language = de + locale_all = de_DE.UTF-8 + sys_language_uid = 0 + htmlTag_langKey = de + compressJs = 1 + compressCss = 1 + typolinkCheckRootline = 1 + typolinkEnableLinksAcrossDomains = 1 +} diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/.htaccess b/web/typo3conf/ext/ep_theme/Resources/Private/.htaccess new file mode 100755 index 00000000..3418e55a --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/css/rte.css b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/css/rte.css new file mode 100644 index 00000000..cae3dd7f --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/css/rte.css @@ -0,0 +1,25 @@ +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; +} diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.eot b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.eot new file mode 100644 index 00000000..e8b79c34 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.eot differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.svg new file mode 100644 index 00000000..11b626f8 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.svg @@ -0,0 +1,435 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.ttf b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.ttf new file mode 100644 index 00000000..f326d26c Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.ttf differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.woff b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.woff new file mode 100644 index 00000000..ab45ab76 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.woff differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.woff2 b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.woff2 new file mode 100644 index 00000000..136337fd Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-300.woff2 differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.eot b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.eot new file mode 100644 index 00000000..9d8bfb61 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.eot differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.svg new file mode 100644 index 00000000..077653d2 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.svg @@ -0,0 +1,438 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.ttf b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.ttf new file mode 100644 index 00000000..eeea013c Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.ttf differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.woff b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.woff new file mode 100644 index 00000000..1d9d75bc Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.woff differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.woff2 b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.woff2 new file mode 100644 index 00000000..d88f1af8 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-700.woff2 differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.eot b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.eot new file mode 100644 index 00000000..264bb9eb Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.eot differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.svg new file mode 100644 index 00000000..775c5aed --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.svg @@ -0,0 +1,439 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.ttf b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.ttf new file mode 100644 index 00000000..0582f02f Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.ttf differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.woff b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.woff new file mode 100644 index 00000000..6f251d9e Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.woff differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.woff2 b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.woff2 new file mode 100644 index 00000000..a5abe367 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-900.woff2 differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.eot b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.eot new file mode 100644 index 00000000..2400e128 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.eot differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.svg new file mode 100644 index 00000000..55b43fb8 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.svg @@ -0,0 +1,435 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.ttf b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.ttf new file mode 100644 index 00000000..fa245a8a Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.ttf differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.woff b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.woff new file mode 100644 index 00000000..97ab144d Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.woff differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.woff2 b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.woff2 new file mode 100644 index 00000000..b14c76ca Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/fonts/lato-v14-latin-regular.woff2 differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/ajax-loader-blue.gif b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/ajax-loader-blue.gif new file mode 100644 index 00000000..748d53f2 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/ajax-loader-blue.gif differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/ajax-loader-white.gif b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/ajax-loader-white.gif new file mode 100644 index 00000000..a4163545 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/ajax-loader-white.gif differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/at.png b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/at.png new file mode 100755 index 00000000..3ad010b7 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/at.png differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/badge_skipass.png b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/badge_skipass.png new file mode 100644 index 00000000..1196b5c7 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/badge_skipass.png differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/ch.png b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/ch.png new file mode 100755 index 00000000..97c435c7 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/ch.png differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_bottom_1.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_bottom_1.svg new file mode 100644 index 00000000..2050381e --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_bottom_1.svg @@ -0,0 +1,11 @@ + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_bottom_3.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_bottom_3.svg new file mode 100644 index 00000000..ae12231b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_bottom_3.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_bottom_4.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_bottom_4.svg new file mode 100644 index 00000000..219af6fe --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_bottom_4.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_bottom_deal.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_bottom_deal.svg new file mode 100644 index 00000000..af8fc304 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_bottom_deal.svg @@ -0,0 +1,11 @@ + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_1.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_1.svg new file mode 100644 index 00000000..1dd724da --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_1.svg @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_2.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_2.svg new file mode 100644 index 00000000..6d704477 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_2.svg @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_3.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_3.svg new file mode 100644 index 00000000..0f004719 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_3.svg @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_4.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_4.svg new file mode 100644 index 00000000..1cb85bac --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_4.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_5.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_5.svg new file mode 100644 index 00000000..7d8a48b6 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_5.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_deal.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_deal.svg new file mode 100644 index 00000000..c8215acf --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_deal.svg @@ -0,0 +1,13 @@ + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_hilfe.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_hilfe.svg new file mode 100644 index 00000000..94aca0f2 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/corner/corner_top_hilfe.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/de.png b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/de.png new file mode 100644 index 00000000..4b06ae2e Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/de.png differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/favicon_ep.ico b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/favicon_ep.ico new file mode 100644 index 00000000..51a26264 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/favicon_ep.ico differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/favicon_sbw.ico b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/favicon_sbw.ico new file mode 100644 index 00000000..e8b01b64 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/favicon_sbw.ico differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/favicon_sz.ico b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/favicon_sz.ico new file mode 100644 index 00000000..37cd8a6b Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/favicon_sz.ico differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/favicon_uch.ico b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/favicon_uch.ico new file mode 100644 index 00000000..96a30c85 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/favicon_uch.ico differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/fr.png b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/fr.png new file mode 100755 index 00000000..884bb028 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/fr.png differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/header-sommer.jpg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/header-sommer.jpg new file mode 100644 index 00000000..4fec0ffc Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/header-sommer.jpg differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/header-winter.jpg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/header-winter.jpg new file mode 100644 index 00000000..91bd2ccd Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/header-winter.jpg differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_domain_model_lineup.gif b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_domain_model_lineup.gif new file mode 100644 index 00000000..e6c57ec8 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_domain_model_lineup.gif differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_domain_model_slide.gif b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_domain_model_slide.gif new file mode 100644 index 00000000..e6c57ec8 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_domain_model_slide.gif differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_half_and_two_quarters.png b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_half_and_two_quarters.png new file mode 100644 index 00000000..a29ebeea Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_half_and_two_quarters.png differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_halves.png b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_halves.png new file mode 100644 index 00000000..bfdaf3a1 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_halves.png differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_quarters.png b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_quarters.png new file mode 100644 index 00000000..037522a1 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_quarters.png differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_thirds.png b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_thirds.png new file mode 100644 index 00000000..f83afd38 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_thirds.png differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_two_quarters_and_half.png b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_two_quarters_and_half.png new file mode 100644 index 00000000..1cf69bc7 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/icons/tx_eptheme_gridelements_two_quarters_and_half.png differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/lazy.png b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/lazy.png new file mode 100644 index 00000000..c128acbb Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/lazy.png differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo.svg new file mode 100644 index 00000000..7800ad2f --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo_boarderweek.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo_boarderweek.svg new file mode 100644 index 00000000..64d35612 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo_boarderweek.svg @@ -0,0 +1,673 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo_snowzone.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo_snowzone.svg new file mode 100644 index 00000000..c693f6f7 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo_snowzone.svg @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo_uni_champ.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo_uni_champ.svg new file mode 100644 index 00000000..e3c02fb8 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo_uni_champ.svg @@ -0,0 +1,1951 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo_wide.svg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo_wide.svg new file mode 100644 index 00000000..28f23946 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/logo_wide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/low-poly.jpg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/low-poly.jpg new file mode 100644 index 00000000..dcf82cec Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/low-poly.jpg differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/polygon.jpg b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/polygon.jpg new file mode 100644 index 00000000..09f17383 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/images/polygon.jpg differ diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/app.js b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/app.js new file mode 100644 index 00000000..c01b91a5 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Assets/js/app.js @@ -0,0 +1,343 @@ +'use strict'; + +// Import dependencies +import Vue from 'vue' +import $ from 'jquery' +import moment from 'moment' +import fancybox from '@fancyapps/fancybox' + +require('slick-carousel'); +require('jquery-lazy'); +require('bootstrap/dist/js/bootstrap'); +require('picturefill'); +require('@fancyapps/fancybox/dist/jquery.fancybox.css'); + +// Import components +import EventBus from './bus' +import SearchBar from './components/SearchBar.vue' +import SearchBox from './components/SearchBox.vue' +import SearchResult from './components/SearchResult.vue' +import ProductDetail from './components/ProductDetail.vue' +import AjaxContent from './components/AjaxContent.vue' +import Gmap from './components/Gmap.vue' +import Calendar from './components/Calendar.vue' +import EventPricetable from './components/EventPriceTable.vue' +import ContactForm from './components/ContactForm.vue' + +// Define global constants +const $window = $(window); +const sliderPrevArrow = ''; +const sliderNextArrow = ''; +const sliderDot = ' + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Concept/Teaser.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Concept/Teaser.html new file mode 100644 index 00000000..a1c38772 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Concept/Teaser.html @@ -0,0 +1,22 @@ + + + + +
+ + +
{concept.name}
+
+
+
+ {concept.teaser -> f:format.crop(maxCharacters: settings.teaserTextMaxChars) -> f:format.html()} +
+ +
+
+ + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/ContactBar.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/ContactBar.html new file mode 100644 index 00000000..38a3ec1c --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/ContactBar.html @@ -0,0 +1,23 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/ContentSlider.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/ContentSlider.html new file mode 100644 index 00000000..4e42657b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/ContentSlider.html @@ -0,0 +1,21 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +
+ + + + + + +
diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/ConversionTracking.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/ConversionTracking.html new file mode 100644 index 00000000..15a08e18 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/ConversionTracking.html @@ -0,0 +1,39 @@ + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/CookieConsent.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/CookieConsent.html new file mode 100644 index 00000000..395bd235 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/CookieConsent.html @@ -0,0 +1,22 @@ + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Disturber/Large.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Disturber/Large.html new file mode 100644 index 00000000..0ac7f06b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Disturber/Large.html @@ -0,0 +1,47 @@ + + + +
+
+
+
+
+ + + {teaserImage.alternative} + + + + + +
+
Ihr habt Fragen?
Wir helfen euch gerne!
+ {settings.phoneNumber} +
+
+
+
+ {data.subheader} +
{data.header}
+ {data.bodytext -> f:format.html()} +
+ +
+ + +
{button.container.label}
+
+
+
+
+
+
+
+
+
+
+ + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Disturber/LastChance.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Disturber/LastChance.html new file mode 100644 index 00000000..29ba5859 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Disturber/LastChance.html @@ -0,0 +1,17 @@ + + + +
+
{data.header}
+
{data.bodytext -> f:format.html()}
+
+ {data.flexForm.buttons -> v:iterator.first() -> v:variable.set(name: 'button')} + {button.container.label -> f:format.raw()} +
+
+
+ + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Disturber/Reminder.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Disturber/Reminder.html new file mode 100644 index 00000000..6e527dd5 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Disturber/Reminder.html @@ -0,0 +1,29 @@ + + + + {data.flexForm.buttons -> v:iterator.first() -> v:variable.set(name: 'button')} +
+
{data.header}
+ +
+
{data.bodytext -> f:format.html()}
+
+ {button.container.label -> f:format.raw()} +
+
+ + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Disturber/Small.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Disturber/Small.html new file mode 100644 index 00000000..dd155270 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Disturber/Small.html @@ -0,0 +1,39 @@ + + + +
+
+
+
+
+ + + {teaserImage.alternative} + + + + + +
+
+ {data.header} + {data.bodytext -> f:format.html()} +
+
+ + +
{button.container.label}
+
+
+
+
+
+
+
+
+
+ + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/EventDisturber.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/EventDisturber.html new file mode 100644 index 00000000..7c42b632 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/EventDisturber.html @@ -0,0 +1,16 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +
+
+
{headline -> f:format.raw()}
+
+
    + +
  • {listItem -> f:format.raw()}
  • +
    +
+
+
+
diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/EventHero.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/EventHero.html new file mode 100644 index 00000000..49151502 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/EventHero.html @@ -0,0 +1,52 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +
+ + + + +
+ + + + + + +
+ {badgeData.title -> f:format.raw()} + {badgeData.subtitle -> f:format.raw()} +
+
+
+
+
+ + + {settings.eventAddon.title} + + +
diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/FacebookPixelCode.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/FacebookPixelCode.html new file mode 100644 index 00000000..1f61d8d5 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/FacebookPixelCode.html @@ -0,0 +1,12 @@ + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Facts.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Facts.html new file mode 100644 index 00000000..3aa40467 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Facts.html @@ -0,0 +1,12 @@ + +
+

Facts

+
+
    + +
  • {fact.name}
  • +
    +
+
+
+
diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Faq.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Faq.html new file mode 100644 index 00000000..2efab8e3 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Faq.html @@ -0,0 +1,28 @@ + +
+
+
+
+
+ Häufig gestellte Fragen +
+ +
+ {faq.question} +
{faq.answer -> f:format.html()}
+
+
+
+ + + +
+
+
+
+
+
diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Footer.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Footer.html new file mode 100644 index 00000000..4eda08f8 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Footer.html @@ -0,0 +1,85 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/ContainerElements/Checkboxgroup.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/ContainerElements/Checkboxgroup.html new file mode 100644 index 00000000..98bb4816 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/ContainerElements/Checkboxgroup.html @@ -0,0 +1,23 @@ + + +
+ {htmAttributeKey}="{htmAttributeValue}" + + > + + + {model.additionalArguments.legend} + + + + + +
+
+ + + + + +
diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/ContainerElements/Fieldset.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/ContainerElements/Fieldset.html new file mode 100644 index 00000000..8921d4f5 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/ContainerElements/Fieldset.html @@ -0,0 +1,25 @@ + + +
  • +
    + {htmAttributeKey}="{htmAttributeValue}" + + > + + {model.additionalArguments.legend} + +
      + + + +
    +
    +
  • +
    + + + + + +
    \ No newline at end of file diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/ContainerElements/Form.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/ContainerElements/Form.html new file mode 100644 index 00000000..7e6b0346 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/ContainerElements/Form.html @@ -0,0 +1,32 @@ + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/ContainerElements/Radiogroup.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/ContainerElements/Radiogroup.html new file mode 100644 index 00000000..df241bc1 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/ContainerElements/Radiogroup.html @@ -0,0 +1,29 @@ + + +
    + {htmAttributeKey}="{htmAttributeValue}" + + > + + + {model.additionalArguments.legend} + + {mandatoryValidationMessage} - + + + {errorValidationMessage} - + + + + + + +
    +
    + + + + + +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Checkbox.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Checkbox.html new file mode 100644 index 00000000..75af4e84 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Checkbox.html @@ -0,0 +1,52 @@ + +
    + +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Header.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Header.html new file mode 100644 index 00000000..c63954e5 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Header.html @@ -0,0 +1,3 @@ + + <{model.additionalArguments.headingSize}>{model.additionalArguments.content} + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Radio.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Radio.html new file mode 100644 index 00000000..ba018afe --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Radio.html @@ -0,0 +1,23 @@ + +
    + +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/RadioField.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/RadioField.html new file mode 100644 index 00000000..52a6ba76 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/RadioField.html @@ -0,0 +1,20 @@ +
    + +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Select.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Select.html new file mode 100644 index 00000000..d71a0cad --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Select.html @@ -0,0 +1,30 @@ +{namespace form=TYPO3\CMS\Form\ViewHelpers} + + +
    + + +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Submit.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Submit.html new file mode 100644 index 00000000..c0fa02b3 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Submit.html @@ -0,0 +1,14 @@ + +
    + +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Textarea.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Textarea.html new file mode 100644 index 00000000..d2927da9 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Textarea.html @@ -0,0 +1,33 @@ + +
    + + + + +
    {mandatoryValidationMessage} -
    +
    + + {errorValidationMessage} - + +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Textblock.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Textblock.html new file mode 100644 index 00000000..539a7f46 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Textblock.html @@ -0,0 +1,5 @@ + +
    +
    {model.additionalArguments.text}
    +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Textfield.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Textfield.html new file mode 100644 index 00000000..9cf03968 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Textfield.html @@ -0,0 +1,34 @@ + +
    + + + + +
    {mandatoryValidationMessage} -
    +
    + + {errorValidationMessage} - + +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Upload.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Upload.html new file mode 100644 index 00000000..9b3000e4 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Form/Default/Show/FlatElements/Upload.html @@ -0,0 +1,20 @@ + +
    + + + +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/GoogleTagManager.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/GoogleTagManager.html new file mode 100644 index 00000000..ceb90847 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/GoogleTagManager.html @@ -0,0 +1,5 @@ + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Header/Header.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Header/Header.html new file mode 100644 index 00000000..79807b70 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Header/Header.html @@ -0,0 +1,48 @@ + + + + + +

    {header -> f:format.raw()}

    +
    + +

    {header -> f:format.raw()}

    +
    + +

    {header -> f:format.raw()}

    +
    + +

    {header -> f:format.raw()}

    +
    + +
    {header -> f:format.raw()}
    +
    + +

    {header -> f:format.raw()}

    +
    + +

    {header -> f:format.raw()}

    +
    + +

    {subheader -> f:format.raw()}
    {header -> f:format.raw()}

    +
    + +

    {subheader -> f:format.raw()}
    {header -> f:format.raw()}

    +
    + + -- do not show header -- + + + + + + +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/HeaderSlider.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/HeaderSlider.html new file mode 100644 index 00000000..dae6c6f0 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/HeaderSlider.html @@ -0,0 +1,50 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +
    +
    + +
    +
    +
    +
    +
    +
    + {slide.headline} + {slide.subline} + + {slide.button} + +
    + + {slide.button} + +
    +
    + + + + + + +
    + + + + + + +
    + {badgeData.title -> f:format.raw()} + {badgeData.subtitle -> f:format.raw()} +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/HeaderSliderSmall.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/HeaderSliderSmall.html new file mode 100644 index 00000000..cf318f0e --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/HeaderSliderSmall.html @@ -0,0 +1,50 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +{slides -> v:iterator.first() -> v:variable.set(name: 'slide')} +
    +
    +
    +
    +
    +
    +
    + {slide.headline}
    {slide.subline} +
    + + {slide.button} + +
    +
    + + {slide.button} + +
    +
    + + + + + + +
    + + + + + + +
    + {badgeData.title -> f:format.raw()} + {badgeData.subtitle -> f:format.raw()} +
    +
    +
    +
    +
    + +
    {slide.image.0.description -> f:format.htmlspecialchars()}
    +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/Details.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/Details.html new file mode 100644 index 00000000..ebefaca6 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/Details.html @@ -0,0 +1,62 @@ +{namespace ep=EP\EpTheme\ViewHelpers} + +
    {hotel.name -> f:format.raw()}
    +

    {hotel.name -> f:format.raw()}

    +
    +
    + {hotel.description -> f:format.html()} +
    + + + +
    +
    + +
    + +
    +
    +
    +
    + +

    Alle anzeigen

    +
    +
    +
    + +
    +

    Gerade noch kein Angebot buchbar? Dann frag doch schon mal an: hier geht es zum Kontaktformular.

    +
    +
    + + + + +
    Ausstattung
    +

    Ausstattung

    +
    +
    + {hotel.features -> f:format.html()} +
    + +
    Zimmerarten / Apartments
    +

    Zimmerarten / Apartments

    +
    +
    + {hotel.roomTypes -> f:format.html()} +
    + + +
    Zusatzinformationen
    +

    Zusatzinformationen

    +
    +
    + {hotel.additionalInformation -> f:format.html()} +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/Teaser.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/Teaser.html new file mode 100644 index 00000000..e5bc830a --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/Teaser.html @@ -0,0 +1,29 @@ + + + + +
    + {country: hotel.country.name} + +
    +
    + {hotel.name -> f:format.nl2br()} + + Kategorie {hotel.category} + +
    + {hotel.teaser -> f:format.crop(maxCharacters: settings.teaserTextMaxChars) -> f:format.html()} +
    + {f:if(condition: '{hotel.available} > 0', then: 'ab {hotel.minPrice} €', else: 'ausgebucht')} +
    + +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/TeaserExtended.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/TeaserExtended.html new file mode 100644 index 00000000..e5bc830a --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/TeaserExtended.html @@ -0,0 +1,29 @@ + + + + +
    + {country: hotel.country.name} + +
    +
    + {hotel.name -> f:format.nl2br()} + + Kategorie {hotel.category} + +
    + {hotel.teaser -> f:format.crop(maxCharacters: settings.teaserTextMaxChars) -> f:format.html()} +
    + {f:if(condition: '{hotel.available} > 0', then: 'ab {hotel.minPrice} €', else: 'ausgebucht')} +
    + +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/TeaserSimple.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/TeaserSimple.html new file mode 100644 index 00000000..cbd4d5e3 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/TeaserSimple.html @@ -0,0 +1,27 @@ + + + + +
    + {country: hotel.country.name} + +
    +
    + {hotel.name -> f:format.nl2br()} + + Kategorie {hotel.category} + +
    + {hotel.teaser -> f:format.crop(maxCharacters: settings.teaserTextMaxChars) -> f:format.html()} +
    + +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/TeaserWide.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/TeaserWide.html new file mode 100644 index 00000000..4dd7c687 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Hotel/TeaserWide.html @@ -0,0 +1,180 @@ + + + + + +
    +
    + {product.country.name} + + + + +
    {product.concept.name}
    +
    +
    +
    +
    +

    + {product.region.name} | {product.name} +

    +

    {item.hotel.name -> f:format.nl2br()}

    + + Kategorie {item.hotel.category} + +
    + + +
      + +
    • {item.hotel.fact}
    • +
      + +
    • {item.product.fact}
    • +
      + + +
    • {product.region.feature}
    • +
      + + +
    • {item.region.fact}
    • +
      +
      +
      +
    +
      +
    • Skipass
    • + +
    • {item.board}
    • +
      + +
    • {product.feature}
    • +
      +
    +
    + + {item.hotel.teaser -> f:format.html()} + +
    +
    +
    + + +
    + {f:if(condition: '{item.dates -> f:count()} > 1', then: 'Zeitraum', else: 'Termin')} + {ep:dateRange(dateFrom: item.minDateStart, dateTo: item.maxDateEnd, includeLabel: 0)} + + + + {item.dates -> f:count()} Termin{f:if(condition: '{item.dates -> f:count()} > 1', then: 'e')} + + + +
    + {ep:nightsOptions(options: item.nights)} +
    +
    + ab {item.minPrice} € + Details & Buchen +
    +
    + +
     
    +
    + ausgebucht + Details +
    +
    +
    +
    +
    +
    + + + + + + + + + + {image.alternative} + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Mainnav.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Mainnav.html new file mode 100644 index 00000000..7edb84cc --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Mainnav.html @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
  • {subsubitem.title}
  • +
    + +
  • {subsubitem.title}
  • +
    +
    +
    +
    +
    + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Menu/Type-0.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Menu/Type-0.html new file mode 100644 index 00000000..43f2fff9 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Menu/Type-0.html @@ -0,0 +1,17 @@ + + + +
      + +
    • + {page.title} +
    • +
      +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Menu/Type-1.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Menu/Type-1.html new file mode 100644 index 00000000..8fe7c169 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Menu/Type-1.html @@ -0,0 +1,17 @@ + + + +
      + +
    • + {page.title} +
    • +
      +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Menu/Type-3.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Menu/Type-3.html new file mode 100644 index 00000000..a8e646ec --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Menu/Type-3.html @@ -0,0 +1,21 @@ + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/News/Detail/MediaContainer.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/News/Detail/MediaContainer.html new file mode 100644 index 00000000..5556d7a4 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/News/Detail/MediaContainer.html @@ -0,0 +1,31 @@ + + + + +
    + + + + +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/News/List/Item.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/News/List/Item.html new file mode 100644 index 00000000..b2314069 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/News/List/Item.html @@ -0,0 +1,67 @@ + + +
    + +
    + + + + + + + + + + + + + + + + + + + +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Officetip.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Officetip.html new file mode 100644 index 00000000..6bac9694 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Officetip.html @@ -0,0 +1,20 @@ + +
    +
    +
    + + + + + + {officetip.author.name} + + +
    +
    +

    {officetip.text -> f:format.nl2br()}

    + {officetip.author.name} +
    +
    +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Pricetable.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Pricetable.html new file mode 100644 index 00000000..d41f9717 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Pricetable.html @@ -0,0 +1,115 @@ + + + + + +

    Dieses Angebot ist zur Zeit nicht buchbar.

    +
    + +
    + + + + + + + + + + + + + + + + + +
    ZimmertypPreis/Pers.inkl.
    + {row.roomName} + + + + + {row.roomPrice} € + + + {row.roomPrice} € + + + + + + + + + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + +
    {v:variable.get(name: 'sectionLabels.{serviceKey}')}
    {service.label}{service.price}€
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/Details.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/Details.html new file mode 100644 index 00000000..b4210ec3 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/Details.html @@ -0,0 +1,33 @@ +
    Konzept
    +
    + {product.conceptDescription -> f:format.html()} + +

    + + Direkt zum Anfrageformular + +

    +
    +
    +
    Verpflegung
    +
    + {product.boardDescription -> f:format.html()} +
    + +
    Zusatzleistungen
    +
    + {product.additionalServices -> f:format.html()} +
    +
    + +
    Programm
    +
    + {product.programmeDescription -> f:format.html()} +
    +
    + +
    Skipass
    +
    + {product.skipassDescription -> f:format.html()} +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/HeaderDetail.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/HeaderDetail.html new file mode 100644 index 00000000..72189575 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/HeaderDetail.html @@ -0,0 +1,74 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +{namespace ep=EP\EpTheme\ViewHelpers} +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + + {product.concept.name} +
    +
    + {product.name}{f:if(condition: product.subline, then: ' {product.subline}')} + {product.region.name} +
    + + + + + + + + + + + inkl. Skipass + + + +
    + + + + + + +
    + {product.badge.title -> f:format.raw()} + {product.badge.subtitle -> f:format.raw()} +
    +
    +
    +
    +
    + + + + {v:render.template(file: 'EXT:ep_theme/Resources/Private/Partials/Breadcrumb.html')} +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/Teaser.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/Teaser.html new file mode 100644 index 00000000..8cdaf91f --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/Teaser.html @@ -0,0 +1,92 @@ + + + +
    + + + + + + + + + + + + +
    +
    + + +
    +
    + {teaser.country.name} + +
    + +
    {teaser.concept.name}
    +
    +
    +
    +
    + + + {teaser.product.name -> f:format.nl2br()} + {teaser.region.name} + + + {teaser.region.name} + {teaser.product.name -> f:format.nl2br()}{f:if(condition: teaser.product.subline, then: '
    {teaser.product.subline}')}
    +
    +
    +
    +
    + + {ep:dateRange(dateFrom: teaser.minDateStart, dateTo: teaser.maxDateEnd, includeLabel: 0, format: 'd.m.y')} ({teaser.dates -> f:count()} Termine)
    + {ep:nightsOptions(options: teaser.nights)}, inkl. Skipass +
    +
    + +
    +
    +
    +
    +
    + {teaser.product.teaser -> f:format.html()} +
    + +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/TeaserWide.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/TeaserWide.html new file mode 100644 index 00000000..7143e44b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/TeaserWide.html @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + +
    +
    + {teaser.country.name} + + + + +
    {teaser.concept.name}
    +
    +
    +
    +
    + + {teaser.region.name} | {teaser.product.name} + + + {teaser.hotel.name} + + Kategorie {teaser.hotel.category} + + +
    +
      + + +
    • {teaser.hotel.fact}
    • +
      +
      + +
    • {teaser.product.fact}
    • +
      + + +
    • {teaser.region.feature}
    • +
      + + +
    • {teaser.region.fact}
    • +
      +
      +
      +
    +
      +
    • Skipass
    • + +
    • {teaser.board}
    • +
      + +
    • {teaser.product.feature}
    • +
      +
    +
    +
    +
    + {f:if(condition: '{teaser.dates -> f:count()} > 1', then: 'Zeitraum', else: 'Termin')} + {ep:dateRange(dateFrom: teaser.minDateStart, dateTo: teaser.maxDateEnd, includeLabel: 0)} + + + + {teaser.dates -> f:count()} Termin{f:if(condition: '{teaser.dates -> f:count()} > 1', then: 'e')} + + + +
    + {ep:nightsOptions(options: teaser.nights)} +
    +
    + ab {teaser.minPrice} €{f:if(condition: teaser.pseudoPrice, then: ' {teaser.pseudoPrice} €')} + Details & Buchen +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + {image.alternative} + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Rating.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Rating.html new file mode 100644 index 00000000..1ae653db --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Rating.html @@ -0,0 +1,9 @@ +{namespace ep=EP\EpTheme\ViewHelpers} + +
    +

    Bewertung

    +
    + +
    +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Region/Details.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Region/Details.html new file mode 100644 index 00000000..878b5956 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Region/Details.html @@ -0,0 +1,56 @@ +{namespace ep=EP\EpTheme\ViewHelpers} + +
    {region.name -> f:format.raw()}
    +

    Skiurlaub im
    Skigebiet {region.name -> f:format.raw()}

    +
    +
    + {region.skiArea -> f:format.html()} + + +
    +
    + +
    + +
    +
    +
    +
    + +

    Alle anzeigen

    +
    +
    + {region.skiAreaExtended -> f:format.html()} +
    + + + + +
    {f:if(condition: '{region.season} == "w"', then: 'Skipass', else: 'Highlights')}
    +

    {f:if(condition: '{region.season} == "w"', then: 'Skipass', else: 'Highlights')}

    +
    + +
    + {region.skiPass -> f:format.html()} +
    +
    + +
    + {region.description -> f:format.html()} +
    +
    + + +
    Aktuell
    +

    Aktuell

    +
    +
    + {region.news -> f:format.html()} +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Region/Teaser.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Region/Teaser.html new file mode 100644 index 00000000..08a818fe --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Region/Teaser.html @@ -0,0 +1,24 @@ + + + + +
    + {region.country.name} + +
    +
    + {region.name} +
    + {region.teaser -> f:format.crop(maxCharacters: settings.teaserTextMaxChars) -> f:format.html()} +
    + +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/RegionAward.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/RegionAward.html new file mode 100644 index 00000000..23d78cda --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/RegionAward.html @@ -0,0 +1,18 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} + +
    +

    {region.awardLabel -> v:or(alternative: 'Auszeichnung')}

    +
    + + + +
    +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/RegionMaps.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/RegionMaps.html new file mode 100644 index 00000000..c89487ef --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/RegionMaps.html @@ -0,0 +1,22 @@ + +
    +

    Pistenplan

    +
    + + + {regionMap.alternative} + + +
    +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Regioninfo.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Regioninfo.html new file mode 100644 index 00000000..e6972545 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Regioninfo.html @@ -0,0 +1,12 @@ +
    +

    Gebietsinfo

    +
    +
      +
    • Pisten: {region.length}
    • +
    • Höhe: {region.height}
    • + +
    • Lifte: {region.lifts}
    • +
      +
    +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Snowreport.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Snowreport.html new file mode 100644 index 00000000..263bf76f --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Snowreport.html @@ -0,0 +1,12 @@ + +
    +

    Schneehöhe aktuell

    +
    +
      +
    • Tal: {snowreport.snowLevelValley}cm
    • +
    • Berg: {snowreport.snowLevelMountain}cm
    • +
    +

    Letzter Schneefall am {snowreport.lastSnowFall -> f:format.date(format: 'd.m.Y')}

    +
    +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/SocialMedia/Feed/Provider-facebook.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/SocialMedia/Feed/Provider-facebook.html new file mode 100644 index 00000000..f6f67275 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/SocialMedia/Feed/Provider-facebook.html @@ -0,0 +1,41 @@ + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/SocialMedia/Feed/Provider-instagram.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/SocialMedia/Feed/Provider-instagram.html new file mode 100644 index 00000000..6eaf6005 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/SocialMedia/Feed/Provider-instagram.html @@ -0,0 +1,9 @@ + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/SubpageHeader.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/SubpageHeader.html new file mode 100644 index 00000000..91b6f91c --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/SubpageHeader.html @@ -0,0 +1,44 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +{images -> v:iterator.first() -> v:variable.set(name: 'headerImage')} +
    + +
    +
    +
    +
    +
    +
    +
    {topline}
    {headline}
    +
    +
    +
    +
    + + + + +
    {headerImage.description -> f:format.htmlspecialchars()}
    +
    + + + +
    + + + + + + +
    + {badgeData.title -> f:format.raw()} + {badgeData.subtitle -> f:format.raw()} +
    +
    +
    +
    +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Teamer.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Teamer.html new file mode 100644 index 00000000..cef7c8bf --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Teamer.html @@ -0,0 +1,18 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} + + {teamer -> v:iterator.first() -> v:variable.set(name: 'teamerInCharge')} +
    +

    Teamer vor Ort

    +
    + + + + + + {teamerInCharge.name} + + +
    +

    {teamerInCharge.name}

    +
    +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Teaser/OneColumn.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Teaser/OneColumn.html new file mode 100644 index 00000000..16bf000b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Teaser/OneColumn.html @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + +
    + + + + +
    +
    + {data.header -> f:format.nl2br()}{f:if(condition: data.subheader, then: '
    {data.subheader}')}
    +
    + {data.bodytext -> f:format.html()} +
    + +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Teaser/TwoColumn.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Teaser/TwoColumn.html new file mode 100644 index 00000000..10d25fcf --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Teaser/TwoColumn.html @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + {data.header -> f:format.nl2br()}{f:if(condition: data.subheader, then: '
    {data.subheader}')}
    +
    + {data.bodytext -> f:format.html()} +
    + +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/TeaserImage.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/TeaserImage.html new file mode 100644 index 00000000..f3575f55 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/TeaserImage.html @@ -0,0 +1,58 @@ + + + + + + + + + {image.alternative} + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/TeaserWideImage.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/TeaserWideImage.html new file mode 100644 index 00000000..2eab4a08 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/TeaserWideImage.html @@ -0,0 +1,29 @@ + + + + + + + + {image.alternative} + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Textmedia/Default.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Textmedia/Default.html new file mode 100644 index 00000000..3c39e950 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Textmedia/Default.html @@ -0,0 +1,20 @@ + + + + + {data.bodytext -> f:format.html()} + + + {files.0.originalResource.alternative} + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Textmedia/LinkPanel.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Textmedia/LinkPanel.html new file mode 100644 index 00000000..f33a0485 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Textmedia/LinkPanel.html @@ -0,0 +1,70 @@ + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    + + {images.0.title -> f:format.raw()} + +
    +
    + +
    + + {images.1.title -> f:format.raw()} + +
    +
    +
    + +
    + + {images.2.title -> f:format.raw()} + +
    +
    +
    + +
    + + {images.3.title -> f:format.raw()} + +
    +
    +
    +
    + +
    + + {images.4.title -> f:format.raw()} + +
    +
    + +
    + + {images.5.title -> f:format.raw()} + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Textmedia/Partnerlogos.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Textmedia/Partnerlogos.html new file mode 100644 index 00000000..915e6ec0 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Textmedia/Partnerlogos.html @@ -0,0 +1,32 @@ + + + +
    + +
    + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Topnav.html b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Topnav.html new file mode 100644 index 00000000..aae7b27b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Partials/Topnav.html @@ -0,0 +1,18 @@ +{namespace v=FluidTYPO3\Vhs\ViewHelpers} +{namespace ep=EP\EpTheme\ViewHelpers} + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxCalendar/Range.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxCalendar/Range.html new file mode 100644 index 00000000..a1ff061d --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxCalendar/Range.html @@ -0,0 +1,43 @@ + + + + + +
    + + + + +
    +
    + + + + +
    +

    {month.begin -> f:format.date(format: '%B')} {month.begin -> f:format.date(format: '%Y')}

    +
    + + + + + + + + + + + + + +
    {weekday}
    +
    +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/City.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/City.html new file mode 100644 index 00000000..f7d7d2fa --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/City.html @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/Hotel.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/Hotel.html new file mode 100644 index 00000000..3814937a --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/Hotel.html @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/Journey.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/Journey.html new file mode 100644 index 00000000..ad2fadb4 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/Journey.html @@ -0,0 +1,22 @@ + + + + + +
    Anreise
    +

    Eigenanreise

    + {journey.byCar -> f:format.html()} + + {journey.image.alternative} + + +

    Busanreise

    + {journey.byBus -> f:format.html()} +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/Region.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/Region.html new file mode 100644 index 00000000..7f9c7a83 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/Region.html @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/Webcam.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/Webcam.html new file mode 100644 index 00000000..0b8da8db --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxContent/Webcam.html @@ -0,0 +1,23 @@ + + + + + + +
    +

    Webcam

    +
    + + + +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxSearch/Searchresult.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxSearch/Searchresult.html new file mode 100644 index 00000000..d48eb372 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxSearch/Searchresult.html @@ -0,0 +1,175 @@ + + + + + + + + +

    {section.concept.name}

    +
    + + + +
    +
    +
    + + +
    +
    + {item.country.name} + + + + +
    {section.concept.name}
    +
    +
    +
    +
    + + {item.region.name}
    {item.product.name}
    +
    + {item.hotel.name} + + Kategorie {item.hotel.category} + +
    +
      + +
    • {item.hotel.fact}
    • +
      + +
    • {item.product.fact}
    • +
      + + +
    • {item.region.feature}
    • +
      + + +
    • {item.region.fact}
    • +
      +
      +
      +
    +
      +
    • Skipass
    • + +
    • {item.board}
    • +
      + +
    • {item.product.feature}
    • +
      +
    +
    +
    +
    + {f:if(condition: '{item.dates -> f:count()} > 1', then: 'Zeitraum', else: 'Termin')} + {ep:dateRange(dateFrom: item.minDateStart, dateTo: item.maxDateEnd, includeLabel: 0)} + + + + {item.dates -> f:count()} Termin{f:if(condition: '{item.dates -> f:count()} > 1', then: 'e')} + + + +
    + {ep:nightsOptions(options: item.nights)} +
    +
    + ab {item.minPrice} € + Details & Buchen +
    +
    +
    +
    + + + + + + + + + + {image.alternative} + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxTable/EventPricetable.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxTable/EventPricetable.html new file mode 100644 index 00000000..0b65914b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxTable/EventPricetable.html @@ -0,0 +1,49 @@ + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    {type}
    {category}
    {row.hotelTitle -> v:or(alternative: row.hotelName)} + + + {v:variable.get(name: 'row.rooms.{type}.price', useRawKeys: 1)} + + + + {v:variable.get(name: 'row.rooms.{type}.price', useRawKeys: 1)} + + + +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxTable/PricetableHtml.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxTable/PricetableHtml.html new file mode 100644 index 00000000..de2c8b08 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/AjaxTable/PricetableHtml.html @@ -0,0 +1,12 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/City/Detail.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/City/Detail.html new file mode 100644 index 00000000..e4159103 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/City/Detail.html @@ -0,0 +1,43 @@ + + + + + + + +
    + + + +
    +
    + +
    +
    +
    +
    + +
    +
    + + + + + + + + +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/City/Teasergroup.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/City/Teasergroup.html new file mode 100644 index 00000000..e2e75fc0 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/City/Teasergroup.html @@ -0,0 +1,17 @@ + + + + + + +
    + +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Concept/Detail.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Concept/Detail.html new file mode 100644 index 00000000..b97d1cf9 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Concept/Detail.html @@ -0,0 +1,61 @@ + + + + + + + +
    + + + +
    +
    + +
    +
    +
    +
    + {concept.description -> f:format.html()} + + +
    +
    + +
    + +
    +
    +
    +
    + +

    Alle anzeigen

    +
    +
    + {concept.descriptionExtended -> f:format.html()} +
    + +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Concept/Teasergroup.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Concept/Teasergroup.html new file mode 100644 index 00000000..92b23b68 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Concept/Teasergroup.html @@ -0,0 +1,17 @@ + + + + + + +
    + +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Country/Detail.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Country/Detail.html new file mode 100644 index 00000000..a566a07d --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Country/Detail.html @@ -0,0 +1,64 @@ + + + + + + + +
    + + + +
    +
    + +
    +
    +
    +
    + {country.description -> f:format.html()} + + +
    +
    + +
    + +
    +
    +
    +
    + +

    Alle anzeigen

    +
    +
    + {country.descriptionExtended -> f:format.html()} + + + +
    + +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Email/ContactForm.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Email/ContactForm.html new file mode 100644 index 00000000..1ef02107 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Email/ContactForm.html @@ -0,0 +1,57 @@ +
    + + + + +

    Anfrage E&P Reisen vom

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Seite{contactForm.pageUrl}
    Name{contactForm.name}
    Firma/Verein{contactForm.company -> v:or(alternative: 'Keine Angabe')}
    E-Mail{contactForm.email}
    Telefon{contactForm.phone}
    Zeitraum{contactForm.period -> v:or(alternative: 'Keine Angabe')}
    Aufenthaltsdauer{contactForm.duration -> v:or(alternative: 'Keine Angabe')}
    Anzahl der Personen{contactForm.pax -> v:or(alternative: 'Keine Angabe')}
    Durchschnittsalter{contactForm.age -> v:or(alternative: 'Keine Angabe')}
    Kinder{contactForm.children -> v:or(alternative: 'Nein')}
    Anfrage/Wunsch{contactForm.inquiry -> v:or(alternative: 'Keine Angabe')}
    +
    + +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Faq/Detail.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Faq/Detail.html new file mode 100644 index 00000000..545f83dd --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Faq/Detail.html @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Button.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Button.html new file mode 100644 index 00000000..cc5cc17e --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Button.html @@ -0,0 +1,16 @@ + + + + + + + + {data.header} + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Calendar.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Calendar.html new file mode 100644 index 00000000..aa4245b7 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Calendar.html @@ -0,0 +1,21 @@ + + + + + +
    + +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Contact.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Contact.html new file mode 100644 index 00000000..f9330c1f --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Contact.html @@ -0,0 +1,32 @@ + + + + + +
    +
    +
    + + + + + + {contact.0.data.name} + + +
    +
    + {contact.0.data.name} +
    {contact.0.data.tasks -> f:format.nl2br()}
    +
    {contact.0.data.phone}
    +
    E-Mail
    +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/DealOfTheWeek.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/DealOfTheWeek.html new file mode 100644 index 00000000..0ba860d9 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/DealOfTheWeek.html @@ -0,0 +1,66 @@ + + + + + +
    +
    +
    +
    +
    + Deal der Woche +
    +
    +
    +
    +
    +
    +
    +
    Angebot
    +
    + + + {product.name} + {product.region.name} + + + {data.header} + + +
    + + + {data.bodytext -> f:format.nl2br()} + + +

    {date.nights} Nächte{f:if(condition: product.skipassIncluded, then: ' inkl. Skipass')}
    z. B. am {date.dateStart -> f:format.date(format: 'd.m.Y')}

    +
    +
    + +
    +

    ab {date.minPrice}€{f:if(condition: date.pseudoPrice, then: ' {date.pseudoPrice} €')}

    +
    +
    +
    + + + Details + + + Details + + +
    +
    +
    +
    +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Disturber.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Disturber.html new file mode 100644 index 00000000..f23c19be --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Disturber.html @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/EventPricetable.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/EventPricetable.html new file mode 100644 index 00000000..48eee41b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/EventPricetable.html @@ -0,0 +1,29 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Gmap.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Gmap.html new file mode 100644 index 00000000..b58055ef --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Gmap.html @@ -0,0 +1,19 @@ + + + + + +
    + +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Header.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Header.html new file mode 100644 index 00000000..0fa8beac --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Header.html @@ -0,0 +1,18 @@ + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Html.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Html.html new file mode 100644 index 00000000..715ed498 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Html.html @@ -0,0 +1,12 @@ + + + + + + {data.bodytext} + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Lineup.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Lineup.html new file mode 100644 index 00000000..261b495e --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Lineup.html @@ -0,0 +1,49 @@ + + + + + +
    + +
    +
    + {item.data.name} +
    +
    +
    + {item.data.name -> f:format.raw()} + {item.data.description -> f:format.html()} + +
    +
    +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/List.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/List.html new file mode 100644 index 00000000..e2268de1 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/List.html @@ -0,0 +1,117 @@ + + + + + + + Plugin snowreport + + + + + Plugin product teasergroup + + +
    + + + +
    +
    + Plugin region teasergroup + + +
    + +
    + +
    +
    +
    +
    + Plugin city teasergroup + + +
    + +
    + +
    +
    +
    +
    + Plugin concept teasergroup + + +
    + +
    + +
    +
    +
    +
    + Plugin hotel teasergroup + + +
    + +
    + +
    +
    +
    +
    + + +
    + +
    + +
    +
    +
    +
    + Social Media Plugin + + +
    + +
    + +
    +
    +
    +
    + Google maps Plugin + + + + + + + Default + + + +
    +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Menu.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Menu.html new file mode 100644 index 00000000..acdaee2b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Menu.html @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/NewsletterForm.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/NewsletterForm.html new file mode 100644 index 00000000..02ab1d82 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/NewsletterForm.html @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Shortcut.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Shortcut.html new file mode 100644 index 00000000..aba06038 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Shortcut.html @@ -0,0 +1,10 @@ + + + + + + {shortcuts} + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Teaser.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Teaser.html new file mode 100644 index 00000000..a87ec99b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Teaser.html @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserCity.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserCity.html new file mode 100644 index 00000000..7d1d12df --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserCity.html @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserConcept.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserConcept.html new file mode 100644 index 00000000..d2dafd6b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserConcept.html @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserCountry.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserCountry.html new file mode 100644 index 00000000..48d3a866 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserCountry.html @@ -0,0 +1,26 @@ + + + + + + +
    + {country.name} + +
    +
    + {country.name} +
    + {country.teaser -> f:format.crop(maxCharacters: settings.teaserTextMaxChars) -> f:format.html()} +
    + +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserHotel.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserHotel.html new file mode 100644 index 00000000..68bbde06 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserHotel.html @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserProduct.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserProduct.html new file mode 100644 index 00000000..8e8f983a --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserProduct.html @@ -0,0 +1,26 @@ + + + + + + + + + {v:variable.set(name: 'partial', value: 'Product/TeaserWide')} + + + {v:variable.set(name: 'partial', value: 'Product/TeaserWide')} + + + {v:variable.set(name: 'partial', value: 'Product/Teaser')} + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserRegion.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserRegion.html new file mode 100644 index 00000000..0b185f1a --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/TeaserRegion.html @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Textmedia.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Textmedia.html new file mode 100644 index 00000000..0c2a1399 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/Textmedia.html @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/YoutubeVideo.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/YoutubeVideo.html new file mode 100644 index 00000000..c31d4472 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/FluidStyledContent/YoutubeVideo.html @@ -0,0 +1,16 @@ + + + + + +
    + +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Form/Frontend/AfterProcess.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Form/Frontend/AfterProcess.html new file mode 100644 index 00000000..f67111bd --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Form/Frontend/AfterProcess.html @@ -0,0 +1,12 @@ + + + +
    +
    + +
    +
    + +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Form/Frontend/Show.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Form/Frontend/Show.html new file mode 100644 index 00000000..31ed85e8 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Form/Frontend/Show.html @@ -0,0 +1,5 @@ + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Form/FullForm.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Form/FullForm.html new file mode 100644 index 00000000..dfacd0fd --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Form/FullForm.html @@ -0,0 +1,100 @@ +
    + + + + + +
    + + +
    + + +
    {{formErrors.name}}
    +
    +
    + + +
    {{formErrors.company}}
    +
    +
    + + +
    {{formErrors.email}}
    +
    +
    + + +
    {{formErrors.phone}}
    +
    +
    + + +
    {{formErrors.period}}
    +
    +
    + + +
    {{formErrors.duration}}
    +
    +
    + + +
    {{formErrors.pax}}
    +
    +
    + + +
    {{formErrors.age}}
    +
    +
    + +
    +
    + + +
    {{formErrors.inquiry}}
    +
    +
    + +
    +
    +
    + Processing... +
    +
    +

    Vielen Dank für Eure Anfrage. Wir werden uns schnellstmöglich mit Euch in Verbindung + setzen.

    +

    +
    +
    +

    Es ist ein Problem aufgetreten. Bitte versucht es noch einmal.

    +

    +
    +
    +
    +
    + +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Form/SimpleForm.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Form/SimpleForm.html new file mode 100644 index 00000000..d056fa47 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Form/SimpleForm.html @@ -0,0 +1,60 @@ +
    + + + + + +
    + + +
    + + +
    {{formErrors.name}}
    +
    +
    + + +
    {{formErrors.email}}
    +
    +
    + + +
    {{formErrors.phone}}
    +
    +
    + + +
    {{formErrors.inquiry}}
    +
    +
    + +
    +
    +
    + Processing... +
    +
    +

    Vielen Dank für Eure Anfrage. Wir werden uns schnellstmöglich mit Euch in Verbindung + setzen.

    +

    +
    +
    +

    Es ist ein Problem aufgetreten. Bitte versucht es noch einmal.

    +

    +
    +
    +
    +
    + +
    diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/HalfAndTwoQuarters.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/HalfAndTwoQuarters.html new file mode 100644 index 00000000..b948325f --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/HalfAndTwoQuarters.html @@ -0,0 +1,49 @@ + + + + + + + + + + + + +
    + + + +
    +
    + + +
    +
    + +
    +
    +
    + + +
    +
    + {data.tx_gridelements_view_column_51 -> f:format.raw()} +
    +
    +
    +
    + {data.tx_gridelements_view_column_52 -> f:format.raw()} +
    +
    + {data.tx_gridelements_view_column_53 -> f:format.raw()} +
    +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/Halves.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/Halves.html new file mode 100644 index 00000000..953277ae --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/Halves.html @@ -0,0 +1,47 @@ + + + + + + + + + + + + +
    + + + +
    +
    + + +
    +
    + +
    +
    +
    + + +
    + +
    + {data.tx_gridelements_view_column_21 -> f:format.raw()} +
    +
    + +
    + {data.tx_gridelements_view_column_22 -> f:format.raw()} +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/Quarters.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/Quarters.html new file mode 100644 index 00000000..09578c43 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/Quarters.html @@ -0,0 +1,57 @@ + + + + + + + + + + + + +
    + + + +
    +
    + + +
    +
    + +
    +
    +
    + + +
    + +
    + {data.tx_gridelements_view_column_41 -> f:format.raw()} +
    +
    + +
    + {data.tx_gridelements_view_column_42 -> f:format.raw()} +
    +
    + +
    + {data.tx_gridelements_view_column_43 -> f:format.raw()} +
    +
    + +
    + {data.tx_gridelements_view_column_44 -> f:format.raw()} +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/Thirds.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/Thirds.html new file mode 100644 index 00000000..59ff6202 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/Thirds.html @@ -0,0 +1,52 @@ + + + + + + + + + + + + +
    + + + +
    +
    + + +
    +
    + +
    +
    +
    + + +
    + +
    + {data.tx_gridelements_view_column_31 -> f:format.raw()} +
    +
    + +
    + {data.tx_gridelements_view_column_32 -> f:format.raw()} +
    +
    + +
    + {data.tx_gridelements_view_column_33 -> f:format.raw()} +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/TwoQuartersAndHalf.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/TwoQuartersAndHalf.html new file mode 100644 index 00000000..332a500a --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Gridelements/TwoQuartersAndHalf.html @@ -0,0 +1,47 @@ + + + + + + + + + + + + +
    + + + +
    +
    + + +
    +
    + +
    +
    +
    + + +
    +
    +
    + {data.tx_gridelements_view_column_61 -> f:format.raw()} +
    +
    + {data.tx_gridelements_view_column_62 -> f:format.raw()} +
    +
    +
    +
    + {data.tx_gridelements_view_column_63 -> f:format.raw()} +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Hotel/DateIndependentTeasergroup.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Hotel/DateIndependentTeasergroup.html new file mode 100644 index 00000000..b7118b5a --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Hotel/DateIndependentTeasergroup.html @@ -0,0 +1,14 @@ + + + + + + +
    + +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Hotel/Detail.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Hotel/Detail.html new file mode 100644 index 00000000..7a237885 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Hotel/Detail.html @@ -0,0 +1,42 @@ + + + + + + + +
    + + + +
    +
    + +
    +
    +
    +
    + +
    +
    + + + + + + + + +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Hotel/DetailEvent.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Hotel/DetailEvent.html new file mode 100644 index 00000000..35bad7a3 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Hotel/DetailEvent.html @@ -0,0 +1,51 @@ + + + + + +
    +
    + +
    +
    +
    +
    + +
    +
    + {hotel.description -> f:format.html()} +
    +
    + +
    +
    +

    Buchungsoptionen

    + +
    +
    +
    +
    +
    +

    Ausstattung

    + {hotel.features -> f:format.html()} +

    Zimmerarten / Apartments

    + {hotel.roomTypes -> f:format.html()} +
    +
    + +
    +
    +

    Zusatzinformationen

    + {hotel.additionalInformation -> f:format.html()} +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Hotel/Teasergroup.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Hotel/Teasergroup.html new file mode 100644 index 00000000..02cc32ff --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Hotel/Teasergroup.html @@ -0,0 +1,21 @@ + + + + + + +
    + +
    +
    + +
    + +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Map/General.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Map/General.html new file mode 100644 index 00000000..6b1654b7 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Map/General.html @@ -0,0 +1,10 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/News/News/Detail.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/News/News/Detail.html new file mode 100644 index 00000000..7b6823fa --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/News/News/Detail.html @@ -0,0 +1,83 @@ + + + + + + + +
    + + + + + + {newsItem.alternativeTitle} + + + + + {newsItem.title} + + + + + +

    {newsItem.title}

    + + + {newsItem.teaser} + + + + {newsItem.bodytext} + + {newsItem.contentElementIdList} + +

    Dateien

    + +
    + +

    Ähnliche Beiträge

    +
      + +
    • + + {related.title} + +
    • + +
      +
    +
    + + + + + +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/News/News/List.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/News/News/List.html new file mode 100644 index 00000000..d4804462 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/News/News/List.html @@ -0,0 +1,42 @@ + + + + + + + + +

    + + {tags.0.title} +
    +
    + {contentObjectData.header} +

    +
    + + + + + + + + + + + + + + +
    + +
    + +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/News/Tag/List.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/News/Tag/List.html new file mode 100644 index 00000000..3b9f62d5 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/News/Tag/List.html @@ -0,0 +1,29 @@ + + + + + + +

    Themen

    +
      + +
    • + + + + {tag.title} + + + + + {tag.title} + + + +
    • +
      +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Newsletter/Index.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Newsletter/Index.html new file mode 100644 index 00000000..44a26def --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Newsletter/Index.html @@ -0,0 +1,44 @@ + + + + + + + +
    Du hast Deine E-Mail-Adresse erfolgreich abgemeldet und erhältst in + Zukunft von uns keinen Newsletter mehr.
    +
    + +
    Parameterfehler - Deine E-Mail-Adresse konnte leider nicht + abgemeldet werden.
    Sollte dieser Fehler weiterhin auftreten, setze Dich bitte telefonisch mit + uns in Verbindung.
    +
    + +
    Vielen Dank - Du hast Deine E-Mail-Adresse erfolgreich für + unseren Newsletter registriert.
    +
    + +
    Parameterfehler - Deine E-Mail-Adresse konnte leider nicht + korrekt registriert werden.
    Sollte dieser Fehler weiterhin auftreten, setze Dich bitte + telefonisch mit uns in Verbindung.
    +
    + +
    Vielen Dank für Dein Interesse - Du erhältst in Kürze + eine Mail mit einem Bestätigungslink an Deine E-Mail-Adresse geschickt.
    +
    + +
    Deine E-Mail-Adresse ist bereits für unseren Newsletter + vorgemerkt - es fehlt nur noch Deine Bestätigung. Solltest Du noch keine Mail erhalten haben, prüfe + bitte auch die Spam-Einstellungen Deines Posteingangs.
    +
    + +
    Diese E-Mail-Adresse ist bereits für unseren Newsletter registriert.
    +
    + +
    Ein Problem ist aufgetreten. Bitte versuche es erneut.
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Detail.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Detail.html new file mode 100644 index 00000000..d018f9f5 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Detail.html @@ -0,0 +1,15 @@ + + + + + + + + + + |'}" /> + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Frontpage.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Frontpage.html new file mode 100644 index 00000000..4bf1a738 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Frontpage.html @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/FrontpageEvent.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/FrontpageEvent.html new file mode 100644 index 00000000..2a9a0b39 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/FrontpageEvent.html @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Search.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Search.html new file mode 100644 index 00000000..4f6d131c --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Search.html @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Subpage.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Subpage.html new file mode 100644 index 00000000..59548774 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/Subpage.html @@ -0,0 +1,15 @@ + + + + + + + + + + |'}" /> + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/SubpageSidebarLeft.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/SubpageSidebarLeft.html new file mode 100644 index 00000000..6425123c --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/SubpageSidebarLeft.html @@ -0,0 +1,23 @@ + + + + + +
    |
    '}" /> +
    + + + + + + + + + + + |'}" /> + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/SubpageSidebarLeftEvent.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/SubpageSidebarLeftEvent.html new file mode 100644 index 00000000..e1087b8c --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/SubpageSidebarLeftEvent.html @@ -0,0 +1,23 @@ + + + + + +
    |
    '}" /> +
    + + + + + + + + + + + |'}" /> + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/SubpageSidebarRight.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/SubpageSidebarRight.html new file mode 100644 index 00000000..6c092b79 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/SubpageSidebarRight.html @@ -0,0 +1,23 @@ + + + + + +
    |
    '}" /> +
    + + + + + + + + + + + |'}" /> + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/SubpageSidebarRightEvent.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/SubpageSidebarRightEvent.html new file mode 100644 index 00000000..12720530 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Page/SubpageSidebarRightEvent.html @@ -0,0 +1,23 @@ + + + + + +
    |
    '}" /> +
    + + + + + + + + + + + |'}" /> + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Pricetable/Event.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Pricetable/Event.html new file mode 100644 index 00000000..6c9cdefe --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Pricetable/Event.html @@ -0,0 +1,19 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Booking.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Booking.html new file mode 100644 index 00000000..b49c9107 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Booking.html @@ -0,0 +1,18 @@ + + + + + +
    +
    +
    + +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Detail.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Detail.html new file mode 100644 index 00000000..354f3357 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Detail.html @@ -0,0 +1,217 @@ + + + + + + +
    + ", + pricetable: "{ep:uri.ajax(action: 'pricetable', controller: 'AjaxTable', arguments: '{product: product, hotel: hotel}', format: 'json', noCacheHash: 1)}", + hotel: "{ep:uri.ajax(action: 'hotel', controller: 'AjaxContent', arguments: '{hotel: hotel}', format: 'html')}", + region: "{ep:uri.ajax(action: 'region', controller: 'AjaxContent', arguments: '{region: product.region}', format: 'html')}", + city: "{ep:uri.ajax(action: 'city', controller: 'AjaxContent', arguments: '{city: product.city}', format: 'html')}", + journey: "{ep:uri.ajax(action: 'journey', controller: 'AjaxContent', arguments: '{journey: product.journey}', format: 'html')}" + }' + argument-prefix='' + :hotel-first="{f:if(condition: settings.hotelOnTop, then: 'true', else: 'false')}" + :fb-pixel-data="{ productUid: {product.uid}, nameInternal: '{product.nameInternal}' }" + > + + +
    + +
    + + + +
    +

    Belegungskalender

    + +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/HotelList.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/HotelList.html new file mode 100644 index 00000000..440b640a --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/HotelList.html @@ -0,0 +1,42 @@ + + + + + + +
    +
    +
    + +
    +
    +
    +
    + {product.teaserLong -> f:format.html()} +
    +
    +
    +
    +
    Wähle deine Unterkunft
    +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Pricetable.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Pricetable.html new file mode 100644 index 00000000..21a47dcb --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Pricetable.html @@ -0,0 +1,13 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Teasergroup.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Teasergroup.html new file mode 100644 index 00000000..7e8932ab --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Teasergroup.html @@ -0,0 +1,36 @@ + + + + + + +
    + + + + + + +
    + +
    +
    +
    +
    +
    + +

    Alle anzeigen

    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Region/Detail.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Region/Detail.html new file mode 100644 index 00000000..e5d65b59 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Region/Detail.html @@ -0,0 +1,48 @@ + + + + + + + +
    + + + +
    +
    + +
    +
    +
    +
    + +
    +
    + + + + + + + + + + + +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Region/Teasergroup.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Region/Teasergroup.html new file mode 100644 index 00000000..dd50d8b7 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Region/Teasergroup.html @@ -0,0 +1,17 @@ + + + + + + +
    + +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Search/Searchbar.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Search/Searchbar.html new file mode 100644 index 00000000..2c68ee4b --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Search/Searchbar.html @@ -0,0 +1,80 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Search/Searchbox.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Search/Searchbox.html new file mode 100644 index 00000000..1e7ac5f5 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Search/Searchbox.html @@ -0,0 +1,105 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Search/Searchresult.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Search/Searchresult.html new file mode 100644 index 00000000..359d37cc --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Search/Searchresult.html @@ -0,0 +1,295 @@ + + + + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Snowreport/List.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Snowreport/List.html new file mode 100644 index 00000000..28a26e7f --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Snowreport/List.html @@ -0,0 +1,48 @@ + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GebietBerg/TalQualitätGeöffnete LifteLetzter SchneefallLetzte Akt.
    + {snowreport.regionName}
    + {snowreport.countryName} +
    {snowreport.snow_level_mountain -> v:or(alternative: '-')}/{snowreport.snow_level_valley -> v:or(alternative: '-')} cm{snowreport.snow_quality} + + {snowreport.lifts_opened}/{snowreport.lifts_total} + k. A. + + {f:if(condition: snowreport.last_snowfall, then: '{snowreport.last_snowfall -> f:format.date(format: \'%d.%m.%Y\')}', else: '-')}{snowreport.last_update -> f:format.date(format: '%d.%m.%Y')}Saison vom {snowreport.seasonStart -> f:format.date(format: '%d.%m.%Y')} bis {snowreport.seasonEnd -> f:format.date(format: '%d.%m.%Y')}
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/SocialMedia/Item/ShowSocialFeed.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/SocialMedia/Item/ShowSocialFeed.html new file mode 100644 index 00000000..1aee5f27 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/SocialMedia/Item/ShowSocialFeed.html @@ -0,0 +1,8 @@ + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Team/List.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Team/List.html new file mode 100644 index 00000000..dd27d656 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Team/List.html @@ -0,0 +1,46 @@ + + + + + +
    + +
    + + + +
    +
    +
    +
    + + + + + + diff --git a/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Team/Show.html b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Team/Show.html new file mode 100644 index 00000000..63788f45 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/Resources/Private/Templates/Team/Show.html @@ -0,0 +1,51 @@ + + + + + +
    +
    +
    +
    +
    +
    + + + + + + {member.name} + + +
    +
    +
    +
    + {member.name}
    {member.tasks}
    + {member.description -> f:format.html()} + +

    {member.email}

    +
    + +

    {member.phone}

    +
    +
    +
    +
    +
    + zurück +
    +
    +
    +
    +
    + + diff --git a/web/typo3conf/ext/ep_theme/ext_emconf.php b/web/typo3conf/ext/ep_theme/ext_emconf.php new file mode 100644 index 00000000..9d15fb9d --- /dev/null +++ b/web/typo3conf/ext/ep_theme/ext_emconf.php @@ -0,0 +1,27 @@ + 'E&P Theme', + 'description' => 'Theme package for Ep Reisen TYPO3 website', + 'category' => 'templates', + 'author' => 'Björn Fromme', + 'author_email' => 'fromme@dreipunktnull.com', + 'state' => 'beta', + 'internal' => '', + 'uploadfolder' => true, + 'createDirs' => '', + 'dividers2tabs' => true, + 'clearCacheOnLoad' => 0, + 'version' => '1.1.0', + 'constraints' => [ + 'depends' => [ + 'typo3' => '7.6.0-7.9.9', + 'fluid_styled_content' => '7.6.0-7.9.9', + 'vhs' => '3.0.0-3.9.9', + ], + 'conflicts' => [], + 'suggests' => [ + 'ep_products' => '' + ] + ], +]; diff --git a/web/typo3conf/ext/ep_theme/ext_icon.gif b/web/typo3conf/ext/ep_theme/ext_icon.gif new file mode 100644 index 00000000..9fc0f1d0 Binary files /dev/null and b/web/typo3conf/ext/ep_theme/ext_icon.gif differ diff --git a/web/typo3conf/ext/ep_theme/ext_localconf.php b/web/typo3conf/ext/ep_theme/ext_localconf.php new file mode 100644 index 00000000..8ff68cb0 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/ext_localconf.php @@ -0,0 +1,55 @@ + 'simpleForm', + ], + [ + 'Form' => 'simpleForm', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpTheme', + 'FullForm', + [ + 'Form' => 'fullForm', + ], + [ + 'Form' => 'fullForm', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpTheme', + 'FullForm', + [ + 'Form' => 'fullForm', + ], + [ + 'Form' => 'fullForm', + ] +); + +\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin( + 'EP.EpTheme', + 'Ajax', + [ + 'AjaxForm' => 'processForm', + ], + [ + 'AjaxForm' => 'processForm', + ] +); + diff --git a/web/typo3conf/ext/ep_theme/ext_tables.php b/web/typo3conf/ext/ep_theme/ext_tables.php new file mode 100644 index 00000000..403dde8f --- /dev/null +++ b/web/typo3conf/ext/ep_theme/ext_tables.php @@ -0,0 +1,26 @@ +, 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! + ***************************************************************/ + +$url = urldecode($_GET['url']); +$token = $_GET['token']; + +$typo3Config = require('../../LocalConfiguration.php'); +$encryptionKey = $typo3Config['SYS']['encryptionKey']; +$hash = sha1($url . $encryptionKey); + +if ($hash !== $token) { + die('Access denied'); +} + +$ch = curl_init(); +curl_setopt($ch, CURLOPT_URL, $url); +curl_setopt($ch, CURLOPT_TIMEOUT, 5); +curl_setopt($ch, CURLOPT_HEADER, 1); +curl_setopt($ch, CURLOPT_NOBODY, 1); +curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); +curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); +$headers = curl_exec($ch); + +if ($headers === false) { + exit; +} + +foreach (explode("\r\n", $headers) as $header) { + header($header); +} + +readfile($url); +exit; diff --git a/web/typo3conf/ext/ep_theme/package-lock.json b/web/typo3conf/ext/ep_theme/package-lock.json new file mode 100644 index 00000000..44bc52d9 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/package-lock.json @@ -0,0 +1,9562 @@ +{ + "name": "epreisen", + "version": "2.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@fancyapps/fancybox": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@fancyapps/fancybox/-/fancybox-3.2.5.tgz", + "integrity": "sha512-1LHcYj96LnmNML4cZndQA+4vuQrtI1E4wi9vpP7B8Y60ieALIUMDZE0J4VMMMJ/xW0XFMpof8RTng3Qy3u3XkQ==" + }, + "@fengyuanchen/datepicker": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@fengyuanchen/datepicker/-/datepicker-0.6.4.tgz", + "integrity": "sha512-G+o2HnQi8gShKmj7SZUPGYH3pEKi7J0L0AsIC+uvwC9UjrMxF9WJ0gL9YVuIHeNY8wg9jGLftgiGZxv1xCu+9A==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "acorn": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz", + "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "4.0.13" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "adjust-sourcemap-loader": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.1.0.tgz", + "integrity": "sha1-QS2SQE62HkETY1ASy6U6M9AI4OI=", + "dev": true, + "requires": { + "assert": "1.4.1", + "camelcase": "1.2.1", + "loader-utils": "1.1.0", + "lodash.assign": "4.2.0", + "lodash.defaults": "3.1.2", + "object-path": "0.9.2", + "regex-parser": "2.2.8" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "lodash.defaults": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", + "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", + "dev": true, + "requires": { + "lodash.assign": "3.2.0", + "lodash.restparam": "3.6.1" + }, + "dependencies": { + "lodash.assign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "dev": true, + "requires": { + "lodash._baseassign": "3.2.0", + "lodash._createassigner": "3.1.1", + "lodash.keys": "3.1.2" + } + } + } + } + } + }, + "ajv": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.3.0.tgz", + "integrity": "sha1-RBT/dKUIecII7l/cgm4ywwNUnto=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "archive-type": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-3.2.0.tgz", + "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=", + "dev": true, + "requires": { + "file-type": "3.9.0" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + } + } + }, + "are-we-there-yet": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", + "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", + "dev": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.3" + } + }, + "argparse": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", + "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", + "dev": true, + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "asn1.js": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.9.2.tgz", + "integrity": "sha512-b/OsSjvWEo8Pi8H0zsDd2P6Uqo2TK2pH8gNLSJtNLM2Db0v2QaAZ0pBQJXVjAn4gBuugeVDr7s63ZogpUIwWDg==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", + "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "dev": true + }, + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", + "dev": true + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "dev": true, + "requires": { + "lodash": "4.17.4" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-each-series": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-1.1.0.tgz", + "integrity": "sha1-9C/YFV048hpbjqB8KOBj7RcAsTg=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/atob/-/atob-1.1.3.tgz", + "integrity": "sha1-lfE2KbEsOlGl0hWr3OKqnzL4B3M=", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000765", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000765", + "electron-to-chromium": "1.3.27" + } + } + } + }, + "aws-sign2": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", + "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.0.tgz", + "integrity": "sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.0", + "babel-helpers": "6.24.1", + "babel-messages": "6.23.0", + "babel-register": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "convert-source-map": "1.5.0", + "debug": "2.6.9", + "json5": "0.5.1", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-generator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz", + "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=", + "dev": true, + "requires": { + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "detect-indent": "4.0.0", + "jsesc": "1.3.0", + "lodash": "4.17.4", + "source-map": "0.5.7", + "trim-right": "1.0.1" + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "dev": true, + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz", + "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==", + "dev": true, + "requires": { + "find-cache-dir": "1.0.0", + "loader-utils": "1.1.0", + "mkdirp": "0.5.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=", + "dev": true + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=", + "dev": true + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "dev": true, + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "6.26.0", + "babel-helper-function-name": "6.24.1", + "babel-helper-optimise-call-expression": "6.24.1", + "babel-helper-replace-supers": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz", + "integrity": "sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo=", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-preset-env": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.6.1.tgz", + "integrity": "sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "2.9.0", + "invariant": "2.2.2", + "semver": "5.4.1" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "6.22.0", + "babel-plugin-transform-es2015-block-scoping": "6.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.0", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "babel-plugin-transform-es2015-template-literals": "6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "dev": true, + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "dev": true, + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "6.26.0", + "babel-runtime": "6.26.0", + "core-js": "2.5.1", + "home-or-tmp": "2.0.0", + "lodash": "4.17.4", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "dev": true, + "requires": { + "core-js": "2.5.1", + "regenerator-runtime": "0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.2", + "lodash": "4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.4", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.1.tgz", + "integrity": "sha512-dwVUVIXsBZXwTuwnXI9RK8sBmgq09NDHzyR9SAph9eqk76gKK2JSQmZARC2zRC81JC2QTtxD0ARU5qTS25gIGw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "bin-build": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bin-build/-/bin-build-2.2.0.tgz", + "integrity": "sha1-EfjdYfcP/Por3KpbRvXo/t1CIcw=", + "dev": true, + "requires": { + "archive-type": "3.2.0", + "decompress": "3.0.0", + "download": "4.4.3", + "exec-series": "1.0.3", + "rimraf": "2.6.2", + "tempfile": "1.1.1", + "url-regex": "3.2.0" + }, + "dependencies": { + "tempfile": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-1.1.1.tgz", + "integrity": "sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I=", + "dev": true, + "requires": { + "os-tmpdir": "1.0.2", + "uuid": "2.0.3" + } + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + } + } + }, + "bin-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bin-check/-/bin-check-2.0.0.tgz", + "integrity": "sha1-hvjm9CU4k99g3DFpV/WvAqywWTA=", + "dev": true, + "requires": { + "executable": "1.1.0" + } + }, + "bin-version": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bin-version/-/bin-version-1.0.4.tgz", + "integrity": "sha1-nrSY7m/Xb3q5p8FgQ2+JV5Q1144=", + "dev": true, + "requires": { + "find-versions": "1.2.1" + } + }, + "bin-version-check": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bin-version-check/-/bin-version-check-2.1.0.tgz", + "integrity": "sha1-5OXfKQuQaffRETJAMe/BP90RpbA=", + "dev": true, + "requires": { + "bin-version": "1.0.4", + "minimist": "1.2.0", + "semver": "4.3.6", + "semver-truncate": "1.1.2" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", + "dev": true + } + } + }, + "bin-wrapper": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/bin-wrapper/-/bin-wrapper-3.0.2.tgz", + "integrity": "sha1-Z9MwYmLksaXy+I7iNGT2plVneus=", + "dev": true, + "requires": { + "bin-check": "2.0.0", + "bin-version-check": "2.1.0", + "download": "4.4.3", + "each-async": "1.1.1", + "lazy-req": "1.1.0", + "os-filter-obj": "1.0.3" + } + }, + "binary-extensions": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", + "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", + "dev": true + }, + "bl": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.1.tgz", + "integrity": "sha1-ysMo977kVzDUBLaSID/LWQ4XLV4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "dev": true + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "boom": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", + "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "bootstrap": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.3.7.tgz", + "integrity": "sha1-WjiTlFSfIzMIdaOxUGVldPip63E=" + }, + "bourbon": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/bourbon/-/bourbon-4.3.4.tgz", + "integrity": "sha1-TaOAAp6SwMj5dkx3lFGhNLEefMM=" + }, + "brace-expansion": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", + "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.1.1.tgz", + "integrity": "sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg==", + "dev": true, + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "browserify-cipher": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.0.tgz", + "integrity": "sha1-mYgkSHS/XtTijalWZtzWasj8Njo=", + "dev": true, + "requires": { + "browserify-aes": "1.1.1", + "browserify-des": "1.0.0", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.0.tgz", + "integrity": "sha1-2qJ3cXRwki7S/hhZQRihdUOXId0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.5" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "1.0.6" + } + }, + "browserslist": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.9.0.tgz", + "integrity": "sha512-vJEBcDTANoDhSHL46NeOEW5hvQw7It9uCqzeFPQhpawXfnOwnpvW5C97vn1eGJ7iCkSg8wWU0nYObE7d/N95Iw==", + "dev": true, + "requires": { + "caniuse-lite": "1.0.30000765", + "electron-to-chromium": "1.3.27" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "1.2.1", + "ieee754": "1.1.8", + "isarray": "1.0.0" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-to-vinyl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-to-vinyl/-/buffer-to-vinyl-1.1.0.tgz", + "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", + "dev": true, + "requires": { + "file-type": "3.9.0", + "readable-stream": "2.3.3", + "uuid": "2.0.3", + "vinyl": "1.2.0" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + }, + "uuid": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", + "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", + "dev": true + } + } + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "cacache": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.1.tgz", + "integrity": "sha512-dRHYcs9LvG9cHgdPzjiI+/eS7e1xRhULrcyOx04RZQsszNJXU2SL9CyG60yLnge282Qq5nwTv+ieK2fH+WPZmA==", + "dev": true, + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.1", + "mississippi": "1.3.0", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.0.0", + "unique-filename": "1.1.0", + "y18n": "3.2.1" + } + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000765", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000765", + "electron-to-chromium": "1.3.27" + } + } + } + }, + "caniuse-db": { + "version": "1.0.30000765", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000765.tgz", + "integrity": "sha1-FVVUMkILqsuxabxR5bbegEyZlLQ=", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000765", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000765.tgz", + "integrity": "sha1-qhp1AZJ2tIRjwPyipSV/ufJqfJ0=", + "dev": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", + "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", + "dev": true + }, + "caseless": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", + "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "dev": true + }, + "caw": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/caw/-/caw-1.2.0.tgz", + "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=", + "dev": true, + "requires": { + "get-proxy": "1.1.0", + "is-obj": "1.0.1", + "object-assign": "3.0.0", + "tunnel-agent": "0.4.3" + }, + "dependencies": { + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + } + } + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + }, + "dependencies": { + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + } + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "change-case": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.1.tgz", + "integrity": "sha1-7l9a0EFa0a2egHLPSc1M+nZgpVQ=", + "dev": true, + "requires": { + "camel-case": "3.0.0", + "constant-case": "2.0.0", + "dot-case": "2.1.1", + "header-case": "1.0.1", + "is-lower-case": "1.1.3", + "is-upper-case": "1.1.2", + "lower-case": "1.1.4", + "lower-case-first": "1.0.2", + "no-case": "2.3.2", + "param-case": "2.1.1", + "pascal-case": "2.0.1", + "path-case": "2.1.1", + "sentence-case": "2.1.1", + "snake-case": "2.1.0", + "swap-case": "1.1.2", + "title-case": "2.1.1", + "upper-case": "1.1.3", + "upper-case-first": "1.1.2" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "dev": true, + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.1.3", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", + "dev": true, + "requires": { + "commander": "2.8.1", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "clean-webpack-plugin": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.17.tgz", + "integrity": "sha512-Bts/V725v8Ijosp4K1cqppQXgXcrohxoMsg0CV2xL4y/vua1G5pAfHEW/eJIiKF+GNNG72mdjbipxMRFEms7yg==", + "dev": true, + "requires": { + "rimraf": "2.6.2" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, + "clone-deep": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.3.0.tgz", + "integrity": "sha1-NIxhrpzb4O3+BT2R/0zFIdeQ7eg=", + "dev": true, + "requires": { + "for-own": "1.0.0", + "is-plain-object": "2.0.4", + "kind-of": "3.2.2", + "shallow-clone": "0.1.2" + }, + "dependencies": { + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + } + } + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "1.5.1" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "1.0.3", + "color-convert": "1.9.1", + "color-string": "0.3.0" + } + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "0.11.4", + "css-color-names": "0.0.4", + "has": "1.0.1" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "typedarray": "0.0.6" + } + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "console-stream": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/console-stream/-/console-stream-0.1.1.tgz", + "integrity": "sha1-oJX+B7IEZZVfL6/Si11yvM2UnUQ=", + "dev": true + }, + "consolidate": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", + "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", + "dev": true, + "requires": { + "bluebird": "3.5.1" + } + }, + "constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", + "dev": true, + "requires": { + "snake-case": "2.1.0", + "upper-case": "1.1.3" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.0.tgz", + "integrity": "sha1-ms1whRxtXf3ZPZKC5e35SgP/RrU=", + "dev": true + }, + "cookieconsent": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/cookieconsent/-/cookieconsent-3.0.4.tgz", + "integrity": "sha1-7wKz/b0Q3mqa8g8i4odEi/3UjF0=" + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "copy-webpack-plugin": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.3.0.tgz", + "integrity": "sha512-5o1/xyWm8OYDmLFKAWMuPU3A/jZ4Z6kZSZGh36KD2XmtxnRa8lQyLx7bCNQm08BPaR/oqUdtJOr9jWfnYINp9g==", + "dev": true, + "requires": { + "cacache": "10.0.1", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", + "is-glob": "4.0.0", + "loader-utils": "0.2.17", + "lodash": "4.17.4", + "minimatch": "3.0.4", + "p-limit": "1.1.0", + "pify": "3.0.0", + "serialize-javascript": "1.4.0" + }, + "dependencies": { + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "glob": "7.1.2", + "ignore": "3.3.7", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + } + } + }, + "core-js": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", + "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "dev": true, + "requires": { + "is-directory": "0.3.1", + "js-yaml": "3.7.0", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "os-homedir": "1.0.2", + "parse-json": "2.2.0", + "require-from-string": "1.2.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "create-ecdh": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.0.tgz", + "integrity": "sha1-iIxyNZbN92EvZJgjPuvXo1MBc30=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "1.0.0" + } + }, + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "sha.js": "2.4.9" + } + }, + "create-hmac": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.6.tgz", + "integrity": "sha1-rLniIaThe9sHbpBlfEK5PjcmzwY=", + "dev": true, + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.1.3", + "inherits": "2.0.3", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "shebang-command": "1.2.0", + "which": "1.3.0" + } + }, + "cryptiles": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", + "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "1.0.0", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.0", + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "diffie-hellman": "5.0.2", + "inherits": "2.0.3", + "pbkdf2": "3.0.14", + "public-encrypt": "4.0.0", + "randombytes": "2.0.5", + "randomfill": "1.0.3" + } + }, + "css": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.1.tgz", + "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "source-map": "0.1.43", + "source-map-resolve": "0.3.1", + "urix": "0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-loader": { + "version": "0.28.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.7.tgz", + "integrity": "sha512-GxMpax8a/VgcfRrVy0gXD6yLd5ePYbXX/5zGgTVYp4wXtJklS8Z2VaUArJgc//f6/Dzil7BaJObdSv8eKKCPgg==", + "dev": true, + "requires": { + "babel-code-frame": "6.26.0", + "css-selector-tokenizer": "0.7.0", + "cssnano": "3.10.0", + "icss-utils": "2.1.0", + "loader-utils": "1.1.0", + "lodash.camelcase": "4.3.0", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-modules-extract-imports": "1.1.0", + "postcss-modules-local-by-default": "1.2.0", + "postcss-modules-scope": "1.1.0", + "postcss-modules-values": "1.3.0", + "postcss-value-parser": "3.3.0", + "source-list-map": "2.0.0" + } + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true, + "requires": { + "cssesc": "0.1.0", + "fastparse": "1.1.1", + "regexpu-core": "1.0.0" + }, + "dependencies": { + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + } + } + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "6.7.7", + "decamelize": "1.2.0", + "defined": "1.0.0", + "has": "1.0.1", + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-calc": "5.3.1", + "postcss-colormin": "2.2.2", + "postcss-convert-values": "2.6.1", + "postcss-discard-comments": "2.0.4", + "postcss-discard-duplicates": "2.1.0", + "postcss-discard-empty": "2.1.0", + "postcss-discard-overridden": "0.1.1", + "postcss-discard-unused": "2.2.3", + "postcss-filter-plugins": "2.0.2", + "postcss-merge-idents": "2.1.7", + "postcss-merge-longhand": "2.0.2", + "postcss-merge-rules": "2.1.2", + "postcss-minify-font-values": "1.0.5", + "postcss-minify-gradients": "1.0.5", + "postcss-minify-params": "1.2.2", + "postcss-minify-selectors": "2.1.1", + "postcss-normalize-charset": "1.1.1", + "postcss-normalize-url": "3.0.8", + "postcss-ordered-values": "2.2.3", + "postcss-reduce-idents": "2.4.0", + "postcss-reduce-initial": "1.0.1", + "postcss-reduce-transforms": "1.0.4", + "postcss-svgo": "2.1.6", + "postcss-unique-selectors": "2.0.2", + "postcss-value-parser": "3.3.0", + "postcss-zindex": "2.2.0" + } + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "1.2.3", + "source-map": "0.5.7" + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "cwebp-bin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cwebp-bin/-/cwebp-bin-3.2.0.tgz", + "integrity": "sha1-rgLfRT2MFTQbHY1JmlImvPO/Sm8=", + "dev": true, + "requires": { + "bin-build": "2.2.0", + "bin-wrapper": "3.0.2", + "logalot": "2.1.0" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decompress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-3.0.0.tgz", + "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", + "dev": true, + "requires": { + "buffer-to-vinyl": "1.1.0", + "concat-stream": "1.6.0", + "decompress-tar": "3.1.0", + "decompress-tarbz2": "3.1.0", + "decompress-targz": "3.1.0", + "decompress-unzip": "3.4.0", + "stream-combiner2": "1.1.1", + "vinyl-assign": "1.2.1", + "vinyl-fs": "2.4.4" + } + }, + "decompress-tar": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz", + "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=", + "dev": true, + "requires": { + "is-tar": "1.0.0", + "object-assign": "2.1.1", + "strip-dirs": "1.1.1", + "tar-stream": "1.5.5", + "through2": "0.6.5", + "vinyl": "0.4.6" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + } + } + }, + "decompress-tarbz2": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-3.1.0.tgz", + "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=", + "dev": true, + "requires": { + "is-bzip2": "1.0.0", + "object-assign": "2.1.1", + "seek-bzip": "1.0.5", + "strip-dirs": "1.1.1", + "tar-stream": "1.5.5", + "through2": "0.6.5", + "vinyl": "0.4.6" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + } + } + }, + "decompress-targz": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-3.1.0.tgz", + "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=", + "dev": true, + "requires": { + "is-gzip": "1.0.0", + "object-assign": "2.1.1", + "strip-dirs": "1.1.1", + "tar-stream": "1.5.5", + "through2": "0.6.5", + "vinyl": "0.4.6" + }, + "dependencies": { + "clone": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", + "dev": true + }, + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=", + "dev": true + }, + "vinyl": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", + "dev": true, + "requires": { + "clone": "0.2.0", + "clone-stats": "0.0.1" + } + } + } + }, + "decompress-unzip": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-3.4.0.tgz", + "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=", + "dev": true, + "requires": { + "is-zip": "1.0.0", + "read-all-stream": "3.1.0", + "stat-mode": "0.2.2", + "strip-dirs": "1.1.1", + "through2": "2.0.3", + "vinyl": "1.2.0", + "yauzl": "2.9.1" + }, + "dependencies": { + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + } + } + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "diffie-hellman": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.2.tgz", + "integrity": "sha1-tYNXOScM/ias9jIJn97SoH8gnl4=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.5" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "1.0.1", + "path-type": "3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + } + } + }, + "domain-browser": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz", + "integrity": "sha1-hnqksJP6oF8d4IwG9NeyH9+GmLw=", + "dev": true + }, + "dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", + "dev": true, + "requires": { + "no-case": "2.3.2" + } + }, + "download": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/download/-/download-4.4.3.tgz", + "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", + "dev": true, + "requires": { + "caw": "1.2.0", + "concat-stream": "1.6.0", + "each-async": "1.1.1", + "filenamify": "1.2.1", + "got": "5.7.1", + "gulp-decompress": "1.2.0", + "gulp-rename": "1.2.2", + "is-url": "1.2.2", + "object-assign": "4.1.1", + "read-all-stream": "3.1.0", + "readable-stream": "2.3.3", + "stream-combiner2": "1.1.1", + "vinyl": "1.2.0", + "vinyl-fs": "2.4.4", + "ware": "1.3.0" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "duplexify": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", + "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", + "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "stream-shift": "1.0.0" + } + }, + "each-async": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/each-async/-/each-async-1.1.1.tgz", + "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", + "dev": true, + "requires": { + "onetime": "1.1.0", + "set-immediate-shim": "1.0.1" + } + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "electron-to-chromium": { + "version": "1.3.27", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz", + "integrity": "sha1-eOy4o5kGYYe7N07t412ccFZagD0=", + "dev": true + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", + "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", + "dev": true, + "requires": { + "once": "1.4.0" + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "memory-fs": "0.4.1", + "object-assign": "4.1.1", + "tapable": "0.2.8" + } + }, + "errno": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", + "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "dev": true, + "requires": { + "prr": "0.0.0" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es6-templates": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", + "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", + "dev": true, + "requires": { + "recast": "0.11.23", + "through": "2.3.8" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.1" + } + }, + "exec-buffer": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/exec-buffer/-/exec-buffer-3.2.0.tgz", + "integrity": "sha512-wsiD+2Tp6BWHoVv3B+5Dcx6E7u5zky+hUwOHjuH2hKSLR3dvRmX8fk8UD8uqQixHs4Wk6eDmiegVrMPjKj7wpA==", + "dev": true, + "requires": { + "execa": "0.7.0", + "p-finally": "1.0.0", + "pify": "3.0.0", + "rimraf": "2.6.2", + "tempfile": "2.0.0" + } + }, + "exec-series": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/exec-series/-/exec-series-1.0.3.tgz", + "integrity": "sha1-bSV6m+rEgqhyx3g7yGFYOfx3FDo=", + "dev": true, + "requires": { + "async-each-series": "1.1.0", + "object-assign": "4.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, + "executable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/executable/-/executable-1.1.0.tgz", + "integrity": "sha1-h3mA6REvM5EGbaNyZd562ENKtNk=", + "dev": true, + "requires": { + "meow": "3.7.0" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "2.2.3" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } + } + }, + "extract-text-webpack-plugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz", + "integrity": "sha1-dW7076gVXDaBgz+8NNpTuUF0bWw=", + "dev": true, + "requires": { + "async": "2.6.0", + "loader-utils": "1.1.0", + "schema-utils": "0.3.0", + "webpack-sources": "1.0.2" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fancy-log": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", + "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "time-stamp": "1.1.0" + } + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "file-loader": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.11.2.tgz", + "integrity": "sha512-N+uhF3mswIFeziHQjGScJ/yHXYt3DiLBeC+9vWW+WjUBiClMSOlV1YrXQi+7KM2aA3Rn4Bybgv+uXFQbfkzpvg==", + "dev": true, + "requires": { + "loader-utils": "1.1.0" + } + }, + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", + "dev": true + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "filename-reserved-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz", + "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q=", + "dev": true + }, + "filenamify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz", + "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", + "dev": true, + "requires": { + "filename-reserved-regex": "1.0.0", + "strip-outer": "1.0.0", + "trim-repeated": "1.0.0" + } + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "dev": true, + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "1.0.1", + "make-dir": "1.1.0", + "pkg-dir": "2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "2.0.0" + } + }, + "find-versions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-1.2.1.tgz", + "integrity": "sha1-y96fEuOFdaCvG+G5osXV/Y8Ya2I=", + "dev": true, + "requires": { + "array-uniq": "1.0.3", + "get-stdin": "4.0.1", + "meow": "3.7.0", + "semver-regex": "1.0.0" + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=", + "dev": true + }, + "flush-write-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", + "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "1.0.2" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", + "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", + "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", + "dev": true, + "optional": true, + "requires": { + "nan": "2.8.0", + "node-pre-gyp": "0.6.39" + }, + "dependencies": { + "abbrev": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "ajv": { + "version": "4.11.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.2.9" + } + }, + "asn1": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "assert-plus": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws-sign2": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "aws4": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "balanced-match": { + "version": "0.4.2", + "bundled": true, + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "boom": { + "version": "2.10.1", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "brace-expansion": { + "version": "1.1.7", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "concat-map": "0.0.1" + } + }, + "buffer-shims": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true, + "dev": true, + "optional": true + }, + "co": { + "version": "4.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "combined-stream": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "cryptiles": { + "version": "2.0.5", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1" + } + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "debug": { + "version": "2.6.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "dev": true, + "optional": true + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "ecc-jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "extend": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "extsprintf": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + }, + "form-data": { + "version": "2.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.15" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.1" + } + }, + "fstream-ignore": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fstream": "1.0.11", + "inherits": "2.0.3", + "minimatch": "3.0.4" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "1.1.1", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true, + "dev": true + }, + "har-schema": { + "version": "1.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "har-validator": { + "version": "4.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ajv": "4.11.8", + "har-schema": "1.0.5" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "hawk": { + "version": "3.1.3", + "bundled": true, + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "hoek": { + "version": "2.16.3", + "bundled": true, + "dev": true + }, + "http-signature": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.0", + "sshpk": "1.13.0" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.4", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "jodid25519": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true, + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "jsprim": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.0.2", + "json-schema": "0.2.3", + "verror": "1.3.6" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "mime-db": { + "version": "1.27.0", + "bundled": true, + "dev": true + }, + "mime-types": { + "version": "2.1.15", + "bundled": true, + "dev": true, + "requires": { + "mime-db": "1.27.0" + } + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "node-pre-gyp": { + "version": "0.6.39", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "1.0.2", + "hawk": "3.1.3", + "mkdirp": "0.5.1", + "nopt": "4.0.1", + "npmlog": "4.1.0", + "rc": "1.2.1", + "request": "2.81.0", + "rimraf": "2.6.1", + "semver": "5.3.0", + "tar": "2.2.1", + "tar-pack": "3.4.0" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1.1.0", + "osenv": "0.1.4" + } + }, + "npmlog": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "performance-now": { + "version": "0.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "1.0.7", + "bundled": true, + "dev": true + }, + "punycode": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "optional": true + }, + "qs": { + "version": "6.4.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.2.9", + "bundled": true, + "dev": true, + "requires": { + "buffer-shims": "1.0.0", + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "string_decoder": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "request": { + "version": "2.81.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "4.2.1", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.15", + "oauth-sign": "0.8.2", + "performance-now": "0.2.0", + "qs": "6.4.0", + "safe-buffer": "5.0.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.2", + "tunnel-agent": "0.6.0", + "uuid": "3.0.1" + } + }, + "rimraf": { + "version": "2.6.1", + "bundled": true, + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.0.1", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.3.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sntp": { + "version": "1.0.9", + "bundled": true, + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sshpk": { + "version": "1.13.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jodid25519": "1.0.2", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "stringstream": { + "version": "0.0.5", + "bundled": true, + "dev": true, + "optional": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-pack": { + "version": "3.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "2.6.8", + "fstream": "1.0.11", + "fstream-ignore": "1.0.5", + "once": "1.4.0", + "readable-stream": "2.2.9", + "rimraf": "2.6.1", + "tar": "2.2.1", + "uid-number": "0.0.6" + } + }, + "tough-cookie": { + "version": "2.3.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "punycode": "1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "dev": true, + "optional": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true, + "dev": true, + "optional": true + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "uuid": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "verror": { + "version": "1.3.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "extsprintf": "1.0.2" + } + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "gaze": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.2.tgz", + "integrity": "sha1-hHIkZ3rbiHDWeSV+0ziP22HkAQU=", + "dev": true, + "requires": { + "globule": "1.2.0" + } + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", + "dev": true + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "dev": true, + "requires": { + "is-property": "1.0.2" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true + }, + "get-proxy": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-1.1.0.tgz", + "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", + "dev": true, + "requires": { + "rc": "1.2.2" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "gifsicle": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-3.0.4.tgz", + "integrity": "sha1-9Fy17RAWW2ZdySng6TKLbIId+js=", + "dev": true, + "requires": { + "bin-build": "2.2.0", + "bin-wrapper": "3.0.2", + "logalot": "2.1.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "2.0.1" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "dev": true, + "requires": { + "extend": "3.0.1", + "glob": "5.0.15", + "glob-parent": "3.1.0", + "micromatch": "2.3.11", + "ordered-read-streams": "0.3.0", + "through2": "0.6.5", + "to-absolute-glob": "0.1.1", + "unique-stream": "2.2.1" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "1.0.2", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "globule": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.0.tgz", + "integrity": "sha1-HcScaCLdnoovoAuiopUAboZkvQk=", + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "minimatch": "3.0.4" + } + }, + "glogg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz", + "integrity": "sha1-f+DxmfV6yQbPUS/urY+Q7kooT8U=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "got": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-5.7.1.tgz", + "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", + "dev": true, + "requires": { + "create-error-class": "3.0.2", + "duplexer2": "0.1.4", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.0", + "node-status-codes": "1.0.0", + "object-assign": "4.1.1", + "parse-json": "2.2.0", + "pinkie-promise": "2.0.1", + "read-all-stream": "3.1.0", + "readable-stream": "2.3.3", + "timed-out": "3.1.3", + "unzip-response": "1.0.2", + "url-parse-lax": "1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", + "dev": true + }, + "gulp-decompress": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-1.2.0.tgz", + "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=", + "dev": true, + "requires": { + "archive-type": "3.2.0", + "decompress": "3.0.0", + "gulp-util": "3.0.8", + "readable-stream": "2.3.3" + } + }, + "gulp-rename": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.2.2.tgz", + "integrity": "sha1-OtRCh2PwXidk3sHGfYaNsnVoeBc=", + "dev": true + }, + "gulp-sourcemaps": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", + "dev": true, + "requires": { + "convert-source-map": "1.5.0", + "graceful-fs": "4.1.11", + "strip-bom": "2.0.0", + "through2": "2.0.3", + "vinyl": "1.2.0" + }, + "dependencies": { + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + } + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "1.0.0", + "array-uniq": "1.0.3", + "beeper": "1.1.1", + "chalk": "1.1.3", + "dateformat": "2.2.0", + "fancy-log": "1.3.0", + "gulplog": "1.0.0", + "has-gulplog": "0.1.0", + "lodash._reescape": "3.0.0", + "lodash._reevaluate": "3.0.0", + "lodash._reinterpolate": "3.0.0", + "lodash.template": "3.6.2", + "minimist": "1.2.0", + "multipipe": "0.1.2", + "object-assign": "3.0.0", + "replace-ext": "0.0.1", + "through2": "2.0.3", + "vinyl": "0.5.3" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "1.0.3", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "1.0.0" + } + }, + "har-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", + "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "commander": "2.12.2", + "is-my-json-valid": "2.16.1", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA==", + "dev": true + } + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "dev": true, + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha1-ZuodhW206KVHDK32/OI65SRO8uE=", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.0" + } + }, + "hawk": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", + "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "dev": true, + "requires": { + "boom": "2.10.1", + "cryptiles": "2.0.5", + "hoek": "2.16.3", + "sntp": "1.0.9" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", + "dev": true, + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.0", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", + "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "html-minifier": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-2.1.7.tgz", + "integrity": "sha1-kFHW/LvPIU7TB+GtdPQyu5rWVcw=", + "dev": true, + "requires": { + "change-case": "3.0.1", + "clean-css": "3.4.28", + "commander": "2.9.0", + "he": "1.1.1", + "ncname": "1.0.0", + "relateurl": "0.2.7", + "uglify-js": "2.6.4" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "dev": true, + "requires": { + "graceful-readlink": "1.0.1" + } + } + } + }, + "http-signature": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", + "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "dev": true, + "requires": { + "assert-plus": "0.2.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "6.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", + "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "source-map": "0.6.1", + "supports-color": "4.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "ieee754": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", + "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "iframe-resizer": { + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/iframe-resizer/-/iframe-resizer-3.5.15.tgz", + "integrity": "sha512-ZdmPmqafz5Vy2ooUW38LTl6ACcArfK53FQPtR8gOwb74nXiMRkuOV4Vr4w1LHu/YDVlnB1D7qONVX6BUD5DbHA==" + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==", + "dev": true + }, + "image-webpack-loader": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/image-webpack-loader/-/image-webpack-loader-3.4.2.tgz", + "integrity": "sha512-Y0FbngBbdzXNBfUtecoCs62Ow7ggeIAmhCVqzV6+SK+W4Wi4ZPkn8q/N4JvVQnA1EUq17KW9PzBRvSwYVQsSYA==", + "dev": true, + "requires": { + "imagemin": "5.3.1", + "imagemin-gifsicle": "5.2.0", + "imagemin-mozjpeg": "6.0.0", + "imagemin-optipng": "5.2.1", + "imagemin-pngquant": "5.0.1", + "imagemin-svgo": "5.2.4", + "imagemin-webp": "4.0.0", + "loader-utils": "1.1.0", + "object-assign": "4.1.1" + } + }, + "imagemin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-5.3.1.tgz", + "integrity": "sha1-8Zwu7h5xumxlWMUV+fyWaAGJptQ=", + "dev": true, + "requires": { + "file-type": "4.4.0", + "globby": "6.1.0", + "make-dir": "1.1.0", + "p-pipe": "1.2.0", + "pify": "2.3.0", + "replace-ext": "1.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "imagemin-gifsicle": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/imagemin-gifsicle/-/imagemin-gifsicle-5.2.0.tgz", + "integrity": "sha512-K01m5QuPK+0en8oVhiOOAicF7KjrHlCZxS++mfLI2mV/Ksfq/Y9nCXCWDz6jRv13wwlqe5T7hXT+ji2DnLc2yQ==", + "dev": true, + "requires": { + "exec-buffer": "3.2.0", + "gifsicle": "3.0.4", + "is-gif": "1.0.0" + } + }, + "imagemin-mozjpeg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/imagemin-mozjpeg/-/imagemin-mozjpeg-6.0.0.tgz", + "integrity": "sha1-caMqRXqhsmEXpo7u8tmxkMLlCR4=", + "dev": true, + "requires": { + "exec-buffer": "3.2.0", + "is-jpg": "1.0.0", + "mozjpeg": "4.1.1" + } + }, + "imagemin-optipng": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", + "integrity": "sha1-0i2kEsCfX/AKQzmWC5ioix2+hpU=", + "dev": true, + "requires": { + "exec-buffer": "3.2.0", + "is-png": "1.1.0", + "optipng-bin": "3.1.4" + } + }, + "imagemin-pngquant": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/imagemin-pngquant/-/imagemin-pngquant-5.0.1.tgz", + "integrity": "sha1-2KMp2lU6+iJrEc5i3r4Lfje0OeY=", + "dev": true, + "requires": { + "exec-buffer": "3.2.0", + "is-png": "1.1.0", + "pngquant-bin": "3.1.1" + } + }, + "imagemin-svgo": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-5.2.4.tgz", + "integrity": "sha512-1bNZdlWVKdfxzu0xDD1pWjwK/G8FLcztUh/GWaI7xLgCFrn0j35o+uBbY7VcdY2AmKgiLYTXhrzrbkQk6xj8aA==", + "dev": true, + "requires": { + "is-svg": "2.1.0", + "svgo": "0.7.2" + } + }, + "imagemin-webp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/imagemin-webp/-/imagemin-webp-4.0.0.tgz", + "integrity": "sha1-osrzK19SrSG5Sab+2O/JAdr3JJ0=", + "dev": true, + "requires": { + "cwebp-bin": "3.2.0", + "exec-buffer": "3.2.0", + "is-cwebp-readable": "1.0.3" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "dev": true + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", + "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", + "dev": true + }, + "interpret": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.0.4.tgz", + "integrity": "sha1-ggzdWIuGj/sZGoCVBtbJyPISsbA=", + "dev": true + }, + "invariant": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.2.tgz", + "integrity": "sha1-nh9WrArNtr8wMwbzOL47IErmA2A=", + "dev": true, + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "ip-regex": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-1.0.3.tgz", + "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=", + "dev": true + }, + "is-absolute": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-0.1.7.tgz", + "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", + "dev": true, + "requires": { + "is-relative": "0.1.3" + } + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "1.10.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-bzip2": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-bzip2/-/is-bzip2-1.0.0.tgz", + "integrity": "sha1-XuWOqlounIDiFAe+3yOuWsCRs/w=", + "dev": true + }, + "is-cwebp-readable": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-cwebp-readable/-/is-cwebp-readable-1.0.3.tgz", + "integrity": "sha1-mo/eK+1380F66TcSWMWOLsMoURg=", + "dev": true, + "requires": { + "file-type": "3.9.0" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-gif": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-gif/-/is-gif-1.0.0.tgz", + "integrity": "sha1-ptKumIkwB7/6l6HYwB1jIFgyCX4=", + "dev": true + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-gzip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz", + "integrity": "sha1-bKiwe5nHeZgCWQDlVc7Y7YCHmoM=", + "dev": true + }, + "is-jpg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-jpg/-/is-jpg-1.0.0.tgz", + "integrity": "sha1-KVnBfnNDDbOCZNp1uQ3VTy2G2hw=", + "dev": true + }, + "is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "is-my-json-valid": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", + "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", + "dev": true, + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-natural-number": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-2.1.1.tgz", + "integrity": "sha1-fUxXKDd+84bD4ZSpkRv1fG3DNec=", + "dev": true + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + } + } + }, + "is-png": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-png/-/is-png-1.1.0.tgz", + "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=", + "dev": true + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", + "dev": true + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-relative": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-0.1.3.tgz", + "integrity": "sha1-kF/uiuhvRbPsYUvDwVyGnfCHboI=", + "dev": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "1.1.1" + } + }, + "is-tar": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-tar/-/is-tar-1.0.0.tgz", + "integrity": "sha1-L2suF5LB9bs2UZrKqdZcDSb+hT0=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", + "dev": true, + "requires": { + "upper-case": "1.1.3" + } + }, + "is-url": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.2.tgz", + "integrity": "sha1-SYkFpZO/R8wtnn9zg3K792lsfyY=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", + "dev": true + }, + "is-zip": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-zip/-/is-zip-1.0.0.tgz", + "integrity": "sha1-R7Co/004p2QxzP2ZqOFaTIa6IyU=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "jquery": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-2.2.4.tgz", + "integrity": "sha1-LInWiJterFIqfuoywUUhVZxsvwI=" + }, + "jquery-lazy": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/jquery-lazy/-/jquery-lazy-1.7.7.tgz", + "integrity": "sha512-XPPWWMMQ0QPpjv2psFVOT2phmwSCwMQ9G+3QPpnOBFd7mVCnrfqoNKjZgbfKNo+Ely0q3bPCquRMTf99qqn5Dw==", + "requires": { + "jquery": "2.2.4" + } + }, + "js-base64": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.3.2.tgz", + "integrity": "sha512-Y2/+DnfJJXT1/FCwUebUhLWb3QihxiSC42+ctHLGogmW2jPY6LCapMdFZXRvVP2z6qyKW7s6qncE/9gSqZiArw==", + "dev": true + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "dev": true, + "requires": { + "argparse": "1.0.9", + "esprima": "2.7.3" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", + "dev": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=", + "dev": true + }, + "lazy-req": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/lazy-req/-/lazy-req-1.1.0.tgz", + "integrity": "sha1-va6+rTD42CQDnODOFJ1Nqge6H6w=", + "dev": true + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "1.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.4", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", + "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", + "dev": true + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash.keys": "3.1.2" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._createassigner": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "dev": true, + "requires": { + "lodash._bindcallback": "3.0.1", + "lodash._isiterateecall": "3.0.9", + "lodash.restparam": "3.6.1" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "3.0.1" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "3.9.1", + "lodash.isarguments": "3.1.0", + "lodash.isarray": "3.0.4" + } + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.0.tgz", + "integrity": "sha1-FQzwoWeR9ZA7iJHqsVRgknS96lU=", + "dev": true + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "3.0.1", + "lodash._basetostring": "3.0.1", + "lodash._basevalues": "3.0.0", + "lodash._isiterateecall": "3.0.9", + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0", + "lodash.keys": "3.1.2", + "lodash.restparam": "3.6.1", + "lodash.templatesettings": "3.1.1" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.escape": "3.2.0" + } + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "logalot": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/logalot/-/logalot-2.1.0.tgz", + "integrity": "sha1-X46MkNME7fElMJUaVVSruMXj9VI=", + "dev": true, + "requires": { + "figures": "1.7.0", + "squeak": "1.3.0" + } + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "3.0.2" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", + "dev": true + }, + "lpad-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lpad-align/-/lpad-align-1.1.2.tgz", + "integrity": "sha1-IfYArBwwlcPG5JfuZyce4ISB/p4=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "indent-string": "2.1.0", + "longest": "1.0.1", + "meow": "3.7.0" + } + }, + "lru-cache": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "macaddress": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/macaddress/-/macaddress-0.2.8.tgz", + "integrity": "sha1-WQTcU3w57G2+/q6QIycTX6hRHxI=", + "dev": true + }, + "make-dir": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", + "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "dev": true, + "requires": { + "pify": "3.0.0" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + } + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", + "dev": true + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "minimalistic-assert": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", + "integrity": "sha1-cCvi3aazf0g2vLP121ZkG2Sh09M=", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.8" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + }, + "mississippi": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.0.tgz", + "integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=", + "dev": true, + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.1", + "end-of-stream": "1.4.0", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "1.0.3", + "pumpify": "1.3.5", + "stream-each": "1.2.2", + "through2": "2.0.3" + }, + "dependencies": { + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dev": true, + "requires": { + "for-in": "0.1.8", + "is-extendable": "0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", + "dev": true + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "moment": { + "version": "2.19.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.4.tgz", + "integrity": "sha512-1xFTAknSLfc47DIxHDUbnJWC+UwgWxATmymaxIPQpmMh7LBm7ZbwVEsuushqwL2GYZU0jie4xO+TK44hJPjNSQ==" + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "mozjpeg": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/mozjpeg/-/mozjpeg-4.1.1.tgz", + "integrity": "sha1-hZAwsk9omlPbm0DwFg2JGVuI/VA=", + "dev": true, + "requires": { + "bin-build": "2.2.0", + "bin-wrapper": "3.0.2", + "logalot": "2.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + }, + "dependencies": { + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "1.1.14" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "nan": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.8.0.tgz", + "integrity": "sha1-7XFfP+neArV6XmJS2QqWZ14fCFo=", + "dev": true + }, + "ncname": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ncname/-/ncname-1.0.0.tgz", + "integrity": "sha1-W1etGLHKCShk72Kwse2BlPODtxw=", + "dev": true, + "requires": { + "xml-char-classes": "1.0.0" + } + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "1.1.4" + } + }, + "node-gyp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.6.2.tgz", + "integrity": "sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA=", + "dev": true, + "requires": { + "fstream": "1.0.11", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "nopt": "3.0.6", + "npmlog": "4.1.2", + "osenv": "0.1.4", + "request": "2.79.0", + "rimraf": "2.6.2", + "semver": "5.3.0", + "tar": "2.2.1", + "which": "1.3.0" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "dev": true, + "requires": { + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.1.7", + "events": "1.1.1", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.0", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.3", + "stream-browserify": "2.0.1", + "stream-http": "2.7.2", + "string_decoder": "1.0.3", + "timers-browserify": "2.0.4", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.10.3", + "vm-browserify": "0.0.4" + } + }, + "node-sass": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.7.2.tgz", + "integrity": "sha512-CaV+wLqZ7//Jdom5aUFCpGNoECd7BbNhjuwdsX/LkXBrHl8eb1Wjw4HvWqcFvhr5KuNgAk8i/myf/MQ1YYeroA==", + "dev": true, + "requires": { + "async-foreach": "0.1.3", + "chalk": "1.1.3", + "cross-spawn": "3.0.1", + "gaze": "1.1.2", + "get-stdin": "4.0.1", + "glob": "7.1.2", + "in-publish": "2.0.0", + "lodash.assign": "4.2.0", + "lodash.clonedeep": "4.5.0", + "lodash.mergewith": "4.6.0", + "meow": "3.7.0", + "mkdirp": "0.5.1", + "nan": "2.8.0", + "node-gyp": "3.6.2", + "npmlog": "4.1.2", + "request": "2.79.0", + "sass-graph": "2.2.4", + "stdout-stream": "1.4.0", + "true-case-path": "1.0.2" + }, + "dependencies": { + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "dev": true, + "requires": { + "lru-cache": "4.1.1", + "which": "1.3.0" + } + } + } + }, + "node-status-codes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz", + "integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=", + "dev": true + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.4.1", + "validate-npm-package-license": "3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "2.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-path": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", + "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", + "dev": true + }, + "optipng-bin": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/optipng-bin/-/optipng-bin-3.1.4.tgz", + "integrity": "sha1-ldNPLEiHBPb9cGBr/qDGWfHZXYQ=", + "dev": true, + "requires": { + "bin-build": "2.2.0", + "bin-wrapper": "3.0.2", + "logalot": "2.1.0" + } + }, + "ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "dev": true, + "requires": { + "is-stream": "1.1.0", + "readable-stream": "2.3.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-filter-obj": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/os-filter-obj/-/os-filter-obj-1.0.3.tgz", + "integrity": "sha1-WRUzDZDs7VV9LZOKMcbdIU2cY60=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", + "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", + "dev": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.1.0.tgz", + "integrity": "sha1-sH/y2aXYi+yAYDWJWiurZqJ5iLw=", + "dev": true + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "1.1.0" + } + }, + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", + "dev": true + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "2.3.2" + } + }, + "parse-asn1": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", + "integrity": "sha1-N8T5t+06tlx0gXtfJICTf7+XxxI=", + "dev": true, + "requires": { + "asn1.js": "4.9.2", + "browserify-aes": "1.1.1", + "create-hash": "1.1.3", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.14" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", + "dev": true, + "requires": { + "camel-case": "3.0.0", + "upper-case-first": "1.1.2" + } + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", + "dev": true, + "requires": { + "no-case": "2.3.2" + } + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.14.tgz", + "integrity": "sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA==", + "dev": true, + "requires": { + "create-hash": "1.1.3", + "create-hmac": "1.1.6", + "ripemd160": "2.0.1", + "safe-buffer": "5.1.1", + "sha.js": "2.4.9" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "picturefill": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/picturefill/-/picturefill-3.0.2.tgz", + "integrity": "sha1-+j01//vvWrUwD+KtncqPLjbLons=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "2.1.0" + } + }, + "pngquant-bin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pngquant-bin/-/pngquant-bin-3.1.1.tgz", + "integrity": "sha1-0STZinWpSH9AwWQLTb/Lsr1aH9E=", + "dev": true, + "requires": { + "bin-build": "2.2.0", + "bin-wrapper": "3.0.2", + "logalot": "2.1.0" + } + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "1.1.3", + "js-base64": "2.3.2", + "source-map": "0.5.7", + "supports-color": "3.2.3" + }, + "dependencies": { + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + } + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-message-helpers": "2.0.0", + "reduce-css-calc": "1.3.0" + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "1.1.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "uniqs": "2.0.0" + } + }, + "postcss-filter-plugins": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz", + "integrity": "sha1-bYWGJTTXNaxCDkqFgG4fXUKG2Ew=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "uniqid": "4.1.1" + } + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1", + "postcss-load-options": "1.2.0", + "postcss-load-plugins": "2.3.0" + } + }, + "postcss-load-options": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1" + } + }, + "postcss-load-plugins": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "dev": true, + "requires": { + "cosmiconfig": "2.2.2", + "object-assign": "4.1.1" + } + }, + "postcss-loader": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.0.9.tgz", + "integrity": "sha512-sgoXPtmgVT3aBAhU47Kig8oPF+mbXl8Unjvtz1Qj1q2D2EvSVJW2mKJNzxv5y/LvA9xWwuvdysvhc7Zn80UWWw==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "postcss": "6.0.14", + "postcss-load-config": "1.2.0", + "schema-utils": "0.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", + "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "source-map": "0.6.1", + "supports-color": "4.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "1.7.7", + "caniuse-api": "1.6.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3", + "vendors": "1.0.1" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "1.0.30000765", + "electron-to-chromium": "1.3.27" + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "uniqs": "2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-selector-parser": "2.2.3" + } + }, + "postcss-modules-extract-imports": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", + "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", + "dev": true, + "requires": { + "postcss": "6.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", + "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "source-map": "0.6.1", + "supports-color": "4.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", + "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "source-map": "0.6.1", + "supports-color": "4.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "0.7.0", + "postcss": "6.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", + "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "source-map": "0.6.1", + "supports-color": "4.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "1.1.0", + "postcss": "6.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", + "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "source-map": "0.6.1", + "supports-color": "4.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "1.9.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "5.2.18" + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0" + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "dev": true, + "requires": { + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "2.1.0", + "postcss": "5.2.18", + "postcss-value-parser": "3.3.0", + "svgo": "0.7.2" + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "5.2.18", + "uniqs": "2.0.0" + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "1.0.1", + "postcss": "5.2.18", + "uniqs": "2.0.0" + } + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "prettier": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.8.2.tgz", + "integrity": "sha512-fHWjCwoRZgjP1rvLP7OGqOznq7xH1sHMQUFLX8qLRO79hI57+6xbc5vB904LxEkCfgFgyr3vv06JkafgCSzoZg==", + "dev": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.0.tgz", + "integrity": "sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY=", + "dev": true, + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.1.3", + "parse-asn1": "5.1.0", + "randombytes": "2.0.5" + } + }, + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz", + "integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=", + "dev": true, + "requires": { + "duplexify": "3.5.1", + "inherits": "2.0.3", + "pump": "1.0.3" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", + "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "dev": true, + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "randombytes": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.5.tgz", + "integrity": "sha512-8T7Zn1AhMsQ/HI1SjcCfT/t4ii3eAqco3yOcSzS4mozsOz69lHLsoMXmF9nZgnFanYscnSlUSgs8uZyKzpE6kg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "randomfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.3.tgz", + "integrity": "sha512-YL6GrhrWoic0Eq8rXVbMptH7dAxCs0J+mh5Y0euNekPPYaxEmdVGim6GdoxoRzKW2yJoU8tueifS7mYxvcFDEQ==", + "dev": true, + "requires": { + "randombytes": "2.0.5", + "safe-buffer": "5.1.1" + } + }, + "rc": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.2.tgz", + "integrity": "sha1-2M6ctX6NZNnHut2YdsfDTL48cHc=", + "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.4", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "read-all-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", + "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1", + "readable-stream": "2.3.3" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + } + } + }, + "readable-stream": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", + "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "1.0.7", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.3", + "set-immediate-shim": "1.0.1" + } + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "3.1.3", + "private": "0.1.8", + "source-map": "0.5.7" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "0.4.2", + "math-expression-evaluator": "1.2.17", + "reduce-function-call": "1.0.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "0.4.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "regenerate": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", + "integrity": "sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz", + "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==", + "dev": true + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "regex-parser": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.8.tgz", + "integrity": "sha1-2kwM2lqChVkJQWiTD0VfUytv+6w=", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "1.3.3", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "request": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", + "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "dev": true, + "requires": { + "aws-sign2": "0.6.0", + "aws4": "1.6.0", + "caseless": "0.11.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "qs": "6.3.2", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.4.3", + "uuid": "3.1.0" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "resolve": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "dev": true, + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resolve-url-loader": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-2.2.1.tgz", + "integrity": "sha512-ywToZt/yttp4qG/SiiGMLAgaGuSaWSujAaf3WCadXehvQLxIgKFmMOSegaoH9Laa70Ayl4kti0zCAqLR48H/Mw==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "1.1.0", + "camelcase": "4.1.0", + "convert-source-map": "1.5.0", + "loader-utils": "1.1.0", + "lodash.defaults": "4.2.0", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.5.7", + "urix": "0.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + } + } + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "requires": { + "convert-source-map": "0.3.5", + "css": "2.2.1" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc=", + "dev": true, + "requires": { + "hash-base": "2.0.2", + "inherits": "2.0.3" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "1.2.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "dev": true, + "requires": { + "glob": "7.1.2", + "lodash": "4.17.4", + "scss-tokenizer": "0.2.3", + "yargs": "7.1.0" + } + }, + "sass-loader": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.6.tgz", + "integrity": "sha512-c3/Zc+iW+qqDip6kXPYLEgsAu2lf4xz0EZDplB7EmSUMda12U1sGJPetH55B/j9eu0bTtKzKlNPWWyYC7wFNyQ==", + "dev": true, + "requires": { + "async": "2.6.0", + "clone-deep": "0.3.0", + "loader-utils": "1.1.0", + "lodash.tail": "4.1.1", + "pify": "3.0.0" + } + }, + "sass-mq": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/sass-mq/-/sass-mq-3.3.2.tgz", + "integrity": "sha1-NHLgTDGkMrzVWztgTtxyrppN7xo=" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "5.3.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "dev": true, + "requires": { + "js-base64": "2.3.2", + "source-map": "0.4.4" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "dev": true, + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "dev": true, + "requires": { + "commander": "2.8.1" + } + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", + "dev": true + }, + "semver-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-1.0.0.tgz", + "integrity": "sha1-kqSWkGX5xwxpR1PVUkj8aPj2Usk=", + "dev": true + }, + "semver-truncate": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/semver-truncate/-/semver-truncate-1.1.2.tgz", + "integrity": "sha1-V/Qd5pcHpicJp+AQS6IRcQnqR+g=", + "dev": true, + "requires": { + "semver": "5.4.1" + } + }, + "sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=", + "dev": true, + "requires": { + "no-case": "2.3.2", + "upper-case-first": "1.1.2" + } + }, + "serialize-javascript": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", + "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "sha.js": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.9.tgz", + "integrity": "sha512-G8zektVqbiPHrylgew9Zg1VRB1L/DtXNUVAM6q4QLy8NE3qtHlFXTf8VLL4k1Yl6c7NMjtZUTdXV+X44nFaT6A==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.1" + } + }, + "shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "dev": true, + "requires": { + "is-extendable": "0.1.1", + "kind-of": "2.0.1", + "lazy-cache": "0.2.7", + "mixin-object": "2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slick-carousel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", + "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==" + }, + "snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=", + "dev": true, + "requires": { + "no-case": "2.3.2" + } + }, + "sntp": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", + "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "dev": true, + "requires": { + "hoek": "2.16.3" + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "1.1.0" + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.3.1.tgz", + "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", + "dev": true, + "requires": { + "atob": "1.1.3", + "resolve-url": "0.2.1", + "source-map-url": "0.3.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "0.5.7" + } + }, + "source-map-url": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.3.0.tgz", + "integrity": "sha1-fsrxO1e80J2opAxdJp2zN5nUqvk=", + "dev": true + }, + "sparkles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "dev": true + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "squeak": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/squeak/-/squeak-1.3.0.tgz", + "integrity": "sha1-MwRQN7ZDiLVnZ0uEMiplIQc5FsM=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "console-stream": "0.1.1", + "lpad-align": "1.1.2" + } + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "ssri": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.0.0.tgz", + "integrity": "sha512-728D4yoQcQm1ooZvSbywLkV1RjfITZXh0oWrhM/lnsx3nAHx7LsRGJWB/YyvoceAYRq98xqbstiN4JBv1/wNHg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stat-mode": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", + "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", + "dev": true + }, + "stdout-stream": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.0.tgz", + "integrity": "sha1-osfIWH5U2UJ+qe2zrD8s1SLfN4s=", + "dev": true, + "requires": { + "readable-stream": "2.3.3" + } + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.3" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "0.1.4", + "readable-stream": "2.3.3" + } + }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "dev": true, + "requires": { + "end-of-stream": "1.4.0", + "stream-shift": "1.0.0" + } + }, + "stream-http": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", + "integrity": "sha512-c0yTD2rbQzXtSsFSVhtpvY/vS6u066PcXOX9kBB3mSO76RiUQzL340uJkGBWnlBg4/HZzqiUXtaVA7wcRcJgEw==", + "dev": true, + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.3", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-bom-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", + "dev": true, + "requires": { + "first-chunk-stream": "1.0.0", + "strip-bom": "2.0.0" + } + }, + "strip-dirs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-1.1.1.tgz", + "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", + "dev": true, + "requires": { + "chalk": "1.1.3", + "get-stdin": "4.0.1", + "is-absolute": "0.1.7", + "is-natural-number": "2.1.1", + "minimist": "1.2.0", + "sum-up": "1.0.3" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "strip-outer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.0.tgz", + "integrity": "sha1-qsC6YNLpDF1PJ1/Yhp/ZotMQ/7g=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "style-loader": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.14.1.tgz", + "integrity": "sha1-J7m2yYIq34xHSOAqHvriKUBdeaU=", + "dev": true, + "requires": { + "loader-utils": "1.1.0" + } + }, + "sum-up": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sum-up/-/sum-up-1.0.3.tgz", + "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", + "dev": true, + "requires": { + "chalk": "1.1.3" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "svg-url-loader": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/svg-url-loader/-/svg-url-loader-2.3.0.tgz", + "integrity": "sha1-bqA/OH7Qm+Go8nDfaElXPeynF7M=", + "dev": true, + "requires": { + "file-loader": "1.1.5", + "loader-utils": "1.1.0" + }, + "dependencies": { + "file-loader": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.5.tgz", + "integrity": "sha512-RzGHDatcVNpGISTvCpfUfOGpYuSR7HSsSg87ki+wF6rw1Hm0RALPTiAdsxAq1UwLf0RRhbe22/eHK6nhXspiOQ==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "schema-utils": "0.3.0" + } + } + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "1.0.4", + "colors": "1.1.2", + "csso": "2.3.2", + "js-yaml": "3.7.0", + "mkdirp": "0.5.1", + "sax": "1.2.4", + "whet.extend": "0.9.9" + } + }, + "swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", + "dev": true, + "requires": { + "lower-case": "1.1.4", + "upper-case": "1.1.3" + } + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "dev": true, + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-stream": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.5.tgz", + "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", + "dev": true, + "requires": { + "bl": "1.2.1", + "end-of-stream": "1.4.0", + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + }, + "temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", + "dev": true + }, + "tempfile": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-2.0.0.tgz", + "integrity": "sha1-awRGhWqbERTRhW/8vlCczLCXcmU=", + "dev": true, + "requires": { + "temp-dir": "1.0.0", + "uuid": "3.1.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": "1.0.34", + "xtend": "4.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "dev": true, + "requires": { + "through2": "2.0.3", + "xtend": "4.0.1" + }, + "dependencies": { + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + } + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "timed-out": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-3.1.3.tgz", + "integrity": "sha1-lYYL/MXHbCd/j4Mm/Q9bLiDrohc=", + "dev": true + }, + "timers-browserify": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz", + "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==", + "dev": true, + "requires": { + "setimmediate": "1.0.5" + } + }, + "title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", + "dev": true, + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "to-absolute-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "dev": true, + "requires": { + "extend-shallow": "2.0.1" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "dev": true, + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.2.tgz", + "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=", + "dev": true, + "requires": { + "glob": "6.0.4" + }, + "dependencies": { + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "dev": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", + "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", + "dev": true + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz", + "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=", + "dev": true, + "requires": { + "async": "0.2.10", + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqid": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-4.1.1.tgz", + "integrity": "sha1-iSIN32t1GuUrX3JISGNShZa7hME=", + "dev": true, + "requires": { + "macaddress": "0.2.8" + } + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "0.1.4" + } + }, + "unique-stream": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", + "dev": true, + "requires": { + "json-stable-stringify": "1.0.1", + "through2-filter": "2.0.0" + } + }, + "unzip-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz", + "integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", + "dev": true, + "requires": { + "upper-case": "1.1.3" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-loader": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz", + "integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==", + "dev": true, + "requires": { + "loader-utils": "1.1.0", + "mime": "1.3.6" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "1.0.4" + } + }, + "url-regex": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/url-regex/-/url-regex-3.2.0.tgz", + "integrity": "sha1-260eDJ4p4QXdCx8J9oYvf9tIJyQ=", + "dev": true, + "requires": { + "ip-regex": "1.0.3" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", + "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==", + "dev": true + }, + "vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "vendors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.1.tgz", + "integrity": "sha1-N61zyO5Bf7PVgOeFMSMH0nSEfyI=", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + }, + "dependencies": { + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + } + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "1.0.3", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + }, + "dependencies": { + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + } + } + }, + "vinyl-assign": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/vinyl-assign/-/vinyl-assign-1.2.1.tgz", + "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=", + "dev": true, + "requires": { + "object-assign": "4.1.1", + "readable-stream": "2.3.3" + } + }, + "vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", + "dev": true, + "requires": { + "duplexify": "3.5.1", + "glob-stream": "5.3.5", + "graceful-fs": "4.1.11", + "gulp-sourcemaps": "1.6.0", + "is-valid-glob": "0.3.0", + "lazystream": "1.0.0", + "lodash.isequal": "4.5.0", + "merge-stream": "1.0.1", + "mkdirp": "0.5.1", + "object-assign": "4.1.1", + "readable-stream": "2.3.3", + "strip-bom": "2.0.0", + "strip-bom-stream": "1.0.0", + "through2": "2.0.3", + "through2-filter": "2.0.0", + "vali-date": "1.0.0", + "vinyl": "1.2.0" + }, + "dependencies": { + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "2.3.3", + "xtend": "4.0.1" + } + } + } + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "vue": { + "version": "2.5.11", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.11.tgz", + "integrity": "sha512-FZzUIvJa1jsFSfy6OITgjzoCtnxI8uHkewa2QCCCIgRj7ObsalXKLTf3S5sBP+kyusTctl3fKej+NHoBUCVPlA==" + }, + "vue-hot-reload-api": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-1.3.3.tgz", + "integrity": "sha1-VNItg3hqh4ST9jnMdrynmSojvkY=", + "dev": true + }, + "vue-html-loader": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/vue-html-loader/-/vue-html-loader-1.2.4.tgz", + "integrity": "sha1-VM5Im+BgZckdwqEXMSLz4ATgolM=", + "dev": true, + "requires": { + "es6-templates": "0.2.3", + "fastparse": "1.1.1", + "html-minifier": "2.1.7", + "loader-utils": "1.1.0", + "object-assign": "4.1.1" + } + }, + "vue-loader": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-13.5.0.tgz", + "integrity": "sha512-O0+ZU1oyLlDXSAQB7pV/pwVt3wJLfyhXtnGpCVFBGMKGC0Yp9Un7ULFHKejrFEYaMBKY0s6h4iJzjMdSngNA2g==", + "dev": true, + "requires": { + "consolidate": "0.14.5", + "hash-sum": "1.0.2", + "loader-utils": "1.1.0", + "lru-cache": "4.1.1", + "postcss": "6.0.14", + "postcss-load-config": "1.2.0", + "postcss-selector-parser": "2.2.3", + "prettier": "1.8.2", + "resolve": "1.5.0", + "source-map": "0.6.1", + "vue-hot-reload-api": "2.2.3", + "vue-style-loader": "3.0.3", + "vue-template-es2015-compiler": "1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "dev": true, + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", + "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "dev": true, + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "4.5.0" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "postcss": { + "version": "6.0.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.14.tgz", + "integrity": "sha512-NJ1z0f+1offCgadPhz+DvGm5Mkci+mmV5BqD13S992o0Xk9eElxUfPPF+t2ksH5R/17gz4xVK8KWocUQ5o3Rog==", + "dev": true, + "requires": { + "chalk": "2.3.0", + "source-map": "0.6.1", + "supports-color": "4.5.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + }, + "vue-hot-reload-api": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.2.3.tgz", + "integrity": "sha512-LNdf9SYan0S8DurNuMzBE6yZGI8B42CRvpm7OtyH3OkhYYlNZOqcLAYsPszsxKnLfo5p93Oszw4qSwbHTJdrow==", + "dev": true + } + } + }, + "vue-style-loader": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.0.3.tgz", + "integrity": "sha512-P/ihpaZKU23T1kq3E0y4c+F8sbm1HQO69EFYoLoGMSGVAHroHsGir/WQ9qUavP8dyFYHmXenzHaJ/nqd8vfaxw==", + "dev": true, + "requires": { + "hash-sum": "1.0.2", + "loader-utils": "1.1.0" + } + }, + "vue-template-compiler": { + "version": "2.5.11", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.11.tgz", + "integrity": "sha512-tlEyfeK1TkoO/+w7QIYP1fjYEuJSf60XchxYH3gUSYKeW4blPqM2BtA29y50fU6Tjm9eLUgUy8qGMA2euOr4Qw==", + "dev": true, + "requires": { + "de-indent": "1.0.2", + "he": "1.1.1" + } + }, + "vue-template-es2015-compiler": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz", + "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==", + "dev": true + }, + "ware": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", + "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", + "dev": true, + "requires": { + "wrap-fn": "0.1.5" + } + }, + "watchpack": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", + "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", + "dev": true, + "requires": { + "async": "2.6.0", + "chokidar": "1.7.0", + "graceful-fs": "4.1.11" + } + }, + "webpack": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz", + "integrity": "sha512-MjAA0ZqO1ba7ZQJRnoCdbM56mmFpipOPUv/vQpwwfSI42p5PVDdoiuK2AL2FwFUVgT859Jr43bFZXRg/LNsqvg==", + "dev": true, + "requires": { + "acorn": "5.2.1", + "acorn-dynamic-import": "2.0.2", + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "async": "2.6.0", + "enhanced-resolve": "3.4.1", + "interpret": "1.0.4", + "json-loader": "0.5.7", + "json5": "0.5.1", + "loader-runner": "2.3.0", + "loader-utils": "0.2.17", + "memory-fs": "0.4.1", + "mkdirp": "0.5.1", + "node-libs-browser": "2.1.0", + "source-map": "0.5.7", + "supports-color": "3.2.3", + "tapable": "0.2.8", + "uglify-js": "2.8.29", + "watchpack": "1.4.0", + "webpack-sources": "1.0.2", + "yargs": "6.6.0" + }, + "dependencies": { + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "dev": true, + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1", + "object-assign": "4.1.1" + } + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "1.0.0" + } + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "yargs": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "4.2.1" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + } + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + } + } + }, + "webpack-sources": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.2.tgz", + "integrity": "sha512-Y7UddMCv6dGjy81nBv6nuQeFFIt5aalHm7uyDsAsW86nZwfOVPGRr3XMjEQLaT+WKo8rlzhC9qtbJvYKLtAwaw==", + "dev": true, + "requires": { + "source-list-map": "2.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "dev": true, + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wide-align": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", + "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "dev": true, + "requires": { + "string-width": "1.0.2" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrap-fn": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", + "integrity": "sha1-8htuQQFv9KfjFyDbxjoJAWvfmEU=", + "dev": true, + "requires": { + "co": "3.1.0" + }, + "dependencies": { + "co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha1-TqVOpaCJOBUxheFSEMaNkJK8G3g=", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xml-char-classes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/xml-char-classes/-/xml-char-classes-1.0.0.tgz", + "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "dev": true, + "requires": { + "camelcase": "3.0.0", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "y18n": "3.2.1", + "yargs-parser": "5.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "dev": true, + "requires": { + "camelcase": "3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + } + } + }, + "yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", + "dev": true, + "requires": { + "buffer-crc32": "0.2.13", + "fd-slicer": "1.0.1" + } + } + } +} diff --git a/web/typo3conf/ext/ep_theme/package.json b/web/typo3conf/ext/ep_theme/package.json new file mode 100644 index 00000000..4f1e245f --- /dev/null +++ b/web/typo3conf/ext/ep_theme/package.json @@ -0,0 +1,58 @@ +{ + "name": "epreisen", + "description": "EP Reisen TYPO3 website theme", + "version": "2.0.0", + "author": "Björn Fromme, fromme@dreipunktnull.com", + "license": "WTFPL", + "repository": "https://gitlab.com/dreipunktnull/ep_theme.git", + "scripts": { + "dev": "webpack --progress --watch", + "build": "webpack -p --progress --env production", + "tunnel": "ngrok http -host-header=rewrite eptypo3.burn.dpn:80" + }, + "devDependencies": { + "babel-core": "^6.22.1", + "babel-loader": "^7.1.1", + "babel-plugin-transform-runtime": "^6.22.0", + "babel-preset-env": "^1.3.2", + "babel-preset-es2015": "^6.13.2", + "babel-preset-stage-2": "^6.22.0", + "babel-register": "^6.22.0", + "babel-runtime": "^6.23.0", + "clean-webpack-plugin": "^0.1.11", + "copy-webpack-plugin": "^4.3.0", + "css-loader": "^0.28.0", + "extract-text-webpack-plugin": "^2.0.0", + "file-loader": "^0.11.1", + "image-webpack-loader": "^3.2.0", + "node-sass": "^4.7.2", + "postcss-loader": "^2.0.9", + "resolve-url-loader": "^2.2.1", + "sass-loader": "^6.0.3", + "style-loader": "^0.14.0", + "svg-url-loader": "^2.1.1", + "url-loader": "^0.5.9", + "vue-hot-reload-api": "^1.2.0", + "vue-html-loader": "^1.2.3", + "vue-loader": "^13.0.4", + "vue-style-loader": "^3.0.1", + "vue-template-compiler": "^2.5.11", + "webpack": "^2.6.1" + }, + "dependencies": { + "@fancyapps/fancybox": "^3.2.5", + "@fengyuanchen/datepicker": "^0.6.4", + "bootstrap": "^3.3.7", + "bourbon": "^4.3.2", + "cookieconsent": "^3.0.4", + "font-awesome": "^4.7.0", + "iframe-resizer": "^3.5.5", + "jquery": "2", + "jquery-lazy": "^1.7.7", + "moment": "^2.19.4", + "picturefill": "^3.0.2", + "sass-mq": "^3.3.2", + "slick-carousel": "^1.7.0", + "vue": "^2.5.11" + } +} diff --git a/web/typo3conf/ext/ep_theme/postcss.config.js b/web/typo3conf/ext/ep_theme/postcss.config.js new file mode 100644 index 00000000..f7e18f1c --- /dev/null +++ b/web/typo3conf/ext/ep_theme/postcss.config.js @@ -0,0 +1,6 @@ +module.exports = { + parser: false, + plugins: { + 'autoprefixer': {}, + } +}; diff --git a/web/typo3conf/ext/ep_theme/webpack.config.js b/web/typo3conf/ext/ep_theme/webpack.config.js new file mode 100644 index 00000000..a8483ec2 --- /dev/null +++ b/web/typo3conf/ext/ep_theme/webpack.config.js @@ -0,0 +1,149 @@ +const webpack = require('webpack'); +const ExtractTextPlugin = require('extract-text-webpack-plugin'); +const CleanWebpackPlugin = require('clean-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +module.exports = function webpackConfig (env) { + let devMode = (env !== 'production'); + return { + devtool: devMode ? 'sourcemap' : false, + entry: { + vendor: [ + 'jquery', 'vue', 'bootstrap/dist/js/bootstrap', 'slick-carousel', + 'moment', 'cookieconsent', 'picturefill', '@fancyapps/fancybox' + ], + main: './Resources/Private/Assets/js/main.js', + boarderweek: './Resources/Private/Assets/js/boarderweek.js', + snowzone: './Resources/Private/Assets/js/snowzone.js', + unichamp: './Resources/Private/Assets/js/unichamp.js', + rte: './Resources/Private/Assets/css/rte.css' + }, + output: { + path: __dirname + '/Resources/Public/js', + publicPath: '/typo3conf/ext/ep_theme/Resources/Public/', + filename: '[name].min.js' + }, + resolve: { + alias: { + jquery: __dirname + '/node_modules/jquery/src/jquery', + vue: devMode ? 'vue/dist/vue' : 'vue/dist/vue.min' + } + }, + externals: { + 'google': 'google' + }, + module: { + rules: [ + { + test: /\.js$/, + use: [ + { + loader: 'babel-loader', + options: { + presets: ['es2015'] + } + } + ], + }, + { + test: /\.vue$/, + use: [ 'vue-loader' ] + }, + { + test: /\.(s)?css$/, + use: ExtractTextPlugin.extract({ + fallback: 'style-loader', + use: [ + { loader: 'css-loader', options: { sourceMap: true, importLoaders: 3 } }, + { loader: 'postcss-loader', options: { sourceMap: true } }, + 'resolve-url-loader', + { loader: 'sass-loader', options: { sourceMap: true } } + ] + }) + }, + { + test: /\.svg$/, + exclude: /fonts/, + use: [ + { + loader: 'url-loader', + options: { + name: '[name].[ext]', + outputPath: '../images/', + publicPath: '/typo3conf/ext/ep_theme/Resources/Public/images/' + } + } + ] + }, + { + test: /\.(woff|woff2|eot|ttf|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, + exclude: /images/, + use: { + loader: 'file-loader', + options: { + name: '[name].[ext]', + outputPath: '../fonts/', + publicPath: '/typo3conf/ext/ep_theme/Resources/Public/fonts/' + } + } + }, + { + test: /\.(gif|png)$/, + use: [ + { + loader: 'url-loader', + options: { + limit: 4096, + name: '[name].[ext]', + outputPath: '../images/', + publicPath: '/typo3conf/ext/ep_theme/Resources/Public/images/' + } + } + ] + }, + { + test: /\.(jpg|ico)$/, + use: [ + { + loader: 'file-loader', + options: { + name: '[name].[ext]', + outputPath: '../images/', + publicPath: '/typo3conf/ext/ep_theme/Resources/Public/images/' + } + } + ] + } + ] + }, + plugins: [ + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor', + minChunks: Infinity + }), + new webpack.ProvidePlugin({ + $: 'jquery', + jQuery: 'jquery' + }), + new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), + new ExtractTextPlugin({ + filename: '../css/[name].min.css', + }), + new CopyWebpackPlugin( + [ + { + context: __dirname + '/Resources/Private/Assets/images', + from: '**/*', + to: __dirname + '/Resources/Public/images', + } + ] + ), + new CleanWebpackPlugin([ + 'Resources/Public/css', + 'Resources/Public/images', + 'Resources/Public/js', + 'Resources/Public/fonts' + ]) + ] + } +}; diff --git a/web/typo3conf/ext/ep_track/Classes/Hook/Tcemain.php b/web/typo3conf/ext/ep_track/Classes/Hook/Tcemain.php new file mode 100644 index 00000000..f96994d8 --- /dev/null +++ b/web/typo3conf/ext/ep_track/Classes/Hook/Tcemain.php @@ -0,0 +1,55 @@ +, 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 TYPO3\CMS\Core\DataHandling\DataHandler; + +class Tcemain +{ + /** + * @param array $fields + * @param string $table + * @param string $table + * @param int $id + * @param DataHandler $dataHandler + */ + public function processDatamap_preProcessFieldArray(array &$fields, $table, $id, DataHandler $dataHandler) + { + // Force trailing slash + if ($table === 'tx_eptrack_domain_model_redirect') { + $url = $fields['redirect_from']; + if (substr($url, 0, 1) !== '/') { + $url = '/' . $url; + } + if (substr($url, -1) !== '/') { + $url .= '/'; + } + $fields['redirect_from'] = $url; + } + } +} diff --git a/web/typo3conf/ext/ep_track/Classes/Service/RequestService.php b/web/typo3conf/ext/ep_track/Classes/Service/RequestService.php new file mode 100644 index 00000000..ad21374d --- /dev/null +++ b/web/typo3conf/ext/ep_track/Classes/Service/RequestService.php @@ -0,0 +1,177 @@ +, 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 TYPO3\CMS\Backend\Utility\BackendUtility; +use TYPO3\CMS\Core\Database\DatabaseConnection; +use TYPO3\CMS\Core\TimeTracker\NullTimeTracker; +use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; +use TYPO3\CMS\Core\Utility\GeneralUtility; +use TYPO3\CMS\Core\Utility\HttpUtility; +use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; +use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; +use TYPO3\CMS\Frontend\Page\PageGenerator; +use TYPO3\CMS\Frontend\Utility\EidUtility; + +class RequestService +{ + + const COOKIE_NAME = 'ep_trk'; + const COOKIE_TTL = 30; + const CODE_PATTERN = '([a-z]{4}|PA)\d{4}.*'; + + public function handleRequest() + { + $currentUri = GeneralUtility::getIndpEnv('REQUEST_URI'); + $this->matchRedirect($currentUri); + $this->matchTrackingCodeInUri($currentUri); + } + + /** + * @param string $currentUri + */ + public function matchRedirect($currentUri) + { + $uri = strtolower(parse_url($currentUri, \PHP_URL_PATH)); + /** @var DatabaseConnection $db */ + $db = $GLOBALS['TYPO3_DB']; + + $redirect = $db->exec_SELECTgetSingleRow( + '*', + 'tx_eptrack_domain_model_redirect', + 'tx_eptrack_domain_model_redirect.redirect_from=LOWER(' . $db->fullQuoteStr($uri, 'tx_eptrack_domain_model_redirect') . ')' + . ' AND tx_eptrack_domain_model_redirect.deleted=0 AND tx_eptrack_domain_model_redirect.hidden=0' + ); + if ($redirect === false) { + return; + } + $trackingCode = $redirect['tracking_code']; + if (!empty($trackingCode)) { + $this->setCookie($trackingCode); + } + $targetPageUid = $redirect['target_page_uid']; + $responseCode = $redirect['response_code']; + $this->initTSFE($targetPageUid); + /** @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer $cObj */ + $cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class); + $typolinkConfig = ['parameter' => $targetPageUid, 'forceAbsoluteUrl' => true ]; + $query = $this->buildUtmParameters($redirect); + if ($query) { + $typolinkConfig['additionalParams'] = '&' . $query; + } + $uri = $cObj->typolink_URL($typolinkConfig); + $this->redirect($uri, $responseCode); + } + + /** + * @param array $redirect + * @return string + */ + public function buildUtmParameters(array $redirect) + { + if ($redirect['utm_source'] && $redirect['utm_medium'] && $redirect['utm_campaign'] && $redirect['utm_content']) { + return http_build_query([ + 'utm_source' => $redirect['utm_source'], + 'utm_medium' => $redirect['utm_medium'], + 'utm_campaign' => $redirect['utm_campaign'], + 'utm_content' => $redirect['utm_content'], + ]); + } + return ''; + } + + /** + * @param string $currentUri + */ + public function matchTrackingCodeInUri($currentUri) + { + $query = parse_url($currentUri, \PHP_URL_QUERY); + $path = parse_url($currentUri, \PHP_URL_PATH); + if (preg_match('/(' . static::CODE_PATTERN . ')\/?$/i', $path)) { + $urlItems = GeneralUtility::trimExplode('/', $path, true); + $code = array_pop($urlItems); + $this->setCookie($code); + $uri = '/'; + if (count($urlItems) > 0) { + $uri = '/' . implode('/', $urlItems) . '/'; + } + if ($query !== null) { + $uri .= '?' . $query; + } + $this->redirect($uri); + } + } + + /** + * @param string $code + */ + protected function setCookie($code) + { + $expiratonDate = new \DateTime('now'); + $expiratonDate->add(new \DateInterval('P' . static::COOKIE_TTL. 'D')); + setcookie(static::COOKIE_NAME, $code, $expiratonDate->getTimestamp(), '/'); + } + + /** + * @param string $uri + * @param string $responseCode + */ + protected function redirect($uri, $responseCode = '301') + { + HttpUtility::redirect($uri, constant('\TYPO3\CMS\Core\Utility\HttpUtility::HTTP_STATUS_' . $responseCode)); + exit; + } + + /** + * @param int $id + * @param int $typeNum + */ + public function initTSFE($id = 1, $typeNum = 0) + { + EidUtility::initTCA(); + if (!is_object($GLOBALS['TT'])) { + $GLOBALS['TT'] = new NullTimeTracker; + $GLOBALS['TT']->start(); + } + $GLOBALS['TSFE'] = GeneralUtility::makeInstance(TypoScriptFrontendController::class, $GLOBALS['TYPO3_CONF_VARS'], $id, $typeNum); + $GLOBALS['TSFE']->connectToDB(); + $GLOBALS['TSFE']->initFEuser(); + $GLOBALS['TSFE']->determineId(); + $GLOBALS['TSFE']->initTemplate(); + $GLOBALS['TSFE']->rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($id, ''); + $GLOBALS['TSFE']->getConfigArray(); + + if (ExtensionManagementUtility::isLoaded('realurl')) { + $rootline = BackendUtility::BEgetRootLine($id); + $host = BackendUtility::firstDomainRecord($rootline); + $_SERVER['HTTP_HOST'] = $host; + } + + PageGenerator::pagegenInit(); + } +} diff --git a/web/typo3conf/ext/ep_track/Configuration/TCA/tx_eptrack_domain_model_redirect.php b/web/typo3conf/ext/ep_track/Configuration/TCA/tx_eptrack_domain_model_redirect.php new file mode 100644 index 00000000..d8f8a30b --- /dev/null +++ b/web/typo3conf/ext/ep_track/Configuration/TCA/tx_eptrack_domain_model_redirect.php @@ -0,0 +1,228 @@ + [ + 'title' => 'LLL:EXT:ep_track/Resources/Private/Language/locallang.xlf:tx_eptrack_domain_model_redirect', + 'default_sortby' => 'ORDER BY label', + 'label' => 'label', + 'tstamp' => 'tstamp', + 'crdate' => 'crdate', + 'cruser_id' => 'cruser_id', + 'dividers2tabs' => TRUE, + 'versioningWS' => 2, + 'versioning_followPages' => TRUE, + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'transOrigDiffSourceField' => 'l10n_diffsource', + 'delete' => 'deleted', + 'enablecolumns' => [ + 'disabled' => 'hidden', + 'starttime' => 'starttime', + 'endtime' => 'endtime', + ], + 'searchFields' => 'label, redirect_from, tracking_code', + 'iconfile' => 'EXT:ep_track/Resources/Public/Icons/tx_eptrack_domain_model_redirect.gif' + ], + 'interface' => [ + 'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, label, redirect_from, target_page_uid, tracking_code, response_code, utm_source, utm_medium, utm_campaign, utm_content', + ], + 'types' => [ + '1' => [ + 'showitem' => 'hidden, label, redirect_from, target_page_uid, --palette--;;codes, --palette--;UTM;utm', + ], + ], + 'palettes' => [ + 'codes' => ['showitem' => 'tracking_code, response_code'], + 'utm' => ['showitem' => 'utm_source, utm_medium, utm_campaign, utm_content'], + ], + 'columns' => [ + + 'sys_language_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.language', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'foreign_table' => 'sys_language', + 'foreign_table_where' => 'ORDER BY sys_language.title', + 'items' => [ + ['LLL:EXT:lang/locallang_general.xlf:LGL.allLanguages', -1], + ['LLL:EXT:lang/locallang_general.xlf:LGL.default_value', 0] + ], + ], + ], + 'l10n_parent' => [ + 'displayCond' => 'FIELD:sys_language_uid:>:0', + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.l18n_parent', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'items' => [ + ['', 0], + ], + 'foreign_table' => 'tx_eptrack_domain_model_redirect', + 'foreign_table_where' => 'AND tx_eptrack_domain_model_redirect.pid=###CURRENT_PID### AND tx_eptrack_domain_model_redirect.sys_language_uid IN (-1,0)', + ], + ], + 'l10n_diffsource' => [ + 'config' => [ + 'type' => 'passthrough', + ], + ], + + 't3ver_label' => [ + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.versionLabel', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'max' => 255, + ] + ], + + 'hidden' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.hidden', + 'config' => [ + 'type' => 'check', + ], + ], + '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')) + ], + ], + ], + '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')) + ], + ], + ], + 'sorting' => [ + 'config' => [ + 'type' => 'passthrough' + ], + ], + + 'label' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_track/Resources/Private/Language/locallang.xlf:tx_eptrack_domain_model_redirect.label', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required' + ], + ], + 'redirect_from' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_track/Resources/Private/Language/locallang.xlf:tx_eptrack_domain_model_redirect.redirect_from', + 'config' => [ + 'type' => 'input', + 'size' => 30, + 'eval' => 'trim,required,unique,alphanum_x,lower' + ], + ], + 'target_page_uid' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_track/Resources/Private/Language/locallang.xlf:tx_eptrack_domain_model_redirect.target_page_uid', + 'config' => [ + 'type' => 'input', + 'size' => 4, + 'eval' => 'int,required', + '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' + ] + ], + ], + ], + 'tracking_code' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_track/Resources/Private/Language/locallang.xlf:tx_eptrack_domain_model_redirect.tracking_code', + 'config' => [ + 'type' => 'input', + 'size' => 16, + 'eval' => 'trim', + ], + ], + 'response_code' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_track/Resources/Private/Language/locallang.xlf:tx_eptrack_domain_model_redirect.response_code', + 'config' => [ + 'type' => 'select', + 'renderType' => 'selectSingle', + 'default' => '301', + 'items' => [ + ['301', '301'], + ['302', '302'], + ], + ], + ], + 'utm_source' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_track/Resources/Private/Language/locallang.xlf:tx_eptrack_domain_model_redirect.utm_source', + 'config' => [ + 'type' => 'input', + 'size' => 16, + 'eval' => 'trim', + ], + ], + 'utm_medium' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_track/Resources/Private/Language/locallang.xlf:tx_eptrack_domain_model_redirect.utm_medium', + 'config' => [ + 'type' => 'input', + 'size' => 16, + 'eval' => 'trim', + ], + ], + 'utm_campaign' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_track/Resources/Private/Language/locallang.xlf:tx_eptrack_domain_model_redirect.utm_campaign', + 'config' => [ + 'type' => 'input', + 'size' => 16, + 'eval' => 'trim', + ], + ], + 'utm_content' => [ + 'exclude' => 0, + 'label' => 'LLL:EXT:ep_track/Resources/Private/Language/locallang.xlf:tx_eptrack_domain_model_redirect.utm_content', + 'config' => [ + 'type' => 'input', + 'size' => 16, + 'eval' => 'trim', + ], + ], + ] +]; diff --git a/web/typo3conf/ext/ep_track/Resources/Private/Language/locallang.xlf b/web/typo3conf/ext/ep_track/Resources/Private/Language/locallang.xlf new file mode 100644 index 00000000..33c1e400 --- /dev/null +++ b/web/typo3conf/ext/ep_track/Resources/Private/Language/locallang.xlf @@ -0,0 +1,38 @@ + + + +
    + + + Redirect + + + Bezeichnung + + + Redirect URL + + + Zielseite + + + Trackingcode + + + Typ + + + Source + + + Medium + + + Campaign + + + Content + + + + diff --git a/web/typo3conf/ext/ep_track/Resources/Public/Icons/tx_eptrack_domain_model_redirect.gif b/web/typo3conf/ext/ep_track/Resources/Public/Icons/tx_eptrack_domain_model_redirect.gif new file mode 100644 index 00000000..37ba37b9 Binary files /dev/null and b/web/typo3conf/ext/ep_track/Resources/Public/Icons/tx_eptrack_domain_model_redirect.gif differ diff --git a/web/typo3conf/ext/ep_track/Tests/Unit/Userfunction/RequestHandlerTest.php b/web/typo3conf/ext/ep_track/Tests/Unit/Userfunction/RequestHandlerTest.php new file mode 100644 index 00000000..102f1fda --- /dev/null +++ b/web/typo3conf/ext/ep_track/Tests/Unit/Userfunction/RequestHandlerTest.php @@ -0,0 +1,88 @@ +, 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\EpTrack\Userfunction\RequestHandler; +use TYPO3\CMS\Core\Tests\UnitTestCase; + +class RequestHandlerTest extends UnitTestCase +{ + + public function testIgnoresUrlsWithoutTrackingCode() + { + $handler = $this->getHandlerInstance(); + + $uriWithoutTrackingCode = '/foo/bar?baz=1234'; + $redirect = $handler->parseUri($uriWithoutTrackingCode); + $this->assertNull($redirect); + } + + public function testRedirectsWithValidTrackingCodeInUrl() + { + $handler = $this->getHandlerInstance(); + + $uriWithoutTrackingCode = '/foo/bar/abcd1234foo'; + $redirect = $handler->parseUri($uriWithoutTrackingCode); + $this->assertEquals($redirect, '/foo/bar/'); + + $uriWithoutTrackingCode = '/abcd1234foo'; + $redirect = $handler->parseUri($uriWithoutTrackingCode); + $this->assertEquals($redirect, '/'); + } + + public function testRedirectsWithValidTrackingCodeInQueryString() + { + $handler = $this->getHandlerInstance(); + + $uriWithoutTrackingCode = '/foo/bar/?trk=abcd1234foo'; + $redirect = $handler->parseUri($uriWithoutTrackingCode); + $this->assertEquals($redirect, '/foo/bar/'); + } + + public function testRedirectsWithValidTrackingCodeInUrlAndAdditionalQueryString() + { + $handler = $this->getHandlerInstance(); + + $uriWithoutTrackingCode = '/foo/bar/abcd1234foo?bar=baz'; + $redirect = $handler->parseUri($uriWithoutTrackingCode); + $this->assertEquals($redirect, '/foo/bar/?bar=baz'); + } + + /** + * @return RequestHandler + */ + protected function getHandlerInstance() + { + $handler = new RequestHandler(); + $cookieUtility = $this->getMockObjectGenerator()->getMock('\EP\EpTrack\Utility\CookieUtility'); + $cookieUtility->expects($this->any())->method('setCookie'); + $this->inject($handler, 'cookieUtility', $cookieUtility); + return $handler; + } + +} \ No newline at end of file diff --git a/web/typo3conf/ext/ep_track/Tests/bootstrap.php b/web/typo3conf/ext/ep_track/Tests/bootstrap.php new file mode 100644 index 00000000..97d27384 --- /dev/null +++ b/web/typo3conf/ext/ep_track/Tests/bootstrap.php @@ -0,0 +1,11 @@ +addPsr4('EP\\EpTrack\\Tests\\Unit\\', __DIR__ . '/Unit/'); diff --git a/web/typo3conf/ext/ep_track/ext_emconf.php b/web/typo3conf/ext/ep_track/ext_emconf.php new file mode 100644 index 00000000..19f649df --- /dev/null +++ b/web/typo3conf/ext/ep_track/ext_emconf.php @@ -0,0 +1,23 @@ + 'E&P Tracking', + 'description' => '', + 'category' => 'plugin', + 'author' => 'Björn Fromme', + 'author_email' => 'fromme@dreipunktnull.com', + 'state' => 'beta', + 'author_company' => 'dreipunktnull', + 'version' => '1.1.0', + 'constraints' => [ + 'depends' => [ + 'ods_redirects' => '*', + 'realurl' => '*' + ], + ], + 'autoload' => [ + 'psr-4' => [ + 'EP\\EpTrack\\' => 'Classes/', + ] + ] +]; diff --git a/web/typo3conf/ext/ep_track/ext_icon.gif b/web/typo3conf/ext/ep_track/ext_icon.gif new file mode 100644 index 00000000..9fc0f1d0 Binary files /dev/null and b/web/typo3conf/ext/ep_track/ext_icon.gif differ diff --git a/web/typo3conf/ext/ep_track/ext_localconf.php b/web/typo3conf/ext/ep_track/ext_localconf.php new file mode 100644 index 00000000..de838b7c --- /dev/null +++ b/web/typo3conf/ext/ep_track/ext_localconf.php @@ -0,0 +1,9 @@ +handleRequest'); + +$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processDatamapClass'][$_EXTKEY] = + \EP\EpTrack\Hook\Tcemain::class; diff --git a/web/typo3conf/ext/ep_track/ext_tables.sql b/web/typo3conf/ext/ep_track/ext_tables.sql new file mode 100644 index 00000000..d8878237 --- /dev/null +++ b/web/typo3conf/ext/ep_track/ext_tables.sql @@ -0,0 +1,49 @@ +# noinspection SqlNoDataSourceInspectionForFile +# +# Table structure for table 'tx_eptrack_domain_model_redirect' +# +CREATE TABLE tx_eptrack_domain_model_redirect ( + + uid int(11) NOT NULL auto_increment, + pid int(11) DEFAULT '0' NOT NULL, + + label varchar(255) DEFAULT '' NOT NULL, + redirect_from varchar(255) DEFAULT '' NOT NULL, + target_page_uid int(11) unsigned DEFAULT '0' NOT NULL, + tracking_code varchar(255) DEFAULT '' NOT NULL, + response_code char(3) DEFAULT '301' NOT NULL, + utm_source varchar(255) DEFAULT '' NOT NULL, + utm_medium varchar(255) DEFAULT '' NOT NULL, + utm_campaign varchar(255) DEFAULT '' NOT NULL, + utm_content varchar(255) DEFAULT '' NOT NULL, + + tstamp int(11) unsigned DEFAULT '0' NOT NULL, + crdate int(11) unsigned DEFAULT '0' NOT NULL, + cruser_id int(11) unsigned DEFAULT '0' NOT NULL, + deleted tinyint(4) unsigned DEFAULT '0' NOT NULL, + hidden tinyint(4) unsigned DEFAULT '0' NOT NULL, + starttime int(11) unsigned DEFAULT '0' NOT NULL, + endtime int(11) unsigned DEFAULT '0' NOT NULL, + + t3ver_oid int(11) DEFAULT '0' NOT NULL, + t3ver_id int(11) DEFAULT '0' NOT NULL, + t3ver_wsid int(11) DEFAULT '0' NOT NULL, + t3ver_label varchar(255) DEFAULT '' NOT NULL, + t3ver_state tinyint(4) DEFAULT '0' NOT NULL, + t3ver_stage int(11) DEFAULT '0' NOT NULL, + t3ver_count int(11) DEFAULT '0' NOT NULL, + t3ver_tstamp int(11) DEFAULT '0' NOT NULL, + t3ver_move_id int(11) DEFAULT '0' NOT NULL, + + sys_language_uid int(11) DEFAULT '0' NOT NULL, + l10n_parent int(11) DEFAULT '0' NOT NULL, + l10n_diffsource mediumblob, + + PRIMARY KEY (uid), + KEY parent (pid), + KEY redirectfrom (redirect_from), + KEY t3ver_oid (t3ver_oid,t3ver_wsid), + KEY language (l10n_parent,sys_language_uid) + +); + diff --git a/web/typo3conf/ext/ep_track/phpunit.xml.dist b/web/typo3conf/ext/ep_track/phpunit.xml.dist new file mode 100644 index 00000000..cdba461e --- /dev/null +++ b/web/typo3conf/ext/ep_track/phpunit.xml.dist @@ -0,0 +1,25 @@ + + + + + Tests + + + + + Classes + + + diff --git a/web/typo3conf/realurl_conf.php b/web/typo3conf/realurl_conf.php new file mode 100644 index 00000000..a844abb6 --- /dev/null +++ b/web/typo3conf/realurl_conf.php @@ -0,0 +1,259 @@ + [ + 'cache' => [ + 'banUrlsRegExp' => '/tx_epproducts_booking/', + ], + 'init' => [ + 'appendMissingSlash' => 'ifNotFile,redirect', + 'emptyUrlReturnValue' => '/', + 'enableCHashCache' => 1, + 'enableUrlDecodeCache' => 1, + 'enableUrlEncodeCache' => 1, + 'postVarSet_failureMode' => '', + ], + 'pagePath' => [ + 'rootpage_id' => '9', + ], + 'fileName' => [ + 'defaultToHTMLsuffixOnPrev' => 0, + 'acceptHTMLsuffix' => 0, + 'index' => [ + 'sitemap.xml' => [ + 'keyValues' => [ + 'type' => 1848, + ], + ], + ], + ], + 'preVars' => [], + 'fixedPostVars' => [ + 'team' => [ + [ + 'GETvar' => 'tx_epproducts_teammembers[controller]', + 'noMatch' => 'bypass', + ], + [ + 'GETvar' => 'tx_epproducts_teammembers[action]', + 'noMatch' => 'bypass', + ], + [ + 'GETvar' => 'tx_epproducts_teammembers[member]', + 'lookUpTable' => [ + 'table' => 'tx_epproducts_domain_model_teammember', + 'id_field' => 'uid', + 'alias_field' => 'name', + 'addWhereClause' => ' AND NOT deleted', + 'useUniqueCache' => 1, + 'useUniqueCache_conf' => [ + 'strtolower' => 1, + 'spaceCharacter' => '-' + ] + ], + ], + ], + 'searchresult' => [ + [ + 'GETvar' => 'tx_epproducts_searchresult[controller]', + 'noMatch' => 'bypass', + ], + [ + 'GETvar' => 'tx_epproducts_searchresult[action]', + 'noMatch' => 'bypass', + ], + [ + 'GETvar' => 'tx_epproducts_searchresult[filterSettings]', + ], + ], + 'ajax' => [ + [ + 'GETvar' => 'tx_epproducts_ajax[controller]', + 'valueMap' => [ + 'search' => 'AjaxSearch', + 'searchbar' => 'AjaxSearchbar', + 'content' => 'AjaxContent', + 'filterpanel' => 'AjaxFilterpanel', + 'date' => 'AjaxDate', + 'table' => 'AjaxTable', + ] + ], + [ + 'GETvar' => 'tx_epproducts_ajax[action]', + ], + [ + 'GETvar' => 'type', + 'valueMap' => [ + 'json' => '1701', + 'html' => '1702', + ] + ], + ], + 'events_contactform' => [ + [ + 'GETvar' => 'tx_epevents_contactform[controller]', + 'noMatch' => 'bypass', + ], + [ + 'GETvar' => 'tx_epevents_contactform[action]', + 'noMatch' => 'bypass', + ], + [ + 'GETvar' => 'tx_epevents_contactform[travelType]', + ], + ], + 'events_activity' => [ + [ + 'GETvar' => 'tx_epevents_activitydetail[controller]', + 'noMatch' => 'bypass', + ], + [ + 'GETvar' => 'tx_epevents_activitydetail[action]', + 'noMatch' => 'bypass', + ], + [ + 'GETvar' => 'tx_epevents_activitydetail[activity]', + 'lookUpTable' => [ + 'table' => 'tx_epevents_domain_model_activity', + 'id_field' => 'uid', + 'alias_field' => 'name', + 'addWhereClause' => ' AND NOT deleted', + 'useUniqueCache' => 1, + 'useUniqueCache_conf' => [ + 'strtolower' => 1, + 'spaceCharacter' => '-' + ] + ], + ], + ], + 41 => 'searchresult', + 855 => 'ajax', + 878 => 'ajax', + 879 => 'ajax', + 880 => 'ajax', + 881 => 'ajax', + 347 => 'team', + 987 => 'events_contactform', + 1300 => 'events_activity', + 'newsDetailConfiguration' => [ + [ + 'GETvar' => 'tx_news_pi1[news]', + 'lookUpTable' => [ + 'table' => 'tx_news_domain_model_news', + 'id_field' => 'uid', + 'alias_field' => 'title', + 'addWhereClause' => ' AND NOT deleted', + 'useUniqueCache' => 1, + 'useUniqueCache_conf' => [ + 'strtolower' => 1, + 'spaceCharacter' => '-' + ], + 'languageGetVar' => 'L', + 'languageExceptionUids' => '', + 'languageField' => 'sys_language_uid', + 'transOrigPointerField' => 'l10n_parent', + 'expireDays' => 180, + ] + ] + ], + 'newsCategoryConfiguration' => [ + [ + 'GETvar' => 'tx_news_pi1[overwriteDemand][categories]', + 'lookUpTable' => [ + 'table' => 'sys_category', + 'id_field' => 'uid', + 'alias_field' => 'title', + 'addWhereClause' => ' AND NOT deleted', + 'useUniqueCache' => 1, + 'useUniqueCache_conf' => [ + 'strtolower' => 1, + 'spaceCharacter' => '-' + ] + ] + ] + ], + 'newsTagConfiguration' => [ + [ + 'GETvar' => 'tx_news_pi1[overwriteDemand][tags]', + 'lookUpTable' => [ + 'table' => 'tx_news_domain_model_tag', + 'id_field' => 'uid', + 'alias_field' => 'title', + 'addWhereClause' => ' AND NOT deleted', + 'useUniqueCache' => 1, + 'useUniqueCache_conf' => [ + 'strtolower' => 1, + 'spaceCharacter' => '-' + ] + ] + ] + ], + 1303 => 'newsDetailConfiguration', + 1391 => 'newsTagConfiguration', + ], + 'postVarSets' => [ + '_DEFAULT' => [ + 'controller' => [ + [ + 'GETvar' => 'tx_news_pi1[action]', + 'noMatch' => 'bypass' + ], + [ + 'GETvar' => 'tx_news_pi1[controller]', + 'noMatch' => 'bypass' + ] + ], + 'detail' => [ + [ + 'GETvar' => 'tx_epproducts_product_detail[controller]', + 'noMatch' => 'bypass', + ], + [ + 'GETvar' => 'tx_epproducts_product_detail[action]', + 'noMatch' => 'bypass', + ], + [ + 'GETvar' => 'tx_epproducts_product_detail[product]', + ], + [ + 'GETvar' => 'tx_epproducts_product_detail[hotel]', + ], + [ + 'GETvar' => 'tx_epproducts_product_detail[referringPageUid]', + ], + [ + 'GETvar' => 'tx_epproducts_product_detail[filterSettings]', + ], + ], + ], + ], + ], +]; + +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['www.ski-wochenenden.de'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DEFAULT']; +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['www.ski-wochenenden.de']['pagePath']['rootpage_id'] = '14'; + +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['www.snowzone.net'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DEFAULT']; +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['www.snowzone.net']['pagePath']['rootpage_id'] = '25'; + +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['www.unichamp.de'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DEFAULT']; +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['www.unichamp.de']['pagePath']['rootpage_id'] = '26'; + +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['www.ski-boarderweek.de'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DEFAULT']; +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['www.ski-boarderweek.de']['pagePath']['rootpage_id'] = '24'; + +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['www.ep-events.de'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DEFAULT']; +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['www.ep-events.de']['pagePath']['rootpage_id'] = '884'; + +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['ski-wochenenden.burn.dpn'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DEFAULT']; +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['ski-wochenenden.burn.dpn']['pagePath']['rootpage_id'] = '14'; + +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['snowzone.burn.dpn'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DEFAULT']; +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['snowzone.burn.dpn']['pagePath']['rootpage_id'] = '25'; + +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['unichamp.burn.dpn'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DEFAULT']; +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['unichamp.burn.dpn']['pagePath']['rootpage_id'] = '26'; + +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['ski-boarderweek.burn.dpn'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DEFAULT']; +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['ski-boarderweek.burn.dpn']['pagePath']['rootpage_id'] = '24'; + +$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['epevents.burn.dpn'] = $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['www.ep-events.de'];