update
This commit is contained in:
@@ -280,20 +280,71 @@ class ShopBasketController
|
||||
$client = \Shared\Helpers\Helpers::get_session( 'client' );
|
||||
$orderSubmitToken = $this->createOrderSubmitToken();
|
||||
|
||||
$basket = \Shared\Helpers\Helpers::get_session( 'basket' );
|
||||
$coupon = \Shared\Helpers\Helpers::get_session( 'coupon' );
|
||||
$transport = ( new \Domain\Transport\TransportRepository( $GLOBALS['mdb'] ) )->findActiveByIdCached( \Shared\Helpers\Helpers::get_session( 'basket-transport-method-id' ) );
|
||||
|
||||
$productsSummary = (float)\Domain\Basket\BasketCalculator::summaryPrice( $basket, $coupon );
|
||||
$freeDeliveryThreshold = isset( $settings['free_delivery'] ) ? (float)$settings['free_delivery'] : 0.0;
|
||||
$transportCalc = $this->calculateTransportCostForSummary( $transport, $productsSummary, $freeDeliveryThreshold );
|
||||
|
||||
return \Shared\Tpl\Tpl::view( 'shop-basket/summary-view', [
|
||||
'lang_id' => $lang_id,
|
||||
'client' => \Shared\Helpers\Helpers::get_session( 'client' ),
|
||||
'basket' => \Shared\Helpers\Helpers::get_session( 'basket' ),
|
||||
'transport' => ( new \Domain\Transport\TransportRepository( $GLOBALS['mdb'] ) )->findActiveByIdCached( \Shared\Helpers\Helpers::get_session( 'basket-transport-method-id' ) ),
|
||||
'basket' => $basket,
|
||||
'transport' => $transport,
|
||||
'transport_cost_effective' => $transportCalc['transport_cost_effective'],
|
||||
'free_delivery_applies' => $transportCalc['free_delivery_applies'],
|
||||
'payment_method' => $this->paymentMethodRepository->paymentMethodCached( (int)\Shared\Helpers\Helpers::get_session( 'basket-payment-method-id' ) ),
|
||||
'addresses' => ( new \Domain\Client\ClientRepository( $GLOBALS['mdb'] ) )->clientAddresses( (int)$client['id'] ),
|
||||
'settings' => $settings,
|
||||
'coupon' => \Shared\Helpers\Helpers::get_session( 'coupon' ),
|
||||
'coupon' => $coupon,
|
||||
'basket_message' => \Shared\Helpers\Helpers::get_session( 'basket_message' ),
|
||||
'order_submit_token' => $orderSubmitToken
|
||||
] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Wylicza efektywny koszt transportu dla widoku /koszyk-podsumowanie.
|
||||
* Koszt spada do 0, gdy transport ma flage delivery_free=1 ORAZ wartosc koszyka
|
||||
* (po kuponie) osiaga prog darmowej dostawy $freeDeliveryThreshold.
|
||||
*
|
||||
* @param array|null $transport Aktywny transport (lub null gdy nie wybrany)
|
||||
* @param float $productsSummary Wartosc koszyka po kuponie
|
||||
* @param float $freeDeliveryThreshold Prog darmowej dostawy z settings.free_delivery
|
||||
* @return array{transport_cost_effective: float, free_delivery_applies: bool}
|
||||
*/
|
||||
protected function calculateTransportCostForSummary( $transport, $productsSummary, $freeDeliveryThreshold )
|
||||
{
|
||||
if ( !is_array( $transport ) )
|
||||
{
|
||||
return [
|
||||
'transport_cost_effective' => 0.0,
|
||||
'free_delivery_applies' => false,
|
||||
];
|
||||
}
|
||||
|
||||
$deliveryFree = isset( $transport['delivery_free'] ) ? (int)$transport['delivery_free'] : 0;
|
||||
$cost = isset( $transport['cost'] ) ? (float)$transport['cost'] : 0.0;
|
||||
|
||||
$applies = false;
|
||||
if ( $deliveryFree === 1 && $freeDeliveryThreshold > 0 )
|
||||
{
|
||||
$summaryNormalized = \Shared\Helpers\Helpers::normalize_decimal( $productsSummary );
|
||||
$thresholdNormalized = \Shared\Helpers\Helpers::normalize_decimal( $freeDeliveryThreshold );
|
||||
|
||||
if ( $summaryNormalized >= $thresholdNormalized )
|
||||
{
|
||||
$applies = true;
|
||||
}
|
||||
}
|
||||
|
||||
return [
|
||||
'transport_cost_effective' => $applies ? 0.0 : $cost,
|
||||
'free_delivery_applies' => $applies,
|
||||
];
|
||||
}
|
||||
|
||||
public function basketSave()
|
||||
{
|
||||
$orderSubmitToken = (string)\Shared\Helpers\Helpers::get( 'order_submit_token', true );
|
||||
|
||||
@@ -153,15 +153,9 @@ class LayoutEngine
|
||||
{
|
||||
$category = $categoryRepo->frontCategoryDetails( (int)\Shared\Helpers\Helpers::get( 'category' ), $lang_id );
|
||||
|
||||
if ( $category['language']['meta_title'] )
|
||||
$page['language']['title'] = $category['language']['meta_title'];
|
||||
else
|
||||
$page['language']['title'] = $category['language']['title'];
|
||||
|
||||
$page = self::applyEntityMetaToPage( $page, isset( $category['language'] ) ? $category['language'] : null, isset( $category['language']['title'] ) ? $category['language']['title'] : '' );
|
||||
$page['show_title'] = true;
|
||||
$page['language']['meta_keywords'] = $category['language']['meta_keywords'];
|
||||
$page['language']['meta_description'] = $category['language']['meta_description'];
|
||||
$page['language']['page_title'] = $category['language']['category_title'] ? $category['language']['category_title'] : $category['language']['title'];
|
||||
$page['language']['page_title'] = !empty( $category['language']['category_title'] ) ? $category['language']['category_title'] : ( isset( $category['language']['title'] ) ? $category['language']['title'] : '' );
|
||||
|
||||
// CANONICAL
|
||||
$html = str_replace( '[CANONICAL]', '', $html );
|
||||
@@ -175,14 +169,8 @@ class LayoutEngine
|
||||
{
|
||||
$article = $articleRepo->articleDetailsFrontend( (int)\Shared\Helpers\Helpers::get( 'article' ), $lang_id );
|
||||
|
||||
if ( $article['language']['meta_title'] )
|
||||
$page['language']['title'] = $article['language']['meta_title'];
|
||||
else
|
||||
$page['language']['title'] = $article['language']['title'];
|
||||
|
||||
$page = self::applyEntityMetaToPage( $page, isset( $article['language'] ) ? $article['language'] : null, isset( $article['language']['title'] ) ? $article['language']['title'] : '' );
|
||||
$page['show_title'] = false;
|
||||
$page['language']['meta_keywords'] = $article['language']['meta_keywords'];
|
||||
$page['language']['meta_description'] = $article['language']['meta_description'];
|
||||
|
||||
// CANONICAL
|
||||
$html = str_replace( '[CANONICAL]', '', $html );
|
||||
@@ -193,16 +181,11 @@ class LayoutEngine
|
||||
//
|
||||
if ( \Shared\Helpers\Helpers::get( 'product' ) )
|
||||
{
|
||||
$product = ( new \Domain\Product\ProductRepository( $GLOBALS['mdb'] ) )->findCached( \Shared\Helpers\Helpers::get( 'product' ), $lang_id, $_GET['permutation_hash'] ?? null );
|
||||
|
||||
if ( $product['language']['meta_title'] )
|
||||
$page['language']['title'] = $product['language']['meta_title'];
|
||||
else
|
||||
$page['language']['title'] = $product['language']['name'];
|
||||
$permutation_hash = isset( $_GET['permutation_hash'] ) ? str_replace( '_', '|', $_GET['permutation_hash'] ) : null;
|
||||
$product = ( new \Domain\Product\ProductRepository( $GLOBALS['mdb'] ) )->findCached( \Shared\Helpers\Helpers::get( 'product' ), $lang_id, $permutation_hash );
|
||||
|
||||
$page = self::applyEntityMetaToPage( $page, isset( $product['language'] ) ? $product['language'] : null, isset( $product['language']['name'] ) ? $product['language']['name'] : '' );
|
||||
$page['show_title'] = false;
|
||||
$page['language']['meta_keywords'] = $product['language']['meta_keywords'];
|
||||
$page['language']['meta_description'] = $product['language']['meta_description'];
|
||||
|
||||
// CANONICAL
|
||||
if ( $product['language']['canonical'] )
|
||||
@@ -439,6 +422,35 @@ class LayoutEngine
|
||||
] );
|
||||
}
|
||||
|
||||
/**
|
||||
* Przepisuje meta encji (kategoria/artykuł/produkt) do $page['language'].
|
||||
*
|
||||
* Dlaczego: domyślne $page jest stroną główną CMS. Jeśli nie nadpiszemy
|
||||
* meta_title encji (nawet pustym), meta_title homepage wycieka do <title>
|
||||
* na podstronie kategorii/produktu (linia podstawienia [TITLE]).
|
||||
*
|
||||
* @param array $page obecne $page (z homepage lub session)
|
||||
* @param array|null $entityLanguage wiersz *_langs encji (może być null)
|
||||
* @param string $fallbackTitle nazwa encji używana jako $page.language.title
|
||||
* @return array zmodyfikowany $page
|
||||
*/
|
||||
public static function applyEntityMetaToPage( $page, $entityLanguage, $fallbackTitle )
|
||||
{
|
||||
if ( !is_array( $page ) ) {
|
||||
$page = [];
|
||||
}
|
||||
if ( !isset( $page['language'] ) or !is_array( $page['language'] ) ) {
|
||||
$page['language'] = [];
|
||||
}
|
||||
|
||||
$page['language']['title'] = $fallbackTitle;
|
||||
$page['language']['meta_title'] = is_array( $entityLanguage ) && isset( $entityLanguage['meta_title'] ) ? $entityLanguage['meta_title'] : null;
|
||||
$page['language']['meta_keywords'] = is_array( $entityLanguage ) && isset( $entityLanguage['meta_keywords'] ) ? $entityLanguage['meta_keywords'] : null;
|
||||
$page['language']['meta_description'] = is_array( $entityLanguage ) && isset( $entityLanguage['meta_description'] ) ? $entityLanguage['meta_description'] : null;
|
||||
|
||||
return $page;
|
||||
}
|
||||
|
||||
public static function alert()
|
||||
{
|
||||
if ( $alert = \Shared\Helpers\Helpers::get_session( 'alert' ) )
|
||||
|
||||
Reference in New Issue
Block a user