Fix broken hotel teaser rendering in case of inavailability

This commit is contained in:
Björn Fromme
2018-07-03 11:45:32 +02:00
parent 81a148b8dc
commit 4b73b37f4a
4 changed files with 38 additions and 4 deletions
@@ -50,6 +50,33 @@ class HotelRepository extends AbstractRepository
return $qb->execute()->fetch();
}
/**
* @param int $hotelUid
* @return array
*/
public function getDateIndependentSingleByUid($hotelUid)
{
$qb = DbUtility::getDbConnection()->createQueryBuilder();
$qb
->select(
'hotel.uid hotelUid', 'hotel.name hotelName', 'hotel.teaser hotelTeaser',
'hotel.category hotelCategory', 'hotel.detail_page hotelDetailPage',
'country.code countryCode', 'country.name country',
'region.name region'
)
->from('tx_epproducts_domain_model_hotel', 'hotel')
->leftJoin('hotel', 'tx_epproducts_domain_model_country', 'country', 'hotel.country = country.uid')
->leftJoin('hotel', 'tx_epproducts_domain_model_region', 'region', 'hotel.region = region.uid')
->where('hotel.uid = :hotelUid')
->andWhere('hotel.hidden = 0')
->andWhere('hotel.show_as_teaser = 1')
->andWhere('hotel.deleted = 0')
->setParameter('hotelUid', $hotelUid)
;
return $qb->execute()->fetch();
}
/**
* @param int $productUid
* @return array
@@ -73,6 +73,11 @@ class HotelService implements SingletonInterface
{
$hotelData = $this->hotelRepository->getSingleByUid($hotelUid);
if ($hotelData === false) {
$hotelData = $this->hotelRepository->getDateIndependentSingleByUid($hotelUid);
$hotelData['available'] = -1; // TODO: Needs improvement. '-1' actually means: no price/date info available
}
$hotelCategory = array_key_exists($hotelData['hotelCategory'], Hotel::$categoryLabels) ?
Hotel::$categoryLabels[$hotelData['hotelCategory']] : null;
@@ -265,4 +270,4 @@ class HotelService implements SingletonInterface
return $hotels;
}
}
}
@@ -19,8 +19,10 @@
</f:if>
<hr>
{hotel.teaser -> f:format.crop(maxCharacters: settings.teaserTextMaxChars) -> f:format.html()}
<hr>
<span class="teaserbox__price"><strong>{f:if(condition: '{hotel.available} > 0', then: 'ab {hotel.minPrice} €', else: 'ausgebucht')}</strong></span>
<f:if condition="{hotel.available} != -1">
<hr>
<span class="teaserbox__price"><strong>{f:if(condition: '{hotel.available} > 0', then: 'ab {hotel.minPrice} €', else: 'ausgebucht')}</strong></span>
</f:if>
</div>
<button class="button button--full teaserbox__button">{f:translate(key: 'tx_eptheme.label.teaserbutton.default', extensionName: 'ep_theme')}</button>
</f:link.page>
@@ -9,7 +9,7 @@
<div class="teaserbox__image">
<img class="teaserbox__flag"
src="{f:uri.image(src: '{ep:flagiconSource(countryCode: hotel.country.code)}')}"
alt="{country: hotel.country.name}"/>
alt="{hotel.country.name}"/>
<f:render partial="TeaserImage" arguments="{image: hotel.images.0}"/>
</div>
<div class="teaserbox__main">