Skip to content

Commit

Permalink
OkayCMS 3.3.4
Browse files Browse the repository at this point in the history
  • Loading branch information
OkayCMS committed Dec 23, 2019
1 parent f9c9fa3 commit 724a17d
Show file tree
Hide file tree
Showing 70 changed files with 2,753 additions and 435 deletions.
44 changes: 37 additions & 7 deletions 1DB_changes/okay_clean.sql
@@ -1,12 +1,21 @@
-- Adminer 4.7.1 MySQL dump

SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

SET NAMES utf8mb4;

DROP TABLE IF EXISTS `ok_advantages`;
CREATE TABLE `ok_advantages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`filename` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`text` text COLLATE utf8mb4_unicode_ci,
`position` int(11) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `ok_advantages` (`id`, `filename`, `text`, `position`) VALUES
(1, 'advantage1_icon_1.jpg', 'Доставка по всей стране', 2),
(2, 'advantage2_icon_1.jpg', '100% гарантия качества', 0),
(3, 'advantage3_icon_1.jpg', '14 дней на возврат товара', 1),
(4, 'advantage4_icon_1.jpg', 'Самовывоз из магазина', 3);

DROP TABLE IF EXISTS `ok_blog`;
CREATE TABLE `ok_blog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
Expand Down Expand Up @@ -1964,6 +1973,28 @@ INSERT INTO `ok_languages` (`id`, `name`, `label`, `href_lang`, `enabled`, `posi
(2, 'Английский', 'en', 'en', 1, 2, 'Английский', 'Англійська', 'English'),
(3, 'Украинский', 'ua', 'uk', 1, 3, 'Украинский', 'Українська', 'Ukrainian');

DROP TABLE IF EXISTS `ok_lang_advantages`;
CREATE TABLE `ok_lang_advantages` (
`advantage_id` int(11) DEFAULT NULL,
`lang_id` int(11) NOT NULL,
`text` text COLLATE utf8mb4_unicode_ci,
UNIQUE KEY `lang_id` (`advantage_id`,`lang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `ok_lang_advantages` (`advantage_id`, `lang_id`, `text`) VALUES
(1, 1, 'Доставка по всей стране'),
(1, 2, 'Nationwide delivery'),
(1, 3, 'Доставка по всій країні'),
(2, 1, '100% гарантия качества'),
(2, 2, '100% quality guarantee'),
(2, 3, '100% гарантія якості'),
(3, 1, '14 дней на возврат товара'),
(3, 2, '14 days for return'),
(3, 3, '14 днів на повернення товару'),
(4, 1, 'Самовывоз из магазина'),
(4, 2, 'Pickup'),
(4, 3, 'Самовивіз з магазину');

DROP TABLE IF EXISTS `ok_lang_blog`;
CREATE TABLE `ok_lang_blog` (
`lang_id` int(11) NOT NULL,
Expand Down Expand Up @@ -9126,4 +9157,3 @@ INSERT INTO `ok_variants` (`id`, `product_id`, `sku`, `name`, `weight`, `price`,
(288, 48, '', 'синий', NULL, 5100.00, 0.00, NULL, 288, '', 4, '', NULL),
(289, 48, '', 'красный', NULL, 5200.00, 0.00, NULL, 289, '', 4, '', NULL);

-- 2019-12-18 10:40:09
37 changes: 37 additions & 0 deletions 1DB_changes/update_3.3.4.sql
@@ -0,0 +1,37 @@
-- 0
DROP TABLE IF EXISTS `ok_advantages`;
CREATE TABLE `ok_advantages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`filename` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`text` text COLLATE utf8mb4_unicode_ci,
`position` int(11) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `ok_advantages` (`id`, `filename`, `text`, `position`) VALUES
(1, 'advantage1_icon_1.jpg', 'Доставка по всей стране', 2),
(2, 'advantage2_icon_1.jpg', '100% гарантия качества', 0),
(3, 'advantage3_icon_1.jpg', '14 дней на возврат товара', 1),
(4, 'advantage4_icon_1.jpg', 'Самовывоз из магазина', 3);

DROP TABLE IF EXISTS `ok_lang_advantages`;
CREATE TABLE `ok_lang_advantages` (
`advantage_id` int(11) DEFAULT NULL,
`lang_id` int(11) NOT NULL,
`text` text COLLATE utf8mb4_unicode_ci,
UNIQUE KEY `lang_id` (`advantage_id`,`lang_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `ok_lang_advantages` (`advantage_id`, `lang_id`, `text`) VALUES
(1, 1, 'Доставка по всей стране'),
(1, 2, 'Nationwide delivery'),
(1, 3, 'Доставка по всій країні'),
(2, 1, '100% гарантия качества'),
(2, 2, '100% quality guarantee'),
(2, 3, '100% гарантія якості'),
(3, 1, '14 дней на возврат товара'),
(3, 2, '14 days for return'),
(3, 3, '14 днів на повернення товару'),
(4, 1, 'Самовывоз из магазина'),
(4, 2, 'Pickup'),
(4, 3, 'Самовивіз з магазину');
9 changes: 4 additions & 5 deletions Okay/Controllers/CartController.php
Expand Up @@ -50,7 +50,7 @@ public function render(
// Если передан id варианта, добавим его в корзину
if ($variantId = $request->get('variant', 'integer')) {
$cartCore->addItem($variantId, $request->get('amount', 'integer'));
$this->response->redirectTo(Router::generateUrl('cart', [], true));
$this->response->redirectTo(Router::generateUrl('cart', [], true), 301);
}

$this->setMetadataHelper($cartMetadataHelper);
Expand Down Expand Up @@ -139,8 +139,7 @@ public function render(
if ($couponsEntity->count(['valid'=>1])>0) {
$this->design->assign('coupon_request', true);
}

$this->design->assign('cart', $cartCore->get());

$this->response->setContent('cart.tpl');
}

Expand Down Expand Up @@ -179,7 +178,7 @@ public function cartAjax(
$this->design->assign('all_currencies', $currenciesEntity->mappedBy('id')->find());

/*Рабтаем с товарами в корзине*/
if (count($cart->purchases) > 0) {
if ($cart->isEmpty === false) {
if (isset($_GET['coupon_code'])) {
$couponCode = trim($request->get('coupon_code', 'string'));
if (empty($couponCode)) {
Expand Down Expand Up @@ -255,4 +254,4 @@ public function addItem(Cart $cartCore, $variantId)
$this->response->redirectTo(Router::generateUrl('cart', [], true));
}

}
}
2 changes: 1 addition & 1 deletion Okay/Controllers/CategoryController.php
Expand Up @@ -239,7 +239,7 @@ public function render(
$this->response->setHeaderLastModify(max($lastModify));
//lastModify END

$this->design->assign('set_canonical', $filterHelper->isSetCanonical($filtersUrl));
$this->design->assign('set_canonical', true);

$relPrevNext = $this->design->fetch('products_rel_prev_next.tpl');
$this->design->assign('rel_prev_next', $relPrevNext);
Expand Down
156 changes: 88 additions & 68 deletions Okay/Core/Cart.php
Expand Up @@ -48,77 +48,19 @@ public function get() {
$cart->coupon = null;
$cart->discount = 0;
$cart->coupon_discount = 0;

if (empty($_SESSION['shopping_cart'])) {
return $cart;
}

$variants = $this->variantsEntity->find(['id' => $this->getVariantsIdsByCart($_SESSION['shopping_cart'])]);
if (empty($variants)) {
return $cart;
}

$variants = $this->moneyHelper->convertVariantsPriceToMainCurrency($variants);

$products = $this->getProductsByVariants($variants);
$products = $this->productsHelper->attachImages($products);

// TODO: собирать целостно в одном методе
$items = $this->buildItemsByVariants($variants);
foreach($items as $variantId=>$item) {
$purchase = null;
if(!empty($products[$item->variant->product_id])) {
$purchase = new \stdClass();
$purchase->product = $products[$item->variant->product_id];
$purchase->variant = $item->variant;
$purchase->amount = $item->amount;

$purchase->product_id = $item->variant->product_id;
$purchase->product_name = $products[$item->variant->product_id]->name;

$purchase->variant_id = $item->variant->id;
$purchase->variant_name = $item->variant->name;
$purchase->price = $item->variant->price;
$purchase->sku = $item->variant->sku;
$purchase->units = $item->variant->units;

$purchase->meta = (object) [
'total_price' => $purchase->amount * $purchase->price
];
$cart->isEmpty = true;

if ($purchases = $this->getPurchases()) {
foreach ($purchases as $purchase) {
$cart->purchases[] = $purchase;
$cart->total_price += $item->variant->price*$item->amount;
$cart->total_products += $item->amount;
$cart->total_price += $purchase->variant->price * $purchase->amount;
$cart->total_products += $purchase->amount;
}
}

//TODO: В отдельный модуль
if($this->couponCodeExists()) {
$cart->coupon = $this->couponsEntity->get($_SESSION['coupon_code']);
if($cart->coupon && $cart->coupon->valid && $cart->total_price >= $cart->coupon->min_order_price) {
if($cart->coupon->type == 'absolute') {
// Абсолютная скидка не более суммы заказа
$cart->coupon_discount = $cart->total_price>$cart->coupon->value?$cart->coupon->value:$cart->total_price;
$cart->total_price = max(0, $cart->total_price-$cart->coupon->value);
$cart->coupon->coupon_percent = round(100-($cart->total_price*100)/($cart->total_price+$cart->coupon->value),2);
} else {
$cart->coupon->coupon_percent = $cart->coupon->value;
$cart->coupon_discount = $cart->total_price * ($cart->coupon->value)/100;
$cart->total_price = $cart->total_price-$cart->coupon_discount;
}
} else {
unset($_SESSION['coupon_code']);
}
}

//TODO: В отдельный модуль
$cart->discount = 0;
if(isset($_SESSION['user_id']) && ($user = $this->usersEntity->get(intval($_SESSION['user_id'])))) {
$cart->discount = $user->discount;
$cart->isEmpty = false;
}

$cart->total_price *= (100 - $cart->discount)/100;
return ExtenderFacade::execute(__METHOD__, $cart, func_get_args());
$cart = ExtenderFacade::execute(__METHOD__, $cart, func_get_args());
return $this->applyDiscounts($cart);
}

public function addItem($variantId, $amount = 1)
Expand Down Expand Up @@ -179,6 +121,84 @@ public function applyCoupon($couponCode)
ExtenderFacade::execute(__METHOD__, null, func_get_args());
}

private function applyDiscounts($cart)
{
//TODO: В отдельный модуль
if ($this->couponCodeExists()) {
$cart->coupon = $this->couponsEntity->get($_SESSION['coupon_code']);
if($cart->coupon && $cart->coupon->valid && $cart->total_price >= $cart->coupon->min_order_price) {
if ($cart->coupon->type == 'absolute') {
// Абсолютная скидка не более суммы заказа
$cart->coupon_discount = $cart->total_price>$cart->coupon->value?$cart->coupon->value:$cart->total_price;
$cart->total_price = max(0, $cart->total_price-$cart->coupon->value);
$cart->coupon->coupon_percent = round(100-($cart->total_price*100)/($cart->total_price+$cart->coupon->value),2);
} else {
$cart->coupon->coupon_percent = $cart->coupon->value;
$cart->coupon_discount = $cart->total_price * ($cart->coupon->value)/100;
$cart->total_price = $cart->total_price-$cart->coupon_discount;
}
} else {
unset($_SESSION['coupon_code']);
}
}

//TODO: В отдельный модуль
$cart->discount = 0;
if (isset($_SESSION['user_id']) && ($user = $this->usersEntity->get(intval($_SESSION['user_id'])))) {
$cart->discount = $user->discount;
}

$cart->total_price *= (100 - $cart->discount)/100;

return ExtenderFacade::execute(__METHOD__, $cart, func_get_args());
}

private function getPurchases()
{
$purchases = [];
if (empty($_SESSION['shopping_cart'])) {
return ExtenderFacade::execute(__METHOD__, $purchases, func_get_args());
}

$variants = $this->variantsEntity->find(['id' => $this->getVariantsIdsByCart($_SESSION['shopping_cart'])]);
if (empty($variants)) {
return ExtenderFacade::execute(__METHOD__, $purchases, func_get_args());
}

$variants = $this->moneyHelper->convertVariantsPriceToMainCurrency($variants);

$products = $this->getProductsByVariants($variants);
$products = $this->productsHelper->attachImages($products);

// TODO: собирать целостно в одном методе
$items = $this->buildItemsByVariants($variants);
foreach($items as $variantId=>$item) {
$purchase = null;
if (!empty($products[$item->variant->product_id])) {
$purchase = new \stdClass();
$purchase->product = $products[$item->variant->product_id];
$purchase->variant = $item->variant;
$purchase->amount = $item->amount;

$purchase->product_id = $item->variant->product_id;
$purchase->product_name = $products[$item->variant->product_id]->name;

$purchase->variant_id = $item->variant->id;
$purchase->variant_name = $item->variant->name;
$purchase->price = $item->variant->price;
$purchase->sku = $item->variant->sku;
$purchase->units = $item->variant->units;

$purchase->meta = (object) [
'total_price' => $purchase->amount * $purchase->price
];

$purchases[] = $purchase;
}
}
return ExtenderFacade::execute(__METHOD__, $purchases, func_get_args());
}

private function getVariantsIdsByCart($sessionCart)
{
return array_keys($sessionCart);
Expand All @@ -197,7 +217,7 @@ private function getProductsByVariants($variants)
{
$productsIds = $this->getProductsIdsByVariants($variants);
$products = $this->productsEntity->mappedBy('id')->find([
'id' => $productsIds,
'id' => $productsIds,
'limit' => count($productsIds)
]);

Expand Down Expand Up @@ -231,4 +251,4 @@ private function getProductsIdsByVariants($variants)

return $productsIds;
}
}
}
2 changes: 1 addition & 1 deletion Okay/Core/Config.php
Expand Up @@ -12,7 +12,7 @@ class Config
{

/*Версия системы*/
public $version = '3.3.3';
public $version = '3.3.4';
/*Тип системы*/
public $version_type = 'pro';

Expand Down
2 changes: 1 addition & 1 deletion Okay/Core/Design.php
Expand Up @@ -170,7 +170,7 @@ public function assign($var, $value, $dynamicJs = false)
{

if ($dynamicJs === true) {
$_SESSION['dynamic_js']['vars'][$var] = $value;
$_SESSION['dynamic_js']['js_vars'][$var] = $value;
}

return $this->smarty->assign($var, $value);
Expand Down
7 changes: 7 additions & 0 deletions Okay/Core/Entity/EntityInterface.php
Expand Up @@ -79,4 +79,11 @@ public function delete($ids);
* Сброс состояния поиска сущности
*/
public function flush();

/**
* @return self
* @param $columnName
* Установки колонки по которой нужно делать маппинг
*/
public function mappedBy($columnName);
}
17 changes: 15 additions & 2 deletions Okay/Core/Modules/Extender/ExtenderFacade.php
Expand Up @@ -28,12 +28,16 @@ public static function execute($trigger, $output = null, array $input = [])

public function newChainExtension($expandable, $extension)
{
$this->chainExtender->newExtension($expandable['class'], $expandable['method'], $extension['class'], $extension['method']);
list($extendableClass, $extendableMethod) = $this->matchExtensionBindings($expandable);
list($extensionClass, $extensionMethod) = $this->matchExtensionBindings($extension);
$this->chainExtender->newExtension($extendableClass, $extendableMethod, $extensionClass, $extensionMethod);
}

public function newQueueExtension($expandable, $extension)
{
$this->queueExtender->newExtension($expandable['class'], $expandable['method'], $extension['class'], $extension['method']);
list($extendableClass, $extendableMethod) = $this->matchExtensionBindings($expandable);
list($extensionClass, $extensionMethod) = $this->matchExtensionBindings($extension);
$this->queueExtender->newExtension($extendableClass, $extendableMethod, $extensionClass, $extensionMethod);
}

public static function queueExtLog($trigger)
Expand All @@ -51,4 +55,13 @@ private static function stringifyTrigger($trigger)
list($className, $methodName) = $trigger;
return $className.'::'.$methodName;
}

private function matchExtensionBindings($bindings)
{
if (isset($bindings['class']) && isset($bindings['method'])) {
return [$bindings['class'], $bindings['method']];
}

return $bindings;
}
}

0 comments on commit 724a17d

Please sign in to comment.