Merge branch 'release/2022.05-02'
This commit is contained in:
Generated
+164
-125
@@ -8,16 +8,16 @@
|
||||
"packages": [
|
||||
{
|
||||
"name": "b13/container",
|
||||
"version": "1.6.0",
|
||||
"version": "1.6.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/b13/container.git",
|
||||
"reference": "7b4ea2cc0d287ffae8acef99610b79517571b054"
|
||||
"reference": "625ad7c08074ba8846954cc64061ce5bca1fb52e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/b13/container/zipball/7b4ea2cc0d287ffae8acef99610b79517571b054",
|
||||
"reference": "7b4ea2cc0d287ffae8acef99610b79517571b054",
|
||||
"url": "https://api.github.com/repos/b13/container/zipball/625ad7c08074ba8846954cc64061ce5bca1fb52e",
|
||||
"reference": "625ad7c08074ba8846954cc64061ce5bca1fb52e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -32,6 +32,7 @@
|
||||
"codeception/module-asserts": "^1.0",
|
||||
"codeception/module-db": "^1.0",
|
||||
"codeception/module-webdriver": "^1.0",
|
||||
"friendsofphp/php-cs-fixer": "^3.4",
|
||||
"ichhabrecht/content-defender": "^3.2",
|
||||
"phpstan/phpstan": "^0.12.11",
|
||||
"phpunit/phpunit": "^8.4",
|
||||
@@ -39,7 +40,7 @@
|
||||
"typo3/cms-info": "^10.4",
|
||||
"typo3/cms-install": "^10.4",
|
||||
"typo3/cms-workspaces": "^10.4",
|
||||
"typo3/coding-standards": "^0.2.0",
|
||||
"typo3/coding-standards": "^0.5",
|
||||
"typo3/testing-framework": "^6"
|
||||
},
|
||||
"type": "typo3-cms-extension",
|
||||
@@ -63,9 +64,9 @@
|
||||
"homepage": "https://b13.com",
|
||||
"support": {
|
||||
"issues": "https://github.com/b13/container/issues",
|
||||
"source": "https://github.com/b13/container/tree/1.6.0"
|
||||
"source": "https://github.com/b13/container/tree/1.6.1"
|
||||
},
|
||||
"time": "2022-04-19T08:27:22+00:00"
|
||||
"time": "2022-05-18T08:20:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "christophlehmann/imageoptimizer",
|
||||
@@ -198,16 +199,16 @@
|
||||
},
|
||||
{
|
||||
"name": "doctrine/cache",
|
||||
"version": "2.1.1",
|
||||
"version": "2.2.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/doctrine/cache.git",
|
||||
"reference": "331b4d5dbaeab3827976273e9356b3b453c300ce"
|
||||
"reference": "1ca8f21980e770095a31456042471a57bc4c68fb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/doctrine/cache/zipball/331b4d5dbaeab3827976273e9356b3b453c300ce",
|
||||
"reference": "331b4d5dbaeab3827976273e9356b3b453c300ce",
|
||||
"url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb",
|
||||
"reference": "1ca8f21980e770095a31456042471a57bc4c68fb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -217,18 +218,12 @@
|
||||
"doctrine/common": ">2.2,<2.4"
|
||||
},
|
||||
"require-dev": {
|
||||
"alcaeus/mongo-php-adapter": "^1.1",
|
||||
"cache/integration-tests": "dev-master",
|
||||
"doctrine/coding-standard": "^8.0",
|
||||
"mongodb/mongodb": "^1.1",
|
||||
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0",
|
||||
"predis/predis": "~1.0",
|
||||
"doctrine/coding-standard": "^9",
|
||||
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
|
||||
"psr/cache": "^1.0 || ^2.0 || ^3.0",
|
||||
"symfony/cache": "^4.4 || ^5.2 || ^6.0@dev",
|
||||
"symfony/var-exporter": "^4.4 || ^5.2 || ^6.0@dev"
|
||||
},
|
||||
"suggest": {
|
||||
"alcaeus/mongo-php-adapter": "Required to use legacy MongoDB driver"
|
||||
"symfony/cache": "^4.4 || ^5.4 || ^6",
|
||||
"symfony/var-exporter": "^4.4 || ^5.4 || ^6"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@@ -277,7 +272,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/doctrine/cache/issues",
|
||||
"source": "https://github.com/doctrine/cache/tree/2.1.1"
|
||||
"source": "https://github.com/doctrine/cache/tree/2.2.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -293,7 +288,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-07-17T14:49:29+00:00"
|
||||
"time": "2022-05-20T20:07:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "doctrine/dbal",
|
||||
@@ -1000,16 +995,16 @@
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/guzzle",
|
||||
"version": "6.5.5",
|
||||
"version": "6.5.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/guzzle.git",
|
||||
"reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e"
|
||||
"reference": "f092dd734083473658de3ee4bef093ed77d2689c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/9d4290de1cfd701f38099ef7e183b64b4b7b0c5e",
|
||||
"reference": "9d4290de1cfd701f38099ef7e183b64b4b7b0c5e",
|
||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/f092dd734083473658de3ee4bef093ed77d2689c",
|
||||
"reference": "f092dd734083473658de3ee4bef093ed77d2689c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1046,10 +1041,40 @@
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "[email protected]",
|
||||
"homepage": "https://github.com/GrahamCampbell"
|
||||
},
|
||||
{
|
||||
"name": "Michael Dowling",
|
||||
"email": "[email protected]",
|
||||
"homepage": "https://github.com/mtdowling"
|
||||
},
|
||||
{
|
||||
"name": "Jeremy Lindblom",
|
||||
"email": "[email protected]",
|
||||
"homepage": "https://github.com/jeremeamia"
|
||||
},
|
||||
{
|
||||
"name": "George Mponos",
|
||||
"email": "[email protected]",
|
||||
"homepage": "https://github.com/gmponos"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Nyholm",
|
||||
"email": "[email protected]",
|
||||
"homepage": "https://github.com/Nyholm"
|
||||
},
|
||||
{
|
||||
"name": "Márk Sági-Kazár",
|
||||
"email": "[email protected]",
|
||||
"homepage": "https://github.com/sagikazarmark"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Schultze",
|
||||
"email": "[email protected]",
|
||||
"homepage": "https://github.com/Tobion"
|
||||
}
|
||||
],
|
||||
"description": "Guzzle is a PHP HTTP client library",
|
||||
@@ -1065,9 +1090,23 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/guzzle/issues",
|
||||
"source": "https://github.com/guzzle/guzzle/tree/6.5"
|
||||
"source": "https://github.com/guzzle/guzzle/tree/6.5.6"
|
||||
},
|
||||
"time": "2020-06-16T21:01:06+00:00"
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/GrahamCampbell",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/Nyholm",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-05-25T13:19:12+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/promises",
|
||||
@@ -1323,16 +1362,16 @@
|
||||
},
|
||||
{
|
||||
"name": "helhum/typo3-console",
|
||||
"version": "v6.7.2",
|
||||
"version": "v6.7.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/TYPO3-Console/TYPO3-Console.git",
|
||||
"reference": "faa96c02ed58c135fcd98b530f5aadeb5ff1ecf3"
|
||||
"reference": "b3a4823a93266928f9e3304e46d33aa52a184dcf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/TYPO3-Console/TYPO3-Console/zipball/faa96c02ed58c135fcd98b530f5aadeb5ff1ecf3",
|
||||
"reference": "faa96c02ed58c135fcd98b530f5aadeb5ff1ecf3",
|
||||
"url": "https://api.github.com/repos/TYPO3-Console/TYPO3-Console/zipball/b3a4823a93266928f9e3304e46d33aa52a184dcf",
|
||||
"reference": "b3a4823a93266928f9e3304e46d33aa52a184dcf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1422,7 +1461,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-11T09:55:08+00:00"
|
||||
"time": "2022-05-22T12:40:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "kigkonsult/icalcreator",
|
||||
@@ -1677,16 +1716,16 @@
|
||||
},
|
||||
{
|
||||
"name": "lolli42/finediff",
|
||||
"version": "1.0.1",
|
||||
"version": "1.0.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/lolli42/FineDiff.git",
|
||||
"reference": "72b57e1355c6bbe2f51921e6a3a5bb7441471a7a"
|
||||
"reference": "f72cd968b663fc09bc73ef0ab5a3288583d0d59d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/lolli42/FineDiff/zipball/72b57e1355c6bbe2f51921e6a3a5bb7441471a7a",
|
||||
"reference": "72b57e1355c6bbe2f51921e6a3a5bb7441471a7a",
|
||||
"url": "https://api.github.com/repos/lolli42/FineDiff/zipball/f72cd968b663fc09bc73ef0ab5a3288583d0d59d",
|
||||
"reference": "f72cd968b663fc09bc73ef0ab5a3288583d0d59d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1697,8 +1736,8 @@
|
||||
"cogpowered/finediff": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "^3.2",
|
||||
"phpstan/phpstan": "^0.12.99",
|
||||
"friendsofphp/php-cs-fixer": "^3.4",
|
||||
"phpstan/phpstan": "^1.6",
|
||||
"phpunit/phpunit": "^8 || ^9"
|
||||
},
|
||||
"type": "library",
|
||||
@@ -1736,9 +1775,9 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/lolli42/FineDiff/issues",
|
||||
"source": "https://github.com/lolli42/FineDiff/tree/1.0.1"
|
||||
"source": "https://github.com/lolli42/FineDiff/tree/1.0.2"
|
||||
},
|
||||
"time": "2022-05-11T13:15:52+00:00"
|
||||
"time": "2022-05-23T07:44:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "masterminds/html5",
|
||||
@@ -2741,16 +2780,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/cache",
|
||||
"version": "v5.4.8",
|
||||
"version": "v5.4.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/cache.git",
|
||||
"reference": "4c6747cf7e56c6b8e3094dd24852bd3e364375b1"
|
||||
"reference": "a50b7249bea81ddd6d3b799ce40c5521c2f72f0b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/cache/zipball/4c6747cf7e56c6b8e3094dd24852bd3e364375b1",
|
||||
"reference": "4c6747cf7e56c6b8e3094dd24852bd3e364375b1",
|
||||
"url": "https://api.github.com/repos/symfony/cache/zipball/a50b7249bea81ddd6d3b799ce40c5521c2f72f0b",
|
||||
"reference": "a50b7249bea81ddd6d3b799ce40c5521c2f72f0b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2818,7 +2857,7 @@
|
||||
"psr6"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/cache/tree/v5.4.8"
|
||||
"source": "https://github.com/symfony/cache/tree/v5.4.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -2834,7 +2873,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-26T13:19:20+00:00"
|
||||
"time": "2022-05-21T10:24:18+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/cache-contracts",
|
||||
@@ -2917,16 +2956,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/config",
|
||||
"version": "v5.4.8",
|
||||
"version": "v5.4.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/config.git",
|
||||
"reference": "9f8964f56f7234f8ace16f66cb3fbae950c04e68"
|
||||
"reference": "8f551fe22672ac7ab2c95fe46d899f960ed4d979"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/config/zipball/9f8964f56f7234f8ace16f66cb3fbae950c04e68",
|
||||
"reference": "9f8964f56f7234f8ace16f66cb3fbae950c04e68",
|
||||
"url": "https://api.github.com/repos/symfony/config/zipball/8f551fe22672ac7ab2c95fe46d899f960ed4d979",
|
||||
"reference": "8f551fe22672ac7ab2c95fe46d899f960ed4d979",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2976,7 +3015,7 @@
|
||||
"description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/config/tree/v5.4.8"
|
||||
"source": "https://github.com/symfony/config/tree/v5.4.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -2992,20 +3031,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-12T16:02:29+00:00"
|
||||
"time": "2022-05-17T10:39:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/console",
|
||||
"version": "v5.4.8",
|
||||
"version": "v5.4.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/console.git",
|
||||
"reference": "ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b"
|
||||
"reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b",
|
||||
"reference": "ffe3aed36c4d60da2cf1b0a1cee6b8f2e5fa881b",
|
||||
"url": "https://api.github.com/repos/symfony/console/zipball/829d5d1bf60b2efeb0887b7436873becc71a45eb",
|
||||
"reference": "829d5d1bf60b2efeb0887b7436873becc71a45eb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3075,7 +3114,7 @@
|
||||
"terminal"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/console/tree/v5.4.8"
|
||||
"source": "https://github.com/symfony/console/tree/v5.4.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3091,20 +3130,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-12T16:02:29+00:00"
|
||||
"time": "2022-05-18T06:17:34+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/dependency-injection",
|
||||
"version": "v5.4.8",
|
||||
"version": "v5.4.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/dependency-injection.git",
|
||||
"reference": "855e29cd715ad62bb840c9841fe09a7cde50811f"
|
||||
"reference": "beecae161577305926ec078c4ed973f2b98880b3"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/855e29cd715ad62bb840c9841fe09a7cde50811f",
|
||||
"reference": "855e29cd715ad62bb840c9841fe09a7cde50811f",
|
||||
"url": "https://api.github.com/repos/symfony/dependency-injection/zipball/beecae161577305926ec078c4ed973f2b98880b3",
|
||||
"reference": "beecae161577305926ec078c4ed973f2b98880b3",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3164,7 +3203,7 @@
|
||||
"description": "Allows you to standardize and centralize the way objects are constructed in your application",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.8"
|
||||
"source": "https://github.com/symfony/dependency-injection/tree/v5.4.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3180,7 +3219,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-26T13:08:29+00:00"
|
||||
"time": "2022-05-27T06:40:03+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/deprecation-contracts",
|
||||
@@ -3251,16 +3290,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher",
|
||||
"version": "v5.4.3",
|
||||
"version": "v5.4.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/event-dispatcher.git",
|
||||
"reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d"
|
||||
"reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/dec8a9f58d20df252b9cd89f1c6c1530f747685d",
|
||||
"reference": "dec8a9f58d20df252b9cd89f1c6c1530f747685d",
|
||||
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc",
|
||||
"reference": "8e6ce1cc0279e3ff3c8ff0f43813bc88d21ca1bc",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3316,7 +3355,7 @@
|
||||
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.3"
|
||||
"source": "https://github.com/symfony/event-dispatcher/tree/v5.4.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3332,7 +3371,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-01-02T09:53:40+00:00"
|
||||
"time": "2022-05-05T16:45:39+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/event-dispatcher-contracts",
|
||||
@@ -3478,16 +3517,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/filesystem",
|
||||
"version": "v5.4.7",
|
||||
"version": "v5.4.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/filesystem.git",
|
||||
"reference": "3a4442138d80c9f7b600fb297534ac718b61d37f"
|
||||
"reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/3a4442138d80c9f7b600fb297534ac718b61d37f",
|
||||
"reference": "3a4442138d80c9f7b600fb297534ac718b61d37f",
|
||||
"url": "https://api.github.com/repos/symfony/filesystem/zipball/36a017fa4cce1eff1b8e8129ff53513abcef05ba",
|
||||
"reference": "36a017fa4cce1eff1b8e8129ff53513abcef05ba",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3522,7 +3561,7 @@
|
||||
"description": "Provides basic utilities for the filesystem",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/filesystem/tree/v5.4.7"
|
||||
"source": "https://github.com/symfony/filesystem/tree/v5.4.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3538,7 +3577,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-01T12:33:59+00:00"
|
||||
"time": "2022-05-20T13:55:35+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
@@ -3605,16 +3644,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-client",
|
||||
"version": "v4.4.41",
|
||||
"version": "v4.4.42",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-client.git",
|
||||
"reference": "bad7c3296590c5a69a9ed89e8a51f13c07c34b54"
|
||||
"reference": "0366fe9d67709477e86b45e2e51a34ccf5018d04"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-client/zipball/bad7c3296590c5a69a9ed89e8a51f13c07c34b54",
|
||||
"reference": "bad7c3296590c5a69a9ed89e8a51f13c07c34b54",
|
||||
"url": "https://api.github.com/repos/symfony/http-client/zipball/0366fe9d67709477e86b45e2e51a34ccf5018d04",
|
||||
"reference": "0366fe9d67709477e86b45e2e51a34ccf5018d04",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3666,7 +3705,7 @@
|
||||
"description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/http-client/tree/v4.4.41"
|
||||
"source": "https://github.com/symfony/http-client/tree/v4.4.42"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3682,7 +3721,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-12T15:19:55+00:00"
|
||||
"time": "2022-05-17T14:14:05+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-client-contracts",
|
||||
@@ -3764,16 +3803,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-foundation",
|
||||
"version": "v5.4.8",
|
||||
"version": "v5.4.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-foundation.git",
|
||||
"reference": "ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2"
|
||||
"reference": "6b0d0e4aca38d57605dcd11e2416994b38774522"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2",
|
||||
"reference": "ff2818d1c3d49860bcae1f2cbb5eb00fcd3bf9e2",
|
||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/6b0d0e4aca38d57605dcd11e2416994b38774522",
|
||||
"reference": "6b0d0e4aca38d57605dcd11e2416994b38774522",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -3817,7 +3856,7 @@
|
||||
"description": "Defines an object-oriented layer for the HTTP specification",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/http-foundation/tree/v5.4.8"
|
||||
"source": "https://github.com/symfony/http-foundation/tree/v5.4.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -3833,7 +3872,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-22T08:14:12+00:00"
|
||||
"time": "2022-05-17T15:07:29+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/inflector",
|
||||
@@ -3986,16 +4025,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/mime",
|
||||
"version": "v5.4.8",
|
||||
"version": "v5.4.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/mime.git",
|
||||
"reference": "af49bc163ec3272f677bde3bc44c0d766c1fd662"
|
||||
"reference": "2b3802a24e48d0cfccf885173d2aac91e73df92e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/mime/zipball/af49bc163ec3272f677bde3bc44c0d766c1fd662",
|
||||
"reference": "af49bc163ec3272f677bde3bc44c0d766c1fd662",
|
||||
"url": "https://api.github.com/repos/symfony/mime/zipball/2b3802a24e48d0cfccf885173d2aac91e73df92e",
|
||||
"reference": "2b3802a24e48d0cfccf885173d2aac91e73df92e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -4049,7 +4088,7 @@
|
||||
"mime-type"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/mime/tree/v5.4.8"
|
||||
"source": "https://github.com/symfony/mime/tree/v5.4.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -4065,7 +4104,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-12T15:48:08+00:00"
|
||||
"time": "2022-05-21T10:24:18+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/options-resolver",
|
||||
@@ -5099,16 +5138,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/property-info",
|
||||
"version": "v5.4.7",
|
||||
"version": "v5.4.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/property-info.git",
|
||||
"reference": "0fc07795712972b9792f203d0fe0e77c26c3281d"
|
||||
"reference": "6f0a452aaba45e763f89e328df437f73a720e18e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/property-info/zipball/0fc07795712972b9792f203d0fe0e77c26c3281d",
|
||||
"reference": "0fc07795712972b9792f203d0fe0e77c26c3281d",
|
||||
"url": "https://api.github.com/repos/symfony/property-info/zipball/6f0a452aaba45e763f89e328df437f73a720e18e",
|
||||
"reference": "6f0a452aaba45e763f89e328df437f73a720e18e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5170,7 +5209,7 @@
|
||||
"validator"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/property-info/tree/v5.4.7"
|
||||
"source": "https://github.com/symfony/property-info/tree/v5.4.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5186,7 +5225,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-03-30T13:40:48+00:00"
|
||||
"time": "2022-05-17T09:47:20+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/routing",
|
||||
@@ -5280,16 +5319,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/serializer",
|
||||
"version": "v4.4.41",
|
||||
"version": "v4.4.42",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/serializer.git",
|
||||
"reference": "15e4f450697b66cb6b2f3098b4038ba22cb9b71a"
|
||||
"reference": "234c6d024b5664d8fe6c117140196e00ba3fa626"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/serializer/zipball/15e4f450697b66cb6b2f3098b4038ba22cb9b71a",
|
||||
"reference": "15e4f450697b66cb6b2f3098b4038ba22cb9b71a",
|
||||
"url": "https://api.github.com/repos/symfony/serializer/zipball/234c6d024b5664d8fe6c117140196e00ba3fa626",
|
||||
"reference": "234c6d024b5664d8fe6c117140196e00ba3fa626",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5354,7 +5393,7 @@
|
||||
"description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/serializer/tree/v4.4.41"
|
||||
"source": "https://github.com/symfony/serializer/tree/v4.4.42"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5370,7 +5409,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-12T15:19:55+00:00"
|
||||
"time": "2022-05-10T09:16:50+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/service-contracts",
|
||||
@@ -5457,16 +5496,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/string",
|
||||
"version": "v5.4.8",
|
||||
"version": "v5.4.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/string.git",
|
||||
"reference": "3c061a76bff6d6ea427d85e12ad1bb8ed8cd43e8"
|
||||
"reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/3c061a76bff6d6ea427d85e12ad1bb8ed8cd43e8",
|
||||
"reference": "3c061a76bff6d6ea427d85e12ad1bb8ed8cd43e8",
|
||||
"url": "https://api.github.com/repos/symfony/string/zipball/985e6a9703ef5ce32ba617c9c7d97873bb7b2a99",
|
||||
"reference": "985e6a9703ef5ce32ba617c9c7d97873bb7b2a99",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5523,7 +5562,7 @@
|
||||
"utf8"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/string/tree/v5.4.8"
|
||||
"source": "https://github.com/symfony/string/tree/v5.4.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5543,16 +5582,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/var-dumper",
|
||||
"version": "v5.4.8",
|
||||
"version": "v5.4.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/var-dumper.git",
|
||||
"reference": "cdcadd343d31ad16fc5e006b0de81ea307435053"
|
||||
"reference": "af52239a330fafd192c773795520dc2dd62b5657"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/cdcadd343d31ad16fc5e006b0de81ea307435053",
|
||||
"reference": "cdcadd343d31ad16fc5e006b0de81ea307435053",
|
||||
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/af52239a330fafd192c773795520dc2dd62b5657",
|
||||
"reference": "af52239a330fafd192c773795520dc2dd62b5657",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5612,7 +5651,7 @@
|
||||
"dump"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/var-dumper/tree/v5.4.8"
|
||||
"source": "https://github.com/symfony/var-dumper/tree/v5.4.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5628,20 +5667,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-26T13:19:20+00:00"
|
||||
"time": "2022-05-21T10:24:18+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/var-exporter",
|
||||
"version": "v5.4.8",
|
||||
"version": "v5.4.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/var-exporter.git",
|
||||
"reference": "7e132a3fcd4b57add721b4207236877b6017ec93"
|
||||
"reference": "63249ebfca4e75a357679fa7ba2089cfb898aa67"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/7e132a3fcd4b57add721b4207236877b6017ec93",
|
||||
"reference": "7e132a3fcd4b57add721b4207236877b6017ec93",
|
||||
"url": "https://api.github.com/repos/symfony/var-exporter/zipball/63249ebfca4e75a357679fa7ba2089cfb898aa67",
|
||||
"reference": "63249ebfca4e75a357679fa7ba2089cfb898aa67",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -5685,7 +5724,7 @@
|
||||
"serialize"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/var-exporter/tree/v5.4.8"
|
||||
"source": "https://github.com/symfony/var-exporter/tree/v5.4.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -5701,7 +5740,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-04-26T13:19:20+00:00"
|
||||
"time": "2022-05-21T10:24:18+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/web-link",
|
||||
|
||||
@@ -17,6 +17,7 @@ set('allow_anonymous_stats', false);
|
||||
add('shared_files', [
|
||||
'{{typo3_webroot}}/typo3conf/LocalConfiguration.php',
|
||||
'{{typo3_webroot}}/sinkhole.html',
|
||||
'{{typo3_webroot}}/.htpasswd',
|
||||
]);
|
||||
|
||||
add('shared_dirs', [
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
semester:$apr1$SbGrn7Nb$RMpKt6GZARkX8oKHR0wv/1
|
||||
@@ -77,7 +77,7 @@ class DateCommandController extends Command
|
||||
* @param OutputInterface $output
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function execute(InputInterface $input, OutputInterface $output)
|
||||
public function execute(InputInterface $input, OutputInterface $output): int
|
||||
{
|
||||
$path = GeneralUtility::getFileAbsFileName('fileadmin/xmlexport');
|
||||
$count = $this->dateImportService->import($path);
|
||||
@@ -92,7 +92,7 @@ class DateCommandController extends Command
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
protected function getSettings()
|
||||
protected function getSettings(): array
|
||||
{
|
||||
$settings = $this
|
||||
->configurationManager
|
||||
|
||||
@@ -61,19 +61,19 @@ class AjaxSearchController extends ActionController
|
||||
|
||||
public function initializeSearchresultAction()
|
||||
{
|
||||
$forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true);
|
||||
$forcedConceptUids = GeneralUtility::intExplode(',', $this->settings['forcedConceptUids'], true);
|
||||
$this->processFilterSettingsArgument($forcedConceptUids);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $filterSettings
|
||||
*/
|
||||
public function searchresultAction(array $filterSettings)
|
||||
public function searchresultAction(array $filterSettings): void
|
||||
{
|
||||
$dateSelected = false;
|
||||
$organic = true;
|
||||
$forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true);
|
||||
$excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']);
|
||||
$forcedConceptUids = GeneralUtility::intExplode(',', $this->settings['forcedConceptUids'], true);
|
||||
$excludedConceptUids = GeneralUtility::intExplode(',', $this->settings['excludedConceptUids'], true);
|
||||
|
||||
if (isset($filterSettings['dateFrom']) || isset($filterSettings['dateTo'])) {
|
||||
$dateSelected = true;
|
||||
|
||||
@@ -116,7 +116,7 @@ class ProductController extends ActionController
|
||||
Hotel $hotel = null,
|
||||
$dateFrom = null,
|
||||
$dateTo = null
|
||||
) {
|
||||
): void {
|
||||
// Get product to display from flexform settings if not provided via url
|
||||
if ($product === null) {
|
||||
$productUid = $this->settings['productUid'];
|
||||
@@ -186,7 +186,7 @@ class ProductController extends ActionController
|
||||
]);
|
||||
}
|
||||
|
||||
public function pricetableAction()
|
||||
public function pricetableAction(): void
|
||||
{
|
||||
$productUid = $this->settings['productUid'];
|
||||
/** @var \EP\EpProducts\Domain\Model\Product $product */
|
||||
@@ -205,7 +205,7 @@ class ProductController extends ActionController
|
||||
/**
|
||||
* @param Product $product
|
||||
*/
|
||||
public function hotelListAction(Product $product)
|
||||
public function hotelListAction(Product $product): void
|
||||
{
|
||||
$hotels = $this->hotelDataService->getList($product);
|
||||
$this->view->assignMultiple([
|
||||
@@ -215,7 +215,7 @@ class ProductController extends ActionController
|
||||
]);
|
||||
}
|
||||
|
||||
public function teasergroupAction()
|
||||
public function teasergroupAction(): void
|
||||
{
|
||||
$filterSettings = $this->filterService->getFiltersettingsFromSettings($this->settings);
|
||||
$dateAuto = !$this->settings['dateFrom'] && !$this->settings['dateTo'];
|
||||
|
||||
@@ -94,7 +94,7 @@ class SearchController extends ActionController
|
||||
$filterSettings = $filterSettingsEncoder->decode($encodedFilterSettings);
|
||||
$this->request->setArgument('filterSettings', $filterSettings);
|
||||
}
|
||||
$forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true);
|
||||
$forcedConceptUids = GeneralUtility::intExplode(',', $this->settings['forcedConceptUids'], true);
|
||||
$this->processFilterSettingsArgument($forcedConceptUids);
|
||||
}
|
||||
|
||||
@@ -105,8 +105,8 @@ class SearchController extends ActionController
|
||||
{
|
||||
$dateSelected = false;
|
||||
$organic = true;
|
||||
$forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true);
|
||||
$excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']);
|
||||
$forcedConceptUids = GeneralUtility::intExplode(',', $this->settings['forcedConceptUids'], true);
|
||||
$excludedConceptUids = GeneralUtility::intExplode(',', $this->settings['excludedConceptUids']);
|
||||
|
||||
if (!empty($filterSettings['dateFrom']) || !empty($filterSettings['dateTo'])) {
|
||||
$dateSelected = true;
|
||||
|
||||
+128
-159
@@ -2,43 +2,19 @@
|
||||
|
||||
namespace EP\EpProducts\Domain\Repository;
|
||||
|
||||
/***************************************************************
|
||||
*
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use EP\EpProducts\Domain\Model\Dto\FilterOptions;
|
||||
use EP\EpProducts\Service\FilterService;
|
||||
use EP\EpProducts\Traits\DbConnectionTrait;
|
||||
use TYPO3\CMS\Core\Database\Connection;
|
||||
use TYPO3\CMS\Core\Database\Query\QueryBuilder;
|
||||
use TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings;
|
||||
use TYPO3\CMS\Extbase\Persistence\Repository;
|
||||
|
||||
abstract class AbstractRepository extends \TYPO3\CMS\Extbase\Persistence\Repository
|
||||
abstract class AbstractRepository extends Repository
|
||||
{
|
||||
use DbConnectionTrait;
|
||||
|
||||
public function initializeObject()
|
||||
public function initializeObject(): void
|
||||
{
|
||||
/** @var $querySettings \TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings */
|
||||
$querySettings = $this->objectManager->get(Typo3QuerySettings::class);
|
||||
@@ -60,202 +36,195 @@ abstract class AbstractRepository extends \TYPO3\CMS\Extbase\Persistence\Reposit
|
||||
return $query->execute();
|
||||
}
|
||||
|
||||
protected function addDateFilterConditions(QueryBuilder $query, array $filterSettings): void
|
||||
protected function addFiltersettingsConditions
|
||||
(
|
||||
QueryBuilder $qb,
|
||||
array $filterSettings,
|
||||
bool $constraintDates = true
|
||||
): void {
|
||||
if ($constraintDates) {
|
||||
$this->addDateFilterConditions($qb, $filterSettings);
|
||||
}
|
||||
$this->addPriceRangeFilterConditions($qb, $filterSettings);
|
||||
$this->addCountryRegionAndCityFilterConditions($qb, $filterSettings);
|
||||
$this->addConceptFilterConditions($qb, $filterSettings);
|
||||
$this->addPaxFilterConditions($qb, $filterSettings);
|
||||
$this->addDurationFilterConditions($qb, $filterSettings);
|
||||
$this->addHotelTypesFilterConditions($qb, $filterSettings);
|
||||
$this->addBoardTypesFilterConditions($qb, $filterSettings);
|
||||
$this->addRoomTypesFilterConditions($qb, $filterSettings);
|
||||
$this->addTransportationFilterConditions($qb, $filterSettings);
|
||||
|
||||
// Product
|
||||
if (!empty($filterSettings['productUid'])) {
|
||||
$qb->andWhere($qb->expr()->eq(
|
||||
'date.product',
|
||||
$qb->createNamedParameter((int)$filterSettings['productUid'], Connection::PARAM_INT)
|
||||
));
|
||||
}
|
||||
|
||||
// Hotel
|
||||
if (!empty($filterSettings['hotelUid'])) {
|
||||
$qb->andWhere($qb->expr()->eq(
|
||||
'date.hotel',
|
||||
$qb->createNamedParameter((int)$filterSettings['hotelUid'], Connection::PARAM_INT)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
protected function addDateFilterConditions(QueryBuilder $qb, array $filterSettings): void
|
||||
{
|
||||
// Date Start
|
||||
if (!empty($filterSettings['dateFrom'])) {
|
||||
$query
|
||||
->andWhere('date.date_start >= :dateStart')
|
||||
->setParameter('dateStart', $filterSettings['dateFrom'])
|
||||
;
|
||||
$qb->andWhere($qb->expr()->gte(
|
||||
'date.date_start',
|
||||
$qb->createNamedParameter($filterSettings['dateFrom'])
|
||||
));
|
||||
}
|
||||
|
||||
// Date End
|
||||
if (!empty($filterSettings['dateTo'])) {
|
||||
$query
|
||||
->andWhere('date.date_end <= :dateEnd')
|
||||
->setParameter('dateEnd', $filterSettings['dateTo'])
|
||||
;
|
||||
$qb->andWhere($qb->expr()->lte(
|
||||
'date.date_end',
|
||||
$qb->createNamedParameter($filterSettings['dateTo'])
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
protected function addHotelFilterConditions(QueryBuilder $query, array $filterSettings): void
|
||||
protected function addHotelFilterConditions(QueryBuilder $qb, array $filterSettings): void
|
||||
{
|
||||
// Hotel
|
||||
if (!empty($filterSettings['hotelUid'])) {
|
||||
$query
|
||||
->andWhere('date.hotel = :hotelUid')
|
||||
->setParameter('hotelUid', (int)$filterSettings['hotelUid'])
|
||||
;
|
||||
if ($filterSettings['hotelUid'] > 0) {
|
||||
$qb->andWhere($qb->expr()->eq(
|
||||
'date.hotel',
|
||||
$qb->createNamedParameter((int)$filterSettings['hotelUid'], Connection::PARAM_INT)
|
||||
));
|
||||
}
|
||||
|
||||
// Hotel types
|
||||
if (!empty($filterSettings['hotelTypes'])) {
|
||||
$query
|
||||
->andWhere('date.hotel_type IN (:hotelTypes)')
|
||||
->setParameter('hotelTypes', (array)$filterSettings['hotelTypes'], Connection::PARAM_INT_ARRAY)
|
||||
;
|
||||
if (count($filterSettings['hotelTypes']) > 0) {
|
||||
$qb->andWhere($qb->expr()->in(
|
||||
'date.hotel_type',
|
||||
$qb->createNamedParameter($filterSettings['hotelTypes'], Connection::PARAM_INT_ARRAY)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
protected function addCountryRegionAndCityFilterConditions(QueryBuilder $query, array $filterSettings): void
|
||||
protected function addCountryRegionAndCityFilterConditions(QueryBuilder $qb, array $filterSettings): void
|
||||
{
|
||||
if (!empty($filterSettings['cityUids'])) {
|
||||
$query
|
||||
->andWhere('date.city IN (:cityUids)')
|
||||
->setParameter('cityUids', (array)$filterSettings['cityUids'], Connection::PARAM_INT_ARRAY)
|
||||
;
|
||||
} elseif (!empty($filterSettings['regionUids'])) {
|
||||
$query
|
||||
->andWhere('date.region IN (:regionUids)')
|
||||
->setParameter('regionUids', (array)$filterSettings['regionUids'], Connection::PARAM_INT_ARRAY)
|
||||
;
|
||||
} elseif (!empty($filterSettings['countryUids'])) {
|
||||
$query
|
||||
->andWhere('date.country IN (:countryUids)')
|
||||
->setParameter('countryUids', (array)$filterSettings['countryUids'], Connection::PARAM_INT_ARRAY)
|
||||
;
|
||||
foreach (['city', 'region', 'country'] as $column) {
|
||||
$key = $column . 'Uids';
|
||||
if (count($filterSettings[$key]) > 0) {
|
||||
$qb->andWhere($qb->expr()->in(
|
||||
'date.' . $column,
|
||||
$qb->createNamedParameter($filterSettings[$key], Connection::PARAM_INT_ARRAY)
|
||||
));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function addConceptFilterConditions(QueryBuilder $query, array $filterSettings): void
|
||||
protected function addConceptFilterConditions(QueryBuilder $qb, array $filterSettings): void
|
||||
{
|
||||
if (!empty($filterSettings['conceptUids'])) {
|
||||
$query
|
||||
->andWhere('date.concept IN (:conceptUids)')
|
||||
->setParameter('conceptUids', (array)$filterSettings['conceptUids'], Connection::PARAM_INT_ARRAY)
|
||||
;
|
||||
if (count($filterSettings['conceptUids']) > 0) {
|
||||
$qb->andWhere($qb->expr()->in(
|
||||
'date.concept',
|
||||
$qb->createNamedParameter($filterSettings['conceptUids'], Connection::PARAM_INT_ARRAY)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
protected function addPaxFilterConditions(QueryBuilder $query, array $filterSettings): void
|
||||
protected function addPaxFilterConditions(QueryBuilder $qb, array $filterSettings): void
|
||||
{
|
||||
// Pax
|
||||
if (!empty($filterSettings['pax'])) {
|
||||
$query
|
||||
->andWhere('date.available >= :pax')
|
||||
->setParameter('pax', (int)$filterSettings['pax'])
|
||||
;
|
||||
if ($filterSettings['pax'] > 0) {
|
||||
$qb->andWhere($qb->expr()->gte(
|
||||
'date.available',
|
||||
$qb->createNamedParameter($filterSettings['pax'], Connection::PARAM_INT)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
protected function addPriceRangeFilterConditions(QueryBuilder $query, array $filterSettings): void
|
||||
protected function addPriceRangeFilterConditions(QueryBuilder $qb, array $filterSettings): void
|
||||
{
|
||||
// Price ranges
|
||||
if (!empty($filterSettings['priceRanges'])) {
|
||||
$orX = $query->expr()->orX();
|
||||
foreach ((array)$filterSettings['priceRanges'] as $priceRange) {
|
||||
if (count($filterSettings['priceRanges']) > 0) {
|
||||
$orX = $qb->expr()->orX();
|
||||
foreach ($filterSettings['priceRanges'] as $priceRange) {
|
||||
[ $priceMin, $priceMax ] = FilterOptions::$priceRangeOptions[$priceRange];
|
||||
$orX->add($query->expr()->andX(
|
||||
$query->expr()->gte('date.min_price', ':priceMin'),
|
||||
$query->expr()->lt('date.min_price', ':priceMax')
|
||||
$orX->add($qb->expr()->andX(
|
||||
$qb->expr()->gte(
|
||||
'date.min_price',
|
||||
$qb->createNamedParameter($priceMin, Connection::PARAM_INT)
|
||||
),
|
||||
$qb->expr()->lt(
|
||||
'date.min_price',
|
||||
$qb->createNamedParameter($priceMax, Connection::PARAM_INT)
|
||||
)
|
||||
));
|
||||
$query
|
||||
->setParameter('priceMin', $priceMin)
|
||||
->setParameter('priceMax', $priceMax)
|
||||
;
|
||||
}
|
||||
$query->andWhere($orX);
|
||||
$qb->andWhere($orX);
|
||||
}
|
||||
}
|
||||
|
||||
protected function addDurationFilterConditions(QueryBuilder $query, array $filterSettings): void
|
||||
protected function addDurationFilterConditions(QueryBuilder $qb, array $filterSettings): void
|
||||
{
|
||||
// Duration
|
||||
if (empty($filterSettings['nights'])) {
|
||||
if (0 === $filterSettings['nights']) {
|
||||
return;
|
||||
}
|
||||
$nights = (int)$filterSettings['nights'];
|
||||
$nights = $filterSettings['nights'];
|
||||
if ($nights === FilterService::DURATION_SHORT) {
|
||||
$query
|
||||
->andWhere('date.nights <= :nights')
|
||||
->setParameter('nights', $nights)
|
||||
;
|
||||
$qb->andWhere($qb->expr()->lte(
|
||||
'date.nights',
|
||||
$qb->createNamedParameter($nights, Connection::PARAM_INT))
|
||||
);
|
||||
} elseif ($nights === FilterService::DURATION_LONG) {
|
||||
$query
|
||||
->andWhere('date.nights >= :nights')
|
||||
->setParameter('nights', $nights)
|
||||
;
|
||||
$qb->andWhere($qb->expr()->gte(
|
||||
'date.nights',
|
||||
$qb->createNamedParameter($nights, Connection::PARAM_INT))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
protected function addHotelTypesFilterConditions(QueryBuilder $query, array $filterSettings): void
|
||||
protected function addHotelTypesFilterConditions(QueryBuilder $qb, array $filterSettings): void
|
||||
{
|
||||
// Hotel types
|
||||
if (!empty($filterSettings['hotelTypes'])) {
|
||||
$query
|
||||
->andWhere('date.hotel_type IN (:hotelTypes)')
|
||||
->setParameter('hotelTypes', (array)$filterSettings['hotelTypes'], Connection::PARAM_INT_ARRAY)
|
||||
;
|
||||
if (count($filterSettings['hotelTypes']) > 0) {
|
||||
$qb->andWhere($qb->expr()->in(
|
||||
'date.hotel_type',
|
||||
$qb->createNamedParameter($filterSettings['hotelTypes'], Connection::PARAM_INT_ARRAY)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
protected function addBoardTypesFilterConditions(QueryBuilder $query, array $filterSettings): void
|
||||
protected function addBoardTypesFilterConditions(QueryBuilder $qb, array $filterSettings): void
|
||||
{
|
||||
// Board types
|
||||
if (!empty($filterSettings['boardTypes'])) {
|
||||
$query
|
||||
->andWhere('date.board_bus_pro_id IN (:boardTypes)')
|
||||
->setParameter('boardTypes', (array)$filterSettings['boardTypes'], Connection::PARAM_STR_ARRAY)
|
||||
;
|
||||
if (count($filterSettings['boardTypes']) > 0) {
|
||||
$qb->andWhere($qb->expr()->in(
|
||||
'date.board_bus_pro_id',
|
||||
$qb->createNamedParameter($filterSettings['boardTypes'], Connection::PARAM_INT_ARRAY)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
protected function addRoomTypesFilterConditions(QueryBuilder $query, array $filterSettings): void
|
||||
protected function addRoomTypesFilterConditions(QueryBuilder $qb, array $filterSettings): void
|
||||
{
|
||||
// Room types
|
||||
if (!empty($filterSettings['roomTypes'])) {
|
||||
$query
|
||||
->andWhere('room.type IN (:roomTypes)')
|
||||
->setParameter('roomTypes', (array)$filterSettings['roomTypes'], Connection::PARAM_INT_ARRAY)
|
||||
;
|
||||
if (count($filterSettings['roomTypes']) > 0) {
|
||||
$qb->andWhere($qb->expr()->in(
|
||||
'room.type',
|
||||
$qb->createNamedParameter($filterSettings['roomTypes'], Connection::PARAM_INT_ARRAY)
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
protected function addTransportationFilterConditions(QueryBuilder $query, array $filterSettings): void
|
||||
protected function addTransportationFilterConditions(QueryBuilder $qb, array $filterSettings): void
|
||||
{
|
||||
// Transportation
|
||||
if (!empty($filterSettings['bus'])) {
|
||||
$query->andWhere('date.bus_available = 1');
|
||||
if (null !== $filterSettings['bus']) {
|
||||
$qb->andWhere($qb->expr()->eq('date.bus_available', 1));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds general conditions for provided filtersettings
|
||||
*
|
||||
* @param QueryBuilder $query
|
||||
* @param array $filterSettings
|
||||
* @param bool $constraintDates
|
||||
*/
|
||||
protected function addFiltersettingsConditions(QueryBuilder $query, array $filterSettings, bool $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);
|
||||
|
||||
// Product
|
||||
if (!empty($filterSettings['productUid'])) {
|
||||
$query
|
||||
->andWhere('date.product = :productUid')
|
||||
->setParameter('productUid', (int)$filterSettings['productUid'])
|
||||
;
|
||||
}
|
||||
|
||||
// Hotel
|
||||
if (!empty($filterSettings['hotelUid'])) {
|
||||
$query
|
||||
->andWhere('date.hotel = :hotel')
|
||||
->setParameter(':hotel', (int)$filterSettings['hotelUid'])
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,200 +2,5 @@
|
||||
|
||||
namespace EP\EpProducts\Domain\Repository;
|
||||
|
||||
/***************************************************************
|
||||
*
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use EP\EpProducts\Domain\Model\Product;
|
||||
use TYPO3\CMS\Core\Database\Connection;
|
||||
|
||||
class DateRepository extends AbstractRepository
|
||||
{
|
||||
|
||||
/**
|
||||
* @param Product $product
|
||||
* @return array
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function getDateRange(Product $product = null)
|
||||
{
|
||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||
|
||||
$query = $qb
|
||||
->addSelectLiteral('MIN(date_start) dateRangeFrom')
|
||||
->addSelectLiteral('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()->fetchAssociative();
|
||||
|
||||
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 string $search
|
||||
* @param array $filterSettings
|
||||
* @return array
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function searchHotels($search, array $filterSettings)
|
||||
{
|
||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||
|
||||
$query = $qb
|
||||
->select('hotel as uid')
|
||||
->addSelectLiteral('REPLACE(hotel_name, "\r\n", " ") name')
|
||||
->from('tx_epproducts_domain_model_date', 'date')
|
||||
->where('product_searchable = 1')
|
||||
->andWhere($qb->expr()->orX(
|
||||
$qb->expr()->like('hotel_name',':searchName'),
|
||||
$qb->expr()->like('hotel_keywords', ':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()->fetchAllAssociative();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $search
|
||||
* @param array $filterSettings
|
||||
* @param array $excludedConceptUids
|
||||
* @return array
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function searchProducts($search, array $filterSettings, $excludedConceptUids = [])
|
||||
{
|
||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||
|
||||
$query = $qb
|
||||
->select('product as uid')
|
||||
->addSelectLiteral('CONCAT(REPLACE(product_name, "\r\n", " "), " (", concept_name, ")") as name')
|
||||
->from('tx_epproducts_domain_model_date', 'date')
|
||||
->where('product_searchable = 1')
|
||||
->andWhere($qb->expr()->orX(
|
||||
$qb->expr()->like('product_name',':searchName'),
|
||||
$qb->expr()->like('product_keywords', ':searchKeywords'),
|
||||
$qb->expr()->like('country_name',':searchKeywords'),
|
||||
$qb->expr()->like('country_keywords', ':searchKeywords'),
|
||||
$qb->expr()->like('region_name', ':searchKeywords'),
|
||||
$qb->expr()->like('region_keywords', ':searchKeywords'),
|
||||
$qb->expr()->like('city_name', ':searchKeywords'),
|
||||
$qb->expr()->like('city_keywords', ':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()->fetchAllAssociative();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
* @param string $search
|
||||
* @param array $filterSettings
|
||||
* @param array $excludedRegionUids
|
||||
* @return array
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function searchDestinations($type, $search, array $filterSettings, $excludedRegionUids = [])
|
||||
{
|
||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||
|
||||
$query = $qb
|
||||
->select($type . ' as uid')
|
||||
->addSelectLiteral('REPLACE(' . $type . '_name, "\r\n", " ") as name')
|
||||
->from('tx_epproducts_domain_model_date', 'date')
|
||||
->where('product_searchable = 1')
|
||||
->andWhere($qb->expr()->orX(
|
||||
$qb->expr()->like($type . '_name',':searchName'),
|
||||
$qb->expr()->like($type . '_keywords', ':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);
|
||||
|
||||
if (count($excludedRegionUids) > 0) {
|
||||
$query
|
||||
->andWhere('date.region NOT IN (:excludedRegionUids)')
|
||||
->setParameter('excludedRegionUids', $excludedRegionUids, Connection::PARAM_INT_ARRAY)
|
||||
;
|
||||
}
|
||||
|
||||
return $query->execute()->fetchAllAssociative();
|
||||
}
|
||||
|
||||
}
|
||||
{}
|
||||
|
||||
+155
-172
@@ -2,31 +2,6 @@
|
||||
|
||||
namespace EP\EpProducts\Domain\Repository;
|
||||
|
||||
/***************************************************************
|
||||
*
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use EP\EpProducts\Domain\Model\Date;
|
||||
use EP\EpProducts\Domain\Model\Hotel;
|
||||
use EP\EpProducts\Domain\Model\Product;
|
||||
@@ -34,21 +9,14 @@ use TYPO3\CMS\Core\Database\Connection;
|
||||
|
||||
class ProductRepository extends AbstractRepository
|
||||
{
|
||||
|
||||
/**
|
||||
* @param array $productUids
|
||||
* @param array $hotelUids
|
||||
* @return array
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function getWatchlist(array $productUids, array $hotelUids)
|
||||
public function getWatchlist(array $productUids, array $hotelUids): array
|
||||
{
|
||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||
|
||||
$query = $qb
|
||||
$qb
|
||||
->select(
|
||||
'date.concept as conceptUid', 'date.concept_name as conceptName', 'date.concept_code as conceptCode',
|
||||
'date.product as productUid', 'date.product_name as productName',
|
||||
'date.concept as conceptUid', 'date.concept_name as conceptName',
|
||||
'date.concept_code as conceptCode', 'date.product as productUid', 'date.product_name as productName',
|
||||
'date.product_detail_page as productDetailPage', 'date.product_feature as productFeature',
|
||||
'date.country as countryUid','date.country_name as countryName', 'date.country_code as countryCode',
|
||||
'date.region as regionUid', 'date.region_name as regionName', 'date.region_feature as regionFeature',
|
||||
@@ -61,35 +29,36 @@ class ProductRepository extends AbstractRepository
|
||||
'date.pseudo_price as pseudoPrice'
|
||||
)
|
||||
->from('tx_epproducts_domain_model_date', 'date')
|
||||
->where('date.product IN (:productUids)')
|
||||
->andWhere('date.hotel IN (:hotelUids)')
|
||||
->andWhere('date.product_searchable = 1')
|
||||
->where($qb->expr()->in(
|
||||
'date.product',
|
||||
$qb->createNamedParameter($productUids, Connection::PARAM_INT_ARRAY))
|
||||
)
|
||||
->andWhere($qb->expr()->in(
|
||||
'date.hotel',
|
||||
$qb->createNamedParameter($hotelUids, Connection::PARAM_INT_ARRAY))
|
||||
)
|
||||
->andWhere($qb->expr()->eq('date.product_searchable', 1))
|
||||
->orderBy('date.concept_sorting')
|
||||
->addOrderBy('date.product_name')
|
||||
->addOrderBy('date.min_price')
|
||||
->addOrderBy('date.date_start')
|
||||
->addOrderBy('date.hotel_name')
|
||||
->setParameter('productUids', $productUids, Connection::PARAM_INT_ARRAY)
|
||||
->setParameter('hotelUids', $hotelUids, Connection::PARAM_INT_ARRAY)
|
||||
;
|
||||
|
||||
return $query->execute()->fetchAllAssociative();
|
||||
return $qb
|
||||
->execute()
|
||||
->fetchAllAssociative()
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $filterSettings
|
||||
* @param array $excludedConceptUids
|
||||
* @return array
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function getSearchResult(array $filterSettings, $excludedConceptUids = [])
|
||||
public function getSearchResult(array $filterSettings, array $excludedConceptUids = []): array
|
||||
{
|
||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||
|
||||
$query = $qb
|
||||
$qb
|
||||
->select(
|
||||
'date.concept as conceptUid', 'date.concept_name as conceptName', 'date.concept_code as conceptCode',
|
||||
'date.concept_sorting as conceptSorting',
|
||||
'date.concept as conceptUid', 'date.concept_name as conceptName',
|
||||
'date.concept_code as conceptCode', 'date.concept_sorting as conceptSorting',
|
||||
'date.product as productUid', 'date.product_name as productName',
|
||||
'date.product_detail_page as productDetailPage', 'date.product_feature as productFeature',
|
||||
'date.daytrip as daytrip', 'date.country as countryUid','date.country_name as countryName',
|
||||
@@ -108,7 +77,7 @@ class ProductRepository extends AbstractRepository
|
||||
)
|
||||
->from('tx_epproducts_domain_model_date', 'date')
|
||||
->leftJoin('date', 'tx_epproducts_domain_model_room', 'room', 'room.date = date.uid')
|
||||
->where('date.product_searchable = 1')
|
||||
->where($qb->expr()->eq('date.product_searchable', 1))
|
||||
->andWhere('date.date_start >= NOW()')
|
||||
->groupBy('date.product')
|
||||
->addGroupBy('date.hotel')
|
||||
@@ -123,29 +92,25 @@ class ProductRepository extends AbstractRepository
|
||||
;
|
||||
|
||||
if (count($excludedConceptUids) > 0) {
|
||||
$qb
|
||||
->andWhere('concept NOT IN (:excludedConceptUids)')
|
||||
->setParameter('excludedConceptUids', $excludedConceptUids, Connection::PARAM_INT_ARRAY)
|
||||
;
|
||||
$qb->andWhere($qb->expr()->notIn(
|
||||
'concept',
|
||||
$qb->createNamedParameter($excludedConceptUids, Connection::PARAM_INT_ARRAY))
|
||||
);
|
||||
}
|
||||
|
||||
$this->addFiltersettingsConditions($query, $filterSettings);
|
||||
$this->addFiltersettingsConditions($qb, $filterSettings);
|
||||
|
||||
return $query->execute()->fetchAllAssociative();
|
||||
return $qb
|
||||
->execute()
|
||||
->fetchAllAssociative()
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $filterSettings
|
||||
* @param array $excludedConceptUids
|
||||
* @param int $limit
|
||||
* @return array
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function getTeasers(array $filterSettings, $excludedConceptUids = [], $limit = 0)
|
||||
public function getTeasers(array $filterSettings, array $excludedConceptUids = [], int $limit = 0): array
|
||||
{
|
||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||
|
||||
$query = $qb
|
||||
$qb
|
||||
->select(
|
||||
'product as productUid', 'product_name as productName', 'product_detail_page as productDetailPage',
|
||||
'product_feature as productFeature', 'product_teaser as productTeaser', 'product_fact as productFact',
|
||||
@@ -173,52 +138,55 @@ class ProductRepository extends AbstractRepository
|
||||
->addOrderBy('date_start')
|
||||
;
|
||||
|
||||
if (null !== $filterSettings['productsPid']) {
|
||||
$qb->andWhere($qb->expr()->eq(
|
||||
'date.product_pid',
|
||||
$qb->createNamedParameter($filterSettings['productsPid'], Connection::PARAM_INT))
|
||||
);
|
||||
}
|
||||
|
||||
if ($limit > 0) {
|
||||
$query->setMaxResults($limit);
|
||||
$qb->setMaxResults($limit);
|
||||
}
|
||||
|
||||
if (empty($filterSettings['productUid'])) {
|
||||
$query->andWhere('product_searchable = 1');
|
||||
$qb->andWhere($qb->expr()->eq('product_searchable', 1));
|
||||
} else {
|
||||
$query
|
||||
->andWhere('product = :productUid')
|
||||
->setParameter('productUid', (int)$filterSettings['productUid'])
|
||||
;
|
||||
$qb->andWhere($qb->expr()->eq(
|
||||
'product',
|
||||
$qb->createNamedParameter($filterSettings['productUid'], Connection::PARAM_INT))
|
||||
);
|
||||
}
|
||||
|
||||
$this->addDateFilterConditions($query, $filterSettings);
|
||||
$this->addHotelFilterConditions($query, $filterSettings);
|
||||
$this->addCountryRegionAndCityFilterConditions($query, $filterSettings);
|
||||
$this->addConceptFilterConditions($query, $filterSettings);
|
||||
$this->addTransportationFilterConditions($query, $filterSettings);
|
||||
$this->addDateFilterConditions($qb, $filterSettings);
|
||||
$this->addHotelFilterConditions($qb, $filterSettings);
|
||||
$this->addCountryRegionAndCityFilterConditions($qb, $filterSettings);
|
||||
$this->addConceptFilterConditions($qb, $filterSettings);
|
||||
$this->addTransportationFilterConditions($qb, $filterSettings);
|
||||
|
||||
if (count($excludedConceptUids) > 0) {
|
||||
$qb
|
||||
->andWhere('concept NOT IN (:excludedConceptUids)')
|
||||
->setParameter('excludedConceptUids', $excludedConceptUids, Connection::PARAM_INT_ARRAY)
|
||||
;
|
||||
$qb->andWhere($qb->expr()->notIn(
|
||||
'concept',
|
||||
$qb->createNamedParameter($excludedConceptUids, Connection::PARAM_INT_ARRAY))
|
||||
);
|
||||
}
|
||||
|
||||
return $query->execute()->fetchAllAssociative();
|
||||
return $qb
|
||||
->execute()
|
||||
->fetchAllAssociative()
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Product $product
|
||||
* @param Hotel $hotel
|
||||
* @param array $filterSettings
|
||||
* @param Date $date
|
||||
* @return array
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function getPricetable(Product $product, Hotel $hotel, array $filterSettings, Date $date = null)
|
||||
public function getPricetable(Product $product, Hotel $hotel, array $filterSettings, Date $date = null): array
|
||||
{
|
||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||
|
||||
$query = $qb
|
||||
$qb
|
||||
->select(
|
||||
'date.uid as dateUid', 'date.date_start as dateStart', 'date.date_end as dateEnd', 'date.bus_pro_id as dateBusProId',
|
||||
'date.hotel as hotelUid', 'date.hotel_bus_pro_id as hotelBusProId', 'date.bus_included as dateBusIncluded',
|
||||
'date.skipass_included as dateSkipassIncluded', 'date.season as season',
|
||||
'date.uid as dateUid', 'date.date_start as dateStart', 'date.date_end as dateEnd',
|
||||
'date.bus_pro_id as dateBusProId', 'date.hotel as hotelUid', 'date.hotel_bus_pro_id as hotelBusProId',
|
||||
'date.bus_included as dateBusIncluded', 'date.skipass_included as dateSkipassIncluded',
|
||||
'date.season as season',
|
||||
'room.uid as roomUid', 'room.bus_pro_id as roomBusProId', 'room.name as roomName',
|
||||
'room.price as roomPrice', 'date.discount as roomDiscount', 'date.bus_price as busPrice',
|
||||
'room.services as roomOptionalServices', 'room.nights as roomNights', 'room.available as roomAvailable'
|
||||
@@ -229,38 +197,43 @@ class ProductRepository extends AbstractRepository
|
||||
->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(),
|
||||
])
|
||||
->andWhere($qb->expr()->eq(
|
||||
'date.product',
|
||||
$qb->createNamedParameter($product->getUid(), Connection::PARAM_INT))
|
||||
)
|
||||
->andWhere($qb->expr()->eq(
|
||||
'date.hotel',
|
||||
$qb->createNamedParameter($hotel->getUid(), Connection::PARAM_INT))
|
||||
)
|
||||
;
|
||||
|
||||
if ($date !== null) {
|
||||
$query
|
||||
->andWhere('date.uid = :date')
|
||||
->setParameter('date', $date->getUid())
|
||||
;
|
||||
if (null !== $filterSettings['productsPid']) {
|
||||
$qb->andWhere($qb->expr()->eq(
|
||||
'date.product_pid',
|
||||
$qb->createNamedParameter($filterSettings['productsPid'], Connection::PARAM_INT))
|
||||
);
|
||||
}
|
||||
|
||||
$this->addFiltersettingsConditions($query, $filterSettings);
|
||||
if ($date !== null) {
|
||||
$qb->andWhere($qb->expr()->eq(
|
||||
'date.uid',
|
||||
$qb->createNamedParameter($date->getUid(), Connection::PARAM_INT))
|
||||
);
|
||||
}
|
||||
|
||||
return $query->execute()->fetchAllAssociative();
|
||||
$this->addFiltersettingsConditions($qb, $filterSettings);
|
||||
|
||||
return $qb
|
||||
->execute()
|
||||
->fetchAllAssociative()
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Product $product
|
||||
* @param Hotel $hotel
|
||||
* @param array $filterSettings
|
||||
* @return array
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function getAvailableDates(Product $product, Hotel $hotel, array $filterSettings)
|
||||
public function getAvailableDates(Product $product, Hotel $hotel, array $filterSettings): array
|
||||
{
|
||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||
|
||||
$query = $qb
|
||||
$qb
|
||||
->select(
|
||||
'date.uid as dateUid', 'date.date_start as dateStart', 'date.date_end as dateEnd',
|
||||
'date.season as season', 'date.min_price as dateMinPrice', 'date.pseudo_price as datePseudoPrice',
|
||||
@@ -275,61 +248,65 @@ class ProductRepository extends AbstractRepository
|
||||
->orderBy('date.date_start', 'ASC')
|
||||
->addOrderBy('date.min_price', 'ASC')
|
||||
->where('date.date_start >= NOW()')
|
||||
->andWhere('date.product = :product')
|
||||
->andWhere('date.hotel = :hotel')
|
||||
->andWhere($qb->expr()->eq(
|
||||
'date.product',
|
||||
$qb->createNamedParameter($product->getUid(), Connection::PARAM_INT))
|
||||
)
|
||||
->andWhere($qb->expr()->eq(
|
||||
'date.hotel',
|
||||
$qb->createNamedParameter($hotel->getUid(), Connection::PARAM_INT))
|
||||
)
|
||||
->groupBy('date.date_start')
|
||||
->setParameters([
|
||||
'product' => $product->getUid(),
|
||||
'hotel' => $hotel->getUid(),
|
||||
])
|
||||
;
|
||||
|
||||
$this->addFiltersettingsConditions($query, $filterSettings, true);
|
||||
if (null !== $filterSettings['productsPid']) {
|
||||
$qb->andWhere($qb->expr()->eq(
|
||||
'date.product_pid',
|
||||
$qb->createNamedParameter($filterSettings['productsPid'], Connection::PARAM_INT))
|
||||
);
|
||||
}
|
||||
|
||||
return $query->execute()->fetchAllAssociative();
|
||||
$this->addFiltersettingsConditions($qb, $filterSettings, true);
|
||||
|
||||
return $qb
|
||||
->execute()
|
||||
->fetchAllAssociative()
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Product $product
|
||||
* @return bool
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function hasDates(Product $product)
|
||||
public function hasDates(Product $product): bool
|
||||
{
|
||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||
|
||||
$query = $qb
|
||||
$result = $qb
|
||||
->select('date.uid')
|
||||
->from('tx_epproducts_domain_model_date', 'date')
|
||||
->where('date.product = :product')
|
||||
->setParameter('product', $product->getUid())
|
||||
->where($qb->expr()->eq(
|
||||
'date.product',
|
||||
$qb->createNamedParameter($product->getUid(), Connection::PARAM_INT))
|
||||
)
|
||||
->setMaxResults(1)
|
||||
->execute()
|
||||
->fetchColumn()
|
||||
->fetchOne()
|
||||
;
|
||||
|
||||
return $query !== false;
|
||||
return $result !== false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Product $product
|
||||
* @param Hotel $hotel
|
||||
* @return array
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function getDatesForExport(Product $product, Hotel $hotel)
|
||||
public function getDatesForExport(Product $product, Hotel $hotel): array
|
||||
{
|
||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||
|
||||
$query = $qb
|
||||
$qb
|
||||
->select(
|
||||
'date.bus_pro_id as dateBusProId', 'date.date_start as dateStart', 'date.date_end as dateEnd',
|
||||
'date.min_price as dateMinPrice', 'date.discount as dateDiscount', 'date.bus_price as busPrice',
|
||||
'date.nights as dateNights', 'date.bus_included as dateBusIncluded', 'date.services_included as dateServicesIncluded',
|
||||
'date.services_general as dateServicesGeneral', 'date.skipass_included as dateSkipassIncluded',
|
||||
'date.bus_pro_id as dateBusProId', 'date.hotel_bus_pro_id as hotelBusProId', 'date.pickups as pickups',
|
||||
'room.uid as roomUid', 'room.bus_pro_id as roomBusProId', 'room.code as roomCode', 'room.name as roomName',
|
||||
'room.price as roomPrice', 'room.pax as roomPax', 'date.discount as roomDiscount', 'date.bus_price as busPrice',
|
||||
'date.nights as dateNights', 'date.bus_included as dateBusIncluded', 'date.bus_price as busPrice',
|
||||
'date.services_included as dateServicesIncluded', 'date.services_general as dateServicesGeneral',
|
||||
'date.skipass_included as dateSkipassIncluded', 'date.bus_pro_id as dateBusProId',
|
||||
'date.discount as roomDiscount', 'date.hotel_bus_pro_id as hotelBusProId', 'date.pickups as pickups',
|
||||
'room.uid as roomUid', 'room.bus_pro_id as roomBusProId', 'room.code as roomCode',
|
||||
'room.name as roomName', 'room.price as roomPrice', 'room.pax as roomPax',
|
||||
'room.services as roomOptionalServices', 'room.nights as roomNights', 'room.available as roomAvailable'
|
||||
)
|
||||
->from('tx_epproducts_domain_model_date', 'date')
|
||||
@@ -337,43 +314,49 @@ class ProductRepository extends AbstractRepository
|
||||
->orderBy('date.date_start', 'ASC')
|
||||
->addOrderBy('date.min_price', 'ASC')
|
||||
->where('date.date_start >= NOW()')
|
||||
->andWhere('date.product = :product')
|
||||
->andWhere('date.hotel = :hotel')
|
||||
->setParameters([
|
||||
'product' => $product->getUid(),
|
||||
'hotel' => $hotel->getUid(),
|
||||
])
|
||||
->andWhere($qb->expr()->eq(
|
||||
'date.product',
|
||||
$qb->createNamedParameter($product->getUid(), Connection::PARAM_INT))
|
||||
)
|
||||
->andWhere($qb->expr()->eq(
|
||||
'date.hotel',
|
||||
$qb->createNamedParameter($hotel->getUid(), Connection::PARAM_INT))
|
||||
)
|
||||
;
|
||||
|
||||
return $query->execute()->fetchAllAssociative();
|
||||
return $qb
|
||||
->execute()
|
||||
->fetchAllAssociative()
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Product $product
|
||||
* @return array
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function getEventPriceTable(Product $product)
|
||||
public function getEventPriceTable(Product $product): array
|
||||
{
|
||||
$qb = $this->getDbConnection()->createQueryBuilder();
|
||||
|
||||
$query = $qb
|
||||
$qb
|
||||
->select(
|
||||
'date.bus_pro_id as dateBusProId', 'date.hotel_bus_pro_id as hotelBusProId', 'date.date_end as dateEnd',
|
||||
'date.hotel as hotelUid', 'date.hotel_name as hotelName', 'date.hotel_header_title as hotelTitle',
|
||||
'date.hotel_category as hotelCategory',
|
||||
'date.bus_pro_id as dateBusProId', 'date.hotel_bus_pro_id as hotelBusProId',
|
||||
'date.date_end as dateEnd', 'date.hotel as hotelUid', 'date.hotel_name as hotelName',
|
||||
'date.hotel_header_title as hotelTitle', 'date.hotel_category as hotelCategory',
|
||||
'room.pax as roomPax', 'room.price as roomPrice', 'room.available as available',
|
||||
'room.pax as roomPax', 'room.price as roomPrice', 'room.available as available',
|
||||
'hotel.detail_page as hotelDetailPageUid', 'hotel.short_name as hotelShortName', 'hotel.show_as_teaser as hotelShowAsTeaser'
|
||||
'hotel.detail_page as hotelDetailPageUid', 'hotel.short_name as hotelShortName',
|
||||
'hotel.show_as_teaser as hotelShowAsTeaser'
|
||||
)
|
||||
->from('tx_epproducts_domain_model_date', 'date')
|
||||
->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'room.date = date.uid')
|
||||
->innerJoin('date', 'tx_epproducts_domain_model_hotel', 'hotel', 'hotel.uid = date.hotel')
|
||||
->where('date.product = :productUid')
|
||||
->setParameter('productUid', $product->getUid())
|
||||
->where($qb->expr()->eq(
|
||||
'date.product',
|
||||
$qb->createNamedParameter($product->getUid(), Connection::PARAM_INT))
|
||||
)
|
||||
;
|
||||
|
||||
return $query->execute()->fetchAllAssociative();
|
||||
return $qb
|
||||
->execute()
|
||||
->fetchAllAssociative()
|
||||
;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -116,7 +116,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
* @return int
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function import($path)
|
||||
public function import($path): int
|
||||
{
|
||||
$this->db = $this->getDbConnection();
|
||||
$this->getRoomMappings();
|
||||
@@ -129,6 +129,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
$this->copyTables();
|
||||
$this->clearTempTables();
|
||||
$this->cacheService->clearPageCache();
|
||||
|
||||
return $dateCount;
|
||||
}
|
||||
|
||||
@@ -147,13 +148,14 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function checkActiveUpload($path)
|
||||
public function checkActiveUpload($path): bool
|
||||
{
|
||||
$tempFile = $path . '/.pureftpd-upload.*';
|
||||
|
||||
return count(glob($tempFile)) > 0;
|
||||
}
|
||||
|
||||
public function parseXmlFilesForProducts($path)
|
||||
public function parseXmlFilesForProducts($path): int
|
||||
{
|
||||
$dateCount = 0;
|
||||
|
||||
@@ -172,7 +174,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
* @param string $file
|
||||
* @return int
|
||||
*/
|
||||
public function parseProductXmlFile($file)
|
||||
public function parseProductXmlFile($file): int
|
||||
{
|
||||
if (!file_exists($file)) {
|
||||
$this->logger->error('product xml not found', ['file' => $file]);
|
||||
@@ -193,60 +195,50 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
return $this->parseProduct($xmlData->reise[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function createTempTables()
|
||||
public function createTempTables(): void
|
||||
{
|
||||
$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');
|
||||
$this->db->executeStatement('CREATE TABLE IF NOT EXISTS tx_epproducts_domain_model_date_temp LIKE tx_epproducts_domain_model_date');
|
||||
$this->db->executeStatement('CREATE TABLE IF NOT EXISTS tx_epproducts_domain_model_room_temp LIKE tx_epproducts_domain_model_room');
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function clearTables()
|
||||
public function clearTables(): void
|
||||
{
|
||||
$this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_date');
|
||||
$this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_room');
|
||||
$this->db->executeStatement('TRUNCATE TABLE tx_epproducts_domain_model_date');
|
||||
$this->db->executeStatement('TRUNCATE TABLE tx_epproducts_domain_model_room');
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function copyTables()
|
||||
public function copyTables(): void
|
||||
{
|
||||
$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');
|
||||
$this->db->executeStatement('INSERT INTO tx_epproducts_domain_model_date SELECT * FROM tx_epproducts_domain_model_date_temp');
|
||||
$this->db->executeStatement('INSERT INTO tx_epproducts_domain_model_room SELECT * FROM tx_epproducts_domain_model_room_temp');
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
public function clearTempTables()
|
||||
public function clearTempTables(): void
|
||||
{
|
||||
$this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_date_temp');
|
||||
$this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_room_temp');
|
||||
$this->db->executeStatement('TRUNCATE TABLE tx_epproducts_domain_model_date_temp');
|
||||
$this->db->executeStatement('TRUNCATE TABLE tx_epproducts_domain_model_room_temp');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \SimpleXMLElement $xmlProduct
|
||||
* @return int
|
||||
*/
|
||||
protected function parseProduct(\SimpleXMLElement $xmlProduct)
|
||||
protected function parseProduct(\SimpleXMLElement $xmlProduct): int
|
||||
{
|
||||
$code = (string) $xmlProduct->attributes()['code'];
|
||||
$busProId = (int) $xmlProduct->attributes()['idbuspro'];
|
||||
$dateCount = 0;
|
||||
|
||||
$sql = '
|
||||
SELECT p.uid uid, p.daytrip daytrip, p.hide_booking_button, p.important important, p.name product_name,
|
||||
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, p.path_segment slug, p.season season,
|
||||
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
|
||||
SELECT p.uid uid, p.pid pid, p.daytrip daytrip, p.hide_booking_button, p.important important,
|
||||
p.name product_name, 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, p.path_segment slug,
|
||||
p.season season, p.concept concept,
|
||||
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,
|
||||
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
|
||||
@@ -285,7 +277,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
* @param array $product
|
||||
* @return int
|
||||
*/
|
||||
protected function parseDates(\SimpleXMLElement $xmlDate, array $product)
|
||||
protected function parseDates(\SimpleXMLElement $xmlDate, array $product): int
|
||||
{
|
||||
$dateCount = 0;
|
||||
foreach ($xmlDate->hotel as $xmlHotel) {
|
||||
@@ -328,7 +320,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
* @param \SimpleXMLElement $xmlDate
|
||||
* @return array
|
||||
*/
|
||||
protected function createDateRecord(array $product, \SimpleXMLElement $xmlDate)
|
||||
protected function createDateRecord(array $product, \SimpleXMLElement $xmlDate): array
|
||||
{
|
||||
$dateStart = \DateTime::createFromFormat('d.m.Y', (string) $xmlDate->attributes()['termin']);
|
||||
$dateEnd = \DateTime::createFromFormat('d.m.Y', (string) $xmlDate->attributes()['bis']);
|
||||
@@ -340,6 +332,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
$date = [
|
||||
'pid' => $this->pid,
|
||||
'product' => $product['uid'],
|
||||
'product_pid' => $product['pid'],
|
||||
'product_name' => $product['product_name'],
|
||||
'product_fact' => $product['product_fact'],
|
||||
'product_searchable' => $product['product_searchable'],
|
||||
@@ -480,13 +473,14 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
* @param array $date
|
||||
* @return bool
|
||||
*/
|
||||
protected function parseHotel(\SimpleXMLElement $xmlHotel, array &$date)
|
||||
protected function parseHotel(\SimpleXMLElement $xmlHotel, array &$date): bool
|
||||
{
|
||||
$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;
|
||||
}
|
||||
|
||||
@@ -520,6 +514,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
$date['hotel_detail_page'] = $hotel['detail_page'];
|
||||
$date['earlybird'] = $hotel['earlybird'];
|
||||
$date['new'] = $hotel['new'];
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -529,7 +524,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
* @param array $date
|
||||
* @param array $services
|
||||
*/
|
||||
protected function parseRooms(\SimpleXMLElement $xmlHotel, $hotelUid, array &$date, array $services)
|
||||
protected function parseRooms(\SimpleXMLElement $xmlHotel, $hotelUid, array &$date, array $services): void
|
||||
{
|
||||
$minPriceOverall = 0;
|
||||
$minPriceAvailable = 0;
|
||||
@@ -557,10 +552,6 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
$available = (int) $roomXml->attributes()['verfuegbar'];
|
||||
$price = (int) $roomXml->attributes()['preis'];
|
||||
|
||||
// Skip all unavailable rooms
|
||||
// if (!$available) {
|
||||
// continue;
|
||||
// }
|
||||
// Skip rooms with zero price _and_ zero availability.
|
||||
if (!$available && !$price) {
|
||||
continue;
|
||||
@@ -623,7 +614,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
* @param array $services
|
||||
* @return int
|
||||
*/
|
||||
protected function determineDiscount(array $services)
|
||||
protected function determineDiscount(array $services): int
|
||||
{
|
||||
foreach ($services as $key => $section) {
|
||||
foreach ($section as $service) {
|
||||
@@ -642,7 +633,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
* @param bool $skipWithoutPrice
|
||||
* @return array
|
||||
*/
|
||||
protected function parseService(\SimpleXMLElement $xmlData, $serviceLabel, $skipWithoutPrice = false)
|
||||
protected function parseService(\SimpleXMLElement $xmlData, string $serviceLabel, bool $skipWithoutPrice = false): array
|
||||
{
|
||||
$data = [];
|
||||
$services = $xmlData->xpath($serviceLabel . '/leistung');
|
||||
@@ -703,7 +694,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
* @param string $label
|
||||
* @return array
|
||||
*/
|
||||
protected function parseSelectionGroup(\SimpleXMLElement $xmlDate, $label)
|
||||
protected function parseSelectionGroup(\SimpleXMLElement $xmlDate, string $label): array
|
||||
{
|
||||
$data = [];
|
||||
$selectionGroup = $xmlDate->xpath('selektiongruppe[@bezeichnung="' . $label . '"]/selektion');
|
||||
@@ -725,7 +716,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
* @param array $services
|
||||
* @param array $date
|
||||
*/
|
||||
protected function processBusConditions(array $services, array &$date)
|
||||
protected function processBusConditions(array $services, array &$date): void
|
||||
{
|
||||
if (!array_key_exists('BUS', $services)) {
|
||||
return;
|
||||
@@ -738,7 +729,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
}
|
||||
}
|
||||
|
||||
protected function getRoomMappings()
|
||||
protected function getRoomMappings(): void
|
||||
{
|
||||
$sql = 'SELECT code, type FROM tx_epproducts_domain_model_roommapping';
|
||||
$roomMappings = $this->db->fetchAllAssociative($sql);
|
||||
@@ -747,7 +738,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
}
|
||||
}
|
||||
|
||||
protected function getHotelMappings()
|
||||
protected function getHotelMappings(): void
|
||||
{
|
||||
$sql = '
|
||||
SELECT u.code code, u.uid uid, h.name name, h.type type,
|
||||
@@ -787,9 +778,9 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
/**
|
||||
* @param string $table
|
||||
* @param int $uid
|
||||
* @return array
|
||||
* @return string
|
||||
*/
|
||||
protected function getTopFactForRecord($table, $uid)
|
||||
protected function getTopFactForRecord($table, $uid): string
|
||||
{
|
||||
$sql = '
|
||||
SELECT f.name
|
||||
@@ -807,7 +798,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
* @param array $services
|
||||
* @param array $list
|
||||
*/
|
||||
protected function addServices(array $services, array &$list)
|
||||
protected function addServices(array $services, array &$list): void
|
||||
{
|
||||
foreach ($services as $key => $section) {
|
||||
if (!array_key_exists($key, $list)) {
|
||||
@@ -817,7 +808,7 @@ class DateImportService implements SingletonInterface, LoggerAwareInterface
|
||||
}
|
||||
}
|
||||
|
||||
protected function importPickups()
|
||||
protected function importPickups(): void
|
||||
{
|
||||
libxml_use_internal_errors (true);
|
||||
$path = GeneralUtility::getFileAbsFileName('fileadmin/xmlexport/zustiege.xml');
|
||||
|
||||
@@ -2,37 +2,13 @@
|
||||
|
||||
namespace EP\EpProducts\Service;
|
||||
|
||||
/***************************************************************
|
||||
*
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use EP\EpProducts\Domain\Model\Dto\FilterOptions;
|
||||
use EP\EpProducts\Domain\Model\SearchResult;
|
||||
use EP\EpProducts\Domain\Repository\DateRepository;
|
||||
use Symfony\Component\OptionsResolver\Options;
|
||||
use Symfony\Component\OptionsResolver\OptionsResolver;
|
||||
use TYPO3\CMS\Core\SingletonInterface;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
|
||||
|
||||
class FilterService implements SingletonInterface
|
||||
{
|
||||
@@ -40,22 +16,23 @@ class FilterService implements SingletonInterface
|
||||
public const DURATION_LONG = 5;
|
||||
|
||||
/**
|
||||
* @var \EP\EpProducts\Domain\Repository\DateRepository
|
||||
* @var ConfigurationManagerInterface
|
||||
*/
|
||||
protected $dateRepository;
|
||||
protected $configurationManager;
|
||||
|
||||
/**
|
||||
* @param DateRepository $dateRepository
|
||||
* @param ConfigurationManagerInterface $configurationManager
|
||||
*/
|
||||
public function __construct(DateRepository $dateRepository)
|
||||
public function __construct(ConfigurationManagerInterface $configurationManager)
|
||||
{
|
||||
$this->dateRepository = $dateRepository;
|
||||
$this->configurationManager = $configurationManager;
|
||||
}
|
||||
|
||||
public function getNormalizedFilterSettings(array $filterSettings = [], array $forcedConceptUids = []): array
|
||||
{
|
||||
$optionsResolver = new OptionsResolver();
|
||||
$optionsResolver->setDefaults([
|
||||
'productsPid' => null,
|
||||
'priceRanges' => [],
|
||||
'countryUids' => [],
|
||||
'regionUids' => [],
|
||||
@@ -72,6 +49,22 @@ class FilterService implements SingletonInterface
|
||||
'pax' => 0,
|
||||
'bus' => null,
|
||||
]);
|
||||
foreach (['productsPid', 'hotelUid', 'productUid', 'nights', 'pax'] as $key) {
|
||||
$optionsResolver->setNormalizer($key, function (Options $options, $value) {
|
||||
return null !== $value ? (int)$value : null;
|
||||
});
|
||||
}
|
||||
foreach (['priceRanges', 'countryUids', 'regionUids', 'cityUids', 'conceptUids', 'boardTypes', 'hotelTypes', 'roomTypes'] as $key) {
|
||||
$optionsResolver->setNormalizer($key, function (Options $options, $value) {
|
||||
if (empty($value)) {
|
||||
return [];
|
||||
}
|
||||
return array_map('intval', $value);
|
||||
});
|
||||
}
|
||||
$optionsResolver->setNormalizer('bus', function (Options $options, $value) {
|
||||
return null !== $value ? (bool)$value : null;
|
||||
});
|
||||
|
||||
$filterSettings = $optionsResolver->resolve($filterSettings);
|
||||
|
||||
@@ -79,12 +72,15 @@ class FilterService implements SingletonInterface
|
||||
array_push($filterSettings['conceptUids'], ...$forcedConceptUids);
|
||||
}
|
||||
|
||||
$typoScriptSettings = $this->getTypoScriptSettings();
|
||||
$filterSettings['productsPid'] = $typoScriptSettings['productsPid'] ? (int)$typoScriptSettings['productsPid'] : null;
|
||||
|
||||
return $filterSettings;
|
||||
}
|
||||
|
||||
public function getFilterSettingsFromSearchParams(array $searchParams, array $forcedConceptUids = []): array
|
||||
{
|
||||
$filterSettings = $this->getNormalizedFilterSettings([], $forcedConceptUids);
|
||||
$filterSettings = [];
|
||||
|
||||
if ($searchParams['destinationType'] && $searchParams['destinationUid']) {
|
||||
switch ($searchParams['destinationType']) {
|
||||
@@ -112,18 +108,18 @@ class FilterService implements SingletonInterface
|
||||
$filterSettings['priceRanges'] = [ $searchParams['priceRange'] ];
|
||||
}
|
||||
if ($searchParams['pax']) {
|
||||
$filterSettings['pax'] = (int)$searchParams['pax'];
|
||||
$filterSettings['pax'] = $searchParams['pax'];
|
||||
}
|
||||
if ($searchParams['nights']) {
|
||||
$filterSettings['nights'] = (int)$searchParams['nights'];
|
||||
$filterSettings['nights'] = $searchParams['nights'];
|
||||
}
|
||||
|
||||
return $filterSettings;
|
||||
return $this->getNormalizedFilterSettings($filterSettings, $forcedConceptUids);
|
||||
}
|
||||
|
||||
public function getFilterSettingsFromStaticSearchParams(array $staticSearchParams): array
|
||||
{
|
||||
$filterSettings = $this->getNormalizedFilterSettings();
|
||||
$filterSettings = [];
|
||||
|
||||
if (!empty($staticSearchParams['country'])) {
|
||||
$filterSettings['countryUids'] = [ $staticSearchParams['country'] ];
|
||||
@@ -132,7 +128,7 @@ class FilterService implements SingletonInterface
|
||||
$filterSettings['regionUids'] = [ $staticSearchParams['region'] ];
|
||||
}
|
||||
if (!empty($staticSearchParams['concept'])) {
|
||||
$filterSettings['conceptUids'] = GeneralUtility::trimExplode(',', $staticSearchParams['concept'], true);
|
||||
$filterSettings['conceptUids'] = GeneralUtility::intExplode(',', $staticSearchParams['concept'], true);
|
||||
}
|
||||
if (!empty($staticSearchParams['hotel'])) {
|
||||
$filterSettings['hotelUid'] = $staticSearchParams['hotel'];
|
||||
@@ -141,10 +137,10 @@ class FilterService implements SingletonInterface
|
||||
$filterSettings['productUid'] = $staticSearchParams['product'];
|
||||
}
|
||||
if (!empty($staticSearchParams['hotel_types'])) {
|
||||
$filterSettings['hotelTypes'] = GeneralUtility::trimExplode(',', $staticSearchParams['hotel_types'], true);
|
||||
$filterSettings['hotelTypes'] = GeneralUtility::intExplode(',', $staticSearchParams['hotel_types'], true);
|
||||
}
|
||||
if (!empty($staticSearchParams['bus'])) {
|
||||
$filterSettings['bus'] = (bool)$staticSearchParams['bus'];
|
||||
$filterSettings['bus'] = $staticSearchParams['bus'];
|
||||
}
|
||||
if (!empty($staticSearchParams['date_from']) && $staticSearchParams['date_from'] !== '0000-00-00') {
|
||||
$filterSettings['dateFrom'] = $staticSearchParams['date_from'];
|
||||
@@ -152,11 +148,11 @@ class FilterService implements SingletonInterface
|
||||
if (!empty($staticSearchParams['date_to']) && $staticSearchParams['date_to'] !== '0000-00-00') {
|
||||
$filterSettings['dateTo'] = $staticSearchParams['date_to'];
|
||||
}
|
||||
if (!empty($staticSearchParams['pax']) && (int)$staticSearchParams['pax'] > 0) {
|
||||
$filterSettings['pax'] = (int)$staticSearchParams['pax'];
|
||||
if (!empty($staticSearchParams['pax']) && $staticSearchParams['pax'] > 0) {
|
||||
$filterSettings['pax'] = $staticSearchParams['pax'];
|
||||
}
|
||||
|
||||
return $filterSettings;
|
||||
return $this->getNormalizedFilterSettings($filterSettings);
|
||||
}
|
||||
|
||||
public function collectFilterOptionsFromSearchResult(SearchResult $searchResult): FilterOptions
|
||||
@@ -291,15 +287,16 @@ class FilterService implements SingletonInterface
|
||||
|
||||
public function getFiltersettingsFromSettings(array $settings): array
|
||||
{
|
||||
$filterSettings = $this->getNormalizedFilterSettings();
|
||||
if (isset($settings['regionUid']) && (int) $settings['regionUid'] > 0) {
|
||||
$filterSettings = [];
|
||||
|
||||
if (isset($settings['regionUid']) && (int)$settings['regionUid'] > 0) {
|
||||
$filterSettings['regionUids'] = [ $settings['regionUid'] ];
|
||||
} elseif (isset($settings['countryUid']) && (int) $settings['countryUid'] > 0) {
|
||||
$filterSettings['countryUids'] = [ $settings['countryUid'] ];
|
||||
} elseif (isset($settings['hotelUid']) && (int) $settings['hotelUid'] > 0) {
|
||||
$filterSettings['hotelUid'] = $settings['hotelUid'];
|
||||
}
|
||||
$conceptUids = GeneralUtility::trimExplode(',', $settings['conceptUid'], true);
|
||||
$conceptUids = GeneralUtility::intExplode(',', $settings['conceptUid'], true);
|
||||
if ($conceptUids) {
|
||||
$filterSettings['conceptUids'] = $conceptUids;
|
||||
}
|
||||
@@ -317,10 +314,20 @@ class FilterService implements SingletonInterface
|
||||
$filterSettings['bus'] = true;
|
||||
}
|
||||
if (array_key_exists('hotelTypes', $settings)) {
|
||||
$hotelTypes = GeneralUtility::trimExplode(',', $settings['hotelTypes'], true);
|
||||
$hotelTypes = GeneralUtility::intExplode(',', $settings['hotelTypes'], true);
|
||||
$filterSettings['hotelTypes'] = $hotelTypes;
|
||||
}
|
||||
|
||||
return $filterSettings;
|
||||
return $this->getNormalizedFilterSettings($filterSettings);
|
||||
}
|
||||
|
||||
protected function getTypoScriptSettings(): array
|
||||
{
|
||||
$settings = $this
|
||||
->configurationManager
|
||||
->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT);
|
||||
|
||||
return $settings['plugin.']['tx_epproducts.']['settings.'];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -65,8 +65,7 @@ class ProductDataService implements SingletonInterface
|
||||
HotelRepository $hotelRepository,
|
||||
HotelImageService $hotelImageService,
|
||||
ProductImageService $productImageService
|
||||
)
|
||||
{
|
||||
) {
|
||||
$this->productRepository = $productRepository;
|
||||
$this->hotelRepository = $hotelRepository;
|
||||
$this->productImageService = $productImageService;
|
||||
@@ -78,10 +77,11 @@ class ProductDataService implements SingletonInterface
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getTeaser(array $filterSettings)
|
||||
public function getTeaser(array $filterSettings): array
|
||||
{
|
||||
$teaserData = $this->productRepository->getTeasers($filterSettings);
|
||||
$teasers = $this->preprocessTeasergroup($teaserData);
|
||||
|
||||
return reset($teasers);
|
||||
}
|
||||
|
||||
@@ -92,9 +92,10 @@ class ProductDataService implements SingletonInterface
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getTeasergroup(array $filterSettings, $excludedConceptUids = [], $limit = 0)
|
||||
public function getTeasergroup(array $filterSettings, array $excludedConceptUids = [], int $limit = 0): array
|
||||
{
|
||||
$teaserData = $this->productRepository->getTeasers($filterSettings, $excludedConceptUids);
|
||||
|
||||
return $this->preprocessTeasergroup($teaserData, $limit);
|
||||
}
|
||||
|
||||
@@ -104,12 +105,11 @@ class ProductDataService implements SingletonInterface
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function preprocessTeasergroup(array $teaserData, $limit = 0)
|
||||
public function preprocessTeasergroup(array $teaserData, int $limit = 0): array
|
||||
{
|
||||
$data = [];
|
||||
|
||||
foreach ($teaserData as $row)
|
||||
{
|
||||
foreach ($teaserData as $row) {
|
||||
if (!array_key_exists($row['productUid'], $data)) {
|
||||
$data[$row['productUid']] = $this->createTeaserData($row);
|
||||
}
|
||||
@@ -166,7 +166,7 @@ class ProductDataService implements SingletonInterface
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function createTeaserData(array $teaserData)
|
||||
public function createTeaserData(array $teaserData): array
|
||||
{
|
||||
$hotelCategory = Hotel::$categoryLabels[$teaserData['hotelCategory']] ?? null;
|
||||
|
||||
|
||||
+2
-34
@@ -2,31 +2,6 @@
|
||||
|
||||
namespace EP\EpProducts\Traits;
|
||||
|
||||
/***************************************************************
|
||||
*
|
||||
* Copyright notice
|
||||
*
|
||||
* (c) 2016 Björn Fromme <[email protected]>, dreipunktnull
|
||||
*
|
||||
* All rights reserved
|
||||
*
|
||||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||||
* free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* The GNU General Public License can be found at
|
||||
* http://www.gnu.org/copyleft/gpl.html.
|
||||
*
|
||||
* This script is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use EP\EpProducts\Service\FilterService;
|
||||
use EP\EpProducts\Service\SearchResultService;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
@@ -35,10 +10,7 @@ use TYPO3\CMS\Extbase\Object\ObjectManager;
|
||||
trait RequestArgumentTypeConversionTrait
|
||||
{
|
||||
|
||||
/**
|
||||
* Converts array to searchparams object
|
||||
*/
|
||||
public function processSearchParamsArgument()
|
||||
public function processSearchParamsArgument(): void
|
||||
{
|
||||
/** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */
|
||||
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
|
||||
@@ -58,11 +30,7 @@ trait RequestArgumentTypeConversionTrait
|
||||
$this->request->setArgument('searchParams', $searchParams);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts urlencoded json or array to filtersettings object
|
||||
* @param array $forcedConceptUids
|
||||
*/
|
||||
public function processFilterSettingsArgument(array $forcedConceptUids = [])
|
||||
public function processFilterSettingsArgument(array $forcedConceptUids = []): void
|
||||
{
|
||||
/** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */
|
||||
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
|
||||
|
||||
@@ -24,6 +24,7 @@ plugin.tx_epproducts {
|
||||
}
|
||||
}
|
||||
settings {
|
||||
productsPid = {$plugin.tx_epproducts.settings.productsStoragePid}
|
||||
destinationsStoragePid = {$plugin.tx_epproducts.settings.destinationsStoragePid}
|
||||
snowReportStoragePid = {$plugin.tx_epproducts.settings.snowReportStoragePid}
|
||||
defaultSearchPageUid = {$plugin.tx_epproducts.settings.defaultSearchPageUid}
|
||||
|
||||
@@ -123,6 +123,7 @@ CREATE TABLE tx_epproducts_domain_model_date
|
||||
pseudo_price int(11) DEFAULT '0' NOT NULL,
|
||||
available int(11) DEFAULT '0' NOT NULL,
|
||||
product int(11) unsigned DEFAULT '0',
|
||||
product_pid int(11) unsigned DEFAULT '0',
|
||||
daytrip tinyint(1) unsigned DEFAULT '0' NOT NULL,
|
||||
hide_booking_button tinyint(1) unsigned DEFAULT '0' NOT NULL,
|
||||
important tinyint(1) unsigned DEFAULT '0' NOT NULL,
|
||||
@@ -189,7 +190,7 @@ CREATE TABLE tx_epproducts_domain_model_date
|
||||
l10n_diffsource mediumblob,
|
||||
|
||||
PRIMARY KEY (uid),
|
||||
KEY parent (pid),
|
||||
KEY parent (pid, product_pid),
|
||||
KEY t3ver_oid (t3ver_oid, t3ver_wsid),
|
||||
KEY language (l10n_parent, sys_language_uid),
|
||||
KEY aggregates (date_start, date_end, min_price),
|
||||
|
||||
Reference in New Issue
Block a user