* * @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)"); } }