Пример #1
0
 protected function _processCarrier()
 {
     if (!$this->isOpcModuleActive()) {
         return parent::_processCarrier();
     }
     $reset = false;
     if (!$this->context->customer->id) {
         $reset = true;
     }
     if ($reset) {
         $this->context->customer->id = 1;
     }
     // hocijaka nenulova hodnota na osalenie _processCarrier v parentovi
     $_POST['delivery_option'][$this->context->cart->id_address_delivery] = Cart::desintifier(Tools::getValue("id_carrier"));
     $this->context->cart->id_carrier = Cart::desintifier(Tools::getValue("id_carrier"), '');
     $result = parent::_processCarrier();
     if ($reset) {
         $this->context->customer->id = null;
     }
     return $result;
 }
 protected function _processCarrier()
 {
     $this->context->cart->recyclable = (int) Tools::getValue('recyclable');
     $this->context->cart->gift = (int) Tools::getValue('gift');
     if ((int) Tools::getValue('gift')) {
         if (!Validate::isMessage($_POST['gift_message'])) {
             $this->errors[] = Tools::displayError('Invalid gift message.');
         } else {
             $this->context->cart->gift_message = strip_tags($_POST['gift_message']);
         }
     }
     if (isset($this->context->customer->id) && $this->context->customer->id) {
         $address = new Address((int) $this->context->cart->id_address_delivery);
         if (!($id_zone = Address::getZoneById($address->id))) {
             $this->errors[] = Tools::displayError('No zone matches your address.');
         }
     } else {
         $id_zone = Country::getIdZone((int) Configuration::get('PS_COUNTRY_DEFAULT'));
     }
     if (Tools::getIsset('delivery_option')) {
         if ($this->validateDeliveryOption(Tools::getValue('delivery_option'))) {
             $this->context->cart->setDeliveryOption(Tools::getValue('delivery_option'));
         }
     } elseif (Tools::getIsset('id_carrier')) {
         // For retrocompatibility reason, try to transform carrier to an delivery option list
         $delivery_option_list = $this->context->cart->getDeliveryOptionList();
         if (count($delivery_option_list) == 1) {
             $delivery_option = reset($delivery_option_list);
             $key = Cart::desintifier(Tools::getValue('id_carrier'));
             foreach ($delivery_option_list as $id_address => $options) {
                 if (isset($options[$key])) {
                     $this->context->cart->id_carrier = (int) Tools::getValue('id_carrier');
                     $this->context->cart->setDeliveryOption(array($id_address => $key));
                     if (isset($this->context->cookie->id_country)) {
                         unset($this->context->cookie->id_country);
                     }
                     if (isset($this->context->cookie->id_state)) {
                         unset($this->context->cookie->id_state);
                     }
                 }
             }
         }
     }
     Hook::exec('actionCarrierProcess', array('cart' => $this->context->cart));
     if (!$this->context->cart->update()) {
         return false;
     }
     // Carrier has changed, so we check if the cart rules still apply
     CartRule::autoRemoveFromCart($this->context);
     CartRule::autoAddToCart($this->context);
     return true;
 }
Пример #3
0
 public function requestItems($data)
 {
     $delivery = array();
     $items = $data->cart->items;
     if (isset($data->cart->delivery->address)) {
         $delivery = $data->cart->delivery->address;
     }
     if (count($items)) {
         if ($delivery) {
             $d = $this->addData($data, true, 'cart');
             $address = $d['address'];
         } else {
             $d = $this->addData($data, false, 'cart');
         }
         $cart = $d['cart'];
         $tovar = array();
         foreach ($items as $item) {
             $id_a = null;
             $id = explode('c', $item->offerId);
             $product = new Product($id[0], true, $this->context->cookie->id_lang);
             if (isset($id[1])) {
                 $id_a = (int) $id[1];
             }
             $count_shop = StockAvailable::getQuantityAvailableByProduct($product->id, $id_a);
             if (!$product->active || $count_shop < (int) $item->count) {
                 continue;
             }
             $count = min($count_shop, (int) $item->count);
             if ($id_a) {
                 $comb = new Combination($id_a);
                 if ($count < $comb->minimal_quantity) {
                     continue;
                 }
             } elseif ($count < $product->minimal_quantity) {
                 continue;
             }
             $price = Product::getPriceStatic($product->id, null, $id_a);
             $result = $cart->updateQty((int) $item->count, (int) $id[0], $id_a);
             $total = Tools::ps_round($price, 2);
             if ($result) {
                 $tovar[] = array('feedId' => $item->feedId, 'offerId' => $item->offerId, 'price' => $total, 'count' => (int) $count, 'delivery' => true);
                 $cart->update();
             }
         }
         $dost = array();
         $pm = array();
         $types = unserialize(Configuration::get('YA_POKUPKI_CARRIER_SERIALIZE'));
         foreach ($cart->simulateCarriersOutput() as $k => $d) {
             $id = str_replace(',', '', Cart::desintifier($d['id_carrier']));
             $type = isset($types[$id]) ? $types[$id] : 'POST';
             $dost[$k] = array('id' => $id, 'serviceName' => $d['name'], 'type' => $type, 'price' => $d['price'], 'dates' => array('fromDate' => date('d-m-Y'), 'toDate' => date('d-m-Y')));
             if ($type == 'PICKUP') {
                 $outlets = $this->getOutlets();
                 $dost[$k] = array_merge($dost[$k], $outlets['json']);
             }
         }
         if (Configuration::get('YA_POKUPKI_PREDOPLATA_YANDEX')) {
             $pm[] = 'YANDEX';
         }
         if (Configuration::get('YA_POKUPKI_PREDOPLATA_SHOP_PREPAID')) {
             $pm[] = 'SHOP_PREPAID';
         }
         if (Configuration::get('YA_POKUPKI_POSTOPLATA_CASH_ON_DELIVERY')) {
             $pm[] = 'CASH_ON_DELIVERY';
         }
         if (Configuration::get('YA_POKUPKI_POSTOPLATA_CARD_ON_DELIVERY')) {
             $pm[] = 'CARD_ON_DELIVERY';
         }
         $array = array('cart' => array('items' => $tovar, 'deliveryOptions' => $dost, 'paymentMethods' => $pm));
         $cart->delete();
         $this->context->cookie->logout();
         if ($delivery) {
             $address->delete();
         }
         die(Tools::jsonEncode($array));
     }
 }
Пример #4
0
 /**
  * Assign template vars related to page content
  * @see FrontController::initContent()
  */
 public function initContent()
 {
     parent::initContent();
     /* id_carrier is not defined in database before choosing a carrier, set it to a default one to match a potential cart _rule */
     if (empty($this->context->cart->id_carrier)) {
         $checked = $this->context->cart->simulateCarrierSelectedOutput();
         $checked = (int) Cart::desintifier($checked);
         $this->context->cart->id_carrier = $checked;
         $this->context->cart->update();
         CartRule::autoRemoveFromCart($this->context);
         CartRule::autoAddToCart($this->context);
     }
     // SHOPPING CART
     $this->_assignSummaryInformations();
     // WRAPPING AND TOS
     $this->_assignWrappingAndTOS();
     $selectedCountry = (int) Configuration::get('PS_COUNTRY_DEFAULT');
     if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES')) {
         $countries = Carrier::getDeliveredCountries($this->context->language->id, true, true);
     } else {
         $countries = Country::getCountries($this->context->language->id, true);
     }
     // If a rule offer free-shipping, force hidding shipping prices
     $free_shipping = false;
     foreach ($this->context->cart->getCartRules() as $rule) {
         if ($rule['free_shipping'] && !$rule['carrier_restriction']) {
             $free_shipping = true;
             break;
         }
     }
     $this->context->smarty->assign(array('free_shipping' => $free_shipping, 'isGuest' => isset($this->context->cookie->is_guest) ? $this->context->cookie->is_guest : 0, 'countries' => $countries, 'sl_country' => isset($selectedCountry) ? $selectedCountry : 0, 'PS_GUEST_CHECKOUT_ENABLED' => Configuration::get('PS_GUEST_CHECKOUT_ENABLED'), 'errorCarrier' => Tools::displayError('You must choose a carrier.', false), 'errorTOS' => Tools::displayError('You must accept the Terms of Service.', false), 'isPaymentStep' => (bool) (isset($_GET['isPaymentStep']) && $_GET['isPaymentStep']), 'genders' => Gender::getGenders(), 'one_phone_at_least' => (int) Configuration::get('PS_ONE_PHONE_AT_LEAST'), 'HOOK_CREATE_ACCOUNT_FORM' => Hook::exec('displayCustomerAccountForm'), 'HOOK_CREATE_ACCOUNT_TOP' => Hook::exec('displayCustomerAccountFormTop')));
     $years = Tools::dateYears();
     $months = Tools::dateMonths();
     $days = Tools::dateDays();
     $this->context->smarty->assign(array('years' => $years, 'months' => $months, 'days' => $days));
     /* Load guest informations */
     if ($this->isLogged && $this->context->cookie->is_guest) {
         $this->context->smarty->assign('guestInformations', $this->_getGuestInformations());
     }
     // ADDRESS
     if ($this->isLogged) {
         $this->_assignAddress();
     }
     // CARRIER
     $this->_assignCarrier();
     // PAYMENT
     $this->_assignPayment();
     Tools::safePostVars();
     $blocknewsletter = Module::getInstanceByName('blocknewsletter');
     $this->context->smarty->assign('newsletter', (bool) ($blocknewsletter && $blocknewsletter->active));
     $this->_processAddressFormat();
     $this->setTemplate(_PS_THEME_DIR_ . 'order-opc.tpl');
 }
 public function displayTabContent($id)
 {
     $partner = new Partner();
     $order_ya_db = $this->getYandexOrderById($id);
     $html = '';
     if ($order_ya_db['id_market_order']) {
         $ya_order = $partner->getOrder($order_ya_db['id_market_order']);
         $types = unserialize(Configuration::get('YA_POKUPKI_CARRIER_SERIALIZE'));
         $state = $ya_order->order->status;
         $st = array('PROCESSING', 'DELIVERY', 'PICKUP');
         // Tools::d($ya_order);
         if (!in_array($state, $st)) {
             return false;
         }
         $this->context->controller->AddJS($this->_path . '/views/js/back.js');
         $this->context->controller->AddCss($this->_path . '/views/css/back.css');
         $order = new Order($id);
         $cart = new Cart($order->id_cart);
         $carriers = $cart->simulateCarriersOutput();
         $html = '';
         $i = 1;
         $tmp = array();
         $tmp[0]['id_carrier'] = 0;
         $tmp[0]['name'] = $this->l('-- Please select carrier --');
         foreach ($carriers as $c) {
             $id = str_replace(',', '', Cart::desintifier($c['id_carrier']));
             $type = isset($types[$id]) ? $types[$id] : 'POST';
             if (!Configuration::get('YA_MARKET_SET_ROZNICA') && $type == 'PICKUP') {
                 continue;
             }
             $tmp[$i]['id_carrier'] = $id;
             $tmp[$i]['name'] = $c['name'];
             $i++;
         }
         if (count($tmp) <= 1) {
             return false;
         }
         $fields_form = array('form' => array('legend' => array('title' => $this->l('Carrier Available'), 'icon' => 'icon-cogs'), 'input' => array('sel_delivery' => array('type' => 'select', 'label' => $this->l('Carrier'), 'name' => 'new_carrier', 'required' => true, 'default_value' => 0, 'class' => 't sel_delivery', 'options' => array('query' => $tmp, 'id' => 'id_carrier', 'name' => 'name')), array('col' => 3, 'class' => 't pr_in', 'type' => 'text', 'desc' => $this->l('Carrier price tax incl.'), 'name' => 'price_incl', 'label' => $this->l('Price tax incl.')), array('col' => 3, 'class' => 't pr_ex', 'type' => 'text', 'desc' => $this->l('Carrier price tax excl.'), 'name' => 'price_excl', 'label' => $this->l('Price tax excl.'))), 'buttons' => array('updcarrier' => array('title' => $this->l('Update carrier'), 'name' => 'updcarrier', 'type' => 'button', 'class' => 'btn btn-default pull-right changec_submit', 'icon' => 'process-icon-refresh'))));
         $helper = new HelperForm();
         $helper->show_toolbar = false;
         $helper->table = $this->table;
         $helper->module = $this;
         $helper->identifier = $this->identifier;
         $helper->submit_action = 'submitChangeCarrier';
         $helper->currentIndex = AdminController::$currentIndex . '?id_order=' . $order->id . '&vieworder&token=' . Tools::getAdminTokenLite('AdminOrders');
         $helper->token = Tools::getAdminTokenLite('AdminOrders');
         $helper->tpl_vars['fields_value']['price_excl'] = '';
         $helper->tpl_vars['fields_value']['price_incl'] = '';
         $helper->tpl_vars['fields_value']['new_carrier'] = 0;
         $path_module_http = __PS_BASE_URI__ . 'modules/yamodule/';
         $html .= '<div class="change_carr">
                 <script type="text/javascript">
                     var notselc = "' . $this->l('Please select carrier') . '";
                     var ajaxurl = "' . $path_module_http . '";
                     var idm = "' . (int) $this->context->employee->id . '";
                     var tkn = "' . Tools::getAdminTokenLite('AdminOrders') . '";
                     var id_order = "' . (int) $order->id . '";
                 </script>
                 <div id="circularG">
                     <div id="circularG_1" class="circularG"></div>
                     <div id="circularG_2" class="circularG"></div>
                     <div id="circularG_3" class="circularG"></div>
                     <div id="circularG_4" class="circularG"></div>
                     <div id="circularG_5" class="circularG"></div>
                     <div id="circularG_6" class="circularG"></div>
                     <div id="circularG_7" class="circularG"></div>
                     <div id="circularG_8" class="circularG"></div>
                 </div>';
         $html .= $helper->generateForm(array($fields_form)) . '</div>';
     }
     return $html;
 }
Пример #6
0
 /**
  * Assign template vars related to page content
  * @see FrontController::initContent()
  */
 public function initContent()
 {
     parent::initContent();
     /* id_carrier is not defined in database before choosing a carrier, set it to a default one to match a potential cart _rule */
     if (empty($this->context->cart->id_carrier)) {
         $checked = $this->context->cart->simulateCarrierSelectedOutput();
         $checked = (int) Cart::desintifier($checked);
         $this->context->cart->id_carrier = $checked;
         $this->context->cart->update();
         CartRule::autoRemoveFromCart($this->context);
         CartRule::autoAddToCart($this->context);
     }
     // SHOPPING CART
     $this->_assignSummaryInformations();
     // WRAPPING AND TOS
     $this->_assignWrappingAndTOS();
     if (Configuration::get('PS_RESTRICT_DELIVERED_COUNTRIES')) {
         $countries = Carrier::getDeliveredCountries($this->context->language->id, true, true);
     } else {
         $countries = Country::getCountries($this->context->language->id, true);
     }
     // If a rule offer free-shipping, force hidding shipping prices
     $free_shipping = false;
     foreach ($this->context->cart->getCartRules() as $rule) {
         if ($rule['free_shipping'] && !$rule['carrier_restriction']) {
             $free_shipping = true;
             break;
         }
     }
     $this->context->smarty->assign(array('free_shipping' => $free_shipping, 'isGuest' => isset($this->context->cookie->is_guest) ? $this->context->cookie->is_guest : 0, 'countries' => $countries, 'sl_country' => (int) Tools::getCountry(), 'PS_GUEST_CHECKOUT_ENABLED' => Configuration::get('PS_GUEST_CHECKOUT_ENABLED'), 'errorCarrier' => Tools::displayError('You must choose a carrier.', false), 'errorTOS' => Tools::displayError('You must accept the Terms of Service.', false), 'isPaymentStep' => isset($_GET['isPaymentStep']) && $_GET['isPaymentStep'], 'genders' => Gender::getGenders(), 'one_phone_at_least' => (int) Configuration::get('PS_ONE_PHONE_AT_LEAST'), 'HOOK_CREATE_ACCOUNT_FORM' => Hook::exec('displayCustomerAccountForm'), 'HOOK_CREATE_ACCOUNT_TOP' => Hook::exec('displayCustomerAccountFormTop')));
     $years = Tools::dateYears();
     $months = Tools::dateMonths();
     $days = Tools::dateDays();
     $this->context->smarty->assign(array('years' => $years, 'months' => $months, 'days' => $days));
     /* Load guest informations */
     if ($this->isLogged && $this->context->cookie->is_guest) {
         $this->context->smarty->assign('guestInformations', $this->_getGuestInformations());
     }
     // ADDRESS
     if ($this->isLogged) {
         $this->_assignAddress();
     }
     // CARRIER
     $this->_assignCarrier();
     // PAYMENT
     $this->_assignPayment();
     Tools::safePostVars();
     $newsletter = Configuration::get('PS_CUSTOMER_NWSL') || Module::isInstalled('blocknewsletter') && Module::getInstanceByName('blocknewsletter')->active;
     $this->context->smarty->assign('newsletter', $newsletter);
     $this->context->smarty->assign('optin', (bool) Configuration::get('PS_CUSTOMER_OPTIN'));
     $this->context->smarty->assign('field_required', $this->context->customer->validateFieldsRequiredDatabase());
     $this->_processAddressFormat();
     $link = new Link();
     if (Tools::getValue('deleteFromOrderLine')) {
         $id_product = Tools::getValue('id_product');
         $date_from = Tools::getValue('date_from');
         $date_to = Tools::getValue('date_to');
         $obj_cart_bk_data = new HotelCartBookingData();
         $cart_data_dlt = $obj_cart_bk_data->deleteRoomDataFromOrderLine($this->context->cart->id, $this->context->cart->id_guest, $id_product, $date_from, $date_to);
         if ($cart_data_dlt) {
             Tools::redirect($link->getPageLink('order', null, $this->context->language->id));
         }
     }
     if ((bool) Configuration::get('PS_ADVANCED_PAYMENT_API')) {
         $this->addJS(_THEME_JS_DIR_ . 'advanced-payment-api.js');
         $this->setTemplate(_PS_THEME_DIR_ . 'order-opc-advanced.tpl');
     } else {
         if (Module::isInstalled('hotelreservationsystem')) {
             require_once _PS_MODULE_DIR_ . 'hotelreservationsystem/define.php';
             $obj_cart_bk_data = new HotelCartBookingData();
             $obj_htl_bk_dtl = new HotelBookingDetail();
             $obj_rm_type = new HotelRoomType();
             $htl_rm_types = $this->context->cart->getProducts();
             if (!empty($htl_rm_types)) {
                 foreach ($htl_rm_types as $type_key => $type_value) {
                     $product = new Product($type_value['id_product'], false, $this->context->language->id);
                     $cover_image_arr = $product->getCover($type_value['id_product']);
                     if (!empty($cover_image_arr)) {
                         $cover_img = $this->context->link->getImageLink($product->link_rewrite, $product->id . '-' . $cover_image_arr['id_image'], 'small_default');
                     } else {
                         $cover_img = $this->context->link->getImageLink($product->link_rewrite, $this->context->language->iso_code . "-default", 'small_default');
                     }
                     $unit_price = Product::getPriceStatic($type_value['id_product'], true, null, 6, null, false, true, 1);
                     if (isset($this->context->customer->id)) {
                         $cart_bk_data = $obj_cart_bk_data->getOnlyCartBookingData($this->context->cart->id, $this->context->cart->id_guest, $type_value['id_product']);
                     } else {
                         $cart_bk_data = $obj_cart_bk_data->getOnlyCartBookingData($this->context->cart->id, $this->context->cart->id_guest, $type_value['id_product']);
                     }
                     $rm_dtl = $obj_rm_type->getRoomTypeInfoByIdProduct($type_value['id_product']);
                     $cart_htl_data[$type_key]['id_product'] = $type_value['id_product'];
                     $cart_htl_data[$type_key]['cover_img'] = $cover_img;
                     $cart_htl_data[$type_key]['name'] = $product->name;
                     $cart_htl_data[$type_key]['unit_price'] = $unit_price;
                     $cart_htl_data[$type_key]['adult'] = $rm_dtl['adult'];
                     $cart_htl_data[$type_key]['children'] = $rm_dtl['children'];
                     foreach ($cart_bk_data as $data_k => $data_v) {
                         $date_join = strtotime($data_v['date_from']) . strtotime($data_v['date_to']);
                         if (isset($cart_htl_data[$type_key]['date_diff'][$date_join])) {
                             $cart_htl_data[$type_key]['date_diff'][$date_join]['num_rm'] += 1;
                             $num_days = $cart_htl_data[$type_key]['date_diff'][$date_join]['num_days'];
                             $vart_quant = (int) $cart_htl_data[$type_key]['date_diff'][$date_join]['num_rm'] * $num_days;
                             $amount = Product::getPriceStatic($type_value['id_product'], true, null, 6, null, false, true, 1);
                             $amount *= $vart_quant;
                             $cart_htl_data[$type_key]['date_diff'][$date_join]['amount'] = $amount;
                         } else {
                             $num_days = $obj_htl_bk_dtl->getNumberOfDays($data_v['date_from'], $data_v['date_to']);
                             $cart_htl_data[$type_key]['date_diff'][$date_join]['num_rm'] = 1;
                             $cart_htl_data[$type_key]['date_diff'][$date_join]['data_form'] = $data_v['date_from'];
                             $cart_htl_data[$type_key]['date_diff'][$date_join]['data_to'] = $data_v['date_to'];
                             $cart_htl_data[$type_key]['date_diff'][$date_join]['num_days'] = $num_days;
                             $amount = Product::getPriceStatic($type_value['id_product'], true, null, 6, null, false, true, 1);
                             $amount *= $num_days;
                             $cart_htl_data[$type_key]['date_diff'][$date_join]['amount'] = $amount;
                             $cart_htl_data[$type_key]['date_diff'][$date_join]['link'] = $link->getPageLink('order', null, $this->context->language->id, "id_product=" . $type_value['id_product'] . "&deleteFromOrderLine=1&date_from=" . $data_v['date_from'] . "&date_to=" . $data_v['date_to']);
                         }
                     }
                 }
                 $this->context->smarty->assign('cart_htl_data', $cart_htl_data);
             }
         }
         $this->setTemplate(_PS_THEME_DIR_ . 'order-opc.tpl');
     }
 }
Пример #7
0
 protected function _getPaymentMethods()
 {
     if (!$this->isOpcModuleActive()) {
         return parent::_getPaymentMethods();
     }
     if ($this->context->cart->OrderExists()) {
         $ret = '<p class="warning">' . Tools::displayError('Error: this order has already been validated') . '</p>';
         return array("orig_hook" => $ret, "parsed_content" => $ret);
     }
     $ret = "";
     $address_delivery = new Address($this->context->cart->id_address_delivery);
     $address_invoice = $this->context->cart->id_address_delivery == $this->context->cart->id_address_invoice ? $address_delivery : new Address($this->context->cart->id_address_invoice);
     if (!$this->context->cart->id_address_delivery || !$this->context->cart->id_address_invoice || !Validate::isLoadedObject($address_delivery) || !Validate::isLoadedObject($address_invoice) || $address_invoice->deleted || $address_delivery->deleted) {
         $ret = '<p class="warning">' . Tools::displayError('Error: please choose an address') . '</p>';
     }
     if (count($this->context->cart->getDeliveryOptionList()) == 0 && !$this->context->cart->isVirtualCart()) {
         if ($this->context->cart->isMultiAddressDelivery()) {
             $ret .= '<p class="warning">' . Tools::displayError('Error: There are no carriers available that deliver to some of your addresses') . '</p>';
         } else {
             $ret .= '<p class="warning">' . Tools::displayError('Error: There are no carriers available that deliver to this address') . '</p>';
         }
     }
     if (!$this->context->cart->getDeliveryOption(null, false) && !$this->context->cart->isVirtualCart()) {
         $ret = '<p class="warning">' . Tools::displayError('Error: please choose a carrier') . '</p>';
     }
     if (!$this->context->cart->id_currency) {
         $ret .= '<p class="warning">' . Tools::displayError('Error: no currency has been selected') . '</p>';
     }
     if (!$this->context->cart->checkQuantities()) {
         $ret .= '<p class="warning">' . Tools::displayError('An item in your cart is no longer available, you cannot proceed with your order.') . '</p>';
     }
     $currency = Currency::getCurrency((int) $this->context->cart->id_currency);
     $minimalPurchase = Tools::convertPrice((double) Configuration::get('PS_PURCHASE_MINIMUM'), $currency);
     if ($this->context->cart->getOrderTotal(false, Cart::ONLY_PRODUCTS) < $minimalPurchase) {
         $ret .= '<p class="warning">' . sprintf(Tools::displayError('A minimum purchase total of %s is required in order to validate your order.'), Tools::displayPrice($minimalPurchase, $currency)) . '</p>';
     }
     if (trim($ret) != "") {
         return array("orig_hook" => $ret, "parsed_content" => $ret);
     }
     $opc_config = $this->context->smarty->tpl_vars["opc_config"]->value;
     $tmp_customer_id_1 = isset($opc_config) && isset($opc_config["payment_customer_id"]) ? intval($opc_config["payment_customer_id"]) : 0;
     $reset_id_customer = false;
     if (!$this->context->cookie->id_customer) {
         $simulated_customer_id = $tmp_customer_id_1 > 0 ? $tmp_customer_id_1 : Customer::getFirstCustomerId();
         $this->context->cookie->id_customer = $simulated_customer_id;
         $reset_id_customer = true;
         if (!$this->context->customer->id) {
             $this->context->customer->id = $simulated_customer_id;
         }
     }
     $orig_context_country = $this->context->country;
     if (isset($address_invoice) && $address_invoice != null) {
         $this->context->country = new Country($address_invoice->id_country);
     }
     if ($this->context->cart->getOrderTotal() <= 0) {
         $return = $this->context->smarty->fetch($this->opc_templates_path . '/free-order-payment.tpl');
     } else {
         $ship2pay_support = isset($opc_config) && isset($opc_config["ship2pay"]) && $opc_config["ship2pay"] == "1" ? true : false;
         if ($ship2pay_support) {
             $orig_id_carrier = $this->context->cart->id_carrier;
             $selected_carrier = Cart::desintifier($this->context->cart->simulateCarrierSelectedOutput());
             $selected_carrier = explode(",", $selected_carrier);
             $selected_carrier = $selected_carrier[0];
             $this->context->cart->id_carrier = $selected_carrier;
             $this->context->cart->update();
             $return = Hook::exec('displayPayment');
         } else {
             $return = Hook::exec('displayPayment');
         }
     }
     $this->context->country = $orig_context_country;
     # restore cookie's id_customer
     if ($reset_id_customer) {
         unset($this->context->cookie->id_customer);
         $this->context->customer->id = null;
     }
     # fix Moneybookers relative path to images
     $return = preg_replace('/src="modules\\//', 'src="' . __PS_BASE_URI__ . 'modules/', $return);
     # OPCKT fix Paypal relative path to redirect script
     $return = preg_replace('/href="modules\\//', 'href="' . __PS_BASE_URI__ . 'modules/', $return);
     if (!$return) {
         $ret = '<p class="warning">' . Tools::displayError('No payment method is available') . '</p>';
         return array("orig_hook" => $ret, "parsed_content" => $ret);
     }
     $parsed_content = "";
     $parse_payment_methods = isset($opc_config) && isset($opc_config["payment_radio_buttons"]) && $opc_config["payment_radio_buttons"] == "1" ? true : false;
     if ($parse_payment_methods) {
         $content = $return;
         $payment_methods = array();
         $i = 0;
         preg_match_all('/<a.*?>[^>]*?<img[^>]*?src="(.*?)".*?\\/?>(.*?)<\\/a>/ms', $content, $matches1, PREG_SET_ORDER);
         $tmp_return = preg_replace_callback('/(<(a))([^>]*?>[^>]*?<img.*?src)/ms', array($this, "_genPaymentModId"), $return);
         if ($tmp_return == NULL) {
             echo "ERRoR!";
         }
         if ($tmp_return != null) {
             // NULL can be returned on backtrace limit exhaustion
             $return = $tmp_return;
         }
         preg_match_all('/<input [^>]*?type="image".*?src="(.*?)".*?>.*?<span.*?>(.*?)<\\/span>/ms', $content, $matches2, PREG_SET_ORDER);
         $tmp_return = preg_replace_callback('/(<(input)[^>]*?type="image")(.*?<span.)/ms', array($this, "_genPaymentModId"), $return);
         if ($tmp_return != null) {
             $return = $tmp_return;
         }
         preg_match_all('/<a[^>]*?class="(.*?)".*?>(.*?)<\\/a>/ms', $content, $matches3, PREG_SET_ORDER);
         $tmp_return = preg_replace_callback('/(<a[^>]*?class="(.*?)")([^>]*?>)/ms', array($this, "_genPaymentModId"), $return);
         if ($tmp_return != null) {
             $return = $tmp_return;
         }
         for ($k = 0; $k < count($matches3); $k++) {
             $matches3[$k][3] = $matches3[$k][1];
             // IMG class of original module
             $matches3[$k][1] = preg_replace('/.*?themes\\//', 'themes/', _THEME_IMG_DIR_) . $matches3[$k][1] . ".png";
         }
         $matches = array_merge($matches1, $matches2, $matches3);
         foreach ($matches as $match) {
             $payment_methods[$i]['img'] = preg_replace('/(\\r)?\\n/m', " ", trim($match[1]));
             $payment_methods[$i]['desc'] = preg_replace('/\\s/m', " ", trim($match[2]));
             // fixed for Auriga payment
             $payment_methods[$i]['link'] = "opc_pid_{$i}";
             if (isset($match[3])) {
                 $payment_methods[$i]['class'] = trim($match[3]);
             }
             $i++;
         }
         $this->context->smarty->assign("payment_methods", $payment_methods);
         $parsed_content = $this->context->smarty->fetch($this->opc_templates_path . "/payment-methods.tpl");
         $parsed_content = str_replace("&amp;", "&", $parsed_content);
     }
     return array("orig_hook" => $return, "parsed_content" => $parsed_content);
 }
Пример #8
0
 protected function _getPaymentMethods()
 {
     if (!$this->isOpcModuleActive()) {
         return parent::_getPaymentMethods();
     }
     if ($this->context->cart->OrderExists()) {
         $ret = '<p class="warning">' . Tools::displayError('Error: this order has already been validated') . '</p>';
         return array("orig_hook" => $ret, "parsed_content" => $ret);
     }
     $ret = "";
     $address_delivery = new Address($this->context->cart->id_address_delivery);
     $address_invoice = $this->context->cart->id_address_delivery == $this->context->cart->id_address_invoice ? $address_delivery : new Address($this->context->cart->id_address_invoice);
     if (!$this->context->cart->id_address_delivery || !$this->context->cart->id_address_invoice || !Validate::isLoadedObject($address_delivery) || !Validate::isLoadedObject($address_invoice) || $address_invoice->deleted || $address_delivery->deleted) {
         $ret = '<p class="warning">' . Tools::displayError('Error: please choose an address') . '</p>';
     }
     if (count($this->context->cart->getDeliveryOptionList()) == 0 && !$this->context->cart->isVirtualCart()) {
         if ($this->context->cart->isMultiAddressDelivery()) {
             $ret .= '<p class="warning">' . Tools::displayError('Error: There are no carriers available that deliver to some of your addresses') . '</p>';
         } else {
             $ret .= '<p class="warning">' . Tools::displayError('Error: There are no carriers available that deliver to this address') . '</p>';
         }
     }
     if (!$this->context->cart->getDeliveryOption(null, false) && !$this->context->cart->isVirtualCart()) {
         $ret = '<p class="warning">' . Tools::displayError('Error: please choose a carrier') . '</p>';
     }
     if (!$this->context->cart->id_currency) {
         $ret .= '<p class="warning">' . Tools::displayError('Error: no currency has been selected') . '</p>';
     }
     //if (!$this->context->cookie->checkedTOS && Configuration::get('PS_CONDITIONS'))
     //	return '<p class="warning">'.Tools::displayError('Please accept the Terms of Service').'</p>';
     /* If some products have disappear */
     if (!$this->context->cart->checkQuantities()) {
         $ret .= '<p class="warning">' . Tools::displayError('An item in your cart is no longer available, you cannot proceed with your order.') . '</p>';
     }
     /* Check minimal amount */
     $currency = Currency::getCurrency((int) $this->context->cart->id_currency);
     $minimalPurchase = Tools::convertPrice((double) Configuration::get('PS_PURCHASE_MINIMUM'), $currency);
     if ($this->context->cart->getOrderTotal(false, Cart::ONLY_PRODUCTS) < $minimalPurchase) {
         $ret .= '<p class="warning">' . sprintf(Tools::displayError('A minimum purchase total of %s is required in order to validate your order.'), Tools::displayPrice($minimalPurchase, $currency)) . '</p>';
     }
     /* Bypass payment step if total is 0 */
     //if ($this->context->cart->getOrderTotal() <= 0)
     //    $ret .= '<p class="center"><input type="button" class="exclusive_large" name="confirmOrder" id="confirmOrder" value="' . Tools::displayError('I confirm my order') . '" onclick="confirmFreeOrder();" /></p>';
     if (trim($ret) != "") {
         return array("orig_hook" => $ret, "parsed_content" => $ret);
     }
     $opc_config = $this->context->smarty->tpl_vars["opc_config"]->value;
     $tmp_customer_id_1 = isset($opc_config) && isset($opc_config["payment_customer_id"]) ? intval($opc_config["payment_customer_id"]) : 0;
     $reset_id_customer = false;
     if (!$this->context->cookie->id_customer) {
         // if no customer set yet, use OPCKT default customer - created during installation
         $simulated_customer_id = $tmp_customer_id_1 > 0 ? $tmp_customer_id_1 : Customer::getFirstCustomerId();
         $this->context->cookie->id_customer = $simulated_customer_id;
         $reset_id_customer = true;
         if (!$this->context->customer->id) {
             $this->context->customer->id = $simulated_customer_id;
         }
     }
     $orig_context_country = $this->context->country;
     if (isset($address_invoice) && $address_invoice != null) {
         $this->context->country = new Country($address_invoice->id_country);
     }
     /* Bypass payment step if total is 0 */
     if ($this->context->cart->getOrderTotal() <= 0) {
         $return = $this->context->smarty->fetch($this->opc_templates_path . '/free-order-payment.tpl');
     } else {
         $ship2pay_support = isset($opc_config) && isset($opc_config["ship2pay"]) && $opc_config["ship2pay"] == "1" ? true : false;
         if ($ship2pay_support) {
             $orig_id_carrier = $this->context->cart->id_carrier;
             $selected_carrier = Cart::desintifier($this->context->cart->simulateCarrierSelectedOutput());
             $selected_carrier = explode(",", $selected_carrier);
             $selected_carrier = $selected_carrier[0];
             $this->context->cart->id_carrier = $selected_carrier;
             $this->context->cart->update();
             //$return         = $this->_hookExecPaymentShip2pay($tmp_id_carrier);
             $return = Hook::exec('displayPayment');
             //$this->context->cart->id_carrier = $orig_id_carrier;
         } else {
             $return = Hook::exec('displayPayment');
         }
         //$return = Module::hookExecPayment();
     }
     $this->context->country = $orig_context_country;
     # restore cookie's id_customer
     if ($reset_id_customer) {
         unset($this->context->cookie->id_customer);
         $this->context->customer->id = null;
     }
     # fix Moneybookers relative path to images
     $return = preg_replace('/src="modules\\//', 'src="' . __PS_BASE_URI__ . 'modules/', $return);
     # OPCKT fix Paypal relative path to redirect script
     $return = preg_replace('/href="modules\\//', 'href="' . __PS_BASE_URI__ . 'modules/', $return);
     if (!$return) {
         $ret = '<p class="warning">' . Tools::displayError('No payment method is available') . '</p>';
         return array("orig_hook" => $ret, "parsed_content" => $ret);
     }
     // if radio buttons as payment turned on, parse payment methods, generate radio buttons and
     // hide original buttons; add large green checkout / submit button and also ensure on onepage.js
     // that after clicking that button appropriate payment button is pressed.
     $parsed_content = "";
     $parse_payment_methods = isset($opc_config) && isset($opc_config["payment_radio_buttons"]) && $opc_config["payment_radio_buttons"] == "1" ? true : false;
     if ($parse_payment_methods) {
         $content = $return;
         $payment_methods = array();
         $i = 0;
         // regular payment modules
         preg_match_all('/<a.*?>[^>]*?<img[^>]*?src="(.*?)".*?\\/?>(.*?)<\\/a>/ms', $content, $matches1, PREG_SET_ORDER);
         // Mark original payment modules with special id
         $tmp_return = preg_replace_callback('/(<(a))([^>]*?>[^>]*?<img.*?src)/ms', array($this, "_genPaymentModId"), $return);
         if ($tmp_return == NULL) {
             echo "ERRoR!";
         }
         if ($tmp_return != null) {
             // NULL can be returned on backtrace limit exhaustion
             $return = $tmp_return;
         }
         // moneybookers
         preg_match_all('/<input [^>]*?type="image".*?src="(.*?)".*?>.*?<span.*?>(.*?)<\\/span>/ms', $content, $matches2, PREG_SET_ORDER);
         // Mark original payment modules with special id
         $tmp_return = preg_replace_callback('/(<(input)[^>]*?type="image")(.*?<span.)/ms', array($this, "_genPaymentModId"), $return);
         if ($tmp_return != null) {
             $return = $tmp_return;
         }
         // PS 1.6 bootstrap payments
         preg_match_all('/<a[^>]*?class="(.*?)".*?>(.*?)<\\/a>/ms', $content, $matches3, PREG_SET_ORDER);
         // Mark original payment modules with special id
         $tmp_return = preg_replace_callback('/(<a[^>]*?class="(.*?)")([^>]*?>)/ms', array($this, "_genPaymentModId"), $return);
         if ($tmp_return != null) {
             $return = $tmp_return;
         }
         // set class + special class name, then in JS handler get all such styles and set CSS background from original payments
         for ($k = 0; $k < count($matches3); $k++) {
             $matches3[$k][3] = $matches3[$k][1];
             // IMG class of original module
             $matches3[$k][1] = preg_replace('/.*?themes\\//', 'themes/', _THEME_IMG_DIR_) . $matches3[$k][1] . ".png";
         }
         $matches = array_merge($matches1, $matches2, $matches3);
         //print_r($matches);
         foreach ($matches as $match) {
             $payment_methods[$i]['img'] = preg_replace('/(\\r)?\\n/m', " ", trim($match[1]));
             $payment_methods[$i]['desc'] = preg_replace('/\\s/m', " ", trim($match[2]));
             // fixed for Auriga payment
             $payment_methods[$i]['link'] = "opc_pid_{$i}";
             if (isset($match[3])) {
                 $payment_methods[$i]['class'] = trim($match[3]);
             }
             $i++;
         }
         //$tmp_return = preg_replace('/(<a.*?)(onclick="(.*?)")(.*?)(href="(.*?)")/', '2:-\2-3:-\3-4:-\4-5:-\5-', $tmp_return);
         $this->context->smarty->assign("payment_methods", $payment_methods);
         $parsed_content = $this->context->smarty->fetch($this->opc_templates_path . "/payment-methods.tpl");
         $parsed_content = str_replace("&amp;", "&", $parsed_content);
     }
     return array("orig_hook" => $return, "parsed_content" => $parsed_content);
     //		$return = Hook::exec('displayPayment');
     //		if (!$return)
     //			return '<p class="warning">'.Tools::displayError('No payment method is available').'</p>';
     //		return $return;
 }
Пример #9
0
 public function simulateSelection($carrier_id, $params)
 {
     $id_carrier = (int) Cart::desintifier($carrier_id, '');
     $cart_data = array();
     $cart_data['price'] = (double) $this->context->cart->getPackageShippingCost($id_carrier);
     $cart_data['order_total'] = (double) $this->context->cart->getOrderTotal() - (double) $this->context->cart->getTotalShippingCost();
     $cart_data['total_tax'] = (double) $this->context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) - (double) $this->context->cart->getOrderTotal(false, Cart::ONLY_PRODUCTS) + (double) $this->context->cart->getPackageShippingCost($id_carrier, true) - (double) $this->context->cart->getPackageShippingCost($id_carrier, false);
     $cart_data['params'] = $params;
     return $cart_data;
 }