Здравствуйте! Кто может подсказать - почему я, как админ, сделанные мной тестовые заказы могу из админки удалять, а вот заказы сделанные покупателями, а затем отмененные, удалять не могу? В чем проблема (вероятный код, который мешает удалять чужие заказы админом):
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();
}
}
}
Вы всё правильно поняли. Нашёл я одно примитивное решение этой проблемы, но оно, как я уже выразился, примитивное. Будет лучше, если проблема будет решена раз, и на всегда.
В этой директиве /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'. Я не знаю, зачем она нужна, и можно ли эту строку вообще удалить и забыть про эту проблему?!........
Буду Вам признателен, если расшифруете мне значение этой строки, опишите её значимость, и подскажите, как я могу решить эту проблему НЕ примитивным, как я придумал, способом!