From c50d8cc90af905ed36a82041f5b0f6c9e6d999f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Sat, 15 Feb 2020 17:23:12 +0100 Subject: [PATCH 1/6] Improve webpack polling config --- webpack.config.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/webpack.config.js b/webpack.config.js index 835266ad..3e0c1fa7 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -26,7 +26,8 @@ Encore babelConfig.plugins = [ '@babel/plugin-proposal-object-rest-spread', '@babel/plugin-syntax-dynamic-import' ] }) .configureWatchOptions(function (options) { - options.poll = 250; + options.poll = 500; + options.ignored = /node_modules|vendor|fileadmin/; }); const EpThemeConfig = Encore.getWebpackConfig(); From a130eca733252db94e737c914015da0e6ea4d6d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Sat, 15 Feb 2020 17:23:30 +0100 Subject: [PATCH 2/6] Adjust ddev config to linux environment --- .ddev/config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ddev/config.yaml b/.ddev/config.yaml index 9ef9ae2f..b888273a 100644 --- a/.ddev/config.yaml +++ b/.ddev/config.yaml @@ -6,7 +6,7 @@ php_version: "7.3" webserver_type: apache-cgi router_http_port: "80" router_https_port: "443" -xdebug_enabled: true +xdebug_enabled: false additional_hostnames: - ep-events - ski-boarderweek @@ -15,7 +15,7 @@ additional_hostnames: - ski-wochenenden - schnee-event additional_fqdns: [] -nfs_mount_enabled: true +nfs_mount_enabled: false provider: default omit_containers: [dba] use_dns_when_possible: true From f58d5035298f5b5d28ac49e8e3993d8655a6a222 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Sat, 15 Feb 2020 17:26:08 +0100 Subject: [PATCH 3/6] Enable limiting of dates on detail pages according to teasers --- config/sites/ep-reisen/config.yaml | 11 ++++ .../Classes/Controller/AjaxDateController.php | 11 +++- .../Classes/Controller/ProductController.php | 13 +++- .../Classes/Service/FilterService.php | 14 ++++- .../Classes/Service/ProductDataService.php | 3 +- .../Configuration/TypoScript/setup.typoscript | 4 +- .../ext/ep_products/ext_localconf.php | 3 +- .../ViewHelpers/Uri/ProductViewHelper.php | 63 +++++++++++-------- .../Assets/js/components/ProductDetail.vue | 17 ++++- .../Private/Partials/Product/Teaser.html | 27 +------- .../Private/Partials/Product/TeaserWide.html | 12 +--- .../Private/Templates/Product/Detail.html | 2 + .../Templates/Product/Teasergroup.html | 4 +- 13 files changed, 109 insertions(+), 75 deletions(-) diff --git a/config/sites/ep-reisen/config.yaml b/config/sites/ep-reisen/config.yaml index 8fbc375c..27e5cdc1 100644 --- a/config/sites/ep-reisen/config.yaml +++ b/config/sites/ep-reisen/config.yaml @@ -109,6 +109,12 @@ routeEnhancers: _arguments: product_uid: product hotel_uid: hotel + - + routePath: '/angebot/{date_from}/{date_to}' + _controller: 'Product::detail' + _arguments: + date_from: dateFrom + date_to: dateTo defaultController: 'Product::detail' aspects: product_uid: @@ -119,6 +125,11 @@ routeEnhancers: type: PersistedAliasMapper tableName: tx_epproducts_domain_model_hotel routeFieldName: uid + requirements: + product_uid: '\d' + hotel_uid: '\d' + date_from: '\d{4}-\d{2}-\d{2}' + date_to: '\d{4}-\d{2}-\d{2}' BookingLinkPlugin: type: Extbase extension: EpProducts diff --git a/public/typo3conf/ext/ep_products/Classes/Controller/AjaxDateController.php b/public/typo3conf/ext/ep_products/Classes/Controller/AjaxDateController.php index 1ee271c2..ac225e3f 100644 --- a/public/typo3conf/ext/ep_products/Classes/Controller/AjaxDateController.php +++ b/public/typo3conf/ext/ep_products/Classes/Controller/AjaxDateController.php @@ -95,11 +95,13 @@ class AjaxDateController extends ActionController * @param Product $product * @param Hotel $hotel * @param string $paCode + * @param string $dateFrom + * @param string $dateTo * * @return string * @throws \Doctrine\DBAL\DBALException */ - public function datesAction(Product $product, Hotel $hotel = null, $paCode = null) + public function datesAction(Product $product, Hotel $hotel = null, $paCode = null, $dateFrom = null, $dateTo = null) { if ($hotel === null) { return json_encode([ @@ -111,7 +113,12 @@ class AjaxDateController extends ActionController } $forcedConceptUids = GeneralUtility::trimExplode(',', $this->settings['forcedConceptUids'], true); - $filterSettings = $this->filterService->getDefaultFilterSettings($forcedConceptUids, false); + $filterSettings = $this->filterService->getDefaultFilterSettings( + $forcedConceptUids, + false, + $dateFrom, + $dateTo + ); $altProductLink = null; $altLabel = null; diff --git a/public/typo3conf/ext/ep_products/Classes/Controller/ProductController.php b/public/typo3conf/ext/ep_products/Classes/Controller/ProductController.php index 582ce8f8..78df9083 100644 --- a/public/typo3conf/ext/ep_products/Classes/Controller/ProductController.php +++ b/public/typo3conf/ext/ep_products/Classes/Controller/ProductController.php @@ -100,12 +100,16 @@ class ProductController extends ActionController /** * @param Product $product * @param Hotel $hotel + * @param string $dateFrom + * @param string $dateTo * @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException * @throws \TYPO3\CMS\Extbase\Mvc\Exception\UnsupportedRequestTypeException */ public function detailAction( Product $product = null, - Hotel $hotel = null + Hotel $hotel = null, + $dateFrom = null, + $dateTo = null ) { // Get product to display from flexform settings if not provided via url if ($product === null) { @@ -142,6 +146,7 @@ class ProductController extends ActionController $hotel = reset($product->getHotels()->toArray()); } } + $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids']); $isProductWithExcludedConcept = ($product->getConcept() !== null) && \in_array($product->getConcept()->getUid(), $excludedConceptUids, false); @@ -154,6 +159,8 @@ class ProductController extends ActionController 'isProductWithExcludedConcept' => $isProductWithExcludedConcept, 'isProductWithNoInfoConcept' => $isProductWithNoInfoConcept, 'currentPageUid' => $GLOBALS['TSFE']->id, + 'dateFrom' => $dateFrom, + 'dateTo' => $dateTo, ]); } @@ -193,9 +200,13 @@ class ProductController extends ActionController $excludedConceptUids = GeneralUtility::trimExplode(',', $this->settings['excludedConceptUids'], true); $limit = $this->settings['showMoreLink'] ? 4 : 0; $teasers = $this->productDataService->getTeasergroup($filterSettings, $excludedConceptUids, $limit); + $dateFrom = $this->settings['dateFrom'] ? date('Y-m-d', $this->settings['dateFrom']) : null; + $dateTo = $this->settings['dateTo'] ? date('Y-m-d', $this->settings['dateTo']) : null; $this->view->assign('teasers', $teasers); $this->view->assign('dateAuto', $dateAuto); $this->view->assign('filterSettings', $filterSettings); + $this->view->assign('dateFrom', $dateFrom); + $this->view->assign('dateTo', $dateTo); } } diff --git a/public/typo3conf/ext/ep_products/Classes/Service/FilterService.php b/public/typo3conf/ext/ep_products/Classes/Service/FilterService.php index aaa6bf62..e1ae2912 100644 --- a/public/typo3conf/ext/ep_products/Classes/Service/FilterService.php +++ b/public/typo3conf/ext/ep_products/Classes/Service/FilterService.php @@ -60,12 +60,22 @@ class FilterService implements SingletonInterface /** * @param array $forcedConceptUids * @param bool $respectBookableDaterange - * + * @param string $dateFromYmd + * @param string $dateToYmd * @return FilterSettings + * @throws \Exception */ - public function getDefaultFilterSettings(array $forcedConceptUids = [], $respectBookableDaterange = true) + public function getDefaultFilterSettings(array $forcedConceptUids = [], $respectBookableDaterange = true, $dateFromYmd = null, $dateToYmd = null) { [ $dateFrom, $dateTo ] = $this->constrainDateRange($this->getDateRange()); + + if (null !== $dateFromYmd) { + $dateFrom = new \DateTime($dateFromYmd); + } + if (null !== $dateToYmd) { + $dateTo = new \DateTime($dateToYmd); + } + if (!$respectBookableDaterange) { $dateFrom = new \DateTime('now'); } diff --git a/public/typo3conf/ext/ep_products/Classes/Service/ProductDataService.php b/public/typo3conf/ext/ep_products/Classes/Service/ProductDataService.php index 184e0e53..ddc01ded 100644 --- a/public/typo3conf/ext/ep_products/Classes/Service/ProductDataService.php +++ b/public/typo3conf/ext/ep_products/Classes/Service/ProductDataService.php @@ -180,8 +180,7 @@ class ProductDataService implements SingletonInterface */ public function createTeaserData(array $teaserData) { - $hotelCategory = array_key_exists($teaserData['hotelCategory'], Hotel::$categoryLabels) ? - Hotel::$categoryLabels[$teaserData['hotelCategory']] : null; + $hotelCategory = Hotel::$categoryLabels[$teaserData['hotelCategory']] ?? null; // Use compound key, hotel is not unique $key = $teaserData['hotelUid'] . ':' . $teaserData['productUid']; diff --git a/public/typo3conf/ext/ep_products/Configuration/TypoScript/setup.typoscript b/public/typo3conf/ext/ep_products/Configuration/TypoScript/setup.typoscript index 301e12b4..5b330dbe 100644 --- a/public/typo3conf/ext/ep_products/Configuration/TypoScript/setup.typoscript +++ b/public/typo3conf/ext/ep_products/Configuration/TypoScript/setup.typoscript @@ -95,7 +95,9 @@ plugin.tx_epproducts { } } } - features.requireCHashArgumentForActionArguments = 0 + features { + requireCHashArgumentForActionArguments = 0 + } } config.tx_extbase.persistence.classes { diff --git a/public/typo3conf/ext/ep_products/ext_localconf.php b/public/typo3conf/ext/ep_products/ext_localconf.php index d69395e4..7beb7c56 100644 --- a/public/typo3conf/ext/ep_products/ext_localconf.php +++ b/public/typo3conf/ext/ep_products/ext_localconf.php @@ -404,7 +404,8 @@ $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'ref'; $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'pa'; $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_searchresult[searchParams]'; $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_searchresult[filterSettings]'; -$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_product_detail[filterSettings]'; +$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_product_detail[dateFrom]'; +$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_product_detail[dateTo]'; $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_reseller[reseller]'; $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_ajax[months]'; $GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_ajax[month]'; diff --git a/public/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/ProductViewHelper.php b/public/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/ProductViewHelper.php index 9eef7f4d..c37cb234 100644 --- a/public/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/ProductViewHelper.php +++ b/public/typo3conf/ext/ep_theme/Classes/ViewHelpers/Uri/ProductViewHelper.php @@ -27,6 +27,7 @@ namespace EP\EpTheme\ViewHelpers\Uri; * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ +use EP\EpEvents\Domain\Model\Hotel; use EP\EpProducts\Domain\Model\Product; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; @@ -42,12 +43,12 @@ class ProductViewHelper extends AbstractViewHelper { parent::initializeArguments(); - $this->registerArgument('product', Product::class, 'The product', true); - $this->registerArgument('hotel', 'mixed', 'The hotel'); - $this->registerArgument('linkHotel', 'bool', 'Whether to link the hotel', false, false); - $this->registerArgument('referringPageUid', 'int', 'Uid of the referring page'); - $this->registerArgument('defaultDetailPageUid', 'int', 'Uid of default page for product details'); - $this->registerArgument('origin', 'string', 'Origin of the link'); + $this->registerArgument('product', 'array', 'The product'); + $this->registerArgument('hotel', 'array', 'The hotel'); + $this->registerArgument('dateFrom', 'string', 'Date to limit table on detail page by (Y-m-d)'); + $this->registerArgument('dateTo', 'string', 'Date to limit table on detail page by (Y-m-d)'); + $this->registerArgument('forceHotelUid', 'bool', 'Whether to force link a hotel'); + $this->registerArgument('slug', 'string', 'Slug to append to resulting uri'); } /** @@ -63,35 +64,45 @@ class ProductViewHelper extends AbstractViewHelper ) { $product = $arguments['product']; + $hotel = $arguments['hotel']; - if ($product->getDetailPage()) { + $linkArguments = null; + + if ($arguments['forceHotelUid']) { + $linkArguments = [ + 'product' => $product['uid'], + 'hotel' => $hotel['uid'], + ]; + } elseif ($arguments['dateFrom'] || $arguments['dateTo']) { + $linkArguments = [ + 'dateFrom' => $arguments['dateFrom'], + 'dateTo' => $arguments['dateTo'], + ]; + } + + if (null !== $linkArguments) { + $uri = $renderingContext + ->getControllerContext() + ->getUriBuilder() + ->reset() + ->setTargetPageUid($product['detailPage']) + ->uriFor('detail', $linkArguments, 'Product', 'epproducts', 'product_detail') + ; + } else { /** @var ContentObjectRenderer $contentObject */ $contentObject = GeneralUtility::makeInstance(ContentObjectRenderer::class); - return $contentObject->typoLink_URL( + $uri = $contentObject->typoLink_URL( [ - 'parameter' => $product->getDetailPage(), + 'parameter' => $product['detailPage'], ] ); } - $pageUid = $arguments['defaultDetailPageUid']; - $uriArguments = [ 'product' => $product ]; - if ((int) $arguments['referringPageUid'] > 0) { - $uriArguments['referringPageUid'] = $arguments['referringPageUid']; + if ($arguments['slug']) { + $uri .= $arguments['slug'].'/'; } - if ($arguments['origin'] !== null) { - $uriArguments['origin'] = $arguments['origin']; - } - if ((bool) $arguments['linkHotel'] && $arguments['hotel'] !== null) { - $uriArguments['hotel'] = $arguments['hotel']; - } - return $renderingContext - ->getControllerContext() - ->getUriBuilder() - ->reset() - ->setTargetPageUid($pageUid) - ->uriFor('detail', $uriArguments, 'Product', 'epproducts', 'product_detail') - ; + + return $uri; } } diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/components/ProductDetail.vue b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/components/ProductDetail.vue index cbc22ec8..8cef8f8c 100644 --- a/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/components/ProductDetail.vue +++ b/public/typo3conf/ext/ep_theme/Resources/Private/Assets/js/components/ProductDetail.vue @@ -78,6 +78,14 @@ daytrip: { type: Number, default: 0 + }, + dateFrom: { + type: String, + default: null + }, + dateTo: { + type: String, + default: null } }, computed: { @@ -91,12 +99,15 @@ this.datesShow = true; this.priceTableShow = false; this.detailShow = false; + const data = $.param({ + 'tx_epproducts_ajax[paCode]': this.$store.state.config.paCode, + 'tx_epproducts_ajax[dateFrom]': this.dateFrom, + 'tx_epproducts_ajax[dateTo]': this.dateTo + }); axios({ url: this.uris['dates'], method: 'post', - data: { - paCode: this.$store.state.config.paCode - } + data: data }).then(response => { const json = response.data; if (json.dates.length === 1) { diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/Teaser.html b/public/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/Teaser.html index 12d42cd8..4d474e24 100644 --- a/public/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/Teaser.html +++ b/public/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/Teaser.html @@ -6,30 +6,9 @@
- - - - - - - - - - - - - - - - + + +
diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/TeaserWide.html b/public/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/TeaserWide.html index 88cd9f4a..d845827e 100644 --- a/public/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/TeaserWide.html +++ b/public/typo3conf/ext/ep_theme/Resources/Private/Partials/Product/TeaserWide.html @@ -5,17 +5,7 @@ xmlns:f="http://typo3.org/ns/fluid/ViewHelpers"> - - - - - - - - - - - + {ep:uri.product(forceHotelUid: teaser.forceHotelUid, product: teaser.product, hotel: teaser.hotel, dateFrom: dateFrom, dateTo: dateTo, slug: slug) -> f:variable(name: 'teaserUrl')} diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Detail.html b/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Detail.html index 62e3f194..d579aa70 100644 --- a/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Detail.html +++ b/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Detail.html @@ -20,6 +20,8 @@ :bus-pro-id="{product.busProId -> f:format.raw()}" name-internal="{product.nameInternal -> f:format.raw()}" :daytrip="{product.daytrip -> v:variable.convert(type: 'int')}" + date-from="{dateFrom}" + date-to="{dateTo}" inline-template>
diff --git a/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Teasergroup.html b/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Teasergroup.html index bc7fcaeb..423e542b 100644 --- a/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Teasergroup.html +++ b/public/typo3conf/ext/ep_theme/Resources/Private/Templates/Product/Teasergroup.html @@ -12,11 +12,11 @@ - +
- +
From 3a534c64d69b806ee89716cb7d0a5b8fe21398aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Sat, 15 Feb 2020 18:26:13 +0100 Subject: [PATCH 4/6] Fix dates table not being filtered by date range --- .../Classes/Domain/Repository/ProductRepository.php | 2 +- .../ext/ep_products/Classes/Service/FilterService.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/public/typo3conf/ext/ep_products/Classes/Domain/Repository/ProductRepository.php b/public/typo3conf/ext/ep_products/Classes/Domain/Repository/ProductRepository.php index b6adee38..b3c7b967 100644 --- a/public/typo3conf/ext/ep_products/Classes/Domain/Repository/ProductRepository.php +++ b/public/typo3conf/ext/ep_products/Classes/Domain/Repository/ProductRepository.php @@ -282,7 +282,7 @@ class ProductRepository extends AbstractRepository ]) ; - $this->addFiltersettingsConditions($query, $filterSettings); + $this->addFiltersettingsConditions($query, $filterSettings, true); return $query->execute()->fetchAll(); } diff --git a/public/typo3conf/ext/ep_products/Classes/Service/FilterService.php b/public/typo3conf/ext/ep_products/Classes/Service/FilterService.php index e1ae2912..55a55136 100644 --- a/public/typo3conf/ext/ep_products/Classes/Service/FilterService.php +++ b/public/typo3conf/ext/ep_products/Classes/Service/FilterService.php @@ -71,14 +71,14 @@ class FilterService implements SingletonInterface if (null !== $dateFromYmd) { $dateFrom = new \DateTime($dateFromYmd); + } elseif (!$respectBookableDaterange) { + $dateFrom = new \DateTime('now'); } + if (null !== $dateToYmd) { $dateTo = new \DateTime($dateToYmd); } - if (!$respectBookableDaterange) { - $dateFrom = new \DateTime('now'); - } $filterSettings = new FilterSettings($dateFrom, $dateTo); if ($forcedConceptUids) { $filterSettings->setConceptUids($forcedConceptUids); From 07c86b8450eb4e0a9498838b2bef464c079bfa4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Sat, 15 Feb 2020 18:26:26 +0100 Subject: [PATCH 5/6] Streamline urls --- config/sites/ep-reisen/config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/sites/ep-reisen/config.yaml b/config/sites/ep-reisen/config.yaml index 27e5cdc1..1aacfe18 100644 --- a/config/sites/ep-reisen/config.yaml +++ b/config/sites/ep-reisen/config.yaml @@ -110,7 +110,7 @@ routeEnhancers: product_uid: product hotel_uid: hotel - - routePath: '/angebot/{date_from}/{date_to}' + routePath: '/detail/{date_from}/{date_to}' _controller: 'Product::detail' _arguments: date_from: dateFrom From 5d8c09c56c762bac23b52fb01714d563d8d9cc1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Fromme?= Date: Sat, 15 Feb 2020 18:27:54 +0100 Subject: [PATCH 6/6] Update project dependencies --- composer.lock | 74 +++++++++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/composer.lock b/composer.lock index 79f74fad..eaea163e 100644 --- a/composer.lock +++ b/composer.lock @@ -2845,16 +2845,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3" + "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", - "reference": "f8f0b461be3385e56d6de3dbb5a0df24c0c275e3", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", + "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38", "shasum": "" }, "require": { @@ -2866,7 +2866,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -2899,20 +2899,20 @@ "polyfill", "portable" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "b3dffd68afa61ca70f2327f2dd9bbeb6aa53d70b" + "reference": "727b3bb5bfa7ca9eeb86416784cf1c08a6289b86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/b3dffd68afa61ca70f2327f2dd9bbeb6aa53d70b", - "reference": "b3dffd68afa61ca70f2327f2dd9bbeb6aa53d70b", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/727b3bb5bfa7ca9eeb86416784cf1c08a6289b86", + "reference": "727b3bb5bfa7ca9eeb86416784cf1c08a6289b86", "shasum": "" }, "require": { @@ -2925,7 +2925,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -2957,26 +2957,26 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "6f9c239e61e1b0c9229a28ff89a812dc449c3d46" + "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6f9c239e61e1b0c9229a28ff89a812dc449c3d46", - "reference": "6f9c239e61e1b0c9229a28ff89a812dc449c3d46", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6842f1a39cf7d580655688069a03dd7cd83d244a", + "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a", "shasum": "" }, "require": { "php": ">=5.3.3", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.9" + "symfony/polyfill-php72": "^1.10" }, "suggest": { "ext-intl": "For best performance" @@ -2984,7 +2984,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -3019,20 +3019,20 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-01-17T12:01:36+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f" + "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f", - "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2", + "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2", "shasum": "" }, "require": { @@ -3044,7 +3044,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -3078,20 +3078,20 @@ "portable", "shim" ], - "time": "2019-11-27T14:18:11+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "66fea50f6cb37a35eea048d75a7d99a45b586038" + "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/66fea50f6cb37a35eea048d75a7d99a45b586038", - "reference": "66fea50f6cb37a35eea048d75a7d99a45b586038", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", + "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf", "shasum": "" }, "require": { @@ -3100,7 +3100,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -3133,20 +3133,20 @@ "portable", "shim" ], - "time": "2019-11-27T13:56:44+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.13.1", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f" + "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/4b0e2222c55a25b4541305a053013d5647d3a25f", - "reference": "4b0e2222c55a25b4541305a053013d5647d3a25f", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/5e66a0fa1070bf46bec4bea7962d285108edd675", + "reference": "5e66a0fa1070bf46bec4bea7962d285108edd675", "shasum": "" }, "require": { @@ -3155,7 +3155,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.13-dev" + "dev-master": "1.14-dev" } }, "autoload": { @@ -3191,7 +3191,7 @@ "portable", "shim" ], - "time": "2019-11-27T16:25:15+00:00" + "time": "2020-01-13T11:15:53+00:00" }, { "name": "symfony/process",