259 lines
11 KiB
PHP
259 lines
11 KiB
PHP
<?php
|
|
|
|
/**
|
|
* SOTESHOP/stDelivery
|
|
*
|
|
* Ten plik należy do aplikacji stDelivery opartej na licencji (Professional License SOTE).
|
|
* Nie zmieniaj tego pliku, jeśli chcesz korzystać z automatycznych aktualizacji oprogramowania.
|
|
* Jeśli chcesz wprowadzać swoje modyfikacje do programu, zapoznaj się z dokumentacją, jak zmieniać
|
|
* oprogramowanie bez zmiany kodu bazowego http://www.sote.pl/modifications
|
|
*
|
|
* @package stDeliveryPlugin
|
|
* @subpackage actions
|
|
* @copyright SOTE (www.sote.pl)
|
|
* @license http://www.sote.pl/license/sote (Professional License SOTE)
|
|
* @version $Id: actions.class.php 312 2009-09-04 14:28:53Z marcin $
|
|
*/
|
|
|
|
/**
|
|
* Akcje komponentu produktu
|
|
*
|
|
* @author Marcin Butlak <marcin.butlak@sote.pl>
|
|
*
|
|
* @package stDeliveryPlugin
|
|
* @subpackage actions
|
|
*/
|
|
class stDeliveryFrontendActions extends stActions
|
|
{
|
|
protected $choosePickupPointParameters = [];
|
|
|
|
public function executeFetchPickupPoints()
|
|
{
|
|
$delivery = DeliveryPeer::retrieveByPK($this->getRequestParameter('id'));
|
|
$pickupPoints = $delivery->getService()->getPickupPoints($this->getRequestParameter('address'));
|
|
|
|
return $this->renderJSON($pickupPoints);
|
|
}
|
|
|
|
public function executeChoosePickupPoint()
|
|
{
|
|
$delivery = DeliveryPeer::retrieveByPK($this->getRequestParameter('id'));
|
|
$country = CountriesPeer::retrieveById($this->getRequestParameter('country_id'));
|
|
$pickupPoint = stDeliveryTypePickupPoint::createFromArray($this->getRequestParameter('pickup_point'));
|
|
$frontendDelivery = stDeliveryFrontend::getInstance($this->getUser()->getBasket());
|
|
|
|
$this->choosePickupPointParameters = [
|
|
'delivery_id' => $delivery->getId(),
|
|
'country' => $country->getId(),
|
|
'weekend_delivery' => $frontendDelivery->getWeekendDelivery() && $delivery->getIsWeekendDelivery(),
|
|
'express_delivery' => $frontendDelivery->getExpressDelivery() && $delivery->getIsExpressDelivery(),
|
|
'pickup_point' => json_encode($pickupPoint),
|
|
'cod' => $this->getRequestParameter('cod', false),
|
|
];
|
|
|
|
$serviceSmarty = new stSmarty($delivery->getService()->getConfiguration()->getFrontendModule());
|
|
|
|
$serviceSmarty->assign('service', $delivery->getService());
|
|
$serviceSmarty->assign('delivery', $delivery);
|
|
$serviceSmarty->assign('pickup_point', $pickupPoint);
|
|
$serviceSmarty->assign('cod', $this->getRequestParameter('cod'));
|
|
$serviceSmarty->assign('country', $country);
|
|
$serviceSmarty->register_function('pickup_point_url', [$this, 'getChoosePickupPointUrl']);
|
|
|
|
return $this->renderText($serviceSmarty->fetch('choose_delivery_point.html'));
|
|
}
|
|
|
|
public function getChoosePickupPointUrl(array $parameters): string
|
|
{
|
|
$url = $this->getController()->genUrl($parameters['internal_url']);
|
|
|
|
return $url . '?' . http_build_query($this->choosePickupPointParameters, '', '&');
|
|
}
|
|
|
|
public function executeAjaxWeekendDeliveryUpdate()
|
|
{
|
|
$basket = stBasket::getInstance($this->getUser());
|
|
|
|
$delivery = stDeliveryFrontend::getInstance($basket);
|
|
|
|
$delivery->setWeekendDelivery($this->getRequestParameter('weekend_delivery'));
|
|
|
|
$basket_params = array('basket' => $basket);
|
|
|
|
$this->responseUpdateElement('shopping-cart-summary', array('module' => 'stDeliveryFrontend', 'component' => 'basketSummary', 'params' => $basket_params));
|
|
$this->responseEvalJs('jQuery(window).resize()');
|
|
|
|
return $this->renderResponse();
|
|
}
|
|
|
|
public function executeAjaxExpressDeliveryUpdate()
|
|
{
|
|
$basket = stBasket::getInstance($this->getUser());
|
|
|
|
$delivery = stDeliveryFrontend::getInstance($basket);
|
|
|
|
$delivery->setExpressDelivery($this->getRequestParameter('express_delivery'));
|
|
|
|
$basket_params = array('basket' => $basket);
|
|
|
|
$this->responseUpdateElement('shopping-cart-summary', array('module' => 'stDeliveryFrontend', 'component' => 'basketSummary', 'params' => $basket_params));
|
|
$this->responseEvalJs('jQuery(window).resize()');
|
|
|
|
return $this->renderResponse();
|
|
}
|
|
/**
|
|
* Aktualizowanie dostawy za pomocą Ajax
|
|
*/
|
|
public function executeAjaxDeliveryCountryUpdate()
|
|
{
|
|
$this->check404();
|
|
|
|
$basket = stBasket::getInstance($this->getUser());
|
|
|
|
$delivery = stDeliveryFrontend::getInstance($basket);
|
|
|
|
// $delivery->clearSession();
|
|
|
|
$country_id = $this->getRequestParameter('id', $this->getRequestParameter('delivery[country]'));
|
|
|
|
stTax::setIsCustomerEuTaxEnabled($this->getRequestParameter('client_type') == UserData::CUSTOMER_TYPE);
|
|
|
|
$delivery->setDefaultDeliveryCountry($country_id);
|
|
|
|
$this->getUser()->setVatEx(stTax::hasEx($country_id));
|
|
|
|
$basket->refresh();
|
|
|
|
$basket->save();
|
|
|
|
$basket_params = array('basket' => $basket, 'basket_config' => stConfig::getInstance('stBasket'), 'config_points' => stConfig::getInstance('stPointsBackend'));
|
|
|
|
if ($this->getTheme()->getVersion() < 7)
|
|
{
|
|
$this->responseUpdateElement('basket_products_table', array('module' => 'stBasket', 'partial' => 'product_list', 'params' => $basket_params));
|
|
$this->responseUpdateElement('st_basket-delivery', array('module' => 'stDeliveryFrontend', 'component' => 'basketDeliveryList', 'params' => $basket_params));
|
|
$this->responseUpdateElement('st_basket-payment', array('module' => 'stDeliveryFrontend', 'component' => 'basketPaymentList', 'params' => $basket_params));
|
|
$this->responseUpdateElement('st_basket-summary', array('module' => 'stDeliveryFrontend', 'component' => 'basketSummary', 'params' => $basket_params));
|
|
}
|
|
else
|
|
{
|
|
$this->responseUpdateElement('#shopping-cart .items', array('module' => 'stBasket', 'partial' => 'product_list', 'params' => $basket_params));
|
|
$this->responseUpdateElement('shopping-cart-delivery', array('module' => 'stDeliveryFrontend', 'component' => 'basketDeliveryList', 'params' => $basket_params));
|
|
$this->responseUpdateElement('shopping-cart-payment', array('module' => 'stDeliveryFrontend', 'component' => 'basketPaymentList', 'params' => $basket_params));
|
|
$this->responseUpdateElement('shopping-cart-summary', array('module' => 'stDeliveryFrontend', 'component' => 'basketSummary', 'params' => $basket_params));
|
|
$this->responseUpdateElement('weekend-delivery', array('module' => 'stDeliveryFrontend', 'component' => 'weekendDelivery', 'params' => $basket_params));
|
|
$this->responseUpdateElement('express-delivery', array('module' => 'stDeliveryFrontend', 'component' => 'expressDelivery', 'params' => $basket_params));
|
|
$this->responseEvalJs('jQuery(window).resize()');
|
|
}
|
|
|
|
if ($this->getUser()->isAnonymous())
|
|
{
|
|
$this->responseEvalJs("stUser.updateAnonymousForms($country_id)");
|
|
}
|
|
else
|
|
{
|
|
$this->responseEvalJs("stUser.updateAnonymousForms($country_id)");
|
|
|
|
$this->responseUpdateElement('user_delivery_profile_container', array('module' => 'stUserData', 'component' => 'profileList', 'params' => array(
|
|
'country_id' => $country_id,
|
|
'type' => 'delivery',
|
|
'selected' => false
|
|
)));
|
|
}
|
|
|
|
$this->updateHiddenFields($delivery);
|
|
|
|
return $this->renderResponse();
|
|
}
|
|
|
|
/**
|
|
* Aktualizowanie dostawy za pomocą Ajax
|
|
*/
|
|
public function executeAjaxDeliveryUpdate()
|
|
{
|
|
$this->check404();
|
|
|
|
$basket = stBasket::getInstance($this->getUser());
|
|
|
|
$delivery = stDeliveryFrontend::getInstance($basket);
|
|
|
|
// $delivery->clearSession();
|
|
|
|
$delivery->setDefaultDelivery($this->getRequestParameter('id', $this->getRequestParameter('delivery[default_delivery]')));
|
|
|
|
$basket_params = array('basket' => $basket);
|
|
|
|
if ($this->getTheme()->getVersion() < 7)
|
|
{
|
|
$this->responseUpdateElement('st_basket-payment', array('module' => 'stDeliveryFrontend', 'component' => 'basketPaymentList', 'params' => $basket_params));
|
|
$this->responseUpdateElement('st_basket-summary', array('module' => 'stDeliveryFrontend', 'component' => 'basketSummary', 'params' => $basket_params));
|
|
}
|
|
else
|
|
{
|
|
$this->responseUpdateElement('shopping-cart-payment', array('module' => 'stDeliveryFrontend', 'component' => 'basketPaymentList', 'params' => $basket_params));
|
|
$this->responseUpdateElement('shopping-cart-summary', array('module' => 'stDeliveryFrontend', 'component' => 'basketSummary', 'params' => $basket_params));
|
|
$this->responseUpdateElement('weekend-delivery', array('module' => 'stDeliveryFrontend', 'component' => 'weekendDelivery', 'params' => $basket_params));
|
|
$this->responseUpdateElement('express-delivery', array('module' => 'stDeliveryFrontend', 'component' => 'expressDelivery', 'params' => $basket_params));
|
|
$this->responseEvalJs('jQuery(window).resize()');
|
|
}
|
|
|
|
$this->updateHiddenFields($delivery);
|
|
|
|
return $this->renderResponse();
|
|
}
|
|
|
|
public function executeAjaxPaymentUpdate()
|
|
{
|
|
$this->check404();
|
|
|
|
$basket = stBasket::getInstance($this->getUser());
|
|
|
|
$delivery = stDeliveryFrontend::getInstance($basket);
|
|
|
|
$delivery->getDefaultDelivery()->setDefaultPayment($this->getRequestParameter('id', $this->getRequestParameter('delivery[default_payment]')));
|
|
|
|
$basket_params = array('basket' => $basket);
|
|
|
|
if ($this->getTheme()->getVersion() < 7)
|
|
{
|
|
$this->responseUpdateElement('st_basket-summary', array('module' => 'stDeliveryFrontend', 'component' => 'basketSummary', 'params' => $basket_params));
|
|
}
|
|
else
|
|
{
|
|
$this->responseUpdateElement('shopping-cart-summary', array('module' => 'stDeliveryFrontend', 'component' => 'basketSummary', 'params' => $basket_params));
|
|
$this->responseEvalJs('jQuery(window).resize()');
|
|
}
|
|
|
|
$this->updateHiddenFields($delivery);
|
|
|
|
return $this->renderResponse();
|
|
}
|
|
|
|
public function check404()
|
|
{
|
|
|
|
if (!$this->getRequest()->isXmlHttpRequest() && $this->getController()->getRenderMode() != sfView::RENDER_VAR)
|
|
{
|
|
|
|
$this->getResponse()->setStatusCode(404);
|
|
|
|
$this->getResponse()->setHttpHeader('Status', '404 Not Found');
|
|
|
|
sfContext::getInstance()->getResponse()->addMeta('robots', "noindex");
|
|
|
|
return $this->forward('stErrorFrontend', 'error404');
|
|
}
|
|
}
|
|
|
|
protected function updateHiddenFields(stDeliveryFrontend $delivery)
|
|
{
|
|
$deliveryId = $delivery->getDefaultDelivery()->getId();
|
|
$paymentId = $delivery->getDefaultDelivery()->getDefaultPayment()->getId();
|
|
$deliveryCountryId = $delivery->getDefaultDeliveryCountry()->getId();
|
|
|
|
$this->responseEvalJs("jQuery('#payment_id').val($paymentId)");
|
|
$this->responseEvalJs("jQuery('#delivery_id').val($deliveryId)");
|
|
$this->responseEvalJs("jQuery('#delivery_country_id').val($deliveryCountryId)");
|
|
}
|
|
}
|