Jump to content

Recommended Posts

Здравствуйте!
Убирал шаги заказа в оформлении товара.
На 5 шаге (оплата заказа), при нажатии кнопки "продолжить" вылезает ошибка:
Indirect modification of overloaded property ControllerCheckConfirm в файле catalog/controller/checkout/confirm.php 

на 12 строчке

12 $this->data['settings'] = $settings;

if($settings){
/*Short checkout*/
if ($this->cart->hasShipping()) {
// Validate if shipping address has been set.
$this->load->model('account/address');

if ($this->customer->isLogged() && isset($this->session->data['shipping_address_id'])) {
$shipping_address = $this->model_account_address->getAddress($this->session->data['shipping_address_id']);
} elseif (isset($this->session->data['guest'])) {
$shipping_address = $this->session->data['guest']['shipping'];
}

if (empty($shipping_address)) {
$redirect = $this->url->link('checkout/checkout', '', 'SSL');
}

и на 851

850 else {
851 $this->data['redirect'] = $redirect;
}

А так же Undefined index: paymanent in в том же фале на 504 строчке

503 elseif (isset($this->session->data['guest'])) {
504 $payment_address = $this->session->data['guest']['payment'];
}

 Все это в браузере, где залогинен под админом, в другом браузере на этом же шаге пишет: " Нет доступных способов оплаты. Пожалуйста свяжитесь с администрацией!"

Opencart 2.0.1.1
Подскажите, знающие люди.

Share this post


Link to post
Share on other sites

Здравствуйте!

Убирал шаги заказа в оформлении товара.

На 5 шаге (оплата заказа), при нажатии кнопки "продолжить" вылезает ошибка:

Indirect modification of overloaded property ControllerCheckConfirm в файле catalog/controller/checkout/confirm.php 

на 12 строчке

12 $this->data['settings'] = $settings;

if($settings){

/*Short checkout*/

if ($this->cart->hasShipping()) {

// Validate if shipping address has been set.

$this->load->model('account/address');

if ($this->customer->isLogged() && isset($this->session->data['shipping_address_id'])) {

$shipping_address = $this->model_account_address->getAddress($this->session->data['shipping_address_id']);

} elseif (isset($this->session->data['guest'])) {

$shipping_address = $this->session->data['guest']['shipping'];

}

if (empty($shipping_address)) {

$redirect = $this->url->link('checkout/checkout', '', 'SSL');

}

и на 851

850 else {

851 $this->data['redirect'] = $redirect;

}

А так же Undefined index: paymanent in в том же фале на 504 строчке

503 elseif (isset($this->session->data['guest'])) {

504 $payment_address = $this->session->data['guest']['payment'];

}

 Все это в браузере, где залогинен под админом, в другом браузере на этом же шаге пишет: " Нет доступных способов оплаты. Пожалуйста свяжитесь с администрацией!"

Opencart 2.0.1.1

Подскажите, знающие люди.

В OpenCart 2 нельзя менять $this->data. Надо все $this->data заменить на $data и передать ее как параметр для рендера.

https://github.com/opencart-ru/opencart/wiki/upgrade_extension

Share this post


Link to post
Share on other sites

хочу приобрести модуль, для начала попробовал на локальном сайте, в чем причина? 

Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 176Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 255Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 258Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 260Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 266Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 272Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 278Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 284Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 286Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 287Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 288Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 289Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 290Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 291Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 292Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 293Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 294Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 295Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 297Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 298Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 299Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 300Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 301Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 303Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 305Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 306Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 307Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 308Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 309Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 310Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 315Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 318Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 323Notice: Indirect modification of overloaded property ControllerModuleSimple::$data has no effect in D:\OpenServer\domains\opencart2\admin\controller\module\simple.php on line 617Notice: Error: Could not load model D:\OpenServer\domains\opencart2/admin/model/setting/extension.php! in D:\OpenServer\domains\opencart2\vqmod\vqcache\vq2-system_modification_system_engine_loader.php on line 24

Share this post


Link to post
Share on other sites
хочу приобрести модуль, для начала попробовал на локальном сайте

Это как ты без покупки решил попробовать?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By ConstantinAndreevich
      Как заменить стандартный input для выбора купона, в форме заказа?
      <div class="input-group"> <input type="text" value="<%= model.coupon ? model.coupon : '' %>" name="coupon" id="coupon" <% if(Number(config.design.placeholder)) { %>placeholder="{{ text_use_coupon }}" <% } %> class="form-control"/> <span class="input-group-btn"> <button class="btn btn-primary" id="confirm_coupon" type="button"><i class="fa fa-check"></i></button> </span> </div> На select c (-100, -75, -50, -25, -15).
      <select name="coupon" id="coupon"> <option value="-100"></option> <option value="-75"></option> <option value="-50"></option> <option value="-25"></option> <option value="-15"></option> </select> Что бы это корректно работало.
    • By Aussie
      450.00 RUB
      View File


      Быстрое оформление покупки 1ClickCheckout
      1. Модуль не меняет и не удаляет стандартные варианты оформления покупки! На страницу корзины и страницу с вариантами оформления покупки добавляются опции "купить в 1 клик" (названия можно изменить из админки);
      2. При оформлении заказа в один клик от покупателя требуется заполнение четырех полей. По умолчанию эти поля называются "Имя", "E-mail", "Телефон" и "Комментарии";
      3. Из административной части можно изменять:
          а) заголовок страницы упрощенного оформления заказа, наименования полей, которые заполняет пользователь, а также их обязательность;
          б) название кнопки, которая добавляется на страницу корзины и название элемента списка, который добавляется на страницу оформления заказа;
          в) прятать стандартное (длинное) оформление заказа незарегистрированным пользователем;
          г) назначить для вновь оформляемых при помощи модуля заказов значения страны, региона, города, способа доставки, варианта оплаты и статуса заказа по-умолчанию.
      4. Модуль умеет работать с зарегистрированными пользователями. В случае, если быстрый заказ оформляется авторизованным пользователем, то он будет привязан к этому пользователю;
      5. По логике быстрого оформления, при оформлении покупки с помощью 1ClickCheckout в конечной стоимости заказа не учитываются никакие формы платной доставки;
      6. Поддерживается мультиязычность.
       
      Вне зависимости от версии магазина в настройках Opencart должна быть включена возможность гостевого оформления заказа.
       
      Установка модуля 1ClickCheckout (кроме версий OpenCart 3.x):
      Установить расширение 1clickcheckout.ocmod.xml. Для этого зайти в "Модули" -> "Установка расширений", нажать кнопку "Загрузить" и в диалоговом окне выбрать файл 1clickcheckout.ocmod.xml и нажать "Открыть". Затем зайти в "Модули" -> "Модификаторы", убедиться, что расширение установлено и нажать на кнопку "Обновить" в правом верхнем углу. Cкопировать содержимое каталога /upload из архива 1ClickCheckout в корень каталога с установленным OpenCart; Зайти в административную панель, открыть список модулей, найти в списке модуль 1ClickCheckout и нажать кнопку "Установить"; Зайти в настройки модуля, при необходимости изменить названия полей, их обязательность и сохранить настройки.  
      Установка модуля 1ClickCheckout на OpenCart версий 3.0.x:
      Зайти в меню "Модули/Расширения" -> "Установка расширений". Нажать на кнопку "Загрузить", в открывшемся далоговом окне выбрать файл 1clickcheckout-3.0.2.x-2.3.ocmod.zip и нажать "Открыть". Перейти в меню "Модули/Расширения" -> "Модификаторы" и нажать на кнопку "Обновить" в правом верхнем углу. Cкопировать содержимое каталога /upload из архива 1ClickCheckout в корень каталога с установленным OpenCart; Зайти в настройки модуля, при необходимости изменить названия полей, их обязательность и сохранить настройки.  
      Внимание! При использовании темы оформления Frame необходимо отключить стандартный модификатор модуля (в "Модули/Расширения" -> "Модификаторы" ), а в папку /system магазина скопировать файл 1clickcheckout.frametheme.ocmod.xml
       
      Модуль поддерживает работу в шаблонах Frame и Materialize Template (описания особенностей установки для них вы найдете в архиве с модулем).
       
      Демо клиентской части
      Демо административной части логин: demo пароль: demo
      Submitter Aussie Submitted 10/10/2015 Category Shopping Cart & Order Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Get request to server of developer Нет Старая цена 0  
    • By Aussie
      1. Модуль не меняет и не удаляет стандартные варианты оформления покупки! На страницу корзины и страницу с вариантами оформления покупки добавляются опции "купить в 1 клик" (названия можно изменить из админки);
      2. При оформлении заказа в один клик от покупателя требуется заполнение четырех полей. По умолчанию эти поля называются "Имя", "E-mail", "Телефон" и "Комментарии";
      3. Из административной части можно изменять:
          а) заголовок страницы упрощенного оформления заказа, наименования полей, которые заполняет пользователь, а также их обязательность;
          б) название кнопки, которая добавляется на страницу корзины и название элемента списка, который добавляется на страницу оформления заказа;
          в) прятать стандартное (длинное) оформление заказа незарегистрированным пользователем;
          г) назначить для вновь оформляемых при помощи модуля заказов значения страны, региона, города, способа доставки, варианта оплаты и статуса заказа по-умолчанию.
      4. Модуль умеет работать с зарегистрированными пользователями. В случае, если быстрый заказ оформляется авторизованным пользователем, то он будет привязан к этому пользователю;
      5. По логике быстрого оформления, при оформлении покупки с помощью 1ClickCheckout в конечной стоимости заказа не учитываются никакие формы платной доставки;
      6. Поддерживается мультиязычность.
       
      Вне зависимости от версии магазина в настройках Opencart должна быть включена возможность гостевого оформления заказа.
       
      Установка модуля 1ClickCheckout (кроме версий OpenCart 3.x):
      Установить расширение 1clickcheckout.ocmod.xml. Для этого зайти в "Модули" -> "Установка расширений", нажать кнопку "Загрузить" и в диалоговом окне выбрать файл 1clickcheckout.ocmod.xml и нажать "Открыть". Затем зайти в "Модули" -> "Модификаторы", убедиться, что расширение установлено и нажать на кнопку "Обновить" в правом верхнем углу. Cкопировать содержимое каталога /upload из архива 1ClickCheckout в корень каталога с установленным OpenCart; Зайти в административную панель, открыть список модулей, найти в списке модуль 1ClickCheckout и нажать кнопку "Установить"; Зайти в настройки модуля, при необходимости изменить названия полей, их обязательность и сохранить настройки.  
      Установка модуля 1ClickCheckout на OpenCart версий 3.0.x:
      Зайти в меню "Модули/Расширения" -> "Установка расширений". Нажать на кнопку "Загрузить", в открывшемся далоговом окне выбрать файл 1clickcheckout-3.0.2.x-2.3.ocmod.zip и нажать "Открыть". Перейти в меню "Модули/Расширения" -> "Модификаторы" и нажать на кнопку "Обновить" в правом верхнем углу. Cкопировать содержимое каталога /upload из архива 1ClickCheckout в корень каталога с установленным OpenCart; Зайти в настройки модуля, при необходимости изменить названия полей, их обязательность и сохранить настройки.  
      Внимание! При использовании темы оформления Frame необходимо отключить стандартный модификатор модуля (в "Модули/Расширения" -> "Модификаторы" ), а в папку /system магазина скопировать файл 1clickcheckout.frametheme.ocmod.xml
       
      Модуль поддерживает работу в шаблонах Frame и Materialize Template (описания особенностей установки для них вы найдете в архиве с модулем).
       
      Демо клиентской части
      Демо административной части логин: demo пароль: demo
    • By Good5
      Добрый день! 
      Подскажите пожалуйста почему не передается платежная информация заказчика. 
      Где исправить ? То есть на почту приходит только заказ, без остальных полей 
      Версия 1.5.4.1
      В разделе модули, самого модуля нет.
      данные сбрасывает после выбора способа оплаты и остается только товар

      <?php
      class ModelCheckoutOrder extends Model {    
          public function addOrder($data) {
              $this->db->query("INSERT INTO `" . DB_PREFIX . "order` SET invoice_prefix = '" . $this->db->escape($data['invoice_prefix']) . "', store_id = '" . (int)$data['store_id'] . "', store_name = '" . $this->db->escape($data['store_name']) . "', store_url = '" . $this->db->escape($data['store_url']) . "', customer_id = '" . (int)$data['customer_id'] . "', customer_group_id = '" . (int)$data['customer_group_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($data['payment_country']) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($data['payment_zone']) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($data['payment_address_format']) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($data['shipping_country']) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($data['shipping_zone']) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($data['shipping_address_format']) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', total = '" . (float)$data['total'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', commission = '" . (float)$data['commission'] . "', language_id = '" . (int)$data['language_id'] . "', currency_id = '" . (int)$data['currency_id'] . "', currency_code = '" . $this->db->escape($data['currency_code']) . "', currency_value = '" . (float)$data['currency_value'] . "', ip = '" . $this->db->escape($data['ip']) . "', forwarded_ip = '" .  $this->db->escape($data['forwarded_ip']) . "', user_agent = '" . $this->db->escape($data['user_agent']) . "', accept_language = '" . $this->db->escape($data['accept_language']) . "', date_added = NOW(), date_modified = NOW()");
              $order_id = $this->db->getLastId();
              foreach ($data['products'] as $product) { 
                  $this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$product['product_id'] . "', name = '" . $this->db->escape($product['name']) . "', model = '" . $this->db->escape($product['model']) . "', quantity = '" . (int)$product['quantity'] . "', price = '" . (float)$product['price'] . "', total = '" . (float)$product['total'] . "', tax = '" . (float)$product['tax'] . "', reward = '" . (int)$product['reward'] . "'");
       
                  $order_product_id = $this->db->getLastId();
                  foreach ($product['option'] as $option) {
                      $this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$option['product_option_id'] . "', product_option_value_id = '" . (int)$option['product_option_value_id'] . "', name = '" . $this->db->escape($option['name']) . "', `value` = '" . $this->db->escape($option['value']) . "', `type` = '" . $this->db->escape($option['type']) . "'");
                  }
                      
                  foreach ($product['download'] as $download) {
                      $this->db->query("INSERT INTO " . DB_PREFIX . "order_download SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', name = '" . $this->db->escape($download['name']) . "', filename = '" . $this->db->escape($download['filename']) . "', mask = '" . $this->db->escape($download['mask']) . "', remaining = '" . (int)($download['remaining'] * $product['quantity']) . "'");
                  }    
              }
              
              foreach ($data['vouchers'] as $voucher) {
                  $this->db->query("INSERT INTO " . DB_PREFIX . "order_voucher SET order_id = '" . (int)$order_id . "', description = '" . $this->db->escape($voucher['description']) . "', code = '" . $this->db->escape($voucher['code']) . "', from_name = '" . $this->db->escape($voucher['from_name']) . "', from_email = '" . $this->db->escape($voucher['from_email']) . "', to_name = '" . $this->db->escape($voucher['to_name']) . "', to_email = '" . $this->db->escape($voucher['to_email']) . "', voucher_theme_id = '" . (int)$voucher['voucher_theme_id'] . "', message = '" . $this->db->escape($voucher['message']) . "', amount = '" . (float)$voucher['amount'] . "'");
              }
                  
              foreach ($data['totals'] as $total) {
                  $this->db->query("INSERT INTO " . DB_PREFIX . "order_total SET order_id = '" . (int)$order_id . "', code = '" . $this->db->escape($total['code']) . "', title = '" . $this->db->escape($total['title']) . "', text = '" . $this->db->escape($total['text']) . "', `value` = '" . (float)$total['value'] . "', sort_order = '" . (int)$total['sort_order'] . "'");
              }    
              return $order_id;
          }
          public function getOrder($order_id) {
              $order_query = $this->db->query("SELECT *, (SELECT os.name FROM `" . DB_PREFIX . "order_status` os WHERE os.order_status_id = o.order_status_id AND os.language_id = o.language_id) AS order_status FROM `" . DB_PREFIX . "order` o WHERE o.order_id = '" . (int)$order_id . "'");
                  
              if ($order_query->num_rows) {
                  $country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['payment_country_id'] . "'");
                  
                  if ($country_query->num_rows) {
                      $payment_iso_code_2 = $country_query->row['iso_code_2'];
                      $payment_iso_code_3 = $country_query->row['iso_code_3'];
                  } else {
                      $payment_iso_code_2 = '';
                      $payment_iso_code_3 = '';                
                  }
                  
                  $zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['payment_zone_id'] . "'");
                  
                  if ($zone_query->num_rows) {
                      $payment_zone_code = $zone_query->row['code'];
                  } else {
                      $payment_zone_code = '';
                  }            
                  
                  $country_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "country` WHERE country_id = '" . (int)$order_query->row['shipping_country_id'] . "'");
                  
                  if ($country_query->num_rows) {
                      $shipping_iso_code_2 = $country_query->row['iso_code_2'];
                      $shipping_iso_code_3 = $country_query->row['iso_code_3'];
                  } else {
                      $shipping_iso_code_2 = '';
                      $shipping_iso_code_3 = '';                
                  }
                  
                  $zone_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "zone` WHERE zone_id = '" . (int)$order_query->row['shipping_zone_id'] . "'");
                  
                  if ($zone_query->num_rows) {
                      $shipping_zone_code = $zone_query->row['code'];
                  } else {
                      $shipping_zone_code = '';
                  }
                  
                  $this->load->model('localisation/language');
                  
                  $language_info = $this->model_localisation_language->getLanguage($order_query->row['language_id']);
                  
                  if ($language_info) {
                      $language_code = $language_info['code'];
                      $language_filename = $language_info['filename'];
                      $language_directory = $language_info['directory'];
                  } else {
                      $language_code = '';
                      $language_filename = '';
                      $language_directory = '';
                  }
                           
                  return array(
                      'order_id'                => $order_query->row['order_id'],
                      'invoice_no'              => $order_query->row['invoice_no'],
                      'invoice_prefix'          => $order_query->row['invoice_prefix'],
                      'store_id'                => $order_query->row['store_id'],
                      'store_name'              => $order_query->row['store_name'],
                      'store_url'               => $order_query->row['store_url'],                
                      'customer_id'             => $order_query->row['customer_id'],
                      'firstname'               => $order_query->row['firstname'],
                      'lastname'                => $order_query->row['lastname'],
                      'telephone'               => $order_query->row['telephone'],
                      'fax'                     => $order_query->row['fax'],
                      'email'                   => $order_query->row['email'],
                      'payment_firstname'       => $order_query->row['payment_firstname'],
                      'payment_lastname'        => $order_query->row['payment_lastname'],                
                      'payment_company'         => $order_query->row['payment_company'],
                      'payment_address_1'       => $order_query->row['payment_address_1'],
                      'payment_address_2'       => $order_query->row['payment_address_2'],
                      'payment_postcode'        => $order_query->row['payment_postcode'],
                      'payment_city'            => $order_query->row['payment_city'],
                      'payment_zone_id'         => $order_query->row['payment_zone_id'],
                      'payment_zone'            => $order_query->row['payment_zone'],
                      'payment_zone_code'       => $payment_zone_code,
                      'payment_country_id'      => $order_query->row['payment_country_id'],
                      'payment_country'         => $order_query->row['payment_country'],    
                      'payment_iso_code_2'      => $payment_iso_code_2,
                      'payment_iso_code_3'      => $payment_iso_code_3,
                      'payment_address_format'  => $order_query->row['payment_address_format'],
                      'payment_method'          => $order_query->row['payment_method'],
                      'payment_code'            => $order_query->row['payment_code'],
                      'shipping_firstname'      => $order_query->row['shipping_firstname'],
                      'shipping_lastname'       => $order_query->row['shipping_lastname'],                
                      'shipping_company'        => $order_query->row['shipping_company'],
                      'shipping_address_1'      => $order_query->row['shipping_address_1'],
                      'shipping_address_2'      => $order_query->row['shipping_address_2'],
                      'shipping_postcode'       => $order_query->row['shipping_postcode'],
                      'shipping_city'           => $order_query->row['shipping_city'],
                      'shipping_zone_id'        => $order_query->row['shipping_zone_id'],
                      'shipping_zone'           => $order_query->row['shipping_zone'],
                      'shipping_zone_code'      => $shipping_zone_code,
                      'shipping_country_id'     => $order_query->row['shipping_country_id'],
                      'shipping_country'        => $order_query->row['shipping_country'],    
                      'shipping_iso_code_2'     => $shipping_iso_code_2,
                      'shipping_iso_code_3'     => $shipping_iso_code_3,
                      'shipping_address_format' => $order_query->row['shipping_address_format'],
                      'shipping_method'         => $order_query->row['shipping_method'],
                      'shipping_code'           => $order_query->row['shipping_code'],
                      'comment'                 => $order_query->row['comment'],
                      'total'                   => $order_query->row['total'],
                      'order_status_id'         => $order_query->row['order_status_id'],
                      'order_status'            => $order_query->row['order_status'],
                      'language_id'             => $order_query->row['language_id'],
                      'language_code'           => $language_code,
                      'language_filename'       => $language_filename,
                      'language_directory'      => $language_directory,
                      'currency_id'             => $order_query->row['currency_id'],
                      'currency_code'           => $order_query->row['currency_code'],
                      'currency_value'          => $order_query->row['currency_value'],
                      'ip'                      => $order_query->row['ip'],
                      'forwarded_ip'            => $order_query->row['forwarded_ip'], 
                      'user_agent'              => $order_query->row['user_agent'],    
                      'accept_language'         => $order_query->row['accept_language'],                
                      'date_modified'           => $order_query->row['date_modified'],
                      'date_added'              => $order_query->row['date_added']
                  );
              } else {
                  return false;    
              }
          }    
          public function confirm($order_id, $order_status_id, $comment = '', $notify = false) {
              $order_info = $this->getOrder($order_id);
               
              if ($order_info && !$order_info['order_status_id']) {
                  // Fraud Detection
                  if ($this->config->get('config_fraud_detection')) {
                      $this->load->model('checkout/fraud');
                      
                      $risk_score = $this->model_checkout_fraud->getFraudScore($order_info);
                      
                      if ($risk_score > $this->config->get('config_fraud_score')) {
                          $order_status_id = $this->config->get('config_fraud_status_id');
                      }
                  }
                  // Blacklist
                  $status = false;
                  
                  $this->load->model('account/customer');
                  
                  if ($order_info['customer_id']) {
                      $results = $this->model_account_customer->getIps($order_info['customer_id']);
                      
                      foreach ($results as $result) {
                          if ($this->model_account_customer->isBlacklisted($result['ip'])) {
                              $status = true;
                              
                              break;
                          }
                      }
                  } else {
                      $status = $this->model_account_customer->isBlacklisted($order_info['ip']);
                  }
                  
                  if ($status) {
                      $order_status_id = $this->config->get('config_order_status_id');
                  }        
                      
                  $this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_status_id = '" . (int)$order_status_id . "', date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'");
                  $this->db->query("INSERT INTO " . DB_PREFIX . "order_history SET order_id = '" . (int)$order_id . "', order_status_id = '" . (int)$order_status_id . "', notify = '1', comment = '" . $this->db->escape(($comment && $notify) ? $comment : '') . "', date_added = NOW()");
                  $order_product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");
                  
                  foreach ($order_product_query->rows as $order_product) {
                      $this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'");
                      
                      $order_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product['order_product_id'] . "'");
                  
                      foreach ($order_option_query->rows as $option) {
                          $this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$option['product_option_value_id'] . "' AND subtract = '1'");
                      }
                  }
                  
                  $this->cache->delete('product');
                  
                  // Downloads
                  $order_download_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_download WHERE order_id = '" . (int)$order_id . "'");
                  
                  // Gift Voucher
                      $this->load->model('checkout/voucher');
                  $order_voucher_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_voucher WHERE order_id = '" . (int)$order_id . "'");
                  
                  foreach ($order_voucher_query->rows as $order_voucher) {
                      $voucher_id = $this->model_checkout_voucher->addVoucher($order_id, $order_voucher);
                      
                      $this->db->query("UPDATE " . DB_PREFIX . "order_voucher SET voucher_id = '" . (int)$voucher_id . "' WHERE order_voucher_id = '" . (int)$order_voucher['order_voucher_id'] . "'");
                  }            
                  
                  // Send out any gift voucher mails
                  if ($this->config->get('config_complete_status_id') == $order_status_id) {
                      $this->model_checkout_voucher->confirm($order_id);
                  }
                  
                  // Order Totals            
                  $order_total_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order_total` WHERE order_id = '" . (int)$order_id . "' ORDER BY sort_order ASC");
                  
                  foreach ($order_total_query->rows as $order_total) {
                      $this->load->model('total/' . $order_total['code']);
                      
                      if (method_exists($this->{'model_total_' . $order_total['code']}, 'confirm')) {
                          $this->{'model_total_' . $order_total['code']}->confirm($order_info, $order_total);
                      }
                  }
                  
                  // Send out order confirmation mail
                  $language = new Language($order_info['language_directory']);
                  $language->load($order_info['language_filename']);
                  $language->load('mail/order');
               
                  $order_status_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_status WHERE order_status_id = '" . (int)$order_status_id . "' AND language_id = '" . (int)$order_info['language_id'] . "'");
                  
                  if ($order_status_query->num_rows) {
                      $order_status = $order_status_query->row['name'];    
                  } else {
                      $order_status = '';
                  }
                                  
                  $subject = sprintf($language->get('text_new_subject'), $order_info['store_name'], $order_id);
              
                  // HTML Mail
                  $template = new Template();
                  
                  $template->data['title'] = sprintf($language->get('text_new_subject'), html_entity_decode($order_info['store_name'], ENT_QUOTES, 'UTF-8'), $order_id);
                  
                  $template->data['text_greeting'] = sprintf($language->get('text_new_greeting'), html_entity_decode($order_info['store_name'], ENT_QUOTES, 'UTF-8'));
                  $template->data['text_link'] = $language->get('text_new_link');
                  $template->data['text_download'] = $language->get('text_new_download');
                  $template->data['text_order_detail'] = $language->get('text_new_order_detail');
                  $template->data['text_instruction'] = $language->get('text_new_instruction');
                  $template->data['text_order_id'] = $language->get('text_new_order_id');
                  $template->data['text_date_added'] = $language->get('text_new_date_added');
                  $template->data['text_payment_method'] = $language->get('text_new_payment_method');    
                  $template->data['text_shipping_method'] = $language->get('text_new_shipping_method');
                  $template->data['text_email'] = $language->get('text_new_email');
                  $template->data['text_telephone'] = $language->get('text_new_telephone');
                  $template->data['text_ip'] = $language->get('text_new_ip');
                  $template->data['text_payment_address'] = $language->get('text_new_payment_address');
                  $template->data['text_shipping_address'] = $language->get('text_new_shipping_address');
                  $template->data['text_product'] = $language->get('text_new_product');
                  $template->data['text_model'] = $language->get('text_new_model');
                  $template->data['text_quantity'] = $language->get('text_new_quantity');
                  $template->data['text_price'] = $language->get('text_new_price');
                  $template->data['text_total'] = $language->get('text_new_total');
                  $template->data['text_footer'] = $language->get('text_new_footer');
                  $template->data['text_powered'] = $language->get('text_new_powered');
                  
                  $template->data['logo'] = HTTP_IMAGE . $this->config->get('config_logo');        
                  $template->data['store_name'] = $order_info['store_name'];
                  $template->data['store_url'] = $order_info['store_url'];
                  $template->data['customer_id'] = $order_info['customer_id'];
                  $template->data['link'] = $order_info['store_url'] . 'index.php?route=account/order/info&order_id=' . $order_id;
                  
                  if ($order_download_query->num_rows) {
                      $template->data['download'] = $order_info['store_url'] . 'index.php?route=account/download';
                  } else {
                      $template->data['download'] = '';
                  }
                  
                  $template->data['order_id'] = $order_id;
                  $template->data['date_added'] = date($language->get('date_format_short'), strtotime($order_info['date_added']));        
                  $template->data['payment_method'] = $order_info['payment_method'];
                  $template->data['shipping_method'] = $order_info['shipping_method'];
                  $template->data['email'] = $order_info['email'];
                  $template->data['telephone'] = $order_info['telephone'];
                  $template->data['ip'] = $order_info['ip'];
                  
                  if ($comment && $notify) {
                      $template->data['comment'] = nl2br($comment);
                  } else {
                      $template->data['comment'] = '';
                  }
                              
                  if ($order_info['payment_address_format']) {
                      $format = $order_info['payment_address_format'];
                  } else {
                      $format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}';
                  }
                  
                  $find = array(
                      '{firstname}',
                      '{lastname}',
                      '{company}',
                      '{address_1}',
                      '{address_2}',
                      '{city}',
                      '{postcode}',
                      '{zone}',
                      '{zone_code}',
                      '{country}'
                  );
              
                  $replace = array(
                      'firstname' => $order_info['payment_firstname'],
                      'lastname'  => $order_info['payment_lastname'],
                      'company'   => $order_info['payment_company'],
                      'address_1' => $order_info['payment_address_1'],
                      'address_2' => $order_info['payment_address_2'],
                      'city'      => $order_info['payment_city'],
                      'postcode'  => $order_info['payment_postcode'],
                      'zone'      => $order_info['payment_zone'],
                      'zone_code' => $order_info['payment_zone_code'],
                      'country'   => $order_info['payment_country']  
                  );
              
                  $template->data['payment_address'] = str_replace(array("\r\n", "\r", "\n"), '<br />', preg_replace(array("/\s\s+/", "/\r\r+/", "/\n\n+/"), '<br />', trim(str_replace($find, $replace, $format))));                        
                                          
                  if ($order_info['shipping_address_format']) {
                      $format = $order_info['shipping_address_format'];
                  } else {
                      $format = '{firstname} {lastname}' . "\n" . '{company}' . "\n" . '{address_1}' . "\n" . '{address_2}' . "\n" . '{city} {postcode}' . "\n" . '{zone}' . "\n" . '{country}';
                  }
                  
                  $find = array(
                      '{firstname}',
                      '{lastname}',
                      '{company}',
                      '{address_1}',
                      '{address_2}',
                      '{city}',
                      '{postcode}',
                      '{zone}',
                      '{zone_code}',
                      '{country}'
                  );
              
                  $replace = array(
                      'firstname' => $order_info['shipping_firstname'],
                      'lastname'  => $order_info['shipping_lastname'],
                      'company'   => $order_info['shipping_company'],
                      'address_1' => $order_info['shipping_address_1'],
                      'address_2' => $order_info['shipping_address_2'],
                      'city'      => $order_info['shipping_city'],
                      'postcode'  => $order_info['shipping_postcode'],
                      'zone'      => $order_info['shipping_zone'],
                      'zone_code' => $order_info['shipping_zone_code'],
                      'country'   => $order_info['shipping_country']  
                  );
              
                  $template->data['shipping_address'] = str_replace(array("\r\n", "\r", "\n"), '<br />', preg_replace(array("/\s\s+/", "/\r\r+/", "/\n\n+/"), '<br />', trim(str_replace($find, $replace, $format))));
                  
                  // Products
                  $template->data['products'] = array();
                      
                  foreach ($order_product_query->rows as $product) {
                      $option_data = array();
                      
                      $order_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$product['order_product_id'] . "'");
                      
                      foreach ($order_option_query->rows as $option) {
                          if ($option['type'] != 'file') {
                              $value = $option['value'];
                          } else {
                              $value = utf8_substr($option['value'], 0, utf8_strrpos($option['value'], '.'));
                          }
                          
                              $option_data[] = array(
                                  'name'  => $option['name'],
                              'value' => (utf8_strlen($value) > 20 ? utf8_substr($value, 0, 20) . '..' : $value)
                              );
                      }
                    
                      $template->data['products'][] = array(
                          'name'     => $product['name'],
                          'model'    => $product['model'],
                          'option'   => $option_data,
                          'quantity' => $product['quantity'],
                          'price'    => $this->currency->format($product['price'] + ($this->config->get('config_tax') ? $product['tax'] : 0), $order_info['currency_code'], $order_info['currency_value']),
                          'total'    => $this->currency->format($product['total'] + ($this->config->get('config_tax') ? ($product['tax'] * $product['quantity']) : 0), $order_info['currency_code'], $order_info['currency_value'])
                      );
                  }
          
                  // Vouchers
                  $template->data['vouchers'] = array();
                  
                  foreach ($order_voucher_query->rows as $voucher) {
                      $template->data['vouchers'][] = array(
                          'description' => $voucher['description'],
                          'amount'      => $this->currency->format($voucher['amount'], $order_info['currency_code'], $order_info['currency_value']),
                      );
                  }
          
                  $template->data['totals'] = $order_total_query->rows;
                  
                  if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/mail/order.tpl')) {
                      $html = $template->fetch($this->config->get('config_template') . '/template/mail/order.tpl');
                  } else {
                      $html = $template->fetch('default/template/mail/order.tpl');
                  }
                  
                  // Text Mail
                  $text  = sprintf($language->get('text_new_greeting'), html_entity_decode($order_info['store_name'], ENT_QUOTES, 'UTF-8')) . "\n\n";
                  $text .= $language->get('text_new_order_id') . ' ' . $order_id . "\n";
                  $text .= $language->get('text_new_date_added') . ' ' . date($language->get('date_format_short'), strtotime($order_info['date_added'])) . "\n";
                  $text .= $language->get('text_new_order_status') . ' ' . $order_status . "\n\n";
                  
                  if ($comment && $notify) {
                      $text .= $language->get('text_new_instruction') . "\n\n";
                      $text .= $comment . "\n\n";
                  }
                  
                  // Products
                  $text .= $language->get('text_new_products') . "\n";
                  
                  foreach ($order_product_query->rows as $product) {
                      $text .= $product['quantity'] . 'x ' . $product['name'] . ' (' . $product['model'] . ') ' . html_entity_decode($this->currency->format($product['total'] + ($this->config->get('config_tax') ? ($product['tax'] * $product['quantity']) : 0), $order_info['currency_code'], $order_info['currency_value']), ENT_NOQUOTES, 'UTF-8') . "\n";
                      
                      $order_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . $product['order_product_id'] . "'");
                      
                      foreach ($order_option_query->rows as $option) {
                          $text .= chr(9) . '-' . $option['name'] . ' ' . (utf8_strlen($option['value']) > 20 ? utf8_substr($option['value'], 0, 20) . '..' : $option['value']) . "\n";
                      }
                  }
                  
                  foreach ($order_voucher_query->rows as $voucher) {
                      $text .= '1x ' . $voucher['description'] . ' ' . $this->currency->format($voucher['amount'], $order_info['currency_code'], $order_info['currency_value']);
                  }
                  
                  $text .= "\n";
                  
                  $text .= $language->get('text_new_order_total') . "\n";
                  
                  foreach ($order_total_query->rows as $total) {
                      $text .= $total['title'] . ': ' . html_entity_decode($total['text'], ENT_NOQUOTES, 'UTF-8') . "\n";
                  }            
                  
                  $text .= "\n";
                  
                  if ($order_info['customer_id']) {
                      $text .= $language->get('text_new_link') . "\n";
                      $text .= $order_info['store_url'] . 'index.php?route=account/order/info&order_id=' . $order_id . "\n\n";
                  }
              
                  if ($order_download_query->num_rows) {
                      $text .= $language->get('text_new_download') . "\n";
                      $text .= $order_info['store_url'] . 'index.php?route=account/download' . "\n\n";
                  }
                  
                  if ($order_info['comment']) {
                      $text .= $language->get('text_new_comment') . "\n\n";
                      $text .= $order_info['comment'] . "\n\n";
                  }
                  
                  $text .= $language->get('text_new_footer') . "\n\n";
              
                  $mail = new Mail(); 
                  $mail->protocol = $this->config->get('config_mail_protocol');
                  $mail->parameter = $this->config->get('config_mail_parameter');
                  $mail->hostname = $this->config->get('config_smtp_host');
                  $mail->username = $this->config->get('config_smtp_username');
                  $mail->password = $this->config->get('config_smtp_password');
                  $mail->port = $this->config->get('config_smtp_port');
                  $mail->timeout = $this->config->get('config_smtp_timeout');            
                  $mail->setTo($order_info['email']);
                  $mail->setFrom($this->config->get('config_email'));
                  $mail->setSender($order_info['store_name']);
                  $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8'));
                  $mail->setHtml($html);
                  $mail->setText(html_entity_decode($text, ENT_QUOTES, 'UTF-8'));
                  $mail->send();
                  // Admin Alert Mail
                  if ($this->config->get('config_alert_mail')) {
                      $subject = sprintf($language->get('text_new_subject'), html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8'), $order_id);
                      
                      // Text 
                      $text  = $language->get('text_new_received') . "\n\n";
                      $text .= $language->get('text_new_order_id') . ' ' . $order_id . "\n";
                      $text .= $language->get('text_new_date_added') . ' ' . date($language->get('date_format_short'), strtotime($order_info['date_added'])) . "\n";
                      $text .= $language->get('text_new_order_status') . ' ' . $order_status . "\n\n";
                      $text .= $language->get('text_new_products') . "\n";
                      
                      foreach ($order_product_query->rows as $product) {
                          $text .= $product['quantity'] . 'x ' . $product['name'] . ' (' . $product['model'] . ') ' . html_entity_decode($this->currency->format($product['total'] + ($this->config->get('config_tax') ? ($product['tax'] * $product['quantity']) : 0), $order_info['currency_code'], $order_info['currency_value']), ENT_NOQUOTES, 'UTF-8') . "\n";
                          
                          $order_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . $product['order_product_id'] . "'");
                          
                          foreach ($order_option_query->rows as $option) {
                              if ($option['type'] != 'file') {
                                  $value = $option['value'];
                              } else {
                                  $value = utf8_substr($option['value'], 0, utf8_strrpos($option['value'], '.'));
                              }
                                                  
                              $text .= chr(9) . '-' . $option['name'] . ' ' . (utf8_strlen($value) > 20 ? utf8_substr($value, 0, 20) . '..' : $value) . "\n";
                          }
                      }
                      
                      foreach ($order_voucher_query->rows as $voucher) {
                          $text .= '1x ' . $voucher['description'] . ' ' . $this->currency->format($voucher['amount'], $order_info['currency_code'], $order_info['currency_value']);
                      }
                      
                      $text .= "\n";
                      $text .= $language->get('text_new_order_total') . "\n";
                      
                      foreach ($order_total_query->rows as $total) {
                          $text .= $total['title'] . ': ' . html_entity_decode($total['text'], ENT_NOQUOTES, 'UTF-8') . "\n";
                      }            
                      
                      $text .= "\n";
                      
                      if ($order_info['comment']) {
                          $text .= $language->get('text_new_comment') . "\n\n";
                          $text .= $order_info['comment'] . "\n\n";
                      }
                  
                      $mail = new Mail(); 
                      $mail->protocol = $this->config->get('config_mail_protocol');
                      $mail->parameter = $this->config->get('config_mail_parameter');
                      $mail->hostname = $this->config->get('config_smtp_host');
                      $mail->username = $this->config->get('config_smtp_username');
                      $mail->password = $this->config->get('config_smtp_password');
                      $mail->port = $this->config->get('config_smtp_port');
                      $mail->timeout = $this->config->get('config_smtp_timeout');
                      $mail->setTo($this->config->get('config_email'));
                      $mail->setFrom($this->config->get('config_email'));
                      $mail->setSender($order_info['store_name']);
                      $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8'));
                      $mail->setText(html_entity_decode($text, ENT_QUOTES, 'UTF-8'));
                      $mail->send();
                      
                      // Send to additional alert emails
                      $emails = explode(',', $this->config->get('config_alert_emails'));
                      
                      foreach ($emails as $email) {
                          if ($email && preg_match('/^[^\@][email protected]*\.[a-z]{2,6}$/i', $email)) {
                              $mail->setTo($email);
                              $mail->send();
                          }
                      }                
                  }        
                  // Send Admins SMS if configure
                  if ($this->config->get('config_sms_alert')) {
                      $options = array(
                          'to'       => $this->config->get('config_sms_to'),
                          'copy'     => $this->config->get('config_sms_copy'),
                          'from'     => $this->config->get('config_sms_from'),
                          'username' => $this->config->get('config_sms_gate_username'),
                          'password' => $this->config->get('config_sms_gate_password'),
                          'message'  => str_replace(array('{ID}', '{DATE}', '{TIME}', '{SUM}', '{PHONE}'), 
                                                    array($order_id, date('d.m.Y'), date('H:i'), floatval($order_info['total']), $order_info['telephone']), 
                                                    $this->config->get('config_sms_message'))
                      );
                      $this->load->library('sms');
                      $sms = new Sms($this->config->get('config_sms_gatename'), $options);
                      $sms->send();
                  }
              }
          }
          
          public function update($order_id, $order_status_id, $comment = '', $notify = false) {
              $order_info = $this->getOrder($order_id);
              if ($order_info && $order_info['order_status_id']) {
                  // Fraud Detection
                  if ($this->config->get('config_fraud_detection')) {
                      $this->load->model('checkout/fraud');
                      
                      $risk_score = $this->model_checkout_fraud->getFraudScore($order_info);
                      
                      if ($risk_score > $this->config->get('config_fraud_score')) {
                          $order_status_id = $this->config->get('config_fraud_status_id');
                      }
                  }            
                  // Blacklist
                  $status = false;
                  
                  $this->load->model('account/customer');
                  
                  if ($order_info['customer_id']) {
                                      
                      $results = $this->model_account_customer->getIps($order_info['customer_id']);
                      
                      foreach ($results as $result) {
                          if ($this->model_account_customer->isBlacklisted($result['ip'])) {
                              $status = true;
                              
                              break;
                          }
                      }
                  } else {
                      $status = $this->model_account_customer->isBlacklisted($order_info['ip']);
                  }
                  
                  if ($status) {
                      $order_status_id = $this->config->get('config_order_status_id');
                  }        
                              
                  $this->db->query("UPDATE `" . DB_PREFIX . "order` SET order_status_id = '" . (int)$order_status_id . "', date_modified = NOW() WHERE order_id = '" . (int)$order_id . "'");
              
                  $this->db->query("INSERT INTO " . DB_PREFIX . "order_history SET order_id = '" . (int)$order_id . "', order_status_id = '" . (int)$order_status_id . "', notify = '" . (int)$notify . "', date_identificator = '" . (int)$date_identificator . "', number_identificator = '" . (int)$number_identificator . "', shipping_method = '" . (int)$shipping_method . "', comment = '" . $this->db->escape($comment) . "', date_added = NOW()");
          
                  // Send out any gift voucher mails
                  if ($this->config->get('config_complete_status_id') == $order_status_id) {
                      $this->load->model('checkout/voucher');
          
                      $this->model_checkout_voucher->confirm($order_id);
                  }    
          
                  if ($notify) {
                      $language = new Language($order_info['language_directory']);
                      $language->load($order_info['language_filename']);
                      $language->load('mail/order');
                  
                      $subject = sprintf($language->get('text_update_subject'), html_entity_decode($order_info['store_name'], ENT_QUOTES, 'UTF-8'), $order_id);
          
                      $message  = $language->get('text_update_order') . ' ' . $order_id . "\n";
                      $message .= $language->get('text_update_date_added') . ' ' . date($language->get('date_format_short'), strtotime($order_info['date_added'])) . "\n\n";
                      
                      $order_status_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_status WHERE order_status_id = '" . (int)$order_status_id . "' AND language_id = '" . (int)$order_info['language_id'] . "'");
                      
                      if ($order_status_query->num_rows) {
                          $message .= $language->get('text_update_order_status') . "\n\n";
                          $message .= $order_status_query->row['name'] . "\n\n";                    
                      }
                      
                      if ($order_info['customer_id']) {
                          $message .= $language->get('text_update_link') . "\n";
                          $message .= $order_info['store_url'] . 'index.php?route=account/order/info&order_id=' . $order_id . "\n\n";
                      }
                      
                      if ($comment) { 
                          $message .= $language->get('text_update_comment') . "\n\n";
                          $message .= $comment . "\n\n";
                      }
                          
                      $message .= $language->get('text_update_footer');
                      $mail = new Mail();
                      $mail->protocol = $this->config->get('config_mail_protocol');
                      $mail->parameter = $this->config->get('config_mail_parameter');
                      $mail->hostname = $this->config->get('config_smtp_host');
                      $mail->username = $this->config->get('config_smtp_username');
                      $mail->password = $this->config->get('config_smtp_password');
                      $mail->port = $this->config->get('config_smtp_port');
                      $mail->timeout = $this->config->get('config_smtp_timeout');                
                      $mail->setTo($order_info['email']);
                      $mail->setFrom($this->config->get('config_email'));
                      $mail->setSender($order_info['store_name']);
                      $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8'));
                      $mail->setText(html_entity_decode($message, ENT_QUOTES, 'UTF-8'));
                      $mail->send();
                  }
              }
          }
      }
      ?>
    • By d91me
      Здравствуйте!
      Стандартный шаблон на OC 2.3 Задача:
      Упростить формы регистрации и заказа в полной и мобильной версиях(Модуль Simple)
      Регистрация : Телефон или электронка, пароль и имя. Заказ в общем то же самое без пароля естественно, если не авторизирован, иначе сразу на оплату Прикрутить платёжную систему
      Пишите в личку
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.