diff --git a/README.md b/README.md
index b03d9cf..ceb5a8d 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,15 @@
-# basket
+### basket
-Модуль Корзина Только для AVE.CMS ALT
\ No newline at end of file
+## Модуль Корзина
+
+### Модуль позволяет организовать торговлю любыми товарами с использованием корзины и формы оформления заказа.
+
+#### Инструкция в файле README.txt (находится в корневой папке с файлами)
+
+#### либо читаем тему в группе https://vk.com/topic-38315276_27718595?offset=0
+
+### Changelog:
+
+04.09.2019 - версия 1.26.1 - адаптация для версии ave.cms 3.26
+
+Версия 1.0.1
\ No newline at end of file
diff --git a/READ_ME.txt b/READ_ME.txt
new file mode 100644
index 0000000..e3c25a8
--- /dev/null
+++ b/READ_ME.txt
@@ -0,0 +1,32 @@
+Добавляем данную форму в шаблон Рубрики иил Запроса
+
+
+
+Обязательным условием при работе с AJAX добавлением нужны библиотеки jQuery, jQuery Form (библиотеки есть в папке lib/scripts).
+Также используется библиотека jQuery Block - для затемнения экрана.
+
+modules/basket/js/basket.js - также нужно подключить к шаблону.
+
+Все скрипты являются простой демонстрацией модуля.
\ No newline at end of file
diff --git a/class.basket.php b/class.basket.php
new file mode 100644
index 0000000..897815f
--- /dev/null
+++ b/class.basket.php
@@ -0,0 +1,407 @@
+Query("
+ SELECT
+ b.basket_product_id AS id,
+ f.field_value AS name,
+ d.field_value AS article,
+ e.field_value AS size,
+ b.basket_product_quantity AS quantity,
+ b.basket_product_amount AS amount
+ FROM
+ " . PREFIX . "_module_basket AS b
+ LEFT JOIN
+ " . PREFIX . "_document_fields AS f
+ ON f.Id = b.basket_product_name_id
+ LEFT JOIN
+ " . PREFIX . "_document_fields AS d
+ ON d.Id = b.basket_product_article_id
+ LEFT JOIN
+ " . PREFIX . "_document_fields AS e
+ ON e.Id = b.basket_product_size_id
+ WHERE b.basket_session_id = '" . session_id() . "'
+ ORDER BY b.id ASC
+ ");
+
+ $total = 0;
+ $total_send = 0;
+
+ $products = array();
+ while($row = $sql->FetchRow())
+ {
+ $total += $row->amount;
+ $total_send += $row->amount;
+ $quantity += $row->quantity;
+ $row->price = $row->amount / $row->quantity;
+ array_push($products, $row);
+ }
+
+ $sql = $AVE_DB->Query("
+ SELECT *
+ FROM " . PREFIX . "_module_basket_delivery
+ WHERE delivery_activ = '1'
+ ORDER BY delivery_position ASC
+ ");
+
+ $delivery = array();
+ while($row = $sql->FetchRow())
+ {
+ array_push($delivery, $row);
+ }
+
+ $sql = $AVE_DB->Query("
+ SELECT *
+ FROM " . PREFIX . "_module_basket_payment
+ WHERE payment_activ = '1'
+ ORDER BY payment_position ASC
+ ");
+
+ $payment = array();
+ while ($row = $sql->FetchRow())
+ {
+ $payment_delivery = explode(',', $row->payment_delivery);
+ if (in_array($_SESSION['delivery_id'], $payment_delivery)) array_push($payment, $row);
+ }
+
+ if (isset($_SESSION['delivery_id'])) {
+ $row = $AVE_DB->Query("
+ SELECT
+ delivery_price,
+ delivery_price_operands
+ FROM " . PREFIX . "_module_basket_delivery
+ WHERE id = ".$_SESSION['delivery_id']." AND delivery_activ = '1'
+ LIMIT 1
+ ")
+ ->FetchRow();
+
+ if ($row->delivery_price_operands == "Money"){
+
+ $total = $total + $row->delivery_price;
+
+ }else if ($row->delivery_price_operands == "%"){
+
+ $total = ($row->deliveryt_price_operands == '%') ? $total+$total/100*$row->delivery_price : $total - $row->delivery_price;
+
+ }
+
+ $total = $total + $delivery_price;
+
+ if (isset($_SESSION['payment_id'])){
+ $row = $AVE_DB->Query("
+ SELECT
+ payment_price,
+ payment_price_operands
+ FROM " . PREFIX . "_module_basket_payment
+ WHERE id = ".$_SESSION['payment_id']." AND payment_activ = '1'
+ LIMIT 1
+ ")
+ ->FetchRow();
+
+ if ($row->payment_price_operands == "Money"){
+
+ $total = $total + $row->payment_price;
+
+ }else if ($row->payment_price_operands == "%"){
+
+ $total = ($row->payment_price_operands == '%') ? $total+$total/100*$row->payment_price : $total - $row->payment_price;
+
+ }
+ }
+ }
+ return array('products' => $products, 'total' => $total, 'delivery' => $delivery, 'payment' => $payment, 'total_cart' => $total_cart, 'total_send' => $total_send, 'quantity' => $quantity);
+ }
+
+ /**
+ * Добавить товар в корзину
+ *
+ * @param int $product_id идентификатор товара
+ * (идентификатор документа с атрибутами товара)
+ * @param int $name_id идентификатор наименования товара
+ * (идентификатор поля рубрики для наименования)
+ * @param int $price_id идентификатор цены товара
+ * (идентификатор поля рубрики для цены)
+ * @param int $article_id идентификатор артикула товара
+ * (идентификатор поля рубрики для артикула)
+ * @param int $size_id идентификатор размера товара
+ * (идентификатор поля рубрики для размера)
+ * @param int $quantity количество добавляемых в корзину товаров
+ */
+
+ function basketProductAdd($product_id = 0, $name_id = 0, $price_id = 0, $article_id = 0, $size_id = 0, $quantity = 1)
+ {
+ global $AVE_DB;
+
+ $product_id = (int)$product_id;
+ $name_id = (int)$name_id;
+ $price_id = (int)$price_id;
+ $article_id = (int)$article_id;
+ $size_id = (int)$size_id;
+ $quantity = (int)$quantity;
+
+ if ($product_id === 0 || $name_id === 0 || $price_id === 0 || $article_id === 0 || $size_id === 0 || $quantity === 0) return;
+
+ $session_id = session_id();
+
+ $sql = $AVE_DB->Query("
+ SELECT
+ Id,
+ rubric_field_id,
+ field_value
+ FROM " . PREFIX . "_document_fields
+ WHERE document_id = '" . $product_id . "'
+ AND (rubric_field_id = '" . $name_id . "' OR rubric_field_id = '" . $price_id . "' OR rubric_field_id = '" . $article_id . "' OR rubric_field_id = '" . $size_id . "')
+ ");
+
+ $product = array();
+ while ($row = $sql->FetchRow())
+ {
+ $product[$row->rubric_field_id] = array('id' => $row->Id,
+ 'val' => $row->field_value);
+ }
+
+ if (!empty($product))
+ {
+ $exists = $AVE_DB->Query("
+ SELECT 1
+ FROM " . PREFIX . "_module_basket
+ WHERE basket_product_id = '" . $product_id . "'
+ AND basket_session_id = '" . $session_id . "'
+ ")->GetCell();
+
+ if ($exists)
+ {
+ $AVE_DB->Query("
+ UPDATE " . PREFIX . "_module_basket
+ SET
+ basket_product_quantity = basket_product_quantity + " . $quantity . ",
+ basket_product_amount = basket_product_amount + " . $quantity * $product[$price_id]['val'] . "
+ WHERE basket_product_id = '" . $product_id . "'
+ AND basket_session_id = '" . $session_id . "'
+ ");
+ }
+ else
+ {
+ $AVE_DB->Query("
+ INSERT
+ INTO " . PREFIX . "_module_basket
+ SET
+ basket_session_id = '" . $session_id . "',
+ basket_product_id = '" . $product_id . "',
+ basket_product_name_id = '" . $product[$name_id]['id'] . "',
+ basket_product_price_id = '" . $product[$price_id]['id'] . "',
+ basket_product_article_id = '" . $product[$article_id]['id'] . "',
+ basket_product_size_id = '" . $product[$size_id]['id'] . "',
+ basket_product_quantity = '" . $quantity . "',
+ basket_product_amount = '" . $quantity * $product[$price_id]['val'] . "'
+ ");
+ }
+ }
+ }
+
+ /**
+ * Удалить товар из корзины
+ *
+ * @param int $product_id
+ */
+ function basketProductDelete($product_id)
+ {
+ global $AVE_DB;
+
+ $AVE_DB->Query("
+ DELETE
+ FROM " . PREFIX . "_module_basket
+ WHERE basket_product_id = '" . (int)$product_id . "'
+ AND basket_session_id = '" . session_id() . "'
+ ");
+ }
+
+ /**
+ * Пересчет корзины
+ *
+ * @param array $quantity
+ * @param array $delete
+ */
+ function basketOrderUpdate($quantity = array(), $delete = array(), $delivery_id, $payment_id)
+ {
+ global $AVE_DB;
+
+ unset ($_SESSION['delivery_id']);
+ unset ($_SESSION['payment_id']);
+
+ if (!(isset($delete) && is_array($delete))) $delete = array();
+
+ $session_id = session_id();
+
+ if (isset($delivery_id) && !isset($payment_id)){
+ $_SESSION['delivery_id'] = $delivery_id;
+ }else if (isset($delivery_id) && isset($payment_id)){
+ $_SESSION['delivery_id'] = $delivery_id;
+ $_SESSION['payment_id'] = $payment_id;
+ }
+
+ // Изменяем в корзине количества товаров
+ if (isset($quantity) && is_array($quantity))
+ {
+ foreach ($quantity as $product_id => $product_quantity)
+ {
+ $product_id = (int)$product_id;
+ if (!is_numeric($product_quantity)) continue;
+ $product_quantity = (int)$product_quantity;
+ // если количество равно 0 - удаляем товар из корзины
+ if ($product_quantity === 0) $delete[$product_id] = 1;
+ if (isset($delete[$product_id])) continue;
+
+ $AVE_DB->Query("
+ UPDATE " . PREFIX . "_module_basket
+ SET
+ basket_product_amount = basket_product_amount / basket_product_quantity * " . $product_quantity . ",
+ basket_product_quantity = '" . $product_quantity . "'
+ WHERE basket_product_id = '" . $product_id . "'
+ AND basket_session_id = '" . $session_id . "'
+ ");
+ }
+ }
+
+ // Удаляем помеченные товары
+ foreach ($delete as $product_id => $val)
+ {
+ $AVE_DB->Query("
+ DELETE
+ FROM " . PREFIX . "_module_basket
+ WHERE basket_product_id = '" . (int)$product_id . "'
+ AND basket_session_id = '" . $session_id . "'
+ ");
+ }
+ }
+
+
+ /**
+ * Отправка заказа
+ *
+ */
+ function basketOrderSend()
+ {
+ global $AVE_DB, $AVE_Template;
+
+ $customer = array();
+
+ $customer['name'] = isset($_REQUEST['name']) ? trim(stripslashes($_REQUEST['name'])) : '';
+ if ($customer['name'] !== '') $customer['name'] = preg_replace('/[^\x20-\xFF]|[><]/', '', $customer['name']);
+
+ $customer['email'] = isset($_REQUEST['email']) ? trim(stripslashes($_REQUEST['email'])) : '';
+ if ($customer['email'] !== '')
+ {
+ $regex_email = '/^[\w.-]+@[a-z0-9.-]+\.(?:[a-z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$/i';
+ if (!preg_match($regex_email, $customer['email'])) $customer['email'] = '';
+ }
+
+ $customer['phone'] = isset($_REQUEST['phone']) ? trim(stripslashes($_REQUEST['phone'])) : '';
+ if ($customer['phone'] !== '') $customer['phone'] = preg_replace('/[^\x20-\xFF]|[><]/', '', $customer['phone']);
+
+ $customer['address'] = isset($_REQUEST['address']) ? trim(stripslashes($_REQUEST['address'])) : '';
+ if ($customer['address'] !== '') $customer['address'] = preg_replace('/[^\x20-\xFF]|[><]/', '', $customer['address']);
+
+ $customer['description'] = isset($_REQUEST['description']) ? trim(stripslashes($_REQUEST['description'])) : '';
+ if ($customer['description'] !== '') $customer['description'] = preg_replace('/[^\x20-\xFF]|[><]/', '', $customer['description']);
+
+ $delivery_method = $AVE_DB->Query("
+ SELECT delivery_price, delivery_title, delivery_price_operands
+ FROM " . PREFIX . "_module_basket_delivery
+ WHERE id = ".$_SESSION['delivery_id']." AND delivery_activ = '1'
+ LIMIT 1
+ ")->FetchRow();
+
+ $delivery_method_titel = $delivery_method->delivery_title;
+ $delivery_method_price = $delivery_method->delivery_price;
+ $delivery_method_operands = $delivery_method->delivery_price_operands;
+
+ $AVE_Template->assign('delivery_method_titel', $delivery_method_titel);
+ $AVE_Template->assign('delivery_method_price', $delivery_method_price);
+ $AVE_Template->assign('delivery_method_operands', $delivery_method_operands);
+
+ $payment_method = $AVE_DB->Query("
+ SELECT payment_price, payment_title, payment_price_operands
+ FROM " . PREFIX . "_module_basket_payment
+ WHERE id = ".$_SESSION['payment_id']." AND payment_activ = '1'
+ LIMIT 1
+ ")->FetchRow();
+ $payment_method_titel = $payment_method->payment_title;
+ $payment_method_price = $payment_method->payment_price;
+ $payment_method_operands = $payment_method->payment_price_operands;
+
+ $AVE_Template->assign('payment_method_titel', $payment_method_titel);
+ $AVE_Template->assign('payment_method_price', $payment_method_price);
+ $AVE_Template->assign('payment_method_operands', $payment_method_operands);
+
+ // Передаем в шаблон информацию о заказчике
+ $AVE_Template->assign('customer', $customer);
+
+ // Формируем тело письма
+ $mail_body = $AVE_Template->fetch(BASE_DIR . '/modules/basket/templates/mail_text.tpl');
+
+ // Если заказчик указал E-mail - отправляем письмо заказчику
+ if ($customer['email'])
+ {
+ send_mail(
+ $customer['email'],
+ $mail_body,
+ $AVE_Template->get_config_vars('BASKET_SHOP_NAME') . ' '
+ . $AVE_Template->get_config_vars('BASKET_ORDER_TITLE'),
+ get_settings('mail_from'),
+ $AVE_Template->get_config_vars('BASKET_SHOP_NAME'),
+ 'html'
+ );
+ }
+
+ // Письмо администратору
+ send_mail(
+ get_settings('mail_from'),
+ $mail_body,
+ $AVE_Template->get_config_vars('BASKET_SHOP_NAME') . ' '
+ . $AVE_Template->get_config_vars('BASKET_ORDER_TITLE'),
+ get_settings('mail_from'),
+ $AVE_Template->get_config_vars('BASKET_SHOP_NAME'),
+ 'html'
+ );
+
+ // Удаляем заказ из корзины
+ $AVE_DB->Query("
+ DELETE
+ FROM " . PREFIX . "_module_basket
+ WHERE basket_session_id = '" . session_id() . "'
+ ");
+ }
+}
+
+?>
\ No newline at end of file
diff --git a/class.basket_admin.php b/class.basket_admin.php
new file mode 100644
index 0000000..714cab0
--- /dev/null
+++ b/class.basket_admin.php
@@ -0,0 +1,300 @@
+Query("
+ SELECT *
+ FROM " . PREFIX . "_module_basket_payment
+ ORDER BY payment_position ASC
+ ");
+ while ($row = $sql->FetchRow()) array_push($payment,$row);
+
+ $delivery = array();
+ $sql = $AVE_DB->Query("
+ SELECT *
+ FROM " . PREFIX . "_module_basket_delivery
+ ORDER BY delivery_position ASC
+ ");
+ while ($row = $sql->FetchRow()) array_push($delivery,$row);
+
+ if ($home == true){
+ $AVE_Template->assign('payment', $payment);
+ $AVE_Template->assign('delivery', $delivery);
+ $AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'basket_start.tpl'));
+ }
+ }
+
+////////////////
+// Вид оплаты //
+////////////////
+
+ function basketDelPaymentMethod($id)
+ {
+ global $AVE_DB;
+
+ if ($id != 1)
+ {
+ $AVE_DB->Query("
+ DELETE
+ FROM " . PREFIX . "_module_basket_payment
+ WHERE id = '" . $id . "'
+ ");
+ }
+
+ header("Location:index.php?do=modules&action=modedit&mod=basket&moduleaction=basket_payment&cp=" . SESSION);
+ exit;
+ }
+
+ function basketNewPaymentMethod()
+ {
+ global $AVE_DB;
+
+ $AVE_DB->Query("
+ INSERT " . PREFIX . "_module_basket_payment
+ SET payment_title = '" . $_POST['payment_title'] . "'
+ ");
+
+ header("Location:index.php?do=modules&action=modedit&mod=basket&moduleaction=basket_payment&cp=" . SESSION);
+ exit;
+ }
+
+ function basketDisplayMethods()
+ {
+ global $AVE_DB;
+
+ $methods = array();
+ $sql = $AVE_DB->Query("
+ SELECT *
+ FROM " . PREFIX . "_module_basket_payment
+ ORDER BY payment_position ASC
+ ");
+ while ($row = $sql->FetchRow()) array_push($methods,$row);
+
+ return $methods;
+ }
+
+ function basketPaymentMethods($tpl_dir)
+ {
+ global $AVE_DB, $AVE_Template;
+
+ if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save')
+ {
+ foreach ($_POST['payment_title'] as $id => $payment_title)
+ {
+ if (!empty($payment_title))
+ {
+ $AVE_DB->Query("
+ UPDATE " . PREFIX . "_module_basket_payment
+ SET
+ payment_title = '" . $payment_title . "',
+ payment_activ = '" . $_POST['payment_activ'][$id] . "',
+ payment_position = '" . $_POST['payment_position'][$id] . "'
+ WHERE
+ id = '" . $id . "'
+ ");
+ }
+ }
+ }
+
+ $AVE_Template->assign('methods', $this->basketDisplayMethods());
+ $AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'basket_payment.tpl'));
+ }
+
+
+ function basketEditPaymentMethod($tpl_dir,$id)
+ {
+ global $AVE_DB, $AVE_Template;
+
+ if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save')
+ {
+ $AVE_DB->Query("
+ UPDATE " . PREFIX . "_module_basket_payment
+ SET
+ payment_title = '" . $_POST['payment_title'] . "',
+ payment_description = '" . $_POST['payment_description'] . "',
+ payment_activ = '" . $_POST['payment_activ'] . "',
+ payment_price = '" . $_POST['payment_price'] . "',
+ payment_price_operands = '" . $_POST['payment_price_operands'] . "',
+ payment_delivery = '" . ((isset($_POST['payment_delivery']) && is_array($_POST['payment_delivery'])) ? implode(',', $_POST['payment_delivery']) : '') . "'
+ WHERE
+ id = '" . $_REQUEST['id'] . "'
+ ");
+
+ echo '';
+ }
+
+ $sql = $AVE_DB->Query("
+ SELECT *
+ FROM " . PREFIX . "_module_basket_payment
+ WHERE id = '" . $id . "'
+ ");
+
+ $row = $sql->FetchRow();
+ $row->payment_delivery = explode(',', $row->payment_delivery);
+
+ $oCKeditor = new CKeditor();
+ $oCKeditor->returnOutput = true;
+ $oCKeditor->config['toolbar'] = 'Verysmall';
+ $oCKeditor->config['height'] = 200;
+ $config = array();
+ $Edi = $oCKeditor->editor('payment_description', $row->payment_description, $config);
+
+ $AVE_Template->assign('Edi', $Edi);
+ $AVE_Template->assign('basket_delivery', $this->basketDisplayDelivery());
+ $AVE_Template->assign('payment', $row);
+ $AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'basket_payment_edit.tpl'));
+ }
+
+ function basketDisplayDelivery()
+ {
+ global $AVE_DB;
+
+ $basket_delivery = array();
+ $sql = $AVE_DB->Query("
+ SELECT *
+ FROM " . PREFIX . "_module_basket_delivery
+ ORDER BY delivery_position ASC
+ ");
+ while ($row = $sql->FetchRow()) array_push($basket_delivery,$row);
+
+ return $basket_delivery;
+ }
+
+
+
+
+//------------------------------------------------------
+ function basketDeliveryMethods($tpl_dir)
+ {
+ global $AVE_DB, $AVE_Template;
+
+ if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save')
+ {
+ foreach ($_POST['delivery_title'] as $id => $delivery_title)
+ {
+ if (!empty($delivery_title))
+ {
+ $AVE_DB->Query("
+ UPDATE " . PREFIX . "_module_basket_delivery
+ SET
+ delivery_title = '" . $delivery_title . "',
+ delivery_activ = '" . $_POST['delivery_activ'][$id] . "',
+ delivery_position = '" . $_POST['delivery_position'][$id] . "'
+ WHERE
+ id = '" . $id . "'
+ ");
+ }
+ }
+ }
+
+ $AVE_Template->assign('methods', $this->basketDisplayDelivery());
+ $AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'basket_delivery.tpl'));
+ }
+
+ function basketNewDeliveryMethod()
+ {
+ global $AVE_DB;
+
+ $AVE_DB->Query("
+ INSERT " . PREFIX . "_module_basket_delivery
+ SET delivery_title = '" . $_POST['delivery_title'] . "'
+ ");
+
+ header("Location:index.php?do=modules&action=modedit&mod=basket&moduleaction=basket_delivery&cp=" . SESSION);
+ exit;
+ }
+
+ function basketDelDeliveryMethod($id)
+ {
+ global $AVE_DB;
+
+ if ($id != 1)
+ {
+ $AVE_DB->Query("
+ DELETE
+ FROM " . PREFIX . "_module_basket_delivery
+ WHERE id = '" . $id . "'
+ ");
+ }
+ header("Location:index.php?do=modules&action=modedit&mod=basket&moduleaction=basket_delivery&cp=" . SESSION);
+ exit;
+ }
+
+ function basketEditDeliveryMethod($tpl_dir,$id)
+ {
+ global $AVE_DB, $AVE_Template;
+
+ if (isset($_REQUEST['sub']) && $_REQUEST['sub'] == 'save')
+ {
+ $AVE_DB->Query("
+ UPDATE " . PREFIX . "_module_basket_delivery
+ SET
+ delivery_title = '" . $_POST['delivery_title'] . "',
+ delivery_description = '" . $_POST['delivery_description'] . "',
+ delivery_activ = '" . $_POST['delivery_activ'] . "',
+ delivery_price = '" . $_POST['delivery_price'] . "',
+ delivery_price_operands = '" . $_POST['delivery_price_operands'] . "'
+ WHERE
+ id = '" . $_REQUEST['id'] . "'
+ ");
+
+ echo '';
+ }
+
+ $sql = $AVE_DB->Query("
+ SELECT *
+ FROM " . PREFIX . "_module_basket_delivery
+ WHERE id = '" . $id . "'
+ ");
+
+ $row = $sql->FetchRow();
+
+ $oCKeditor = new CKeditor();
+ $oCKeditor->returnOutput = true;
+ $oCKeditor->config['toolbar'] = 'Verysmall';
+ $oCKeditor->config['height'] = 200;
+ $config = array();
+ $Edi = $oCKeditor->editor('delivery_description', $row->delivery_description, $config);
+
+ $AVE_Template->assign('Edi', $Edi);
+ $AVE_Template->assign('delivery', $row);
+ $AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'basket_delivery_edit.tpl'));
+ }
+
+
+
+}
+/**
+ */
+?>
\ No newline at end of file
diff --git a/images/loader-12.gif b/images/loader-12.gif
new file mode 100644
index 0000000..a28b11c
Binary files /dev/null and b/images/loader-12.gif differ
diff --git a/images/trash.gif b/images/trash.gif
new file mode 100644
index 0000000..e800ef6
Binary files /dev/null and b/images/trash.gif differ
diff --git a/index.php b/index.php
new file mode 100644
index 0000000..4ca25aa
--- /dev/null
+++ b/index.php
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/info.php b/info.php
new file mode 100644
index 0000000..7184e97
--- /dev/null
+++ b/info.php
@@ -0,0 +1,20 @@
+ 'basket',
+ 'ModuleVersion' => '1.26.1',
+ 'ModuleAutor' => 'AVE.cms Team',
+ 'ModuleCopyright' => '© 2007-' . date('Y') . ' AVE.cms',
+ 'ModuleStatus' => 1,
+ 'ModuleIsFunction' => 1,
+ 'ModuleTemplate' => 1,
+ 'ModuleAdminEdit' => 1,
+ 'ModuleFunction' => 'mod_basket',
+ 'ModuleTag' => '[mod_basket]',
+ 'ModuleTagLink' => null,
+ 'ModuleAveTag' => '#\\\[mod_basket]#',
+ 'ModulePHPTag' => ""
+ );
+?>
\ No newline at end of file
diff --git a/js/basket.js b/js/basket.js
new file mode 100644
index 0000000..55e0ae2
--- /dev/null
+++ b/js/basket.js
@@ -0,0 +1,86 @@
+
\ No newline at end of file
diff --git a/js/jquery.block.min.js b/js/jquery.block.min.js
new file mode 100644
index 0000000..cfb725a
--- /dev/null
+++ b/js/jquery.block.min.js
@@ -0,0 +1,55 @@
+;(function($){if(/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery)||/^1.1/.test($.fn.jquery)){alert('blockUI requires jQuery v1.2.3 or later! You are using v'+$.fn.jquery);return;}
+$.fn._fadeIn=$.fn.fadeIn;var noOp=function(){};var mode=document.documentMode||0;var setExpr=$.browser.msie&&(($.browser.version<8&&!mode)||mode<8);var ie6=$.browser.msie&&/MSIE 6.0/.test(navigator.userAgent)&&!mode;$.blockUI=function(opts){install(window,opts);};$.unblockUI=function(opts){remove(window,opts);};$.growlUI=function(title,message,timeout,onClose){var $m=$('
');if(title)$m.append(''+title+' ');if(message)$m.append(''+message+' ');if(timeout==undefined)timeout=3000;$.blockUI({message:$m,fadeIn:700,fadeOut:1000,centerY:false,timeout:timeout,showOverlay:false,onUnblock:onClose,css:$.blockUI.defaults.growlCSS});};$.fn.block=function(opts){return this.unblock({fadeOut:0}).each(function(){if($.css(this,'position')=='static')
+this.style.position='relative';if($.browser.msie)
+this.style.zoom=1;install(this,opts);});};$.fn.unblock=function(opts){return this.each(function(){remove(this,opts);});};$.blockUI.version=2.39;$.blockUI.defaults={message:'Please wait... ',title:null,draggable:true,theme:false,css:{padding:0,margin:0,width:'30%',top:'40%',left:'35%',textAlign:'center',color:'#000',border:'3px solid #aaa',backgroundColor:'#fff',cursor:'wait'},themedCSS:{width:'30%',top:'40%',left:'35%'},overlayCSS:{backgroundColor:'#000',opacity:0.6,cursor:'wait'},growlCSS:{width:'350px',top:'10px',left:'',right:'10px',border:'none',padding:'5px',opacity:0.6,cursor:'default',color:'#fff',backgroundColor:'#000','-webkit-border-radius':'10px','-moz-border-radius':'10px','border-radius':'10px'},iframeSrc:/^https/i.test(window.location.href||'')?'javascript:false':'about:blank',forceIframe:false,baseZ:1000,centerX:true,centerY:true,allowBodyStretch:true,bindEvents:true,constrainTabKey:true,fadeIn:200,fadeOut:400,timeout:0,showOverlay:true,focusInput:true,applyPlatformOpacityRules:true,onBlock:null,onUnblock:null,quirksmodeOffsetHack:4,blockMsgClass:'blockMsg'};var pageBlock=null;var pageBlockEls=[];function install(el,opts){var full=(el==window);var msg=opts&&opts.message!==undefined?opts.message:undefined;opts=$.extend({},$.blockUI.defaults,opts||{});opts.overlayCSS=$.extend({},$.blockUI.defaults.overlayCSS,opts.overlayCSS||{});var css=$.extend({},$.blockUI.defaults.css,opts.css||{});var themedCSS=$.extend({},$.blockUI.defaults.themedCSS,opts.themedCSS||{});msg=msg===undefined?opts.message:msg;if(full&&pageBlock)
+remove(window,{fadeOut:0});if(msg&&typeof msg!='string'&&(msg.parentNode||msg.jquery)){var node=msg.jquery?msg[0]:msg;var data={};$(el).data('blockUI.history',data);data.el=node;data.parent=node.parentNode;data.display=node.style.display;data.position=node.style.position;if(data.parent)
+data.parent.removeChild(node);}
+$(el).data('blockUI.onUnblock',opts.onUnblock);var z=opts.baseZ;var lyr1=($.browser.msie||opts.forceIframe)?$(''):$('
');var lyr2=opts.theme?$('
'):$('
');var lyr3,s;if(opts.theme&&full){s='';}
+else if(opts.theme){s='';}
+else if(full){s='
';}
+else{s='
';}
+lyr3=$(s);if(msg){if(opts.theme){lyr3.css(themedCSS);lyr3.addClass('ui-widget-content');}
+else
+lyr3.css(css);}
+if(!opts.theme&&(!opts.applyPlatformOpacityRules||!($.browser.mozilla&&/Linux/.test(navigator.platform))))
+lyr2.css(opts.overlayCSS);lyr2.css('position',full?'fixed':'absolute');if($.browser.msie||opts.forceIframe)
+lyr1.css('opacity',0.0);var layers=[lyr1,lyr2,lyr3],$par=full?$('body'):$(el);$.each(layers,function(){this.appendTo($par);});if(opts.theme&&opts.draggable&&$.fn.draggable){lyr3.draggable({handle:'.ui-dialog-titlebar',cancel:'li'});}
+var expr=setExpr&&(!$.boxModel||$('object,embed',full?null:el).length>0);if(ie6||expr){if(full&&opts.allowBodyStretch&&$.boxModel)
+$('html,body').css('height','100%');if((ie6||!$.boxModel)&&!full){var t=sz(el,'borderTopWidth'),l=sz(el,'borderLeftWidth');var fixT=t?'(0 - '+t+')':0;var fixL=l?'(0 - '+l+')':0;}
+$.each([lyr1,lyr2,lyr3],function(i,o){var s=o[0].style;s.position='absolute';if(i<2){full?s.setExpression('height','Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.boxModel?0:'+opts.quirksmodeOffsetHack+') + "px"'):s.setExpression('height','this.parentNode.offsetHeight + "px"');full?s.setExpression('width','jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"'):s.setExpression('width','this.parentNode.offsetWidth + "px"');if(fixL)s.setExpression('left',fixL);if(fixT)s.setExpression('top',fixT);}
+else if(opts.centerY){if(full)s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"');s.marginTop=0;}
+else if(!opts.centerY&&full){var top=(opts.css&&opts.css.top)?parseInt(opts.css.top):0;var expression='((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + '+top+') + "px"';s.setExpression('top',expression);}});}
+if(msg){if(opts.theme)
+lyr3.find('.ui-widget-content').append(msg);else
+lyr3.append(msg);if(msg.jquery||msg.nodeType)
+$(msg).show();}
+if(($.browser.msie||opts.forceIframe)&&opts.showOverlay)
+lyr1.show();if(opts.fadeIn){var cb=opts.onBlock?opts.onBlock:noOp;var cb1=(opts.showOverlay&&!msg)?cb:noOp;var cb2=msg?cb:noOp;if(opts.showOverlay)
+lyr2._fadeIn(opts.fadeIn,cb1);if(msg)
+lyr3._fadeIn(opts.fadeIn,cb2);}
+else{if(opts.showOverlay)
+lyr2.show();if(msg)
+lyr3.show();if(opts.onBlock)
+opts.onBlock();}
+bind(1,el,opts);if(full){pageBlock=lyr3[0];pageBlockEls=$(':input:enabled:visible',pageBlock);if(opts.focusInput)
+setTimeout(focus,20);}
+else
+center(lyr3[0],opts.centerX,opts.centerY);if(opts.timeout){var to=setTimeout(function(){full?$.unblockUI(opts):$(el).unblock(opts);},opts.timeout);$(el).data('blockUI.timeout',to);}};function remove(el,opts){var full=(el==window);var $el=$(el);var data=$el.data('blockUI.history');var to=$el.data('blockUI.timeout');if(to){clearTimeout(to);$el.removeData('blockUI.timeout');}
+opts=$.extend({},$.blockUI.defaults,opts||{});bind(0,el,opts);if(opts.onUnblock===null){opts.onUnblock=$el.data('blockUI.onUnblock');$el.removeData('blockUI.onUnblock');}
+var els;if(full)
+els=$('body').children().filter('.blockUI').add('body > .blockUI');else
+els=$('.blockUI',el);if(full)
+pageBlock=pageBlockEls=null;if(opts.fadeOut){els.fadeOut(opts.fadeOut);setTimeout(function(){reset(els,data,opts,el);},opts.fadeOut);}
+else
+reset(els,data,opts,el);};function reset(els,data,opts,el){els.each(function(i,o){if(this.parentNode)
+this.parentNode.removeChild(this);});if(data&&data.el){data.el.style.display=data.display;data.el.style.position=data.position;if(data.parent)
+data.parent.appendChild(data.el);$(el).removeData('blockUI.history');}
+if(typeof opts.onUnblock=='function')
+opts.onUnblock(el,opts);};function bind(b,el,opts){var full=el==window,$el=$(el);if(!b&&(full&&!pageBlock||!full&&!$el.data('blockUI.isBlocked')))
+return;if(!full)
+$el.data('blockUI.isBlocked',b);if(!opts.bindEvents||(b&&!opts.showOverlay))
+return;var events='mousedown mouseup keydown keypress';b?$(document).bind(events,opts,handler):$(document).unbind(events,handler);};function handler(e){if(e.keyCode&&e.keyCode==9){if(pageBlock&&e.data.constrainTabKey){var els=pageBlockEls;var fwd=!e.shiftKey&&e.target===els[els.length-1];var back=e.shiftKey&&e.target===els[0];if(fwd||back){setTimeout(function(){focus(back)},10);return false;}}}
+var opts=e.data;if($(e.target).parents('div.'+opts.blockMsgClass).length>0)
+return true;return $(e.target).parents().children().filter('div.blockUI').length==0;};function focus(back){if(!pageBlockEls)
+return;var e=pageBlockEls[back===true?pageBlockEls.length-1:0];if(e)
+e.focus();};function center(el,x,y){var p=el.parentNode,s=el.style;var l=((p.offsetWidth-el.offsetWidth)/2)-sz(p,'borderLeftWidth');var t=((p.offsetHeight-el.offsetHeight)/2)-sz(p,'borderTopWidth');if(x)s.left=l>0?(l+'px'):'0';if(y)s.top=t>0?(t+'px'):'0';};function sz(el,p){return parseInt($.css(el,p))||0;};})(jQuery);
\ No newline at end of file
diff --git a/lang/index.php b/lang/index.php
new file mode 100644
index 0000000..4ca25aa
--- /dev/null
+++ b/lang/index.php
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/lang/ru.txt b/lang/ru.txt
new file mode 100644
index 0000000..989b8ef
--- /dev/null
+++ b/lang/ru.txt
@@ -0,0 +1,91 @@
+
+MODULE_NAME = "Корзина"
+MODULE_DESCRIPTION = "Модуль позволяет организовать торговлю любыми товарами с использованием корзины и формы оформления заказа. Разместите системный тег [mod_basket] в нужном месте вашего шаблона сайта или содержимом документа."
+
+
+BASKET_SHOP_NAME = "Мини-магазин AVE.cms"
+BASKET_SHOP_LOGO = "logo_bw.png"
+BASKET_SHOP_ADDRESS = "МойГород, ул. Ленина, д.1 тел./факс: (111) 555-55-66 Email: info@mysite.ru"
+
+BASKET_PRODUCT_NAME = "Наименование"
+BASKET_PRODUCT_QUANTITY = "Количество"
+BASKET_PRODUCT_PRICE = "Цена"
+BASKET_PRODUCT_AMOUNT = "Сумма"
+BASKET_PRODUCT_DELETE = "Удалить"
+
+BASKET_ORDER_TITLE = "Уведомление о заказе"
+BASKET_ORDER_HEAD = "Обратите внимание этот документ не является официальным счетом. При получении заказа Вы получите счет который можно будет использовать в финансовой отчетности и документы подтверждающие покупку."
+BASKET_ORDER_TOTAL = "Итого"
+BASKET_ORDER_DATE = "Дата заказа"
+BASKET_ORDER_INFO = "У вас есть вопросы? Обратитесь к нашим менеджерам."
+BASKET_ORDER_CHECKOUT = "Оформить"
+BASKET_ORDER_SHOW_TIP = "Проверьте список товаров в корзине. При необходимости можете изменить количество товаров в заказе, либо исключить некоторые товары из заказа. Для пересчета суммы заказа используйте кнопку «Обновить». Если список товаров составлен правильно — переходите к заполнению персональной информации по ссылке «Продолжить»."
+BASKET_ORDER_FORM_TIP = "Пожалуйста заполните все поля — это поможет нам максимально быстро и точно выполнить Ваш заказ. Если Вы введёте E-mail то получите копию заказа, а так-же будете получать уведомления о этапах выполнения Вашего заказа. В поле «Адрес» укажите адрес доставки и информацию для курьера (станцию метро, номер подъезда, код домофона). Если у Вас есть какие-то дополнительные пожелания относительно заказа — опишите их в поле «Комментарий»."
+BASKET_ORDER_SEND_SUCCESS = "Заказ успешно отправлен"
+
+BASKET_CUSTOMER_INFO = "Информация о заказчике"
+BASKET_CUSTOMER_NAME = "Имя"
+BASKET_CUSTOMER_EMAIL = "E-mail"
+BASKET_CUSTOMER_PHONE = "Телефон"
+BASKET_CUSTOMER_ADDRESS = "Адрес"
+BASKET_CUSTOMER_DESCRIPTION = "Комментарий"
+
+BASKET_PROGRESSBAR_STEP1 = "Список товаров"
+BASKET_PROGRESSBAR_STEP2 = "Персональная информация"
+BASKET_PROGRESSBAR_STEP3 = "Финиш"
+
+BASKET_TITLE = "Корзина"
+BASKET_CURRENCY = "р."
+BASKET_UNIT = "шт."
+BASKET_UPDATE = "Обновить"
+BASKET_NEXT = "Продолжить"
+BASKET_SEND = "Отправить"
+BASKET_EMPTY = "Корзина пуста"
+
+[admin]
+ModName = "Корзина"
+WelcomeText = "Управление модулем Корзина"
+mainPage = "Главная страница"
+
+Yes = "Да"
+No = "Нет"
+ButtonSave = "Сохранить"
+ButtonAdd = "Добавить"
+ButtonEdit = "Редактировать"
+Actions = "Действия"
+
+PaymentMethod = "Вид оплаты"
+PaymentMethodName = "Наименование оплаты"
+PaymentMethodPosition = "Позиция"
+PaymentMethodActive = "Активно"
+NewPaymentMethod = "Добавить вид оплаты"
+PaymentMethodDel = "Удалить"
+PaymentMethodEdit = "Редактировать"
+PaymentMethodDelTitle = "Вы действительно хотите удалить метод оплаты?"
+PaymentCostPercent = "% (Процентов)"
+PaymentCostMoney = "Сумма (стоимость)"
+PaymentCostText = "Текст (просто)"
+AllowedDeliveryMethods = "Совместимые виды доставки"
+PaymentPrice = "Стоимость"
+PaymentDelivery = "Виды доставки"
+PaymentActive = "Активен"
+PaymentName = "Наименование"
+PaymentDescription = "Описание"
+DeliveryMethodInf = "Пожалуйста выберите виды доставки заказа совместимые с видом платежа. Для выбора нескольких видов произведите выбор удерживая нажатой клавишу Ctrl"
+EditPaymentMethod = "Редактировать вид платежа"
+EditPaymentInfo = "Внимание! При редактировании вида платежа проверте все введеные данные. В случае неверных данных возможны ошибки при оплате товара. Это может привести к потере денежных средств как со стороны клиента так и со сторны администрации сайта."
+
+DeliveryMethod = "Вид доставки"
+DeliveryMethodName = "Наименование доставки"
+DeliveryMethodPosition = "Позиция"
+DeliveryMethodActive = "Активно"
+NewDeliveryMethod = "Добавить вид доставки"
+DeliveryMethodDel = "Удалить"
+DeliveryMethodEdit = "Редактировать"
+DeliveryMethodDelTitle = "Вы действительно хотите удалить метод доставки?"
+DeliveryPrice = "Стоимость"
+DeliveryName = "Наименование"
+DeliveryDescription = "Описание"
+DeliveryActive = "Активен"
+EditDeliveryMethod = "Редактировать вид доставки"
+EditDeliveryInfo = "Внимание! При редактировании вида доставки проверте все введеные данные. В случае неверных данных возможны ошибки при оплате товара. Это может привести к потере денежных средств как со стороны клиента так и со сторны администрации сайта."
\ No newline at end of file
diff --git a/module.php b/module.php
new file mode 100644
index 0000000..f2afe5d
--- /dev/null
+++ b/module.php
@@ -0,0 +1,175 @@
+register_object('oBasket', $oBasket);
+
+ $AVE_Template->config_load(BASE_DIR . '/modules/basket/lang/' . $_SESSION['user_language'] . '.txt');
+
+ $AVE_Template->display(BASE_DIR . '/modules/basket/templates/basket_show.tpl');
+}
+
+if (!defined('ACP') && isset($_REQUEST['module']) && $_REQUEST['module'] == 'basket' && !empty($_REQUEST['action']))
+{
+ require_once(BASE_DIR . '/modules/basket/class.basket.php');
+
+ $oBasket = new ModulBasket;
+
+ $AVE_Template->register_object('oBasket', $oBasket);
+
+ $AVE_Template->config_load(BASE_DIR . '/modules/basket/lang/' . $_SESSION['user_language'] . '.txt');
+
+ switch ($_REQUEST['action'])
+ {
+ case 'add':
+ $p_id = (isset($_REQUEST['p_id'])) ? (int)$_REQUEST['p_id'] : 0;
+ $p_name = (isset($_REQUEST['p_name'])) ? (int)$_REQUEST['p_name'] : 0;
+ $p_price = (isset($_REQUEST['p_price'])) ? (int)$_REQUEST['p_price'] : 0;
+ $p_article = (isset($_REQUEST['p_article'])) ? (int)$_REQUEST['p_article'] : 0;
+ $p_size = (isset($_REQUEST['p_size'])) ? (int)$_REQUEST['p_size'] : 0;
+ $quantity = (isset($_REQUEST['quantity'])) ? (int)$_REQUEST['quantity'] : 1;
+ $oBasket->basketProductAdd($p_id, $p_name, $p_price, $p_article, $p_size, $quantity);
+ if (empty($_POST['action']))
+ {
+ header("Location:" . get_referer_link());
+ }
+ else
+ {
+ $AVE_Template->display(BASE_DIR . '/modules/basket/templates/basket_show.tpl');
+ }
+ exit;
+
+ case 'delete':
+ $id = (isset($_REQUEST['id'])) ? (int)$_REQUEST['id'] : 0;
+ $oBasket->basketProductDelete($id);
+ if (empty($_POST['action']))
+ {
+ header("Location:" . get_referer_link());
+ }
+ else
+ {
+ $AVE_Template->display(BASE_DIR . '/modules/basket/templates/basket_show.tpl');
+ }
+ exit;
+
+ case 'order':
+ unset ($_SESSION['delivery_id']);
+ unset ($_SESSION['payment_id']);
+ define('MODULE_SITE', $AVE_Template->get_config_vars('BASKET_TITLE'));
+ define('MODULE_CONTENT', $AVE_Template->fetch(BASE_DIR . '/modules/basket/templates/order_show.tpl'));
+ break;
+
+ case 'update':
+ $product_delete = isset($_REQUEST['product_delete']) ? $_REQUEST['product_delete'] : null;
+ $product_quantity = isset($_REQUEST['product_quantity']) ? $_REQUEST['product_quantity'] : null;
+ $delivery_id = isset($_REQUEST['delivery_id']) ? $_REQUEST['delivery_id'] : null;
+ $payment_id = isset($_REQUEST['payment_id']) ? $_REQUEST['payment_id'] : null;
+ $oBasket->basketOrderUpdate($product_quantity, $product_delete, $delivery_id, $payment_id);
+ if (empty($_POST['action']))
+ {
+ header("Location:" . get_referer_link());
+ }
+ else
+ {
+ $AVE_Template->display(BASE_DIR . '/modules/basket/templates/order_show.tpl');
+ }
+ exit;
+
+ case 'form':
+ define('MODULE_SITE', $AVE_Template->get_config_vars('BASKET_TITLE'));
+ define('MODULE_CONTENT', $AVE_Template->fetch(BASE_DIR . '/modules/basket/templates/order_form.tpl'));
+ break;
+
+ case 'send':
+ $oBasket->basketOrderSend();
+ define('MODULE_SITE', $AVE_Template->get_config_vars('BASKET_TITLE'));
+ define('MODULE_CONTENT', $AVE_Template->fetch(BASE_DIR . '/modules/basket/templates/order_finish.tpl'));
+ unset ($_SESSION['delivery_id']);
+ unset ($_SESSION['payment_id']);
+ break;
+ }
+}
+
+if (defined('ACP') && !empty($_REQUEST['moduleaction']))
+ {
+
+ require_once(BASE_DIR . '/modules/basket/class.basket_admin.php');
+
+ $aBasket = new ModulBasketAdmin;
+
+ $tpl_dir = BASE_DIR . '/modules/basket/templates_admin/';
+ $tpl_dir_source = BASE_DIR . '/modules/basket/templates_admin';
+ $lang_file = BASE_DIR . '/modules/basket/lang/' . $_SESSION['admin_language'] . '.txt';
+
+ $AVE_Template->config_load($lang_file, 'admin');
+ $config_vars = $AVE_Template->get_config_vars();
+ $AVE_Template->assign('config_vars', $config_vars);
+ $AVE_Template->assign('source', $tpl_dir_source);
+
+ if (!empty($_REQUEST['moduleaction']))
+ {
+ switch ($_REQUEST['moduleaction'])
+ {
+ case '1':
+ $aBasket->basketStart($tpl_dir);
+ break;
+
+ case 'basket_payment':
+ $aBasket->basketPaymentMethods($tpl_dir);
+ break;
+
+ case 'basket_payment_new':
+ $aBasket->basketNewPaymentMethod();
+ break;
+
+ case 'basket_payment_del':
+ $aBasket->basketDelPaymentMethod($_REQUEST['id']);
+ break;
+
+ case 'basket_payment_edit':
+ $aBasket->basketEditPaymentMethod($tpl_dir, $_REQUEST['id']);
+ break;
+
+ case 'basket_delivery':
+ $aBasket->basketDeliveryMethods($tpl_dir);
+ break;
+
+ case 'basket_delivery_new':
+ $aBasket->basketNewDeliveryMethod();
+ break;
+
+ case 'basket_delivery_del':
+ $aBasket->basketDelDeliveryMethod($_REQUEST['id']);
+ break;
+
+ case 'basket_delivery_edit':
+ $aBasket->basketEditDeliveryMethod($tpl_dir, $_REQUEST['id']);
+ break;
+ }
+ }
+}
+?>
\ No newline at end of file
diff --git a/sql.php b/sql.php
new file mode 100644
index 0000000..a024b47
--- /dev/null
+++ b/sql.php
@@ -0,0 +1,110 @@
+
\ No newline at end of file
diff --git a/templates/basket_show.tpl b/templates/basket_show.tpl
new file mode 100644
index 0000000..5554478
--- /dev/null
+++ b/templates/basket_show.tpl
@@ -0,0 +1,15 @@
+{oBasket->getBasket assign='basket'}
+
+
+
{#BASKET_TITLE#}
+ {if $basket.products}
+
+
+ {foreach from=$basket.products item=product} {$product->name} ({$product->quantity}{#BASKET_UNIT#}) - {$product->amount|string_format:"%.2f"}{#BASKET_CURRENCY#}
+ {/foreach}
+
+
+
{#BASKET_ORDER_CHECKOUT#} {#BASKET_ORDER_TOTAL#}: {$basket.total|string_format:"%.2f"}{#BASKET_CURRENCY#} {$basket.quantity}
+
+ {/if}
+
\ No newline at end of file
diff --git a/templates/index.php b/templates/index.php
new file mode 100644
index 0000000..4ca25aa
--- /dev/null
+++ b/templates/index.php
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/templates/mail_text.tpl b/templates/mail_text.tpl
new file mode 100644
index 0000000..33f6703
--- /dev/null
+++ b/templates/mail_text.tpl
@@ -0,0 +1,159 @@
+
+
+
+{#BASKET_SHOP_NAME#}
+{literal}
+
+{/literal}
+
+{oBasket->getBasket assign='basket'}
+
+
+
+
+
+
+ {#BASKET_SHOP_NAME#} {#BASKET_SHOP_ADDRESS#}
+
+
+
+
+
+ {#BASKET_ORDER_TITLE#}
+
+ {#BASKET_ORDER_HEAD#}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+{foreach name=product from=$basket.products item=product}
+
+ {$smarty.foreach.product.iteration}
+ {$product->name|truncate:100|escape}
+ {$product->size}
+ {$product->article}
+ {$product->quantity}{#BASKET_UNIT#}
+ {$product->price|string_format:"%.2f"}{#BASKET_CURRENCY#}
+ {$product->amount|string_format:"%.2f"}{#BASKET_CURRENCY#}
+
+{/foreach}
+
+ {#BASKET_ORDER_TOTAL#}
+ {$basket.total_send|string_format:"%.2f"}{#BASKET_CURRENCY#}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {$delivery_method_titel}
+ {if $delivery_method_operands|escape == '%'}{$delivery_method_price}%{elseif $delivery_method_operands|escape == 'Money'}{if $delivery_method_price|escape == 0 || $delivery_method_price=='0.00'}Бесплатно{else}{num_format val=$delivery_method_price|string_format:"%.2f"} руб.{/if}{elseif $delivery_method_operands|escape == 'Text'}{$delivery_method_price|escape}{/if}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {$payment_method_titel}
+ {if $payment_method_operands|escape == '%'}{$payment_method_price}%{elseif $payment_method_operands|escape == 'Money'}{if $payment_method_price|escape == 0 || $payment_method_price=='0.00'}Бесплатно{else}{num_format val=$payment_method_price|string_format:"%.2f"} руб.{/if}{elseif $payment_method_operands|escape == 'Text'}{$payment_method_price|escape}{/if}
+
+
+
+
+
+
+
+ {#BASKET_ORDER_TOTAL#} - {$basket.total|string_format:"%.2f"}{#BASKET_CURRENCY#}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {#BASKET_CUSTOMER_NAME#}
+ {$customer.name|escape}
+
+
+ {#BASKET_CUSTOMER_EMAIL#}
+ {$customer.email}
+
+
+ {#BASKET_CUSTOMER_PHONE#}
+ {$customer.phone|escape}
+
+
+ {#BASKET_CUSTOMER_ADDRESS#}
+ {textformat wrap_char=' '}{$customer.address|truncate:1000|escape}{/textformat}
+
+
+ {#BASKET_CUSTOMER_DESCRIPTION#}
+ {textformat wrap_char=' '}{$customer.description|truncate:1000|escape}{/textformat}
+
+
+
+
+
+ {#BASKET_ORDER_DATE#}
+ {$smarty.now|date_format:"%d.%m.%Y, %H:%M"}
+
+
+
+
+
+ {#BASKET_ORDER_INFO#}
+
+ {#BASKET_SHOP_NAME#}
+ {#BASKET_SHOP_ADDRESS#}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/order_finish.tpl b/templates/order_finish.tpl
new file mode 100644
index 0000000..3e8484d
--- /dev/null
+++ b/templates/order_finish.tpl
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ 1 {#BASKET_PROGRESSBAR_STEP1#}
+ 2 {#BASKET_PROGRESSBAR_STEP2#}
+ 3 {#BASKET_PROGRESSBAR_STEP3#}
+
+
+
{#BASKET_ORDER_SEND_SUCCESS#}
+
\ No newline at end of file
diff --git a/templates/order_form.tpl b/templates/order_form.tpl
new file mode 100644
index 0000000..31b74fa
--- /dev/null
+++ b/templates/order_form.tpl
@@ -0,0 +1,97 @@
+{oBasket->getBasket assign='basket'}
+
+{if $basket.products}
+
+
+
+
+
+
+
+ 1 {#BASKET_PROGRESSBAR_STEP1#}
+ 2 {#BASKET_PROGRESSBAR_STEP2#}
+ 3 {#BASKET_PROGRESSBAR_STEP3#}
+
+
+
+
{#BASKET_ORDER_FORM_TIP#}
+
+
+
+{else}
+ {#BASKET_EMPTY#}
+{/if}
\ No newline at end of file
diff --git a/templates/order_show.tpl b/templates/order_show.tpl
new file mode 100644
index 0000000..3155780
--- /dev/null
+++ b/templates/order_show.tpl
@@ -0,0 +1,213 @@
+{oBasket->getBasket assign='basket'}
+
+{if $basket.products}
+
+
+
+
+
+
+
+ 1 {#BASKET_PROGRESSBAR_STEP1#}
+ 2 {#BASKET_PROGRESSBAR_STEP2#}
+ 3 {#BASKET_PROGRESSBAR_STEP3#}
+
+
+
+
{#BASKET_ORDER_SHOW_TIP#}
+
+
+
+
+
+
+
+
+
+
+
+{if $smarty.session.delivery_id}
+
+
+{/if}
+
+
+
+
+
+ Итого
+
+
+
+
+
+
+
+ {$basket.total|string_format:"%.2f"}
+
+
+
+
+
+
+
+
+
+
+{if $smarty.session.delivery_id && $smarty.session.payment_id}
+{#BASKET_NEXT#}
+{/if}
+
+
+
+{literal}
+
+{/literal}
+
+
+{else}
+ {#BASKET_EMPTY#}
+{/if}
\ No newline at end of file
diff --git a/templates_admin/basket_delivery.tpl b/templates_admin/basket_delivery.tpl
new file mode 100644
index 0000000..c3f8c06
--- /dev/null
+++ b/templates_admin/basket_delivery.tpl
@@ -0,0 +1,79 @@
+
{#DeliveryMethod#}
+
+
+
+
+
+
+
+
diff --git a/templates_admin/basket_delivery_edit.tpl b/templates_admin/basket_delivery_edit.tpl
new file mode 100644
index 0000000..291d707
--- /dev/null
+++ b/templates_admin/basket_delivery_edit.tpl
@@ -0,0 +1,56 @@
+
+
+
{#EditDeliveryMethod#}
+
+
+
+
\ No newline at end of file
diff --git a/templates_admin/basket_payment.tpl b/templates_admin/basket_payment.tpl
new file mode 100644
index 0000000..ed825a8
--- /dev/null
+++ b/templates_admin/basket_payment.tpl
@@ -0,0 +1,77 @@
+
{#PaymentMethod#}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates_admin/basket_payment_edit.tpl b/templates_admin/basket_payment_edit.tpl
new file mode 100644
index 0000000..3390075
--- /dev/null
+++ b/templates_admin/basket_payment_edit.tpl
@@ -0,0 +1,76 @@
+
+
+
{#EditPaymentMethod#}
+
+
+
+
\ No newline at end of file
diff --git a/templates_admin/basket_start.tpl b/templates_admin/basket_start.tpl
new file mode 100644
index 0000000..4f9f754
--- /dev/null
+++ b/templates_admin/basket_start.tpl
@@ -0,0 +1,62 @@
+
{#ModName#}
+
+
+
+
\ No newline at end of file