Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion _build/elements/settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
],

'ms3_services' => [
'value' => '{"cart":[],"order":[],"payment":[],"delivery":[]}',
'value' => '{"cart":[],"order":[],"payment":[],"delivery":["MiniShop3\\\\Controllers\\\\Delivery\\\\Delivery"]}',
'xtype' => 'textarea',
'area' => 'ms3_main',
],
Expand Down
2 changes: 1 addition & 1 deletion _build/resolvers/resolver_03_settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
'weight_price' => 0,
'distance_price' => 0,
'active' => 1,
'requires' => 'email,receiver',
'validation_rules' => '{"receiver":"required", "email":"required|email"}',
'position' => 0,
], '', true);
$delivery->save();
Expand Down
4 changes: 2 additions & 2 deletions assets/components/minishop3/js/mgr/misc/ms3.combo.js
Original file line number Diff line number Diff line change
Expand Up @@ -918,10 +918,10 @@ ms3.combo.Classes = function (config) {
fieldLabel: _('ms3_class'),
name: 'class',
hiddenName: 'class',
displayField: 'class',
fields: ['name', 'class'],
displayField: 'name',
valueField: 'class',
pageSize: 20,
fields: ['type', 'class'],
url: ms3.config.connector_url,
baseParams: {
action: 'MiniShop3\\Processors\\Settings\\GetClass',
Expand Down
48 changes: 32 additions & 16 deletions assets/components/minishop3/js/mgr/settings/delivery/grid.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ Ext.extend(ms3.grid.Delivery, ms3.grid.Default, {
getFields: function () {
return [
'id', 'name', 'price', 'weight_price', 'distance_price', 'position', 'payments',
'logo', 'active', 'class', 'description', 'requires', 'actions', 'free_delivery_amount'
'logo', 'active', 'class', 'description', 'validation_rules', 'actions', 'free_delivery_amount'
];
},

Expand Down Expand Up @@ -115,9 +115,9 @@ Ext.extend(ms3.grid.Delivery, ms3.grid.Default, {
});
w.fp.getForm().reset();
w.fp.getForm().setValues({
price: 0,
weight_price: 0,
distance_price: 0,
//price: 0,
//weight_price: 0,
//distance_price: 0,
active: true,
});
w.show(e.target);
Expand All @@ -132,22 +132,38 @@ Ext.extend(ms3.grid.Delivery, ms3.grid.Default, {
if (w) {
w.close();
}
w = MODx.load({
xtype: 'ms3-window-delivery-update',
id: 'ms3-window-delivery-update',
record: this.menu.record,
title: this.menu.record['name'],

var id = this.menu.record.id;
MODx.Ajax.request({
url: this.config.url,
params: {
action: 'MiniShop3\\Processors\\Settings\\Delivery\\Get',
id: id
},
listeners: {
success: {
fn: function () {
this.refresh();
}, scope: this
}
fn: function (r) {
w = MODx.load({
xtype: 'ms3-window-delivery-update',
id: 'ms3-window-delivery-update',
record: r.object,
title: r.object.name,
listeners: {
success: {
fn: function () {
this.refresh();
}, scope: this
}
}
});
w.fp.getForm().reset();
w.fp.getForm().setValues(r.object);
w.show(e.target);
}
}, scope: this
}
});
w.fp.getForm().reset();
w.fp.getForm().setValues(this.menu.record);
w.show(e.target);

},

enableDelivery: function () {
Expand Down
156 changes: 76 additions & 80 deletions assets/components/minishop3/js/mgr/settings/delivery/window.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,82 +18,17 @@ Ext.extend(ms3.window.CreateDelivery, ms3.window.Default, {
name: 'id',
id: config.id + '-id'
}, {
layout: 'column',
items: [{
columnWidth: .7,
layout: 'form',
defaults: {msgTarget: 'under'},
items: [{
xtype: 'textfield',
fieldLabel: _('ms3_name'),
name: 'name',
anchor: '99%',
id: config.id + '-name'
}]
}, {
columnWidth: .3,
layout: 'form',
defaults: {msgTarget: 'under'},
items: [{
xtype: 'textfield',
fieldLabel: _('ms3_add_cost'),
name: 'price',
description: _('ms3_add_cost_help'),
anchor: '99%',
id: config.id + '-price'
}],
}]
}, {
xtype: 'numberfield',
fieldLabel: _('ms3_free_delivery_amount'),
name: 'free_delivery_amount',
description: _('ms3_free_delivery_amount_help'),
xtype: 'textfield',
fieldLabel: _('ms3_name'),
name: 'name',
anchor: '99%',
decimalPrecision: 2,
id: config.id + '-free-delivery-amount'
id: config.id + '-name'
}, {
layout: 'column',
items: [{
columnWidth: .5,
layout: 'form',
defaults: {msgTarget: 'under'},
items: [{
xtype: 'numberfield',
fieldLabel: _('ms3_weight_price'),
description: _('ms3_weight_price_help'),
name: 'weight_price',
decimalPrecision: 2,
anchor: '99%',
id: config.id + '-weight-price'
}, {
xtype: 'textfield',
fieldLabel: _('ms3_order_requires'),
description: _('ms3_order_requires_help'),
name: 'requires',
anchor: '99%',
id: config.id + '-requires'
}]
}, {
columnWidth: .5,
layout: 'form',
defaults: {msgTarget: 'under'},
items: [{
xtype: 'numberfield',
fieldLabel: _('ms3_distance_price'),
description: _('ms3_distance_price_help'),
name: 'distance_price',
decimalPrecision: 2,
anchor: '99%',
id: config.id + '-distance-price'
}, {
xtype: 'ms3-combo-classes',
type: 'delivery',
fieldLabel: _('ms3_class'),
name: 'class',
anchor: '99%',
id: config.id + '-class'
}],
}]
xtype: 'textarea',
fieldLabel: _('ms3_description'),
name: 'description',
anchor: '99%',
id: config.id + '-description'
}, {
xtype: 'ms3-combo-browser',
fieldLabel: _('ms3_logo'),
Expand All @@ -102,12 +37,6 @@ Ext.extend(ms3.window.CreateDelivery, ms3.window.Default, {
id: config.id + '-logo',
triggerClass: 'x-form-image-trigger',
allowedFileTypes: config.allowedFileTypes || MODx.config.upload_images
}, {
xtype: 'textarea',
fieldLabel: _('ms3_description'),
name: 'description',
anchor: '99%',
id: config.id + '-description'
}, {
xtype: 'xcheckbox',
boxLabel: _('ms3_active'),
Expand Down Expand Up @@ -140,6 +69,73 @@ Ext.extend(ms3.window.UpdateDelivery, ms3.window.CreateDelivery, {
title: _('ms3_delivery'),
layout: 'form',
items: ms3.window.CreateDelivery.prototype.getFields.call(this, config),
},{
title: _('ms3_settings'),
layout: 'form',
items: [ {
xtype: 'ms3-combo-classes',
type: 'delivery',
fieldLabel: _('ms3_class'),
name: 'class',
anchor: '99%',
id: config.id + '-class'
}, {
xtype: 'textarea',
fieldLabel: _('ms3_order_validation_rules'),
description: _('ms3_order_validation_rules_help'),
name: 'validation_rules',
anchor: '99%',
id: config.id + '-validation_rules'
},{
layout: 'column',
items: [{
columnWidth: .5,
layout: 'form',
defaults: {msgTarget: 'under'},
items: [
{
xtype: 'textfield',
fieldLabel: _('ms3_add_cost'),
name: 'price',
description: _('ms3_add_cost_help'),
anchor: '99%',
id: config.id + '-price'
}, {
xtype: 'numberfield',
fieldLabel: _('ms3_free_delivery_amount'),
name: 'free_delivery_amount',
description: _('ms3_free_delivery_amount_help'),
anchor: '99%',
decimalPrecision: 2,
id: config.id + '-free-delivery-amount'
}
]
}, {
columnWidth: .5,
layout: 'form',
defaults: {msgTarget: 'under'},
pack: 'center',
items: [
{
xtype: 'numberfield',
fieldLabel: _('ms3_weight_price'),
description: _('ms3_weight_price_help'),
name: 'weight_price',
decimalPrecision: 2,
anchor: '99%',
id: config.id + '-weight-price'
}, {
xtype: 'numberfield',
fieldLabel: _('ms3_distance_price'),
description: _('ms3_distance_price_help'),
name: 'distance_price',
decimalPrecision: 2,
anchor: '99%',
id: config.id + '-distance-price'
}
]
}]
}],
}, {
title: _('ms3_payments'),
items: [{
Expand Down
2 changes: 1 addition & 1 deletion core/components/minishop3/lexicon/ru/cart.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,5 +40,5 @@

$_lang['ms3_order_err_empty'] = 'Невозможно оформить пустой заказ';
$_lang['ms3_order_err_delivery'] = 'Вы должны выбрать способ доставки';
$_lang['ms3_order_err_requires'] = 'Вы должны заполнить требуемые поля';
$_lang['ms3_order_err_validation_rules'] = 'Вы должны корректно заполнить требуемые поля';
$_lang['ms3_err_token'] = 'Не указан токен';
4 changes: 2 additions & 2 deletions core/components/minishop3/lexicon/ru/manager.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@
$_lang['ms3_weight_price_help'] = 'Добавочная стоимость доставки за единицу веса.<br/>Может быть использовано в кастомных классах.';
$_lang['ms3_distance_price'] = 'Стоимость ед/рст';
$_lang['ms3_distance_price_help'] = 'Добавочная стоимость доставки за единицу расстояния.<br/>Может быть использовано в кастомных классах.';
$_lang['ms3_order_requires'] = 'Обязательные поля';
$_lang['ms3_order_requires_help'] = 'При оформлении заказа, кастомный класс может требовать заполнение этих полей.';
$_lang['ms3_order_validation_rules'] = 'Правила валидации полей';
$_lang['ms3_order_validation_rules_help'] = 'При оформлении заказа, кастомный класс может проверять поля по указанным правилам.';
$_lang['ms3_rank'] = 'Порядок';
$_lang['ms3_free_delivery_amount'] = 'Бесплатная доставка от суммы заказа';
$_lang['ms3_free_delivery_amount_help'] = 'При достижении суммы заказа данного значения, доставка будет бесплатной. Если класс доставки изменен и/или у вас установлены компоненты, которые могут повлиять на стоимость заказа, то данное поле может не учитываться';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@
<field key="active" dbtype="tinyint" precision="1" phptype="integer" null="true" default="1"/>
<field key="class" dbtype="varchar" precision="50" phptype="string" null="true"/>
<field key="properties" dbtype="text" phptype="json" null="true"/>
<field key="requires" dbtype="varchar" precision="255" phptype="string" null="true" default="email,receiver"/>
<field key="validation_rules" dbtype="text" phptype="string" null="true"/>
<field key="free_delivery_amount" dbtype="decimal" precision="12,2" phptype="float" null="true" default="0"/>

<aggregate alias="Orders" class="MiniShop3\Model\msOrder" local="id" foreign="delivery_id" cardinality="many" owner="local"/>
Expand Down
3 changes: 3 additions & 0 deletions core/components/minishop3/src/Controllers/Order/Order.php
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,9 @@ public function hasPayment($delivery, $payment)
*/
public function getDeliveryRequiresFields($id = 0)
{
// TODO: данный метод (getDeliveryRequiresFields) нуждается в переработке:
// 1. Смена названия, т.к. теперь вместо списка requires полей мы работаем с правилами валидации (validation_rules)
// 2. Вероятно, нужно заменить логику с get fields сразу на validate с использованием Rakit\Validation\Validator;
if (empty($id)) {
$id = $this->order['delivery'];
}
Expand Down
2 changes: 1 addition & 1 deletion core/components/minishop3/src/MiniShop3.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class MiniShop3
public $format;

/** @var Services $services */
private $services;
public Services $services;

/** @var Plugins $plugins */
public $plugins;
Expand Down
24 changes: 15 additions & 9 deletions core/components/minishop3/src/Model/msDelivery.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
* @property integer $active
* @property string $class
* @property array $properties
* @property string $requires
* @property string $validation_rules
* @property float $free_delivery_amount
*
* @package MiniShop3\Model
Expand All @@ -32,9 +32,13 @@ class msDelivery extends xPDOSimpleObject
{
/** @var Delivery $controller */
public $controller;

/** @var MiniShop3 $ms3 */
public $ms3;

/** @var string $defaultControllerClass */
private string $defaultControllerClass = 'MiniShop3\\Controllers\\Delivery\\Delivery';

/**
* msDelivery constructor.
*
Expand All @@ -49,25 +53,27 @@ public function __construct(xPDO $xpdo)
}

/**
* Loads delivery handler class
* Loads delivery controller class
*
* @return bool
*/
public function loadHandler()
public function loadController()
{
// TODO: проверить, нужно ли подключение
require_once dirname(__FILE__, 2) . '/Controllers/Delivery/Delivery.php';

if (!$class = $this->get('class')) {
$class = 'Delivery';
if (!$class = $this->get('class') || $class == 'Delivery') {
$class = $this->defaultControllerClass;
}

if ($class !== 'Delivery') {
$this->ms3->loadCustomClasses('delivery');
if ($class !== $this->defaultControllerClass) {
// TODO: ждём новой реализации
//$this->ms3->loadCustomClasses('delivery');
}

if (!class_exists($class)) {
$this->xpdo->log(modX::LOG_LEVEL_ERROR, 'Delivery controller class "' . $class . '" not found.');
$class = 'Delivery';
$class = $this->defaultControllerClass;
}

$this->controller = new $class($this, []);
Expand All @@ -91,7 +97,7 @@ public function loadHandler()
public function getCost(OrderInterface $order, $cost = 0.0)
{
if (!is_object($this->controller) || !($this->controller instanceof DeliveryInterface)) {
if (!$this->loadHandler()) {
if (!$this->loadController()) {
return 0.0;
}
}
Expand Down
Loading