UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: atach от 08 Января 2017, 16:11:18

Название: Запрет удаления страниц с определенным ObjectTypeId.
Отправлено: atach от 08 Января 2017, 16:11:18
Добрый день, подскажите такой вопрос.
Мне нужно запретить удаление некоторых страниц в админке. Они все имеют один "ObjectTypeId".
Я на событие "systemDeleteElement", поставил обработчик, на тип "after", который определяет ObjectTypeId у страницы, но не понятно что именно делать при определении. Отдаю return false, но она все равно удаляется.
Название: Re: Запрет удаления страниц с определенным ObjectTypeId.
Отправлено: e.ioffe от 08 Января 2017, 16:35:55
Пока нашел только такой костыль:

В events.php

$eventListener = new umiEventListener('systemDeleteElement', 'module, 'method');
$eventListener->setIsCritical(true);

В макросе

public function onDelete(iUmiEventPoint $eventPoint) 
{
  if($eventPoint->getMode() == 'before')
  {
     throw new baseException('Страницу нельзя удалять'));
  }
}
Название: Re: Запрет удаления страниц с определенным ObjectTypeId.
Отправлено: atach от 08 Января 2017, 16:50:35
Да это у меня впринципе реализовано.
Вызов события, по точке срабатывания.

А вот в самом макросе на "after", потому что проверяю перед удалением, "throw new baseException" не срабатывает.
Там же висит отправка mail уведомления (для проверки). Что бы понять вообще срабатывает событие или нет.
Событие срабатывает и страница все равно удаляется.
Название: Re: Запрет удаления страниц с определенным ObjectTypeId.
Отправлено: e.ioffe от 08 Января 2017, 17:06:21
Режим after используется после удаления элемента. Для отмены удаления нужно прослушивать режим before.
Название: Re: Запрет удаления страниц с определенным ObjectTypeId.
Отправлено: atach от 08 Января 2017, 17:14:07
Режим after используется после удаления элемента. Для отмены удаления нужно прослушивать режим before.

Точно, что то я перепутал прошлое/будущее :).
Только вот вот "baseException" не срабатывает, ругается на него. У меня PHP7 и новый формат модулей.
"Cannot instantiate abstract class baseException"
Поставил "publicAdminException", но он не срабатывает.
Название: Re: Запрет удаления страниц с определенным ObjectTypeId.
Отправлено: e.ioffe от 08 Января 2017, 17:47:03
Цитировать
Только вот вот "baseException" не срабатывает, ругается на него. У меня PHP7 и новый формат модулей.

Все верно, я не посмотрел, что baseException abstract.

Цитировать
Поставил "publicAdminException", но он не срабатывает.

Попробуйте publicException - проверил, у меня работает.
Название: Re: Запрет удаления страниц с определенным ObjectTypeId.
Отправлено: atach от 08 Января 2017, 17:54:44
Большое спасибо, всё заработало!!!