Add view classes for articles, banners, languages, menu, newsletter, containers, shop categories, clients, payment methods, products, and search
- Created Articles.php for rendering article views including full articles, miniature lists, and news sections. - Added Banners.php for handling banner displays. - Introduced Languages.php for rendering language options. - Implemented Menu.php for dynamic menu rendering. - Developed Newsletter.php for newsletter view rendering. - Created Scontainers.php for rendering specific containers. - Added ShopCategory.php for category descriptions and product listings. - Introduced ShopClient.php for managing client-related views such as address editing and order history. - Implemented ShopPaymentMethod.php for displaying payment methods in the basket. - Created ShopProduct.php for generating product URLs. - Added ShopSearch.php for rendering a simple search form. - Added .htaccess file to enhance security by restricting access to sensitive files and directories.
This commit is contained in:
49
autoload/front/Controllers/NewsletterController.php
Normal file
49
autoload/front/Controllers/NewsletterController.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
namespace front\Controllers;
|
||||
|
||||
use Domain\Newsletter\NewsletterRepository;
|
||||
|
||||
class NewsletterController
|
||||
{
|
||||
private NewsletterRepository $repository;
|
||||
|
||||
public function __construct( NewsletterRepository $repository )
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
public function signin()
|
||||
{
|
||||
global $settings;
|
||||
|
||||
$result = [ 'status' => 'bad' ];
|
||||
|
||||
if ( $this->repository->signup( \Shared\Helpers\Helpers::get( 'email' ), $_SERVER['SERVER_NAME'], !empty( $settings['ssl'] ), $settings ) )
|
||||
$result = [ 'status' => 'ok' ];
|
||||
|
||||
echo json_encode( $result );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function confirm()
|
||||
{
|
||||
global $lang;
|
||||
|
||||
if ( $this->repository->confirmSubscription( \Shared\Helpers\Helpers::get( 'hash' ) ) )
|
||||
\Shared\Helpers\Helpers::alert( $lang['email-zostal-dodany-do-listy-newsletter'] );
|
||||
|
||||
header( 'Location: /' );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function unsubscribe()
|
||||
{
|
||||
global $lang;
|
||||
|
||||
if ( $this->repository->unsubscribe( \Shared\Helpers\Helpers::get( 'hash' ) ) )
|
||||
\Shared\Helpers\Helpers::alert( $lang['email-zostal-usuniety-z-listy-newsletter'] );
|
||||
|
||||
header( 'Location: /' );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
49
autoload/front/Controllers/SearchController.php
Normal file
49
autoload/front/Controllers/SearchController.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
namespace front\Controllers;
|
||||
|
||||
class SearchController
|
||||
{
|
||||
public function searchResults()
|
||||
{
|
||||
global $lang_id;
|
||||
|
||||
$bs = \Shared\Helpers\Helpers::get( 'bs' );
|
||||
$productRepo = new \Domain\Product\ProductRepository( $GLOBALS['mdb'] );
|
||||
$results = $productRepo->searchProductsByName( \Shared\Helpers\Helpers::get( 'query' ), $lang_id, (int)$bs );
|
||||
|
||||
$out = \Shared\Tpl\Tpl::view( 'shop-search/products', [
|
||||
'query' => \Shared\Helpers\Helpers::get( 'query' ),
|
||||
'products' => $results['products']
|
||||
] );
|
||||
|
||||
if ( $results['ls'] > 1 )
|
||||
{
|
||||
$tpl = new \Shared\Tpl\Tpl;
|
||||
$tpl -> ls = $results['ls'];
|
||||
$tpl -> bs = $bs ? $bs : 1;
|
||||
$tpl -> link = 'wyszukiwarka/' . \Shared\Helpers\Helpers::get( 'query' );
|
||||
$out .= $tpl -> render( 'site/pager' );
|
||||
}
|
||||
|
||||
return $out;
|
||||
}
|
||||
|
||||
public function searchProducts()
|
||||
{
|
||||
global $lang_id;
|
||||
|
||||
$products = [];
|
||||
$productRepo = new \Domain\Product\ProductRepository( $GLOBALS['mdb'] );
|
||||
$results = $productRepo->searchProductByNameAjax( \Shared\Helpers\Helpers::get( 'query' ), $lang_id );
|
||||
if ( \Shared\Helpers\Helpers::is_array_fix( $results ) ) {
|
||||
foreach ( $results as $row ) {
|
||||
$products[] = \Shared\Tpl\Tpl::view( 'shop-search/product-search', [
|
||||
'product' => $productRepo->findCached( $row['product_id'], $lang_id )
|
||||
] );
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode( $products );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
406
autoload/front/Controllers/ShopBasketController.php
Normal file
406
autoload/front/Controllers/ShopBasketController.php
Normal file
@@ -0,0 +1,406 @@
|
||||
<?php
|
||||
namespace front\Controllers;
|
||||
|
||||
class ShopBasketController
|
||||
{
|
||||
public static $title = [
|
||||
'mainView' => 'Koszyk'
|
||||
];
|
||||
|
||||
private $orderRepository;
|
||||
private $paymentMethodRepository;
|
||||
|
||||
public function __construct( \Domain\Order\OrderRepository $orderRepository, \Domain\PaymentMethod\PaymentMethodRepository $paymentMethodRepository )
|
||||
{
|
||||
$this->orderRepository = $orderRepository;
|
||||
$this->paymentMethodRepository = $paymentMethodRepository;
|
||||
}
|
||||
|
||||
public function basketMessageSave()
|
||||
{
|
||||
\Shared\Helpers\Helpers::set_session( 'basket_message', \Shared\Helpers\Helpers::get( 'basket_message' ) );
|
||||
echo json_encode( [ 'result' => 'ok' ] );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function basketRemoveProduct()
|
||||
{
|
||||
global $lang_id;
|
||||
|
||||
$basket = \Shared\Helpers\Helpers::get_session( 'basket' );
|
||||
$coupon = \Shared\Helpers\Helpers::get_session( 'coupon' );
|
||||
$product_hash = \Shared\Helpers\Helpers::get( 'product_hash' );
|
||||
$basket_transport_method_id = \Shared\Helpers\Helpers::get_session( 'basket-transport-method-id' );
|
||||
|
||||
unset( $basket[ $product_hash ] );
|
||||
|
||||
$basket = (new \Domain\Promotion\PromotionRepository($GLOBALS['mdb']))->findPromotion( $basket );
|
||||
|
||||
\Shared\Helpers\Helpers::set_session( 'basket', $basket );
|
||||
|
||||
$this->jsonBasketResponse( $basket, $coupon, $lang_id, $basket_transport_method_id );
|
||||
}
|
||||
|
||||
public function basketIncreaseQuantityProduct()
|
||||
{
|
||||
global $lang_id;
|
||||
|
||||
$basket = \Shared\Helpers\Helpers::get_session( 'basket' );
|
||||
$coupon = \Shared\Helpers\Helpers::get_session( 'coupon' );
|
||||
$product_hash = \Shared\Helpers\Helpers::get( 'product_hash' );
|
||||
$basket_transport_method_id = \Shared\Helpers\Helpers::get_session( 'basket-transport-method-id' );
|
||||
$basket[ $product_hash ][ 'quantity' ]++;
|
||||
|
||||
\Domain\Basket\BasketCalculator::checkProductQuantityInStock( $basket, false );
|
||||
|
||||
$basket = \Shared\Helpers\Helpers::get_session( 'basket' );
|
||||
|
||||
$basket = (new \Domain\Promotion\PromotionRepository($GLOBALS['mdb']))->findPromotion( $basket );
|
||||
|
||||
\Shared\Helpers\Helpers::set_session( 'basket', $basket );
|
||||
|
||||
$this->jsonBasketResponse( $basket, $coupon, $lang_id, $basket_transport_method_id );
|
||||
}
|
||||
|
||||
public function basketDecreaseQuantityProduct()
|
||||
{
|
||||
global $lang_id;
|
||||
|
||||
$basket = \Shared\Helpers\Helpers::get_session( 'basket' );
|
||||
$coupon = \Shared\Helpers\Helpers::get_session( 'coupon' );
|
||||
$product_hash = \Shared\Helpers\Helpers::get( 'product_hash' );
|
||||
$basket_transport_method_id = \Shared\Helpers\Helpers::get_session( 'basket-transport-method-id' );
|
||||
|
||||
$basket[ $product_hash ][ 'quantity' ]--;
|
||||
|
||||
if ( $basket[ $product_hash ][ 'quantity' ] < 1 )
|
||||
unset( $basket[ $product_hash ] );
|
||||
|
||||
$basket = (new \Domain\Promotion\PromotionRepository($GLOBALS['mdb']))->findPromotion( $basket );
|
||||
|
||||
\Shared\Helpers\Helpers::set_session( 'basket', $basket );
|
||||
|
||||
$this->jsonBasketResponse( $basket, $coupon, $lang_id, $basket_transport_method_id );
|
||||
}
|
||||
|
||||
public function basketChangeQuantityProduct()
|
||||
{
|
||||
global $lang_id;
|
||||
|
||||
$basket = \Shared\Helpers\Helpers::get_session( 'basket' );
|
||||
$coupon = \Shared\Helpers\Helpers::get_session( 'coupon' );
|
||||
$product_hash = \Shared\Helpers\Helpers::get( 'product_hash' );
|
||||
$basket_transport_method_id = \Shared\Helpers\Helpers::get_session( 'basket-transport-method-id' );
|
||||
|
||||
$basket[ $product_hash ][ 'quantity' ] = (int)\Shared\Helpers\Helpers::get( 'quantity' );
|
||||
|
||||
if ( $basket[ $product_hash ][ 'quantity' ] < 1 )
|
||||
unset( $basket[ $product_hash ] );
|
||||
|
||||
$basket = (new \Domain\Promotion\PromotionRepository($GLOBALS['mdb']))->findPromotion( $basket );
|
||||
|
||||
\Domain\Basket\BasketCalculator::checkProductQuantityInStock( $basket, false );
|
||||
|
||||
$basket = \Shared\Helpers\Helpers::get_session( 'basket' );
|
||||
|
||||
$this->jsonBasketResponse( $basket, $coupon, $lang_id, $basket_transport_method_id );
|
||||
}
|
||||
|
||||
public function productMessageChange()
|
||||
{
|
||||
$basket = \Shared\Helpers\Helpers::get_session( 'basket' );
|
||||
$basket[ \Shared\Helpers\Helpers::get( 'position_code' ) ]['message'] = \Shared\Helpers\Helpers::get( 'product_message' );
|
||||
\Shared\Helpers\Helpers::set_session( 'basket', $basket );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function basketAddProduct()
|
||||
{
|
||||
global $lang_id;
|
||||
$basket = \Domain\Basket\BasketCalculator::validateBasket( \Shared\Helpers\Helpers::get_session( 'basket' ) );
|
||||
$values_tmp = json_decode( \Shared\Helpers\Helpers::get( 'values' ), true );
|
||||
$values = [];
|
||||
$attributes = [];
|
||||
$custom_fields = [];
|
||||
|
||||
foreach( $values_tmp as $key => $val )
|
||||
$values[ $val['name'] ] = $val['value'];
|
||||
|
||||
foreach( $values as $key => $val )
|
||||
{
|
||||
if ( $key != 'product-id' and $key != 'quantity' and $key != 'product-message' and strpos( $key, 'custom_field' ) === false )
|
||||
$attributes[] = $val;
|
||||
}
|
||||
|
||||
foreach( $values as $key => $val )
|
||||
{
|
||||
if ( strpos( $key, 'custom_field' ) !== false )
|
||||
{
|
||||
preg_match( '/\d+/', $key, $matches );
|
||||
$custom_field_id = $matches[0];
|
||||
$custom_fields[ $custom_field_id ] = $val;
|
||||
}
|
||||
}
|
||||
|
||||
if ( \Shared\Helpers\Helpers::is_array_fix( $attributes ) )
|
||||
{
|
||||
$values['parent_id'] = $values[ 'product-id' ];
|
||||
$values['product-id'] = ( new \Domain\Product\ProductRepository( $GLOBALS['mdb'] ) )->getProductIdByAttributes( $values[ 'product-id' ], $attributes );
|
||||
$values['attributes'] = $attributes;
|
||||
}
|
||||
|
||||
$values['wp'] = ( new \Domain\Product\ProductRepository( $GLOBALS['mdb'] ) )->getWeightCached( (int)$values[ 'product-id' ] );
|
||||
|
||||
$attributes_implode = '';
|
||||
if ( is_array( $attributes ) and count( $attributes ) > 0 )
|
||||
$attributes_implode = implode( '|', $attributes );
|
||||
|
||||
$product_code = md5( $values['product-id'] . $attributes_implode . $values['product-message'] . json_encode( $custom_fields ) );
|
||||
|
||||
if ( isset( $basket[ $product_code ] ) )
|
||||
$basket[ $product_code ][ 'quantity' ] += $values[ 'quantity' ];
|
||||
else
|
||||
$basket[ $product_code ] = $values;
|
||||
|
||||
$basket[ $product_code ]['message'] = $values['product-message'];
|
||||
$basket[ $product_code ]['custom_fields'] = $custom_fields;
|
||||
|
||||
$basket = (new \Domain\Promotion\PromotionRepository($GLOBALS['mdb']))->findPromotion( $basket );
|
||||
|
||||
\Shared\Helpers\Helpers::set_session( 'basket', $basket );
|
||||
|
||||
$coupon = \Shared\Helpers\Helpers::get_session( 'coupon' );
|
||||
|
||||
echo json_encode( [
|
||||
'result' => 'ok',
|
||||
'basket_mini_count' => \Domain\Basket\BasketCalculator::countProductsText( \Domain\Basket\BasketCalculator::countProducts( $basket ) ),
|
||||
'basket_mini_value' => \Domain\Basket\BasketCalculator::summaryPrice( $basket, $coupon, $lang_id ),
|
||||
'product_sets' => ( new \Domain\Product\ProductRepository( $GLOBALS['mdb'] ) )->productSetsWhenAddToBasket( (int)$values['product-id'] )
|
||||
] );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function transportMethodInpostCheck()
|
||||
{
|
||||
$transport_id = \Shared\Helpers\Helpers::get_session( 'basket-transport-method-id' );
|
||||
|
||||
if ( $transport_id === '2' or $transport_id === '1' )
|
||||
{
|
||||
if ( !\Shared\Helpers\Helpers::get_session( 'basket-inpost-info' ) )
|
||||
{
|
||||
echo json_encode( [ 'result' => 'bad' ] );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
if ( $transport_id === '9' )
|
||||
{
|
||||
if ( !\Shared\Helpers\Helpers::get_session( 'basket_orlen_point_id' ) )
|
||||
{
|
||||
echo json_encode( [ 'result' => 'bad' ] );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
echo json_encode( [ 'result' => 'ok' ] );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function inpostCheck()
|
||||
{
|
||||
if ( !\Shared\Helpers\Helpers::get_session( 'basket-inpost-info' ) )
|
||||
echo json_encode( [ 'result' => 'bad' ] );
|
||||
else
|
||||
echo json_encode( [ 'result' => 'ok' ] );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function orlenSave()
|
||||
{
|
||||
\Shared\Helpers\Helpers::set_session( 'basket_orlen_point_id', \Shared\Helpers\Helpers::get( 'orlen_point_id' ) );
|
||||
\Shared\Helpers\Helpers::set_session( 'basket_orlen_point_info', \Shared\Helpers\Helpers::get( 'orlen_point_name' ) );
|
||||
echo json_encode( [ 'result' => 'ok' ] );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function inpostSave()
|
||||
{
|
||||
\Shared\Helpers\Helpers::set_session( 'basket-inpost-info', \Shared\Helpers\Helpers::get( 'paczkomat' ) );
|
||||
echo json_encode( [ 'result' => 'ok' ] );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function basketPaymentMethodSet()
|
||||
{
|
||||
\Shared\Helpers\Helpers::set_session( 'basket-payment-method-id', \Shared\Helpers\Helpers::get( 'payment_method_id' ) );
|
||||
echo json_encode( [ 'result' => 'ok' ] );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function basketTransportMethodSet()
|
||||
{
|
||||
\Shared\Helpers\Helpers::set_session( 'basket-transport-method-id', \Shared\Helpers\Helpers::get( 'transport_method_id' ) );
|
||||
echo json_encode( [ 'result' => 'ok' ] );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function basketPaymentsMethods()
|
||||
{
|
||||
\Shared\Helpers\Helpers::set_session( 'basket-transport-method-id', \Shared\Helpers\Helpers::get( 'transport_method_id' ) );
|
||||
|
||||
echo json_encode( [
|
||||
'result' => 'ok',
|
||||
'payment_methods' => \front\Views\ShopPaymentMethod::basketPaymentMethods(
|
||||
$this->paymentMethodRepository->paymentMethodsByTransport( (int)\Shared\Helpers\Helpers::get( 'transport_method_id' ) ),
|
||||
\Shared\Helpers\Helpers::get( 'payment_method_id' )
|
||||
)
|
||||
] );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function summaryView()
|
||||
{
|
||||
global $lang_id, $settings;
|
||||
|
||||
if ( \Domain\Basket\BasketCalculator::checkProductQuantityInStock( \Shared\Helpers\Helpers::get_session( 'basket' ) ) )
|
||||
{
|
||||
header( 'Location: /koszyk' );
|
||||
exit;
|
||||
}
|
||||
|
||||
$client = \Shared\Helpers\Helpers::get_session( 'client' );
|
||||
|
||||
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' ) ),
|
||||
'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' ),
|
||||
'basket_message' => \Shared\Helpers\Helpers::get_session( 'basket_message' )
|
||||
] );
|
||||
}
|
||||
|
||||
public function basketSave()
|
||||
{
|
||||
$client = \Shared\Helpers\Helpers::get_session( 'client' );
|
||||
|
||||
if ( \Domain\Basket\BasketCalculator::checkProductQuantityInStock( \Shared\Helpers\Helpers::get_session( 'basket' ) ) )
|
||||
{
|
||||
header( 'Location: /koszyk' );
|
||||
exit;
|
||||
}
|
||||
|
||||
if ( $order_id = $this->orderRepository->createFromBasket(
|
||||
$client[ 'id' ],
|
||||
\Shared\Helpers\Helpers::get_session( 'basket' ),
|
||||
\Shared\Helpers\Helpers::get_session( 'basket-transport-method-id' ),
|
||||
\Shared\Helpers\Helpers::get_session( 'basket-payment-method-id' ),
|
||||
\Shared\Helpers\Helpers::get( 'email', true ),
|
||||
\Shared\Helpers\Helpers::get( 'phone', true ),
|
||||
\Shared\Helpers\Helpers::get( 'name', true ),
|
||||
\Shared\Helpers\Helpers::get( 'surname', true ),
|
||||
\Shared\Helpers\Helpers::get( 'street' ),
|
||||
\Shared\Helpers\Helpers::get( 'postal_code', true ),
|
||||
\Shared\Helpers\Helpers::get( 'city', true ),
|
||||
\Shared\Helpers\Helpers::get( 'firm_name', true ),
|
||||
\Shared\Helpers\Helpers::get( 'firm_street', true ),
|
||||
\Shared\Helpers\Helpers::get( 'firm_postal_code', true ),
|
||||
\Shared\Helpers\Helpers::get( 'firm_city', true ),
|
||||
\Shared\Helpers\Helpers::get( 'firm_nip', true ),
|
||||
\Shared\Helpers\Helpers::get_session( 'basket-inpost-info' ),
|
||||
\Shared\Helpers\Helpers::get_session( 'basket_orlen_point_id' ),
|
||||
\Shared\Helpers\Helpers::get_session( 'basket_orlen_point_info' ),
|
||||
\Shared\Helpers\Helpers::get_session( 'coupon' ),
|
||||
\Shared\Helpers\Helpers::get_session( 'basket_message' )
|
||||
) )
|
||||
{
|
||||
\Shared\Helpers\Helpers::alert( \Shared\Helpers\Helpers::lang( 'zamowienie-zostalo-zlozone-komunikat' ) );
|
||||
\Shared\Helpers\Helpers::delete_session( 'basket' );
|
||||
\Shared\Helpers\Helpers::delete_session( 'basket-transport-method-id' );
|
||||
\Shared\Helpers\Helpers::delete_session( 'basket-payment-method-id' );
|
||||
\Shared\Helpers\Helpers::delete_session( 'basket-inpost-info' );
|
||||
\Shared\Helpers\Helpers::delete_session( 'basket_orlen_point_id' );
|
||||
\Shared\Helpers\Helpers::delete_session( 'basket_orlen_point_info' );
|
||||
\Shared\Helpers\Helpers::delete_session( 'coupon' );
|
||||
\Shared\Helpers\Helpers::delete_session( 'basket_message' );
|
||||
|
||||
\Shared\Helpers\Helpers::set_session( 'piksel_purchase', true );
|
||||
\Shared\Helpers\Helpers::set_session( 'google-adwords-purchase', true );
|
||||
\Shared\Helpers\Helpers::set_session( 'google-analytics-purchase', true );
|
||||
\Shared\Helpers\Helpers::set_session( 'ekomi-purchase', true );
|
||||
|
||||
$redis = \Shared\Cache\RedisConnection::getInstance() -> getConnection();
|
||||
if ( $redis )
|
||||
$redis -> flushAll();
|
||||
|
||||
header( 'Location: /zamowienie/' . $this->orderRepository->findHashById( $order_id ) );
|
||||
exit;
|
||||
}
|
||||
else
|
||||
{
|
||||
\Shared\Helpers\Helpers::error( \Shared\Helpers\Helpers::lang( 'zamowienie-zostalo-zlozone-komunikat-blad' ) );
|
||||
header( 'Location: /koszyk' );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
public function mainView()
|
||||
{
|
||||
global $lang_id, $page, $settings;
|
||||
|
||||
$page[ 'language' ][ 'meta_title' ] = 'Koszyk';
|
||||
|
||||
$basket = \Shared\Helpers\Helpers::get_session( 'basket' );
|
||||
$coupon = \Shared\Helpers\Helpers::get_session( 'coupon' );
|
||||
$payment_method_id = \Shared\Helpers\Helpers::get_session( 'payment_method_id' );
|
||||
$basket_transport_method_id = \Shared\Helpers\Helpers::get_session( 'basket-transport-method-id' );
|
||||
|
||||
if ( \Domain\Basket\BasketCalculator::checkProductQuantityInStock( $basket ) )
|
||||
{
|
||||
header( 'Location: /koszyk' );
|
||||
exit;
|
||||
}
|
||||
|
||||
$basket = (new \Domain\Promotion\PromotionRepository($GLOBALS['mdb']))->findPromotion( $basket );
|
||||
|
||||
return \Shared\Tpl\Tpl::view( 'shop-basket/basket', [
|
||||
'basket' => $basket,
|
||||
'coupon' => $coupon,
|
||||
'transport_id' => \Shared\Helpers\Helpers::get_session( 'basket-transport-method-id' ),
|
||||
'transport_methods' => \Shared\Tpl\Tpl::view( 'shop-basket/basket-transport-methods', [
|
||||
'transports_methods' => ( new \Domain\Transport\TransportRepository( $GLOBALS['mdb'] ) )->transportMethodsFront( $basket, $coupon ),
|
||||
'transport_id' => $basket_transport_method_id
|
||||
] ),
|
||||
'payment_method_id' => $payment_method_id,
|
||||
'basket_details' => \Shared\Tpl\Tpl::view( 'shop-basket/basket-details', [
|
||||
'basket' => $basket,
|
||||
'lang_id' => $lang_id,
|
||||
'coupon' => $coupon,
|
||||
'basket_message' => \Shared\Helpers\Helpers::get_session( 'basket_message' ),
|
||||
'settings' => $settings
|
||||
] )
|
||||
] );
|
||||
}
|
||||
|
||||
private function jsonBasketResponse( $basket, $coupon, $lang_id, $basket_transport_method_id )
|
||||
{
|
||||
echo json_encode( [
|
||||
'basket' => \Shared\Tpl\Tpl::view( 'shop-basket/basket-details', [
|
||||
'basket' => $basket,
|
||||
'lang_id' => $lang_id,
|
||||
'coupon' => $coupon
|
||||
] ),
|
||||
'basket_mini_count' => \Domain\Basket\BasketCalculator::countProductsText( \Domain\Basket\BasketCalculator::countProducts( $basket ) ),
|
||||
'basket_mini_value' => \Domain\Basket\BasketCalculator::summaryPrice( $basket, $coupon, $lang_id ),
|
||||
'products_count' => count( $basket ),
|
||||
'transport_methods' => \Shared\Tpl\Tpl::view( 'shop-basket/basket-transport-methods', [
|
||||
'transports_methods' => ( new \Domain\Transport\TransportRepository( $GLOBALS['mdb'] ) )->transportMethodsFront( $basket, $coupon ),
|
||||
'transport_id' => $basket_transport_method_id
|
||||
] )
|
||||
] );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
354
autoload/front/Controllers/ShopClientController.php
Normal file
354
autoload/front/Controllers/ShopClientController.php
Normal file
@@ -0,0 +1,354 @@
|
||||
<?php
|
||||
namespace front\Controllers;
|
||||
|
||||
use Domain\Client\ClientRepository;
|
||||
|
||||
class ShopClientController
|
||||
{
|
||||
private $clientRepo;
|
||||
|
||||
public function __construct(ClientRepository $clientRepo)
|
||||
{
|
||||
$this->clientRepo = $clientRepo;
|
||||
}
|
||||
|
||||
public function markAddressAsCurrent()
|
||||
{
|
||||
$client = \Shared\Helpers\Helpers::get_session('client');
|
||||
if (!$client) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$this->clientRepo->markAddressAsCurrent(
|
||||
(int)$client['id'],
|
||||
(int)\Shared\Helpers\Helpers::get('address_id')
|
||||
);
|
||||
exit;
|
||||
}
|
||||
|
||||
public function addressDelete()
|
||||
{
|
||||
$client = \Shared\Helpers\Helpers::get_session('client');
|
||||
if (!$client) {
|
||||
header('Location: /logowanie');
|
||||
exit;
|
||||
}
|
||||
|
||||
$address = $this->clientRepo->addressDetails((int)\Shared\Helpers\Helpers::get('id'));
|
||||
if (!$address || $address['client_id'] != $client['id']) {
|
||||
header('Location: /panel-klienta/adresy');
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($this->clientRepo->addressDelete((int)\Shared\Helpers\Helpers::get('id'))) {
|
||||
\Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang('adres-usuniety-komunikat'));
|
||||
} else {
|
||||
\Shared\Helpers\Helpers::error(\Shared\Helpers\Helpers::lang('adres-usuniety-blad'));
|
||||
}
|
||||
|
||||
header('Location: /panel-klienta/adresy');
|
||||
exit;
|
||||
}
|
||||
|
||||
public function addressEdit()
|
||||
{
|
||||
global $page, $settings;
|
||||
|
||||
$page['language']['meta_title'] = \Shared\Helpers\Helpers::lang('meta-title-edycja-adresu') . ' | ' . $settings['firm_name'];
|
||||
|
||||
$client = \Shared\Helpers\Helpers::get_session('client');
|
||||
if (!$client) {
|
||||
header('Location: /logowanie');
|
||||
exit;
|
||||
}
|
||||
|
||||
$addressId = (int)\Shared\Helpers\Helpers::get('id');
|
||||
$address = $this->clientRepo->addressDetails($addressId);
|
||||
if ($address && $address['client_id'] != $client['id']) {
|
||||
$address = null;
|
||||
}
|
||||
|
||||
return \front\Views\ShopClient::addressEdit([
|
||||
'address' => $address,
|
||||
]);
|
||||
}
|
||||
|
||||
public function addressSave()
|
||||
{
|
||||
$client = \Shared\Helpers\Helpers::get_session('client');
|
||||
if (!$client) {
|
||||
header('Location: /logowanie');
|
||||
exit;
|
||||
}
|
||||
|
||||
$addressId = (int)\Shared\Helpers\Helpers::get('address_id');
|
||||
$data = [
|
||||
'name' => \Shared\Helpers\Helpers::get('name', true),
|
||||
'surname' => \Shared\Helpers\Helpers::get('surname', true),
|
||||
'street' => \Shared\Helpers\Helpers::get('street'),
|
||||
'postal_code' => \Shared\Helpers\Helpers::get('postal_code', true),
|
||||
'city' => \Shared\Helpers\Helpers::get('city', true),
|
||||
'phone' => \Shared\Helpers\Helpers::get('phone', true),
|
||||
];
|
||||
|
||||
if ($this->clientRepo->addressSave((int)$client['id'], $addressId ?: null, $data)) {
|
||||
$msg = $addressId
|
||||
? \Shared\Helpers\Helpers::lang('zmiana-adresu-sukces')
|
||||
: \Shared\Helpers\Helpers::lang('dodawanie-nowego-adresu-sukces');
|
||||
\Shared\Helpers\Helpers::alert($msg);
|
||||
} else {
|
||||
$msg = $addressId
|
||||
? \Shared\Helpers\Helpers::lang('zmiana-adresu-blad')
|
||||
: \Shared\Helpers\Helpers::lang('dodawanie-nowego-adresu-blad');
|
||||
\Shared\Helpers\Helpers::error($msg);
|
||||
}
|
||||
|
||||
header('Location: /panel-klienta/adresy');
|
||||
exit;
|
||||
}
|
||||
|
||||
public function clientAddresses()
|
||||
{
|
||||
global $page, $settings;
|
||||
|
||||
$page['language']['meta_title'] = \Shared\Helpers\Helpers::lang('meta-title-lista-adresow') . ' | ' . $settings['firm_name'];
|
||||
|
||||
$client = \Shared\Helpers\Helpers::get_session('client');
|
||||
if (!$client) {
|
||||
header('Location: /logowanie');
|
||||
exit;
|
||||
}
|
||||
|
||||
return \front\Views\ShopClient::clientAddresses([
|
||||
'client' => $client,
|
||||
'addresses' => $this->clientRepo->clientAddresses((int)$client['id']),
|
||||
]);
|
||||
}
|
||||
|
||||
public function clientOrders()
|
||||
{
|
||||
global $page, $settings;
|
||||
|
||||
$page['language']['meta_title'] = \Shared\Helpers\Helpers::lang('meta-title-historia-zamowien') . ' | ' . $settings['firm_name'];
|
||||
|
||||
$client = \Shared\Helpers\Helpers::get_session('client');
|
||||
if (!$client) {
|
||||
header('Location: /logowanie');
|
||||
exit;
|
||||
}
|
||||
|
||||
return \front\Views\ShopClient::clientOrders([
|
||||
'client' => $client,
|
||||
'orders' => $this->clientRepo->clientOrders((int)$client['id']),
|
||||
'statuses' => ( new \Domain\Order\OrderRepository( $GLOBALS['mdb'] ) )->orderStatuses(),
|
||||
]);
|
||||
}
|
||||
|
||||
public function newPassword()
|
||||
{
|
||||
$result = $this->clientRepo->generateNewPassword(
|
||||
(string)\Shared\Helpers\Helpers::get('hash')
|
||||
);
|
||||
|
||||
if ($result) {
|
||||
$text = $this->buildEmailBody('#nowe-haslo', [
|
||||
'[HASLO]' => $result['password'],
|
||||
]);
|
||||
\Shared\Helpers\Helpers::send_email(
|
||||
$result['email'],
|
||||
\Shared\Helpers\Helpers::lang('nowe-haslo-w-sklepie'),
|
||||
$text
|
||||
);
|
||||
\Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang('nowe-haslo-zostalo-wyslane-na-twoj-adres-email'));
|
||||
}
|
||||
|
||||
header('Location: /logowanie');
|
||||
exit;
|
||||
}
|
||||
|
||||
public function sendEmailPasswordRecovery()
|
||||
{
|
||||
$hash = $this->clientRepo->initiatePasswordRecovery(
|
||||
(string)\Shared\Helpers\Helpers::get('email')
|
||||
);
|
||||
|
||||
if ($hash) {
|
||||
$text = $this->buildEmailBody('#odzyskiwanie-hasla-link', [
|
||||
'[LINK]' => '/shopClient/new_password/hash=' . $hash,
|
||||
]);
|
||||
\Shared\Helpers\Helpers::send_email(
|
||||
(string)\Shared\Helpers\Helpers::get('email'),
|
||||
\Shared\Helpers\Helpers::lang('generowanie-nowego-hasla-w-sklepie'),
|
||||
$text
|
||||
);
|
||||
\Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang('odzyskiwanie-hasla-link-komunikat'));
|
||||
} else {
|
||||
\Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang('odzyskiwanie-hasla-blad'));
|
||||
}
|
||||
|
||||
header('Location: /logowanie');
|
||||
exit;
|
||||
}
|
||||
|
||||
public function recoverPassword()
|
||||
{
|
||||
global $page, $settings;
|
||||
|
||||
$page['language']['meta_title'] = \Shared\Helpers\Helpers::lang('meta-title-odzyskiwanie-hasla') . ' | ' . $settings['firm_name'];
|
||||
|
||||
return \front\Views\ShopClient::recoverPassword();
|
||||
}
|
||||
|
||||
public function logout()
|
||||
{
|
||||
\Shared\Helpers\Helpers::delete_session('client');
|
||||
header('Location: /');
|
||||
exit;
|
||||
}
|
||||
|
||||
public function login()
|
||||
{
|
||||
$result = $this->clientRepo->authenticate(
|
||||
(string)\Shared\Helpers\Helpers::get('email'),
|
||||
(string)\Shared\Helpers\Helpers::get('password')
|
||||
);
|
||||
|
||||
if ($result['status'] === 'inactive') {
|
||||
$link = '<a href="/ponowna-aktywacja/' . $result['hash'] . '/">'
|
||||
. ucfirst(\Shared\Helpers\Helpers::lang('wyslij-link-ponownie')) . '</a>';
|
||||
\Shared\Helpers\Helpers::alert(
|
||||
str_replace('[LINK]', $link, \Shared\Helpers\Helpers::lang('logowanie-blad-nieaktywne-konto'))
|
||||
);
|
||||
header('Location: /logowanie');
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($result['status'] !== 'ok') {
|
||||
\Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang($result['code']));
|
||||
header('Location: /logowanie');
|
||||
exit;
|
||||
}
|
||||
|
||||
\Shared\Helpers\Helpers::set_session('client', $result['client']);
|
||||
\Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang('logowanie-udane'));
|
||||
|
||||
$redirect = \Shared\Helpers\Helpers::get('redirect');
|
||||
header('Location: ' . ($redirect ? $redirect : '/panel-klienta'));
|
||||
exit;
|
||||
}
|
||||
|
||||
public function confirm()
|
||||
{
|
||||
$email = $this->clientRepo->confirmRegistration(
|
||||
(string)\Shared\Helpers\Helpers::get('hash')
|
||||
);
|
||||
|
||||
if ($email) {
|
||||
$text = $this->buildEmailBody('#potwierdzenie-aktywacji-konta');
|
||||
\Shared\Helpers\Helpers::send_email(
|
||||
$email,
|
||||
\Shared\Helpers\Helpers::lang('potwierdzenie-aktywacji-konta-w-sklepie') . ' ' . \Shared\Helpers\Helpers::lang('#nazwa-serwisu'),
|
||||
$text
|
||||
);
|
||||
\Shared\Helpers\Helpers::alert(\Shared\Helpers\Helpers::lang('rejestracja-potwierdzenie'));
|
||||
}
|
||||
|
||||
header('Location: /logowanie');
|
||||
exit;
|
||||
}
|
||||
|
||||
public function signup()
|
||||
{
|
||||
$email = (string)\Shared\Helpers\Helpers::get('email');
|
||||
$password = (string)\Shared\Helpers\Helpers::get('password');
|
||||
|
||||
$created = $this->clientRepo->createClient(
|
||||
$email,
|
||||
$password,
|
||||
(bool)\Shared\Helpers\Helpers::get('agremment_marketing')
|
||||
);
|
||||
|
||||
if (!$created) {
|
||||
echo json_encode([
|
||||
'status' => 'bad',
|
||||
'msg' => \Shared\Helpers\Helpers::lang('rejestracja-email-zajety'),
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
$text = $this->buildEmailBody('#potwierdzenie-rejestracji', [
|
||||
'[LINK]' => '/shopClient/confirm/hash=' . $created['hash'],
|
||||
]);
|
||||
\Shared\Helpers\Helpers::send_email(
|
||||
$email,
|
||||
\Shared\Helpers\Helpers::lang('potwierdzenie-rejestracji-konta-w-sklepie') . ' ' . \Shared\Helpers\Helpers::lang('#nazwa-serwisu'),
|
||||
$text
|
||||
);
|
||||
|
||||
echo json_encode([
|
||||
'status' => 'ok',
|
||||
'msg' => \Shared\Helpers\Helpers::lang('rejestracja-udana'),
|
||||
]);
|
||||
exit;
|
||||
}
|
||||
|
||||
public function loginForm()
|
||||
{
|
||||
global $page, $settings;
|
||||
|
||||
$page['language']['meta_title'] = \Shared\Helpers\Helpers::lang('meta-title-logowanie') . ' | ' . $settings['firm_name'];
|
||||
$page['class'] = 'page-login-form';
|
||||
|
||||
$client = \Shared\Helpers\Helpers::get_session('client');
|
||||
if ($client) {
|
||||
header('Location: /panel-klienta/zamowienia');
|
||||
exit;
|
||||
}
|
||||
|
||||
return \front\Views\ShopClient::loginForm();
|
||||
}
|
||||
|
||||
public function registerForm()
|
||||
{
|
||||
global $page, $settings;
|
||||
|
||||
$page['language']['meta_title'] = \Shared\Helpers\Helpers::lang('meta-title-rejestracja') . ' | ' . $settings['firm_name'];
|
||||
|
||||
$client = \Shared\Helpers\Helpers::get_session('client');
|
||||
if ($client) {
|
||||
header('Location: /panel-klienta/zamowienia');
|
||||
exit;
|
||||
}
|
||||
|
||||
return \front\Views\ShopClient::registerForm();
|
||||
}
|
||||
|
||||
/**
|
||||
* Builds email body from newsletter template with URL absolutization.
|
||||
*
|
||||
* @param array<string, string> $replacements Placeholders to replace in the template
|
||||
*/
|
||||
private function buildEmailBody(string $templateName, array $replacements = []): string
|
||||
{
|
||||
$settings = $GLOBALS['settings'];
|
||||
|
||||
$text = $settings['newsletter_header'];
|
||||
$text .= (new \Domain\Newsletter\NewsletterRepository($GLOBALS['mdb']))->templateByName($templateName);
|
||||
$text .= $settings['newsletter_footer'];
|
||||
|
||||
$base = !empty($settings['ssl']) ? 'https' : 'http';
|
||||
$serverName = $_SERVER['SERVER_NAME'] ?? '';
|
||||
|
||||
$regex = "-(<img[^>]+src\s*=\s*['\"])(((?!'|\"|https?://).)*)(['\"][^>]*>)-i";
|
||||
$text = preg_replace($regex, '$1' . $base . '://' . $serverName . '$2$4', $text);
|
||||
|
||||
$regex = "-(<a[^>]+href\s*=\s*['\"])(((?!'|\"|https?://).)*)(['\"][^>]*>)-i";
|
||||
$text = preg_replace($regex, '$1' . $base . '://' . $serverName . '$2$4', $text);
|
||||
|
||||
foreach ($replacements as $placeholder => $value) {
|
||||
$text = str_replace($placeholder, $value, $text);
|
||||
}
|
||||
|
||||
return $text;
|
||||
}
|
||||
}
|
||||
34
autoload/front/Controllers/ShopCouponController.php
Normal file
34
autoload/front/Controllers/ShopCouponController.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
namespace front\Controllers;
|
||||
|
||||
use Domain\Coupon\CouponRepository;
|
||||
|
||||
class ShopCouponController
|
||||
{
|
||||
private CouponRepository $repository;
|
||||
|
||||
public function __construct( CouponRepository $repository )
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
public function useCoupon()
|
||||
{
|
||||
$coupon = $this->repository->findByName( (string)\Shared\Helpers\Helpers::get( 'coupon' ) );
|
||||
|
||||
if ( $coupon && $this->repository->isAvailable( $coupon ) )
|
||||
\Shared\Helpers\Helpers::set_session( 'coupon', $coupon );
|
||||
else
|
||||
\Shared\Helpers\Helpers::alert( 'Podany kod rabatowy jest nieprawidłowy.' );
|
||||
|
||||
header( 'Location: /koszyk' );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function deleteCoupon()
|
||||
{
|
||||
\Shared\Helpers\Helpers::delete_session( 'coupon' );
|
||||
header( 'Location: /koszyk' );
|
||||
exit;
|
||||
}
|
||||
}
|
||||
148
autoload/front/Controllers/ShopOrderController.php
Normal file
148
autoload/front/Controllers/ShopOrderController.php
Normal file
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
namespace front\Controllers;
|
||||
|
||||
use Domain\Order\OrderRepository;
|
||||
use Domain\Order\OrderAdminService;
|
||||
|
||||
class ShopOrderController
|
||||
{
|
||||
private $repository;
|
||||
private $adminService;
|
||||
|
||||
public function __construct( OrderRepository $repository, OrderAdminService $adminService )
|
||||
{
|
||||
$this->repository = $repository;
|
||||
$this->adminService = $adminService;
|
||||
}
|
||||
|
||||
public function paymentConfirmation()
|
||||
{
|
||||
global $settings;
|
||||
|
||||
$order = $this->repository->orderDetailsFrontend( null, \Shared\Helpers\Helpers::get( 'order_hash' ) );
|
||||
|
||||
return \Shared\Tpl\Tpl::view( 'shop-order/payment-confirmation', [
|
||||
'order' => $order,
|
||||
'settings' => $settings
|
||||
] );
|
||||
}
|
||||
|
||||
public function paymentStatusTpay()
|
||||
{
|
||||
file_put_contents( 'tpay.txt', print_r( $_POST, true ) . print_r( $_GET, true ), FILE_APPEND );
|
||||
|
||||
if ( \Shared\Helpers\Helpers::get( 'tr_status' ) == 'TRUE' && \Shared\Helpers\Helpers::get( 'tr_crc' ) )
|
||||
{
|
||||
$order = $this->repository->findRawByHash( \Shared\Helpers\Helpers::get( 'tr_crc' ) );
|
||||
|
||||
if ( $order && $order['id'] )
|
||||
{
|
||||
$this->adminService->setOrderAsPaid( (int)$order['id'], true );
|
||||
echo 'TRUE';
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
echo 'FALSE';
|
||||
exit;
|
||||
}
|
||||
|
||||
public function paymentStatusPrzelewy24pl()
|
||||
{
|
||||
global $settings;
|
||||
|
||||
$post = [
|
||||
'p24_merchant_id' => \Shared\Helpers\Helpers::get( 'p24_merchant_id' ),
|
||||
'p24_pos_id' => \Shared\Helpers\Helpers::get( 'p24_pos_id' ),
|
||||
'p24_session_id' => \Shared\Helpers\Helpers::get( 'p24_session_id' ),
|
||||
'p24_amount' => \Shared\Helpers\Helpers::get( 'p24_amount' ),
|
||||
'p24_currency' => \Shared\Helpers\Helpers::get( 'p24_currency' ),
|
||||
'p24_order_id' => \Shared\Helpers\Helpers::get( 'p24_order_id' ),
|
||||
'p24_sign' => md5( \Shared\Helpers\Helpers::get( 'p24_session_id' ) . '|' . \Shared\Helpers\Helpers::get( 'p24_order_id' ) . '|' . \Shared\Helpers\Helpers::get( 'p24_amount' ) . '|' . \Shared\Helpers\Helpers::get( 'p24_currency' ) . '|' . $settings['przelewy24_crc_key'] )
|
||||
];
|
||||
|
||||
$ch = curl_init();
|
||||
if ( $settings['przelewy24_sandbox'] )
|
||||
curl_setopt( $ch, CURLOPT_URL, 'https://sandbox.przelewy24.pl/trnVerify' );
|
||||
if ( !$settings['przelewy24_sandbox'] )
|
||||
curl_setopt( $ch, CURLOPT_URL, 'https://secure.przelewy24.pl/trnVerify' );
|
||||
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
|
||||
curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $post ) );
|
||||
$response = curl_exec( $ch );
|
||||
|
||||
$order = $this->repository->findRawByPrzelewy24Hash( \Shared\Helpers\Helpers::get( 'p24_session_id' ) );
|
||||
|
||||
if ( $order && $order['status'] == 0 && $order['summary'] * 100 == \Shared\Helpers\Helpers::get( 'p24_amount' ) )
|
||||
{
|
||||
if ( $order['id'] )
|
||||
{
|
||||
$this->adminService->setOrderAsPaid( (int)$order['id'], true );
|
||||
}
|
||||
}
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
public function paymentStatusHotpay()
|
||||
{
|
||||
global $lang;
|
||||
|
||||
if ( !empty( $_POST["KWOTA"] ) && !empty( $_POST["ID_PLATNOSCI"] ) && !empty( $_POST["ID_ZAMOWIENIA"] ) && !empty( $_POST["STATUS"] ) && !empty( $_POST["SEKRET"] ) && !empty( $_POST["HASH"] ) )
|
||||
{
|
||||
$order = $this->repository->orderDetailsFrontend( (int)$_POST['ID_ZAMOWIENIA'] );
|
||||
|
||||
if ( $order && $order['id'] )
|
||||
{
|
||||
if ( is_array( $order['products'] ) && count( $order['products'] ) ):
|
||||
$summary_tmp = 0;
|
||||
foreach ( $order['products'] as $product ):
|
||||
$product_tmp = ( new \Domain\Product\ProductRepository( $GLOBALS['mdb'] ) )->productDetailsFrontCached( (int)$product['product_id'], $lang['id'] );
|
||||
$summary_tmp += \Shared\Helpers\Helpers::normalize_decimal( $product['price_netto'] + $product['price_netto'] * $product['vat'] / 100 ) * $product['quantity'];
|
||||
endforeach;
|
||||
$summary_tmp += $order['transport_cost'];
|
||||
endif;
|
||||
|
||||
if ( hash( "sha256", "ProjectPro1916;" . round( $summary_tmp, 2 ) . ";" . $_POST["ID_PLATNOSCI"] . ";" . $_POST["ID_ZAMOWIENIA"] . ";" . $_POST["STATUS"] . ";" . $_POST["SEKRET"] ) == $_POST["HASH"] )
|
||||
{
|
||||
if ( $_POST["STATUS"] == "SUCCESS" )
|
||||
{
|
||||
$this->adminService->setOrderAsPaid( (int)$order['id'], true );
|
||||
|
||||
echo \Shared\Helpers\Helpers::lang( 'zamowienie-zostalo-oplacone' );
|
||||
}
|
||||
else if ( $_POST["STATUS"] == "FAILURE" )
|
||||
{
|
||||
$this->adminService->changeStatus( (int)$order['id'], 2, true );
|
||||
|
||||
echo \Shared\Helpers\Helpers::lang( 'platnosc-zostala-odrzucona' );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->adminService->changeStatus( (int)$order['id'], 3, true );
|
||||
|
||||
echo \Shared\Helpers\Helpers::lang( 'zamowienie-zostalo-oplacone-reczne' );
|
||||
}
|
||||
}
|
||||
}
|
||||
exit;
|
||||
}
|
||||
|
||||
public function orderDetails()
|
||||
{
|
||||
global $page, $settings;
|
||||
|
||||
$page['language']['meta_title'] = \Shared\Helpers\Helpers::lang( 'meta-title-szczegoly-zamowienia' ) . ' | ' . $settings['firm_name'];
|
||||
$order = $this->repository->orderDetailsFrontend(
|
||||
$this->repository->findIdByHash( \Shared\Helpers\Helpers::get( 'order_hash' ) )
|
||||
);
|
||||
$coupon = (int)$order['coupon_id'] ? ( new \Domain\Coupon\CouponRepository( $GLOBALS['mdb'] ) )->find( (int)$order['coupon_id'] ) : null;
|
||||
|
||||
return \Shared\Tpl\Tpl::view( 'shop-order/order-details', [
|
||||
'order' => $order,
|
||||
'coupon' => $coupon,
|
||||
'client' => \Shared\Helpers\Helpers::get_session( 'client' ),
|
||||
'settings' => $settings
|
||||
] );
|
||||
}
|
||||
}
|
||||
62
autoload/front/Controllers/ShopProducerController.php
Normal file
62
autoload/front/Controllers/ShopProducerController.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
namespace front\Controllers;
|
||||
|
||||
use Domain\Producer\ProducerRepository;
|
||||
|
||||
class ShopProducerController
|
||||
{
|
||||
private ProducerRepository $repository;
|
||||
|
||||
public function __construct( ProducerRepository $repository )
|
||||
{
|
||||
$this->repository = $repository;
|
||||
}
|
||||
|
||||
public function products()
|
||||
{
|
||||
global $page, $lang_id;
|
||||
|
||||
$producerId = (int)\Shared\Helpers\Helpers::get( 'producer_id' );
|
||||
$producer = $this->repository->findForFrontend( $producerId, $lang_id );
|
||||
|
||||
if ( !$producer )
|
||||
return '';
|
||||
|
||||
$page['show_title'] = true;
|
||||
$page['language']['title'] = $producer['name'];
|
||||
|
||||
$bs = (int)\Shared\Helpers\Helpers::get( 'bs' );
|
||||
$results = $this->repository->producerProducts( $producer['id'], 12, $bs ?: 1 );
|
||||
|
||||
$pager = '';
|
||||
if ( $results['ls'] > 1 )
|
||||
{
|
||||
$pager = \Shared\Tpl\Tpl::view( 'site/pager', [
|
||||
'ls' => $results['ls'],
|
||||
'bs' => $bs ?: 1,
|
||||
'page' => $page,
|
||||
'link' => 'producent/' . \Shared\Helpers\Helpers::seo( $producer['name'] )
|
||||
] );
|
||||
}
|
||||
|
||||
return \Shared\Tpl\Tpl::view( 'shop-producer/products', [
|
||||
'producer' => $producer,
|
||||
'products' => $results['products'],
|
||||
'pager' => $pager
|
||||
] );
|
||||
}
|
||||
|
||||
public function list()
|
||||
{
|
||||
global $page;
|
||||
|
||||
$page['show_title'] = true;
|
||||
$page['language']['title'] = 'Producenci';
|
||||
|
||||
$producers = $this->repository->allActiveProducers();
|
||||
|
||||
return \Shared\Tpl\Tpl::view( 'shop-producer/list', [
|
||||
'producers' => $producers
|
||||
] );
|
||||
}
|
||||
}
|
||||
116
autoload/front/Controllers/ShopProductController.php
Normal file
116
autoload/front/Controllers/ShopProductController.php
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
namespace front\Controllers;
|
||||
|
||||
class ShopProductController
|
||||
{
|
||||
private $categoryRepository;
|
||||
|
||||
public function __construct( \Domain\Category\CategoryRepository $categoryRepository )
|
||||
{
|
||||
$this->categoryRepository = $categoryRepository;
|
||||
}
|
||||
|
||||
public function lazyLoadingProducts()
|
||||
{
|
||||
global $lang_id;
|
||||
|
||||
$output = '';
|
||||
$categoryId = (int)\Shared\Helpers\Helpers::get( 'category_id' );
|
||||
$products_ids = $this->categoryRepository->productsId(
|
||||
$categoryId,
|
||||
$this->categoryRepository->getCategorySort( $categoryId ),
|
||||
$lang_id,
|
||||
8,
|
||||
(int)\Shared\Helpers\Helpers::get( 'offset' )
|
||||
);
|
||||
|
||||
$productRepo = new \Domain\Product\ProductRepository( $GLOBALS['mdb'] );
|
||||
if ( is_array( $products_ids ) ): foreach ( $products_ids as $product_id ):
|
||||
$output .= \Shared\Tpl\Tpl::view( 'shop-product/product-mini', [
|
||||
'product' => $productRepo->findCached( $product_id, $lang_id )
|
||||
] );
|
||||
endforeach;
|
||||
endif;
|
||||
|
||||
echo json_encode( [ 'html' => $output ] );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function warehouseMessage()
|
||||
{
|
||||
global $lang_id;
|
||||
|
||||
$values = json_decode( \Shared\Helpers\Helpers::get( 'values' ), true );
|
||||
|
||||
$attributes = [];
|
||||
foreach ( $values as $key => $val )
|
||||
{
|
||||
if ( $key != 'product-id' and $key != 'quantity' )
|
||||
$attributes[] = $val;
|
||||
}
|
||||
|
||||
$productRepo = new \Domain\Product\ProductRepository( $GLOBALS['mdb'] );
|
||||
$permutation = self::getPermutation( $attributes );
|
||||
$quantity = self::getPermutationQuantity( $values['product-id'], $permutation );
|
||||
global $settings;
|
||||
|
||||
$result = [];
|
||||
if ( $quantity )
|
||||
{
|
||||
$msg = $productRepo->getWarehouseMessageNonzero( (int)$values['product-id'], $lang_id );
|
||||
if ( $msg )
|
||||
$result = [ 'msg' => $msg, 'quantity' => $quantity ];
|
||||
else if ( isset( $settings[ 'warehouse_message_nonzero_' . $lang_id ] ) && $settings[ 'warehouse_message_nonzero_' . $lang_id ] )
|
||||
$result = [ 'msg' => $settings[ 'warehouse_message_nonzero_' . $lang_id ], 'quantity' => $quantity ];
|
||||
}
|
||||
else
|
||||
{
|
||||
$msg = $productRepo->getWarehouseMessageZero( (int)$values['product-id'], $lang_id );
|
||||
if ( $msg )
|
||||
$result = [ 'msg' => $msg, 'quantity' => $quantity ];
|
||||
else if ( isset( $settings[ 'warehouse_message_zero_' . $lang_id ] ) && $settings[ 'warehouse_message_zero_' . $lang_id ] )
|
||||
$result = [ 'msg' => $settings[ 'warehouse_message_zero_' . $lang_id ], 'quantity' => $quantity ];
|
||||
}
|
||||
|
||||
echo json_encode( $result );
|
||||
exit;
|
||||
}
|
||||
|
||||
public function drawProductAttributes()
|
||||
{
|
||||
global $lang_id;
|
||||
|
||||
$combination = '';
|
||||
$selected_values = \Shared\Helpers\Helpers::get( 'selected_values' );
|
||||
|
||||
foreach ( $selected_values as $value )
|
||||
{
|
||||
$combination .= $value;
|
||||
if ( $value != end( $selected_values ) )
|
||||
$combination .= '|';
|
||||
}
|
||||
|
||||
$product_id = \Shared\Helpers\Helpers::get( 'product_id' );
|
||||
$productRepo = new \Domain\Product\ProductRepository( $GLOBALS['mdb'] );
|
||||
$product = $productRepo->findCached( $product_id, $lang_id );
|
||||
$product_data = $productRepo->getProductDataBySelectedAttributes( $product, $combination );
|
||||
|
||||
echo json_encode( [ 'product_data' => $product_data ] );
|
||||
exit;
|
||||
}
|
||||
|
||||
private static function getPermutation( $attributes )
|
||||
{
|
||||
if ( !is_array( $attributes ) || !count( $attributes ) ) return null;
|
||||
return implode( '|', $attributes );
|
||||
}
|
||||
|
||||
private static function getPermutationQuantity( $productId, $permutation )
|
||||
{
|
||||
global $mdb;
|
||||
if ( !$permutation ) return $mdb->get( 'pp_shop_products', 'quantity', [ 'id' => $productId ] );
|
||||
$qty = $mdb->get( 'pp_shop_products', 'quantity', [ 'AND' => [ 'parent_id' => $productId, 'permutation_hash' => $permutation ] ] );
|
||||
if ( $qty !== null ) return $qty;
|
||||
return $mdb->get( 'pp_shop_products', 'quantity', [ 'id' => $productId ] );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user