diff --git a/composer.json b/composer.json index f2fb7c64..555aaa92 100644 --- a/composer.json +++ b/composer.json @@ -53,7 +53,6 @@ "typo3-ter/pb-social": "^1.3", "typo3-ter/sourceopt": "^1.0", "typo3-ter/html-compress": "^1.1", - "doctrine/dbal": "^2.5", "yohang/calendr": "^2.1", "wyrihaximus/html-compress": "^1.4", "symfony/property-access": "^3.4", diff --git a/composer.lock b/composer.lock index 345df235..17c5e81a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0336ff7055dae975d70aea8153e7b798", + "content-hash": "40771053625b784cf25db1a787dc19b4", "packages": [ { "name": "christophlehmann/imageoptimizer", @@ -1265,63 +1265,6 @@ ], "time": "2018-02-06T08:27:03+00:00" }, - { - "name": "league/period", - "version": "3.4.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/period.git", - "reference": "280b54d737b4d9d804d19f865a6496b82d1cee2a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/period/zipball/280b54d737b4d9d804d19f865a6496b82d1cee2a", - "reference": "280b54d737b4d9d804d19f865a6496b82d1cee2a", - "shasum": "" - }, - "require": { - "php": ">=5.5.9" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^1.10", - "phpunit/phpunit": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Period\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ignace Nyamagana Butera", - "email": "nyamsprod@gmail.com", - "homepage": "https://github.com/nyamsprod/", - "role": "Developer" - } - ], - "description": "A time range immutable value object", - "homepage": "http://period.thephpleague.com", - "keywords": [ - "date", - "dateinterval", - "dateperiod", - "datetime", - "interval", - "range", - "time" - ], - "time": "2017-11-17T11:28:33+00:00" - }, { "name": "linkorb/jsmin-php", "version": "1.0.0", @@ -3636,6 +3579,63 @@ ], "time": "2018-02-27T17:29:10+00:00" }, + { + "name": "league/period", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/period.git", + "reference": "280b54d737b4d9d804d19f865a6496b82d1cee2a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/period/zipball/280b54d737b4d9d804d19f865a6496b82d1cee2a", + "reference": "280b54d737b4d9d804d19f865a6496b82d1cee2a", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^1.10", + "phpunit/phpunit": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Period\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://github.com/nyamsprod/", + "role": "Developer" + } + ], + "description": "A time range immutable value object", + "homepage": "http://period.thephpleague.com", + "keywords": [ + "date", + "dateinterval", + "dateperiod", + "datetime", + "interval", + "range", + "time" + ], + "time": "2017-11-17T11:28:33+00:00" + }, { "name": "pimple/pimple", "version": "v3.2.3", diff --git a/web/typo3conf/ext/ep_events/Classes/Hooks/Tcemain.php b/web/typo3conf/ext/ep_events/Classes/Hooks/Tcemain.php index 39bfc2c9..40f6fbb0 100644 --- a/web/typo3conf/ext/ep_events/Classes/Hooks/Tcemain.php +++ b/web/typo3conf/ext/ep_events/Classes/Hooks/Tcemain.php @@ -26,7 +26,7 @@ namespace EP\EpEvents\Hooks; * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ -use EP\EpProducts\Utility\DbUtility; +use EP\EpProducts\Traits\DbConnectionTrait; use TYPO3\CMS\Core\DataHandling\DataHandler; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; @@ -34,12 +34,14 @@ use TYPO3\CMS\Extbase\Object\ObjectManager; class Tcemain { + use DbConnectionTrait; /** * @param array $fields * @param string $table * @param int $id * @param DataHandler $obj + * @throws \Doctrine\DBAL\DBALException */ public function processDatamap_preProcessFieldArray(array &$fields, $table, $id, DataHandler $obj) { @@ -52,7 +54,7 @@ class Tcemain $settings = $this->getSettings(); $detailPageUid = $settings['plugin']['tx_epevents']['settings']['offerDetailPageUid']; if ((int) $detailPageUid > 0) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $qb ->delete('tx_realurl_urldata') ->where('page_id = :pageUid') @@ -74,4 +76,5 @@ class Tcemain $configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT) ); } + } diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/AbstractRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/AbstractRepository.php index 84625645..5799c9a1 100644 --- a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/AbstractRepository.php +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/AbstractRepository.php @@ -28,13 +28,15 @@ namespace EP\EpProducts\Domain\Repository; ***************************************************************/ use Doctrine\DBAL\Connection; -use Doctrine\DBAL\Query\QueryBuilder; use EP\EpProducts\Domain\Model\Date; use EP\EpProducts\Domain\Model\FilterSettings; +use EP\EpProducts\Traits\DbConnectionTrait; +use TYPO3\CMS\Core\Database\Query\QueryBuilder; use TYPO3\CMS\Extbase\Persistence\Generic\Typo3QuerySettings; abstract class AbstractRepository extends \TYPO3\CMS\Extbase\Persistence\Repository { + use DbConnectionTrait; public function initializeObject() { @@ -46,6 +48,7 @@ abstract class AbstractRepository extends \TYPO3\CMS\Extbase\Persistence\Reposit /** * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface + * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException */ public function getListByUids(array $uids = []) { @@ -76,7 +79,6 @@ abstract class AbstractRepository extends \TYPO3\CMS\Extbase\Persistence\Reposit ->andWhere('date.date_end <= :dateEnd') ->setParameter('dateEnd', $filterSettings->getDateTo()->format('Y-m-d')) ; - } } diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ContingentRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ContingentRepository.php index 4b42ed80..30ba8c8b 100644 --- a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ContingentRepository.php +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ContingentRepository.php @@ -31,16 +31,17 @@ use CalendR\Event\Provider\ProviderInterface; use EP\EpProducts\Domain\Model\Contingent; use EP\EpProducts\Domain\Model\Hotel; use EP\EpProducts\Domain\Model\Product; -use EP\EpProducts\Utility\DbUtility; use Symfony\Component\OptionsResolver\OptionsResolver; class ContingentRepository extends AbstractRepository implements ProviderInterface { + /** * @param \DateTime $dateFrom * @param \DateTime $dateTo * @param array $options * @return \CalendR\Event\EventInterface[] + * @throws \Doctrine\DBAL\DBALException */ public function getEvents(\DateTime $dateFrom, \DateTime $dateTo, array $options = []) { @@ -49,10 +50,12 @@ class ContingentRepository extends AbstractRepository implements ProviderInterfa $optionsResolver->setAllowedTypes('hotel', Hotel::class); $resolvedOptions = $optionsResolver->resolve($options); - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $qb - ->select('status status', 'date date', 'SUM(pax) pax', 'SUM(available) available', 'min_price minPrice') + ->select('status as status', 'date as date', 'min_price as minPrice') + ->addSelectLiteral('SUM(pax) as pax') + ->addSelectLiteral('SUM(available) as available') ->from('tx_epproducts_domain_model_contingent') ->groupBy('hotel') ->addGroupBy('date') @@ -96,13 +99,15 @@ class ContingentRepository extends AbstractRepository implements ProviderInterfa * @param Hotel $hotel * @param Product $product * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getAvailableContingents(Hotel $hotel, Product $product) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $qb - ->select('c.date date', 'SUM(c.available) total') + ->select('c.date as date') + ->addSelectLiteral('SUM(c.available) as total') ->from('tx_epproducts_domain_model_contingent', 'c') ->innerJoin('c', 'tx_epproducts_domain_model_daytrip', 'd', 'c.date = d.date AND c.hotel_code = d.hotel_code') ->where('c.hotel = :hotelUid') @@ -125,14 +130,15 @@ class ContingentRepository extends AbstractRepository implements ProviderInterfa * @param Hotel $hotel * @param Product $product * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getAvailableRooms(\DateTime $dateFrom, \DateTime $dateTo, Hotel $hotel, Product $product) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $qb - ->select('c.room_code code', 'c.room_label label', 'c.available', 'c.min_price price', - 'c.hotel_bus_pro_id hotelBusProId', 'd.bus_pro_id busProId') + ->select('c.room_code as code', 'c.room_label as label', 'c.available as available', 'c.min_price as price', + 'c.hotel_bus_pro_id as hotelBusProId', 'd.bus_pro_id as busProId') ->from('tx_epproducts_domain_model_contingent', 'c') ->innerJoin('c', 'tx_epproducts_domain_model_daytrip', 'd', 'c.date = d.date AND c.hotel_code = d.hotel_code') ->where('c.hotel = :hotelUid') diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/DateRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/DateRepository.php index 0a8c09c1..f434a690 100644 --- a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/DateRepository.php +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/DateRepository.php @@ -30,22 +30,22 @@ namespace EP\EpProducts\Domain\Repository; use Doctrine\DBAL\Connection; use EP\EpProducts\Domain\Model\FilterSettings; use EP\EpProducts\Domain\Model\Product; -use EP\EpProducts\Utility\DbUtility; class DateRepository extends AbstractRepository { /** * @param Product $product - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getDateRange(Product $product = null) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb - ->select('MIN(date_start) dateRangeFrom, MAX(date_end) dateRangeTo') + ->addSelectLiteral('MIN(date_start) dateRangeFrom') + ->addSelectLiteral('MAX(date_start) dateRangeTo') ->from('tx_epproducts_domain_model_date', 'date') ->where('date_start >= NOW()') ->andWhere('product_searchable = 1') @@ -75,23 +75,23 @@ class DateRepository extends AbstractRepository /** * @param FilterSettings $filterSettings * @param array $excludedConceptUids - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getFilterOptions(FilterSettings $filterSettings, $excludedConceptUids = []) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb ->select( - 'date.concept conceptUid', 'date.concept_name conceptName', 'date.concept_sorting conceptSorting', - 'date.concept_code conceptCode', 'date.min_price minPrice', - 'date.country countryUid','date.country_name countryName', 'date.country_code countryCode', - 'date.region regionUid', 'date.region_name regionName', - 'date.nights nights', 'date.board boardType', 'date.board_bus_pro_id boardUid', - 'date.bus_available busAvailable', - 'date.hotel_type hotelType', - 'room.type roomType' + 'date.concept as conceptUid', 'date.concept_name as conceptName', 'date.concept_sorting as conceptSorting', + 'date.concept_code as conceptCode', 'date.min_price as minPrice', + 'date.country as countryUid','date.country_name as countryName', 'date.country_code as countryCode', + 'date.region as regionUid', 'date.region_name as regionName', + 'date.nights as nights', 'date.board as boardType', 'date.board_bus_pro_id as boardUid', + 'date.bus_available as busAvailable', + 'date.hotel_type as hotelType', + 'room.type as roomType' ) ->from('tx_epproducts_domain_model_date', 'date') ->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'room.date = date.uid') @@ -121,15 +121,16 @@ class DateRepository extends AbstractRepository /** * @param string $search * @param FilterSettings $filterSettings - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function searchHotels($search, FilterSettings $filterSettings) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb - ->select('REPLACE(hotel_name, "\r\n", " ") name', 'hotel uid') + ->select('hotel uid') + ->addSelectLiteral('REPLACE(hotel_name, "\r\n", " ") name') ->from('tx_epproducts_domain_model_date', 'date') ->where('product_searchable = 1') ->andWhere($qb->expr()->orX( @@ -156,15 +157,16 @@ class DateRepository extends AbstractRepository * @param string $search * @param FilterSettings $filterSettings * @param array $excludedConceptUids - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function searchProducts($search, FilterSettings $filterSettings, $excludedConceptUids = []) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb - ->select('CONCAT(REPLACE(product_name, "\r\n", " "), " (", concept_name, ")") name', 'product uid') + ->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( @@ -203,15 +205,16 @@ class DateRepository extends AbstractRepository * @param string $type * @param string $search * @param FilterSettings $filterSettings - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function searchDestinations($type, $search, FilterSettings $filterSettings) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb - ->select('REPLACE(' . $type . '_name, "\r\n", " ") name', $type . ' uid') + ->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( diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/FaqRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/FaqRepository.php index 91af0a04..5722b2c5 100644 --- a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/FaqRepository.php +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/FaqRepository.php @@ -43,9 +43,8 @@ class FaqRepository extends AbstractRepository ' ' .$GLOBALS['TSFE']->sys_page->enableFields('tx_epproducts_domain_model_faq') . ' ORDER BY FIELD(uid, ' . $uids . ') '); - return $query - ->execute() - ; + + return $query->execute(); } } diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/HotelRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/HotelRepository.php index a3144c7d..619e9448 100644 --- a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/HotelRepository.php +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/HotelRepository.php @@ -29,14 +29,15 @@ namespace EP\EpProducts\Domain\Repository; use Doctrine\DBAL\Connection; use EP\EpProducts\Domain\Model\Hotel; -use EP\EpProducts\Utility\DbUtility; use Symfony\Component\OptionsResolver\OptionsResolver; class HotelRepository extends AbstractRepository { + /** * @param int $hotelUid * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getSingleByUid($hotelUid) { @@ -54,16 +55,18 @@ class HotelRepository extends AbstractRepository /** * @param int $hotelUid * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getDateIndependentSingleByUid($hotelUid) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); + $qb ->select( - 'hotel.uid hotelUid', 'hotel.name hotelName', 'hotel.teaser hotelTeaser', - 'hotel.category hotelCategory', 'hotel.detail_page hotelDetailPage', - 'country.code countryCode', 'country.name country', - 'region.name region' + 'hotel.uid as hotelUid', 'hotel.name as hotelName', 'hotel.teaser as hotelTeaser', + 'hotel.category as hotelCategory', 'hotel.detail_page as hotelDetailPage', + 'country.code as countryCode', 'country.name as country', + 'region.name as region' ) ->from('tx_epproducts_domain_model_hotel', 'hotel') ->leftJoin('hotel', 'tx_epproducts_domain_model_country', 'country', 'hotel.country = country.uid') @@ -81,6 +84,7 @@ class HotelRepository extends AbstractRepository /** * @param int $productUid * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getListByProduct($productUid) { @@ -96,6 +100,7 @@ class HotelRepository extends AbstractRepository /** * @param array $criteria * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getListByCriteria(array $criteria) { @@ -148,6 +153,7 @@ class HotelRepository extends AbstractRepository * @param array $criteria * @param array $excludedHotelUids * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getDateIndependentListByCriteria(array $criteria, array $excludedHotelUids = []) { @@ -155,13 +161,14 @@ class HotelRepository extends AbstractRepository $optionsResolver->setDefined(['regionUid', 'countryUid', 'conceptUid', 'productUid', 'category', 'type']); $resolvedCriteria = $optionsResolver->resolve($criteria); - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); + $qb ->select( - 'hotel.uid hotelUid', 'hotel.name hotelName', 'hotel.teaser hotelTeaser', - 'hotel.category hotelCategory', 'hotel.detail_page hotelDetailPage', - 'country.code countryCode', 'country.name country', - 'region.name region' + 'hotel.uid as hotelUid', 'hotel.name as hotelName', 'hotel.teaser as hotelTeaser', + 'hotel.category as hotelCategory', 'hotel.detail_page as hotelDetailPage', + 'country.code as countryCode', 'country.name as country', + 'region.name as region' ) ->from('tx_epproducts_domain_model_hotel', 'hotel') ->leftJoin('hotel', 'tx_epproducts_domain_model_country', 'country', 'hotel.country = country.uid') @@ -169,7 +176,7 @@ class HotelRepository extends AbstractRepository ->where('hotel.hidden = 0') ->andWhere('hotel.show_as_teaser = 1') ->andWhere('hotel.deleted = 0') - ->orderBy('FIELD(hotel.type, ' . Hotel::TYPE_SPORTS_CLUB . ')', 'DESC') + ->add('orderBy', 'FIELD(hotel.type, ' . Hotel::TYPE_SPORTS_CLUB . ') DESC') ->addOrderBy('hotel.name', 'ASC') ; @@ -216,29 +223,30 @@ class HotelRepository extends AbstractRepository /** * @param bool $excludeNonSearchable - * @return \Doctrine\DBAL\Query\QueryBuilder + * @return \TYPO3\CMS\Core\Database\Query\QueryBuilder + * @throws \Doctrine\DBAL\DBALException */ protected function getQueryBuilder($excludeNonSearchable = true) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $qb ->select( - 'date.hotel hotelUid', 'date.hotel_name hotelName', 'date.hotel_teaser hotelTeaser', - 'date.hotel_category hotelCategory', 'date.hotel_detail_page hotelDetailPage', - 'date.date_start dateStart', 'date.date_end dateEnd', 'date.earlybird earlybird', - 'date.low_contingent lowContingent', 'date.board board', 'date.product_fact productFact', - 'date.hotel_fact hotelFact', 'date.region_fact regionFact', 'date.services_included servicesIncluded', - 'date.min_price minPrice', 'date.pseudo_price pseudoPrice', 'date.nights nights', - 'date.available available', 'date.country country', 'date.country_code countryCode', - 'date.region region' + 'date.hotel as hotelUid', 'date.hotel_name as hotelName', 'date.hotel_teaser as hotelTeaser', + 'date.hotel_category as hotelCategory', 'date.hotel_detail_page as hotelDetailPage', + 'date.date_start as dateStart', 'date.date_end as dateEnd', 'date.earlybird as earlybird', + 'date.low_contingent as lowContingent', 'date.board as board', 'date.product_fact as productFact', + 'date.hotel_fact as hotelFact', 'date.region_fact as regionFact', 'date.services_included as servicesIncluded', + 'date.min_price as minPrice', 'date.pseudo_price as pseudoPrice', 'date.nights as nights', + 'date.available as available', 'date.country as country', 'date.country_code as countryCode', + 'date.region as region' ) ->from('tx_epproducts_domain_model_date', 'date') ->leftJoin('date', 'tx_epproducts_product_region_mm', 'mm', 'mm.uid_local = date.product') ->addGroupBy('date.hotel') ->addGroupBy('date.date_start') ->addGroupBy('date.nights') - ->orderBy('FIELD(date.hotel_type, ' . Hotel::TYPE_SPORTS_CLUB . ')', 'DESC') + ->add('orderBy', 'FIELD(date.hotel_type, ' . Hotel::TYPE_SPORTS_CLUB . ') DESC') ; if ($excludeNonSearchable) { @@ -250,6 +258,7 @@ class HotelRepository extends AbstractRepository /** * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface + * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException */ public function getMapList() { diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ProductRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ProductRepository.php index 43adb673..6a658dc1 100644 --- a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ProductRepository.php +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/ProductRepository.php @@ -32,32 +32,33 @@ use EP\EpProducts\Domain\Model\Date; use EP\EpProducts\Domain\Model\FilterSettings; use EP\EpProducts\Domain\Model\Hotel; use EP\EpProducts\Domain\Model\Product; -use EP\EpProducts\Utility\DbUtility; class ProductRepository extends AbstractRepository { + /** * @param array $productUids * @param array $hotelUids * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getWatchlist(array $productUids, array $hotelUids) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb ->select( - 'date.concept conceptUid', 'date.concept_name conceptName', 'date.concept_code conceptCode', - 'date.product productUid', 'date.product_name productName', 'date.product_detail_page productDetailPage', - 'date.product_feature productFeature', - 'date.country countryUid','date.country_name countryName', 'date.country_code countryCode', - 'date.region regionUid', 'date.region_name regionName', 'date.region_feature regionFeature', - 'date.date_start dateStart', 'date.date_end dateEnd', - 'date.hotel hotelUid', 'date.hotel_name hotelName', 'date.hotel_category hotelCategory', - 'date.earlybird earlybird', 'date.low_contingent lowContingent', 'date.board board', - 'date.product_fact productFact', 'date.hotel_fact hotelFact', 'date.region_fact regionFact', - 'date.services_included servicesIncluded', 'date.min_price minPrice', 'date.nights nights', - 'date.available available', 'date.pseudo_price pseudoPrice' + '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', + 'date.date_start as dateStart', 'date.date_end as dateEnd', + 'date.hotel as hotelUid', 'date.hotel_name as hotelName', 'date.hotel_category as hotelCategory', + 'date.earlybird as earlybird', 'date.low_contingent as lowContingent', 'date.board as board', + 'date.product_fact as productFact', 'date.hotel_fact as hotelFact', 'date.region_fact as regionFact', + 'date.services_included as servicesIncluded', 'date.min_price as minPrice', 'date.nights as nights', + 'date.available as available', 'date.pseudo_price as pseudoPrice' ) ->from('tx_epproducts_domain_model_date', 'date') ->where('date.product IN (:productUids)') @@ -78,26 +79,26 @@ class ProductRepository extends AbstractRepository /** * @param FilterSettings $filterSettings * @param array $excludedConceptUids - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getSearchResult(FilterSettings $filterSettings, $excludedConceptUids = []) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb ->select( - 'date.concept conceptUid', 'date.concept_name conceptName', 'date.concept_code conceptCode', - 'date.product productUid', 'date.product_name productName', 'date.product_detail_page productDetailPage', - 'date.product_feature productFeature', - 'date.country countryUid','date.country_name countryName', 'date.country_code countryCode', - 'date.region regionUid', 'date.region_name regionName', 'date.region_feature regionFeature', - 'date.date_start dateStart', 'date.date_end dateEnd', - 'date.hotel hotelUid', 'date.hotel_name hotelName', 'date.hotel_category hotelCategory', - 'date.earlybird earlybird', 'date.low_contingent lowContingent', 'date.board board', - 'date.product_fact productFact', 'date.hotel_fact hotelFact', 'date.region_fact regionFact', - 'date.services_included servicesIncluded', 'date.min_price minPrice', 'date.nights nights', - 'date.available available', 'date.pseudo_price pseudoPrice' + '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', + 'date.date_start as dateStart', 'date.date_end as dateEnd', + 'date.hotel as hotelUid', 'date.hotel_name as hotelName', 'date.hotel_category as hotelCategory', + 'date.earlybird as earlybird', 'date.low_contingent as lowContingent', 'date.board as board', + 'date.product_fact as productFact', 'date.hotel_fact as hotelFact', 'date.region_fact as regionFact', + 'date.services_included as servicesIncluded', 'date.min_price as minPrice', 'date.nights as nights', + 'date.available as available', 'date.pseudo_price as pseudoPrice' ) ->from('tx_epproducts_domain_model_date', 'date') ->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'room.date = date.uid') @@ -131,25 +132,26 @@ class ProductRepository extends AbstractRepository * @param FilterSettings $filterSettings * @param array $excludedConceptUids * @param int $limit - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getTeasers(FilterSettings $filterSettings, $excludedConceptUids = [], $limit = 0) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); + $query = $qb ->select( - 'product productUid', 'product_name productName', 'product_detail_page productDetailPage', - 'product_feature productFeature', 'product_teaser productTeaser', 'product_fact productFact', - 'hotel hotelUid', 'hotel_fact hotelFact', 'hotel_name hotelName', 'hotel_category hotelCategory', - 'region_fact regionFact', 'region_name regionName', 'region_feature regionFeature', - 'country_name countryName', 'country_code countryCode', - 'date_start dateStart', 'date_end dateEnd', 'uid dateUid', 'min_price minPrice', - 'pseudo_price pseudoPrice', 'nights nights', 'available available', - 'skipass_included skipassIncluded', 'bus_included busIncluded', - 'earlybird earlybird', 'low_contingent lowContingent', - 'concept_code conceptCode', 'concept_name conceptName', - 'board board' + 'product as productUid', 'product_name as productName', 'product_detail_page as productDetailPage', + 'product_feature as productFeature', 'product_teaser as productTeaser', 'product_fact as productFact', + 'hotel as hotelUid', 'hotel_fact as hotelFact', 'hotel_name as hotelName', 'hotel_category as hotelCategory', + 'region_fact as regionFact', 'region_name as regionName', 'region_feature as regionFeature', + 'country_name as countryName', 'country_code as countryCode', + 'date_start as dateStart', 'date_end as dateEnd', 'uid as dateUid', 'min_price as minPrice', + 'pseudo_price as pseudoPrice', 'nights as nights', 'available as available', + 'skipass_included as skipassIncluded', 'bus_included as busIncluded', + 'earlybird', 'low_contingent as lowContingent', + 'concept_code as conceptCode', 'concept_name as conceptName', + 'board' ) ->from('tx_epproducts_domain_model_date', 'date') ->leftJoin('date', 'tx_epproducts_product_region_mm', 'mm', 'mm.uid_local = date.product') @@ -196,21 +198,21 @@ class ProductRepository extends AbstractRepository * @param Hotel $hotel * @param FilterSettings $filterSettings * @param Date $date - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getPricetable(Product $product, Hotel $hotel, FilterSettings $filterSettings, Date $date = null) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb ->select( - 'date.uid dateUid', 'date.date_start dateStart', 'date.date_end dateEnd', 'date.bus_pro_id dateBusProId', - 'date.hotel hotelUid', 'date.hotel_bus_pro_id hotelBusProId', 'date.bus_included dateBusIncluded', - 'date.skipass_included dateSkipassIncluded', - 'room.uid as roomUid', 'room.bus_pro_id roomBusProId', 'room.name roomName', - 'room.price roomPrice', 'date.discount roomDiscount', 'date.bus_price busPrice', - 'room.services roomOptionalServices', 'room.nights roomNights', 'room.available roomAvailable' + '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', + 'room.uid as 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' ) ->from('tx_epproducts_domain_model_date', 'date') ->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'date.uid = room.date') @@ -243,22 +245,22 @@ class ProductRepository extends AbstractRepository * @param Product $product * @param Hotel $hotel * @param FilterSettings $filterSettings - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getAvailableDates(Product $product, Hotel $hotel, FilterSettings $filterSettings) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb ->select( - 'date.uid dateUid', 'date.date_start dateStart', 'date.date_end dateEnd', - 'date.min_price dateMinPrice', 'date.discount dateDiscount', 'date.bus_price busPrice', - 'date.nights dateNights', 'date.bus_included dateBusIncluded', 'date.services_included dateServicesIncluded', - 'date.services_general dateServicesGeneral', 'date.skipass_included dateSkipassIncluded', - 'date.bus_pro_id dateBusProId', 'date.hotel_bus_pro_id hotelBusProId', - 'SUM(room.available) available' + 'date.uid as dateUid', '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' ) + ->addSelectLiteral('SUM(room.available) as available') ->from('tx_epproducts_domain_model_date', 'date') ->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'room.date = date.uid') ->leftJoin('date', 'tx_epproducts_product_region_mm', 'mm', 'mm.uid_local = date.product') @@ -282,10 +284,11 @@ class ProductRepository extends AbstractRepository /** * @param Product $product * @return bool + * @throws \Doctrine\DBAL\DBALException */ public function hasDates(Product $product) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb ->select('date.uid') @@ -303,23 +306,23 @@ class ProductRepository extends AbstractRepository /** * @param Product $product * @param Hotel $hotel - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getDatesForExport(Product $product, Hotel $hotel) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb ->select( - 'date.bus_pro_id dateBusProId', 'date.date_start dateStart', 'date.date_end dateEnd', - 'date.min_price dateMinPrice', 'date.discount dateDiscount', 'date.bus_price busPrice', - 'date.nights dateNights', 'date.bus_included dateBusIncluded', 'date.services_included dateServicesIncluded', - 'date.services_general dateServicesGeneral', 'date.skipass_included dateSkipassIncluded', - 'date.bus_pro_id dateBusProId', 'date.hotel_bus_pro_id hotelBusProId', 'date.pickups pickups', - 'room.uid as roomUid', 'room.bus_pro_id roomBusProId', 'room.code roomCode', 'room.name roomName', - 'room.price roomPrice', 'room.pax roomPax', 'date.discount roomDiscount', 'date.bus_price busPrice', - 'room.services roomOptionalServices', 'room.nights roomNights', 'room.available roomAvailable' + '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', + 'room.services as roomOptionalServices', 'room.nights as roomNights', 'room.available as roomAvailable' ) ->from('tx_epproducts_domain_model_date', 'date') ->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'room.date = date.uid') @@ -339,18 +342,19 @@ class ProductRepository extends AbstractRepository /** * @param Product $product - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getEventPriceTable(Product $product) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); + $query = $qb ->select( - 'date.bus_pro_id dateBusProId', 'date.hotel_bus_pro_id hotelBusProId', 'date.date_end dateEnd', - 'date.hotel hotelUid', 'date.hotel_name hotelName', 'date.hotel_header_title hotelTitle', - 'date.hotel_category hotelCategory', - 'room.pax roomPax', 'room.price roomPrice', 'room.available available' + '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' ) ->from('tx_epproducts_domain_model_date', 'date') ->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'room.date = date.uid') diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RegionRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RegionRepository.php index 6c3a9d40..a29d8456 100644 --- a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RegionRepository.php +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/RegionRepository.php @@ -35,7 +35,6 @@ class RegionRepository extends AbstractRepository /** * @param int $countryUid * @param string $season - * * @return \TYPO3\CMS\Extbase\Persistence\QueryResultInterface */ public function getTeasersByCountryAndSeason($countryUid, $season = 'w') diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/SnowreportRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/SnowreportRepository.php index c7e69bd6..92e15660 100644 --- a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/SnowreportRepository.php +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/SnowreportRepository.php @@ -28,7 +28,6 @@ namespace EP\EpProducts\Domain\Repository; ***************************************************************/ use Doctrine\DBAL\Connection; -use EP\EpProducts\Utility\DbUtility; class SnowreportRepository extends AbstractRepository { @@ -36,19 +35,21 @@ class SnowreportRepository extends AbstractRepository /** * @param array $regionUids * @return array + * @throws \Doctrine\DBAL\DBALException */ public function getSnowreportsForRegions(array $regionUids = null) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb ->select( 'snowreport.*', - 'region.name regionName', 'region.uid regionUid', 'region.detail_page regionDetailPage', - 'country.name countryName', 'country.uid countryUid', 'country.code countryCode', 'country.detail_page countryDetailPage', - 'season_start seasonStart', 'season_end seasonEnd', - '(UNIX_TIMESTAMP() >= snowreport.season_start AND UNIX_TIMESTAMP() <= snowreport.season_end) inSeason' + 'region.name as regionName', 'region.uid as regionUid', 'region.detail_page as regionDetailPage', + 'country.name as countryName', 'country.uid as countryUid', 'country.code as countryCode', + 'country.detail_page as countryDetailPage', + 'season_start as seasonStart', 'season_end as seasonEnd' ) + ->addSelectLiteral('(UNIX_TIMESTAMP() >= snowreport.season_start AND UNIX_TIMESTAMP() <= snowreport.season_end) as inSeason') ->from('tx_epproducts_domain_model_snowreport', 'snowreport') ->innerJoin('snowreport', 'tx_epproducts_domain_model_region', 'region', 'snowreport.uid = region.snowreport') ->innerJoin('region', 'tx_epproducts_domain_model_country', 'country', 'region.country = country.uid') @@ -63,6 +64,7 @@ class SnowreportRepository extends AbstractRepository ->setParameter('regionUids', $regionUids, Connection::PARAM_INT_ARRAY) ; } + return $query->execute()->fetchAll(); } diff --git a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/TeammemberRepository.php b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/TeammemberRepository.php index c898abbd..9e64a20d 100644 --- a/web/typo3conf/ext/ep_products/Classes/Domain/Repository/TeammemberRepository.php +++ b/web/typo3conf/ext/ep_products/Classes/Domain/Repository/TeammemberRepository.php @@ -36,6 +36,11 @@ class TeammemberRepository extends AbstractRepository 'sorting' => 'ASC', ]; + /** + * @param array $categories + * @return array|\TYPO3\CMS\Extbase\Persistence\QueryResultInterface + * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException + */ public function findByCategories(array $categories = []) { $qb = $this->createQuery(); diff --git a/web/typo3conf/ext/ep_products/Classes/Hook/Tcemain.php b/web/typo3conf/ext/ep_products/Classes/Hook/Tcemain.php index 018f6613..51d54e96 100644 --- a/web/typo3conf/ext/ep_products/Classes/Hook/Tcemain.php +++ b/web/typo3conf/ext/ep_products/Classes/Hook/Tcemain.php @@ -27,7 +27,7 @@ namespace EP\EpProducts\Hook; * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ -use EP\EpProducts\Utility\DbUtility; +use EP\EpProducts\Traits\DbConnectionTrait; use TYPO3\CMS\Core\DataHandling\DataHandler; use TYPO3\CMS\Core\Messaging\FlashMessage; use TYPO3\CMS\Core\Messaging\FlashMessageService; @@ -36,6 +36,7 @@ use TYPO3\CMS\Extbase\Object\ObjectManager; class Tcemain { + use DbConnectionTrait; /** * @var array @@ -51,13 +52,14 @@ class Tcemain * @param string $table * @param int $id * @param DataHandler $obj + * @throws \Doctrine\DBAL\DBALException */ public function processDatamap_preProcessFieldArray(array &$fields, $table, $id, DataHandler $obj) { // Render flash message in case of duplicate entry if ($table === 'tx_epproducts_domain_model_matchcode' && $fields['code'] !== '') { $code = $fields['code']; - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb ->select('uid') ->from('tx_epproducts_domain_model_matchcode') @@ -78,7 +80,7 @@ class Tcemain } if ($table === 'tx_epproducts_domain_model_product' && $fields['code'] !== '') { $code = $fields['code']; - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $query = $qb ->select('uid') ->from('tx_epproducts_domain_model_product') @@ -98,14 +100,12 @@ class Tcemain } } - - /** * @param string $message * @param string $title * @param int $severity */ - private function addFlashMessage($message, $title, $severity) + protected function addFlashMessage($message, $title, $severity) { $objectManager = GeneralUtility::makeInstance(ObjectManager::class); /** @var \TYPO3\CMS\Core\Messaging\FlashMessageService $flashMessageService */ @@ -115,4 +115,5 @@ class Tcemain $message = GeneralUtility::makeInstance(FlashMessage::class, $message, $title, $severity, true); $messageQueue->addMessage($message); } + } diff --git a/web/typo3conf/ext/ep_products/Classes/Service/ContingentImportService.php b/web/typo3conf/ext/ep_products/Classes/Service/ContingentImportService.php index 743a18c9..9024012f 100644 --- a/web/typo3conf/ext/ep_products/Classes/Service/ContingentImportService.php +++ b/web/typo3conf/ext/ep_products/Classes/Service/ContingentImportService.php @@ -29,7 +29,7 @@ namespace EP\EpProducts\Service; use Doctrine\DBAL\Connection; use EP\EpProducts\Domain\Model\Contingent; -use EP\EpProducts\Utility\DbUtility; +use EP\EpProducts\Traits\DbConnectionTrait; use TYPO3\CMS\Core\Log\Logger; use TYPO3\CMS\Core\SingletonInterface; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -37,6 +37,8 @@ use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface; class ContingentImportService implements SingletonInterface { + use DbConnectionTrait; + const ROOMCODE_STATUS = 'BelKal'; /** @@ -61,6 +63,7 @@ class ContingentImportService implements SingletonInterface /** * @param ConfigurationManagerInterface $manager + * @throws \Doctrine\DBAL\DBALException */ public function __construct(ConfigurationManagerInterface $manager) { @@ -73,7 +76,7 @@ class ContingentImportService implements SingletonInterface } elseif (isset($settings['module']['tx_epproducts']['persistence']['storagePid'])) { $this->pid = $settings['module']['tx_epproducts']['persistence']['storagePid']; } - $this->db = DbUtility::getDbConnection(); + $this->db = $this->getDbConnection(); $this->logger = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Log\LogManager::class)->getLogger(__CLASS__); } @@ -124,21 +127,33 @@ class ContingentImportService implements SingletonInterface return $this->parseContingent($xmlData); } + /** + * @throws \Doctrine\DBAL\DBALException + */ public function createTempTable() { $this->db->exec('CREATE TABLE IF NOT EXISTS tx_epproducts_domain_model_contingent_temp LIKE tx_epproducts_domain_model_contingent'); } + /** + * @throws \Doctrine\DBAL\DBALException + */ public function clearTable() { $this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_contingent'); } + /** + * @throws \Doctrine\DBAL\DBALException + */ public function copyTable() { $this->db->exec('INSERT INTO tx_epproducts_domain_model_contingent SELECT * FROM tx_epproducts_domain_model_contingent_temp'); } + /** + * @throws \Doctrine\DBAL\DBALException + */ public function clearTempTable() { $this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_contingent_temp'); diff --git a/web/typo3conf/ext/ep_products/Classes/Service/DateImportService.php b/web/typo3conf/ext/ep_products/Classes/Service/DateImportService.php index 5a9d267d..e4585509 100644 --- a/web/typo3conf/ext/ep_products/Classes/Service/DateImportService.php +++ b/web/typo3conf/ext/ep_products/Classes/Service/DateImportService.php @@ -29,7 +29,7 @@ namespace EP\EpProducts\Service; use Doctrine\DBAL\Connection; use EP\EpProducts\Domain\Model\Room; -use EP\EpProducts\Utility\DbUtility; +use EP\EpProducts\Traits\DbConnectionTrait; use TYPO3\CMS\Core\Log\Logger; use TYPO3\CMS\Core\SingletonInterface; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -38,6 +38,8 @@ use TYPO3\CMS\Extbase\Service\CacheService; class DateImportService implements SingletonInterface { + use DbConnectionTrait; + const CODE_PSEUDOPRICE = 'PDGS'; const CODE_BABYROOM = 'Baby'; const LABEL_BUS = 'Busfahrt'; @@ -109,10 +111,11 @@ class DateImportService implements SingletonInterface /** * @param string $path * @return int + * @throws \Doctrine\DBAL\DBALException */ public function import($path) { - $this->db = DbUtility::getDbConnection(); + $this->db = $this->getDbConnection(); $this->logger = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Log\LogManager::class)->getLogger(__CLASS__); $this->getRoomMappings(); $this->getHotelMappings(); @@ -171,6 +174,9 @@ class DateImportService implements SingletonInterface return $this->parseProduct($xmlData->reise[0]); } + /** + * @throws \Doctrine\DBAL\DBALException + */ public function createTempTables() { $this->db->exec('CREATE TABLE IF NOT EXISTS tx_epproducts_domain_model_date_temp LIKE tx_epproducts_domain_model_date'); @@ -178,6 +184,9 @@ class DateImportService implements SingletonInterface $this->db->exec('CREATE TABLE IF NOT EXISTS tx_epproducts_domain_model_room_temp LIKE tx_epproducts_domain_model_room'); } + /** + * @throws \Doctrine\DBAL\DBALException + */ public function clearTables() { $this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_date'); @@ -185,6 +194,9 @@ class DateImportService implements SingletonInterface $this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_room'); } + /** + * @throws \Doctrine\DBAL\DBALException + */ public function copyTables() { $this->db->exec('INSERT INTO tx_epproducts_domain_model_date SELECT * FROM tx_epproducts_domain_model_date_temp'); @@ -192,6 +204,9 @@ class DateImportService implements SingletonInterface $this->db->exec('INSERT INTO tx_epproducts_domain_model_room SELECT * FROM tx_epproducts_domain_model_room_temp'); } + /** + * @throws \Doctrine\DBAL\DBALException + */ public function clearTempTables() { $this->db->exec('TRUNCATE TABLE tx_epproducts_domain_model_date_temp'); @@ -328,7 +343,6 @@ class DateImportService implements SingletonInterface /** * @param array $product * @param \SimpleXMLElement $xmlDate - * * @return array */ protected function createDateRecord(array $product, \SimpleXMLElement $xmlDate) @@ -467,7 +481,6 @@ class DateImportService implements SingletonInterface /** * @param \SimpleXMLElement $xmlHotel * @param array $date - * * @return bool */ protected function parseHotel(\SimpleXMLElement $xmlHotel, array &$date) @@ -600,7 +613,6 @@ class DateImportService implements SingletonInterface /** * @param array $services - * * @return int */ protected function determineDiscount(array $services) @@ -622,7 +634,6 @@ class DateImportService implements SingletonInterface * @param \SimpleXMLElement $xmlData * @param string $serviceLabel * @param bool $skipWithoutPrice - * * @return array */ protected function parseService(\SimpleXMLElement $xmlData, $serviceLabel, $skipWithoutPrice = false) @@ -683,7 +694,6 @@ class DateImportService implements SingletonInterface /** * @param \SimpleXMLElement $xmlDate * @param string $label - * * @return array */ protected function parseSelectionGroup(\SimpleXMLElement $xmlDate, $label) @@ -718,9 +728,6 @@ class DateImportService implements SingletonInterface } } - /** - * @return array - */ protected function getRoomMappings() { $sql = 'SELECT code, type FROM tx_epproducts_domain_model_roommapping'; @@ -731,9 +738,6 @@ class DateImportService implements SingletonInterface } } - /** - * @return array - */ protected function getHotelMappings() { $sql = ' @@ -773,7 +777,6 @@ class DateImportService implements SingletonInterface /** * @param string $table * @param int $uid - * * @return array */ protected function getTopFactForRecord($table, $uid) @@ -820,4 +823,5 @@ class DateImportService implements SingletonInterface ]; } } + } diff --git a/web/typo3conf/ext/ep_products/Classes/Service/LogService.php b/web/typo3conf/ext/ep_products/Classes/Service/LogService.php index 27486808..3ed1e328 100644 --- a/web/typo3conf/ext/ep_products/Classes/Service/LogService.php +++ b/web/typo3conf/ext/ep_products/Classes/Service/LogService.php @@ -27,26 +27,31 @@ namespace EP\EpProducts\Service; ***************************************************************/ use EP\EpProducts\Domain\Model\FilterSettings; -use EP\EpProducts\Utility\DbUtility; +use EP\EpProducts\Traits\DbConnectionTrait; use TYPO3\CMS\Backend\Utility\BackendUtility; use TYPO3\CMS\Core\SingletonInterface; class LogService implements SingletonInterface { + use DbConnectionTrait; /** * @return array + * @throws \Doctrine\DBAL\DBALException */ public function dumpSearchLogEpreisen() { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); + $result = $qb - ->select('DATE_FORMAT(FROM_UNIXTIME(logs.time_micro), "%d.%m.%Y, %H:%i Uhr") date', 'logs.data data') + ->select('logs.data as data') + ->addSelectLiteral('DATE_FORMAT(FROM_UNIXTIME(logs.time_micro), "%d.%m.%Y, %H:%i Uhr") as date') ->from('tx_epproducts_log', 'logs') ->orderBy('time_micro') ->execute() ->fetchAll() ; + $csv = [ [ 'Datum/Uhrzeit', @@ -61,7 +66,9 @@ class LogService implements SingletonInterface 'Seiten ID', ], ]; + $labels = $this->fetchEntityLabels(); + foreach ($result as $row) { $data = json_decode(substr($row['data'], 2)); @@ -95,17 +102,21 @@ class LogService implements SingletonInterface /** * @return array + * @throws \Doctrine\DBAL\DBALException */ public function dumpSearchLogEpevents() { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); + $result = $qb - ->select('DATE_FORMAT(FROM_UNIXTIME(logs.time_micro), "%d.%m.%Y, %H:%i Uhr") date', 'logs.data data') + ->select('logs.data as data') + ->addSelectLiteral('DATE_FORMAT(FROM_UNIXTIME(logs.time_micro), "%d.%m.%Y, %H:%i Uhr") as date') ->from('tx_epevents_log', 'logs') ->orderBy('time_micro') ->execute() ->fetchAll() ; + $csv = [ [ 'Datum/Uhrzeit', @@ -114,6 +125,7 @@ class LogService implements SingletonInterface 'Seiten ID', ], ]; + foreach ($result as $row) { $data = json_decode(substr($row['data'], 2)); @@ -129,11 +141,13 @@ class LogService implements SingletonInterface $data->pageUid, ]; } + return $csv; } /** * @return array + * @throws \Doctrine\DBAL\DBALException */ private function fetchEntityLabels() { @@ -141,39 +155,50 @@ class LogService implements SingletonInterface 'country' => [], 'region' => [], ]; - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + + $qb = $this->getDbConnection()->createQueryBuilder(); + $result = $qb ->select('uid', 'name') ->from('tx_epproducts_domain_model_country', 'c') ->execute() ->fetchAll() ; + foreach ($result as $row) { $labels['country'][$row['uid']] = $row['name']; } - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + + $qb = $this->getDbConnection()->createQueryBuilder(); + $result = $qb ->select('uid', 'name') ->from('tx_epproducts_domain_model_region') ->execute() ->fetchAll() ; + foreach ($result as $row) { $labels['region'][$row['uid']] = $row['name']; } - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + + $qb = $this->getDbConnection()->createQueryBuilder(); + $result = $qb ->select('uid', 'name') ->from('tx_epproducts_domain_model_concept') ->execute() ->fetchAll() ; + foreach ($result as $row) { $labels['concept'][$row['uid']] = $row['name']; } + return $labels; } -} \ No newline at end of file + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Service/ResellerDataService.php b/web/typo3conf/ext/ep_products/Classes/Service/ResellerDataService.php index 39518839..08253ca4 100644 --- a/web/typo3conf/ext/ep_products/Classes/Service/ResellerDataService.php +++ b/web/typo3conf/ext/ep_products/Classes/Service/ResellerDataService.php @@ -33,13 +33,15 @@ use EP\EpProducts\Domain\Model\Reseller; use EP\EpProducts\Domain\Repository\ProductRepository; use EP\EpProducts\Domain\Serialization\Date; use EP\EpProducts\Domain\Serialization\Room; +use EP\EpProducts\Traits\DbConnectionTrait; use EP\EpProducts\Utility\BookingUrlUtility; -use EP\EpProducts\Utility\DbUtility; use TYPO3\CMS\Core\SingletonInterface; use TYPO3\CMS\Core\Utility\GeneralUtility; class ResellerDataService implements SingletonInterface { + use DbConnectionTrait; + /** * @var ProductRepository */ @@ -57,6 +59,7 @@ class ResellerDataService implements SingletonInterface * @param Reseller $reseller * @param array $imageProcessingInstructions * @return array + * @throws \Doctrine\DBAL\DBALException */ public function preprocessAll(Reseller $reseller, array $imageProcessingInstructions = null) { @@ -77,6 +80,7 @@ class ResellerDataService implements SingletonInterface * @param Reseller $reseller * @param array $imageProcessingInstructions * @return array + * @throws \Doctrine\DBAL\DBALException */ public function preprocessSingle(Product $product, Reseller $reseller, array $imageProcessingInstructions = null) { @@ -128,15 +132,16 @@ class ResellerDataService implements SingletonInterface /** * @return bool|array + * @throws \Doctrine\DBAL\DBALException */ public function getResellerForCurrentDomain() { $currentDomain = GeneralUtility::getIndpEnv('HTTP_HOST'); - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); return $qb - ->select('r.name name, r.pa_code paCode') + ->select('r.name as name', 'r.pa_code as paCode') ->from('tx_epproducts_domain_model_reseller', 'r') ->innerJoin('r', 'sys_domain', 'd', 'r.uid = d.tx_epproducts_reseller') ->where('d.domainName = :domain') @@ -148,4 +153,5 @@ class ResellerDataService implements SingletonInterface ->fetch() ; } + } diff --git a/web/typo3conf/ext/ep_products/Classes/Service/StaticSearchParamsRequestService.php b/web/typo3conf/ext/ep_products/Classes/Service/StaticSearchParamsRequestService.php index 6b90adc1..08dd2972 100644 --- a/web/typo3conf/ext/ep_products/Classes/Service/StaticSearchParamsRequestService.php +++ b/web/typo3conf/ext/ep_products/Classes/Service/StaticSearchParamsRequestService.php @@ -28,16 +28,21 @@ namespace EP\EpProducts\Service; ***************************************************************/ use EP\EpProducts\Domain\Model\FilterSettings; -use EP\EpProducts\Utility\DbUtility; +use EP\EpProducts\Traits\DbConnectionTrait; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\HttpUtility; class StaticSearchParamsRequestService { + use DbConnectionTrait; + const PREFIX_PATH_SEGMENT = 'reiseauswahl'; const SEARCH_RESULT_URI = '/skireisen/suche/'; const REDIRECT_RESPONSE_CODE = 302; + /** + * @throws \Doctrine\DBAL\DBALException + */ public function handleRequest() { $currentUri = GeneralUtility::getIndpEnv('REQUEST_URI'); @@ -48,7 +53,8 @@ class StaticSearchParamsRequestService return; } - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); + $query = $qb ->select('*') ->from('tx_epproducts_domain_model_staticsearchparams') @@ -75,4 +81,5 @@ class StaticSearchParamsRequestService HttpUtility::redirect($redirect, constant('\TYPO3\CMS\Core\Utility\HttpUtility::HTTP_STATUS_' . self::REDIRECT_RESPONSE_CODE)); exit; } + } diff --git a/web/typo3conf/ext/ep_products/Classes/Traits/DbConnectionTrait.php b/web/typo3conf/ext/ep_products/Classes/Traits/DbConnectionTrait.php new file mode 100644 index 00000000..27aab942 --- /dev/null +++ b/web/typo3conf/ext/ep_products/Classes/Traits/DbConnectionTrait.php @@ -0,0 +1,49 @@ +, dreipunktnull + * + * All rights reserved + * + * This script is part of the TYPO3 project. The TYPO3 project is + * free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * The GNU General Public License can be found at + * http://www.gnu.org/copyleft/gpl.html. + * + * This script is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * This copyright notice MUST APPEAR in all copies of the script! + ***************************************************************/ + +use TYPO3\CMS\Core\Database\ConnectionPool; +use TYPO3\CMS\Core\Utility\GeneralUtility; + +trait DbConnectionTrait +{ + + /** + * @param string $connectionName + * @return \TYPO3\CMS\Core\Database\Connection + * @throws \Doctrine\DBAL\DBALException + */ + protected function getDbConnection($connectionName = 'Default') + { + /** @var ConnectionPool $connectionPool */ + $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); + + return $connectionPool->getConnectionByName($connectionName); + } + +} diff --git a/web/typo3conf/ext/ep_products/Classes/Utility/DbUtility.php b/web/typo3conf/ext/ep_products/Classes/Utility/DbUtility.php deleted file mode 100644 index eb11066a..00000000 --- a/web/typo3conf/ext/ep_products/Classes/Utility/DbUtility.php +++ /dev/null @@ -1,64 +0,0 @@ -, dreipunktnull - * - * All rights reserved - * - * This script is part of the TYPO3 project. The TYPO3 project is - * free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * The GNU General Public License can be found at - * http://www.gnu.org/copyleft/gpl.html. - * - * This script is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * This copyright notice MUST APPEAR in all copies of the script! - ***************************************************************/ - -use Doctrine\DBAL\Configuration; -use Doctrine\DBAL\Connection; -use Doctrine\DBAL\DriverManager; - -class DbUtility -{ - /** - * @var Connection - */ - protected static $connection; - - /** - * @param string $configIndex - * - * @return Connection - */ - public static function getDbConnection() - { - if (static::$connection === null) { - $config = new Configuration(); - $connectionParams = [ - 'dbname' => $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['dbname'], - 'user' => $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['user'], - 'password' => $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['password'], - 'host' => $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['host'], - 'unix_socket' => $GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default']['socket'], - 'charset' => 'utf8', - 'driver' => 'mysqli', - ]; - static::$connection = DriverManager::getConnection($connectionParams, $config); - } - - return static::$connection; - } -} diff --git a/web/typo3conf/ext/ep_theme/Classes/DataProcessing/ContextProcessor.php b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/ContextProcessor.php index fc752289..77f18431 100644 --- a/web/typo3conf/ext/ep_theme/Classes/DataProcessing/ContextProcessor.php +++ b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/ContextProcessor.php @@ -27,20 +27,21 @@ namespace EP\EpTheme\DataProcessing; * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ -use EP\EpProducts\Utility\DbUtility; +use EP\EpProducts\Traits\DbConnectionTrait; use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface; class ContextProcessor implements DataProcessorInterface { + use DbConnectionTrait; /** * @param ContentObjectRenderer $cObj * @param array $contentObjectConfiguration * @param array $processorConfiguration * @param array $processedData - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function process( ContentObjectRenderer $cObj, @@ -65,10 +66,12 @@ class ContextProcessor implements DataProcessorInterface * @param int $uid * @param string $table * @return array + * @throws \Doctrine\DBAL\DBALException */ private function getContextRecord($uid, $table) { - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); + $query = $qb ->select('*') ->from($table) @@ -80,4 +83,5 @@ class ContextProcessor implements DataProcessorInterface return $query->execute()->fetch(); } + } diff --git a/web/typo3conf/ext/ep_theme/Classes/DataProcessing/SliderProcessor.php b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/SliderProcessor.php index f787bdb4..9bf31718 100644 --- a/web/typo3conf/ext/ep_theme/Classes/DataProcessing/SliderProcessor.php +++ b/web/typo3conf/ext/ep_theme/Classes/DataProcessing/SliderProcessor.php @@ -27,7 +27,7 @@ namespace EP\EpTheme\DataProcessing; * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ -use EP\EpProducts\Utility\DbUtility; +use EP\EpProducts\Traits\DbConnectionTrait; use TYPO3\CMS\Core\Resource\FileRepository; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer; @@ -35,14 +35,15 @@ use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface; class SliderProcessor implements DataProcessorInterface { + use DbConnectionTrait; /** * @param ContentObjectRenderer $cObj * @param array $contentObjectConfiguration * @param array $processorConfiguration * @param array $processedData - * * @return array + * @throws \Doctrine\DBAL\DBALException */ public function process( ContentObjectRenderer $cObj, @@ -61,7 +62,8 @@ class SliderProcessor implements DataProcessorInterface return $processedData; } - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); + $query = $qb ->select('uid', 'headline', 'subline', 'button', 'page_uid') ->from('tx_eptheme_domain_model_slide') @@ -96,12 +98,14 @@ class SliderProcessor implements DataProcessorInterface protected function getParentPageWithSlides() { $rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($GLOBALS['TSFE']->id); + foreach ($rootLine as $parentPage) { if ((int) $parentPage['tx_eptheme_slides'] > 0) { return (int) $parentPage['uid']; } } + return null; } diff --git a/web/typo3conf/ext/ep_track/Classes/Service/RequestService.php b/web/typo3conf/ext/ep_track/Classes/Service/RequestService.php index c575750c..bf9f0f17 100644 --- a/web/typo3conf/ext/ep_track/Classes/Service/RequestService.php +++ b/web/typo3conf/ext/ep_track/Classes/Service/RequestService.php @@ -27,9 +27,8 @@ namespace EP\EpTrack\Service; * This copyright notice MUST APPEAR in all copies of the script! ***************************************************************/ -use EP\EpProducts\Utility\DbUtility; use TYPO3\CMS\Backend\Utility\BackendUtility; -use TYPO3\CMS\Core\Database\DatabaseConnection; +use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\TimeTracker\NullTimeTracker; use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; use TYPO3\CMS\Core\Utility\GeneralUtility; @@ -55,6 +54,7 @@ class RequestService /** * @param string $currentUri + * @throws \Doctrine\DBAL\DBALException */ public function matchRedirect($currentUri) { @@ -64,7 +64,7 @@ class RequestService $uri .= '/'; } - $qb = DbUtility::getDbConnection()->createQueryBuilder(); + $qb = $this->getDbConnection()->createQueryBuilder(); $redirect = $qb ->select('*') @@ -190,4 +190,17 @@ class RequestService PageGenerator::pagegenInit(); } + + /** + * @return \TYPO3\CMS\Core\Database\Connection + * @throws \Doctrine\DBAL\DBALException + */ + protected function getDbConnection() + { + /** @var ConnectionPool $connectionPool */ + $connectionPool = GeneralUtility::makeInstance(ConnectionPool::class); + + return $connectionPool->getConnectionByName('Default'); + } + }