Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Макрос emarket basketAddLink - отсутствие ссылки купить если цена 0

Автор koroganРаздел Макросы UMI.CMS

Ответов: 3
Просмотров: 3524
Последний ответ 25 Апреля 2012, 01:19:03
от admin
Настройка шаблона письма уведомления о заказе (emarket) XSLT

Автор CanektРаздел Настройка системы и модулей

Ответов: 37
Просмотров: 9154
Последний ответ 12 Сентября 2016, 07:57:36
от admin
Вылезает ошибка Call to undefined function xcache_get

Автор aizulРаздел Установка UMI.CMS

Ответов: 2
Просмотров: 5313
Последний ответ 02 Июля 2014, 10:18:34
от aizul
Сохранение данных customer в emarket one click

Автор rasergiyРаздел Настройка системы и модулей

Ответов: 2
Просмотров: 1469
Последний ответ 01 Апреля 2016, 15:42:17
от aghigay
Расширение функционала метода emarket basket

Автор NiallРаздел Custom макросы

Ответов: 1
Просмотров: 1797
Последний ответ 24 Февраля 2019, 15:29:06
от admin2@pomdv.com

0 Пользователей и 1 Гость просматривают эту тему.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Здравствуйте! Кто может подсказать - почему я, как админ, сделанные мной тестовые заказы могу из админки удалять, а вот заказы сделанные покупателями, а затем отмененные, удалять не могу? В чем проблема (вероятный код, который мешает удалять чужие заказы админом):

		public function onOrderDeleteCleanRelations(iUmiEventPoint $e) {
if($e->getMode() != 'before') return;
$object = $e->getRef('object');
if($object instanceof iUmiObject) {
$type = selector::get('object-type')->id($object->getTypeId());
if($type && $type->getMethod() == 'order') {
$order = order::get($object->id);
$orderItems = $order->getItems();
if (sizeof($orderItems) > 0) {
foreach($orderItems as $item) {
$orderItem = orderItem::get($item->getId());
$orderItem->remove();
}
}
$customerId = $order->getCustomerId();
if (!is_null($customerId)) {
$customer = selector::get('object')->id($customerId);
$method = $customer->getMethod();
if ($customer->getMethod() == 'customer') {
umiObjectsExpiration::getInstance()->add($customerId);
}
}
$customerOneClickId = $order->getValue('purchaser_one_click');
if (!is_null($customerOneClickId)) {
$customerOneClick = selector::get('object')->id($customerOneClickId);
if ($customerOneClick instanceof umiObject && $customerOneClick->getTypeGUID() == 'emarket-purchase-oneclick') {
umiObjectsExpiration::getInstance()->add($customerOneClickId);
}
}
$order->commit();
}
}
}
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re:function onOrderDeleteCleanRelations (/classes/modules/emarket/_events.php)
« Ответ #1 : 22 Марта 2015, 19:34:59 »
то есть, вы тот самый первый супервайзер, вы в админке пытаетесь удалить заказ, который делал другой пользователь и потом его отменил и заказ не удаляется?

Просто по вашему описанию, кажется, что у вас нет прав работать с объектами, созданные не вами, но такой проблемы не должно быть если вы супервайзер.

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: function onOrderDeleteCleanRelations (/classes/modules/emarket/_events.php)
« Ответ #2 : 22 Сентября 2016, 10:10:59 »
Вы всё правильно поняли. Нашёл я одно примитивное решение этой проблемы, но оно, как я уже выразился, примитивное. Будет лучше, если проблема будет решена раз, и на всегда.

В этой директиве /docs/classes/modules/emarket есть файл events.php со следующим содержанием (см. строку с русским комментарием):
	new umiEventListener('cron', 'emarket', 'onCronSyncCurrency');
// Notification listeners
new umiEventListener('systemModifyPropertyValue', 'emarket', 'onModifyProperty');
new umiEventListener('systemModifyObject', 'emarket', 'onModifyObject');
new umiEventListener('order-status-changed', 'emarket', 'onStatusChanged');
new umiEventListener('order-payment-status-changed', 'emarket', 'onPaymentStatusChanged');
new umiEventListener('order-delivery-status-changed', 'emarket', 'onDeliveryStatusChanged');
// Reservation listeners
new umiEventListener('systemModifyPropertyValue', 'emarket', 'onOrderPropChange');

new umiEventListener('systemModifyPropertyValue', 'emarket', 'onStorePropChange');

new umiEventListener('systemDeleteObject', 'emarket', 'onOrderDeleteUnreserve');
new umiEventListener('systemDeleteObject', 'emarket', 'onOrderDeleteCleanRelations'); // мешает удалять заказы из админки, сделанные не супервайзером/админом, в т.ч. и отмененные

new umiEventListener('cron', 'emarket', 'onCronCheckExpiredCustomers');
new umiEventListener('cron', 'emarket', 'onCronCheckExpiredOrders');
new umiEventListener('cron', 'emarket', 'onCronCheckExpiredCustomersOneClick');

Когда мне надо удалять эти неудавшиеся заказы, через ftp я скачиваю этот events.php, временно убираю эту строку new umiEventListener('systemDeleteObject', 'emarket', 'onOrderDeleteCleanRelations'), затем удаляю отмененные заказы, а потом уже восстанавливаю этот файл как и было раньше. Т.е., вся загвоздка именно в этой строке с 'onCronCheckExpiredCustomersOneClick'. Я не знаю, зачем она нужна, и можно ли эту строку вообще удалить и забыть про эту проблему?!........

Буду Вам признателен, если расшифруете мне значение этой строки, опишите её значимость, и подскажите, как я могу решить эту проблему НЕ примитивным, как я придумал, способом!
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
Re: function onOrderDeleteCleanRelations (/classes/modules/emarket/_events.php)
« Ответ #3 : 30 Сентября 2016, 11:18:20 »
Эта строчка подключает обработчик, который позволяет обработать связи заказа с другими объектами в базе данных.

Например, при создании заказа у него есть список товаров в корзине. По сути каждый товар, добавленный в корзину, это созданный элемент справочника "Наименования в заказе". Если заказ удален, то товары данного заказа, тоже смело можно удалять, чтобы они не засоряли базу.

Вот при таких очистках что-то и чихает. В самой функции происходит 3 действия:
- удаление товаров в данном заказе
- продлить срок жизни покупателя
- продлить срок жизни покупателя в один клик

Видимо, в последней части что-то и сбоит, так как у вас были какие-то работы с заказом в один клик (если я ничего не путаю)

*

sam

  • ***
  • 216
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re: function onOrderDeleteCleanRelations (/classes/modules/emarket/_events.php)
« Ответ #4 : 03 Октября 2016, 19:49:04 »
Возможно. А вот вопрос, что именно?! В файл __events.php добавлен "onOrderDeleteCleanRelations" (код в первом сообщении от меня), далее в events.php - "new umiEventListener('systemDeleteObject', 'emarket', 'onOrderDeleteCleanRelations');". Сам заказа в один клик работает без каких либо проблем. Единственная проблема в том, что, как и выше озвучивал, "onOrderDeleteCleanRelations" не даёт админу удалять заказы, сделанные покупателями, а свои тестовые заказы админ/супервайзер может удалять.
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.