Стандартные процессоры resource/update/publish/delete и непонятки с publishedon/deletedon
В общем обнаружил странное дело.
Когда запускаются стандартные процессоры на publish/unpublish/delete, то в них происходит нормальныя обработка полей publishedon/unpublishedon/deletedon (выставляется время выполнения данного действия) и publishedby/unpublishedby/deletedby (записывается юзер, который сделал данное действие).
В случае с процессором на удаление, то ещё и выбираются все дочерние ресурсы и так же удаляются:
И для каждого дочернего ресурса проставляются — кто и когда их удалил.
Это всё специальные процессоры под специальные кнопочки в админке:
Но! Если выставить соответствующие галочки при редактировании ресурса:
и
, то корректно обработается только галочка «Опубликовать». В процессоре resource/update есть специальные методы для обработки поля published и выставлении сопутствующих полей (кто и когда).
А вот с удалением в процессоре resource/update — нифига! Просто deleted = 1 — не записывается кто и когда удалил, дочерние ресурсы не удаляются:
Ладно хоть права проверяет.
И вот вопрос — это нормально, что мне кажется это не нормальным? Или всё на самом деле нормально и я зря гоню волну?
Я просто делаю свой CMP и на этом завязана некоторая логика. Текущая логика меня не устраивает, буду расширять свои процессоры.
Но изначально так и было задумано или есть в этом погрешности и разработчикам можно будет слать коммит?
Когда запускаются стандартные процессоры на publish/unpublish/delete, то в них происходит нормальныя обработка полей publishedon/unpublishedon/deletedon (выставляется время выполнения данного действия) и publishedby/unpublishedby/deletedby (записывается юзер, который сделал данное действие).
В случае с процессором на удаление, то ещё и выбираются все дочерние ресурсы и так же удаляются:
И для каждого дочернего ресурса проставляются — кто и когда их удалил.
Это всё специальные процессоры под специальные кнопочки в админке:
Но! Если выставить соответствующие галочки при редактировании ресурса:
и
, то корректно обработается только галочка «Опубликовать». В процессоре resource/update есть специальные методы для обработки поля published и выставлении сопутствующих полей (кто и когда).
А вот с удалением в процессоре resource/update — нифига! Просто deleted = 1 — не записывается кто и когда удалил, дочерние ресурсы не удаляются:
Ладно хоть права проверяет.
И вот вопрос — это нормально, что мне кажется это не нормальным? Или всё на самом деле нормально и я зря гоню волну?
Я просто делаю свой CMP и на этом завязана некоторая логика. Текущая логика меня не устраивает, буду расширять свои процессоры.
Но изначально так и было задумано или есть в этом погрешности и разработчикам можно будет слать коммит?
Комментарии: 4
Это однозначно ошибка.
Проверяется просто: через контекстное меню удалить стартовую страницу нельзя, а через редактирование — можно.
На мой взгляд, из процессора update нужно запускать процессоры publish и delete в нужных случаях, чтобы было всё верно.
Пиши коммит.
Проверяется просто: через контекстное меню удалить стартовую страницу нельзя, а через редактирование — можно.
На мой взгляд, из процессора update нужно запускать процессоры publish и delete в нужных случаях, чтобы было всё верно.
Пиши коммит.
А с точки зрения организации кода — можно ли запускать процессор из процессора?
Такого в родных процессорах я вроде не встречал и этого могут не принять.
Да и, скорей всего, это будет не правильно — ведь в процессорах на (un)publish/delete в конце чистится кеш, ставятся/снимаются блокировки — всё это и так делается в процессоре на update. Такого точно не примут.
Значит надо будет методы переносить и компоновать.
Такого в родных процессорах я вроде не встречал и этого могут не принять.
Да и, скорей всего, это будет не правильно — ведь в процессорах на (un)publish/delete в конце чистится кеш, ставятся/снимаются блокировки — всё это и так делается в процессоре на update. Такого точно не примут.
Значит надо будет методы переносить и компоновать.
Чего переживать? Создай вопрос на bugs.modx.com
Если есть желание — предложи своё решение, а там пусть думают как лучше сделать.
В конце концов, процессор — это класс, и из него можно запускать методы отдельно — они там все public.
Если есть желание — предложи своё решение, а там пусть думают как лучше сделать.
В конце концов, процессор — это класс, и из него можно запускать методы отдельно — они там все public.
if ($processor = new modResourceDeleteProcessor($this->modx, $this->properties)) {
$childrenIds = $processor->getChildrenIds();
$processor->fireBeforeDelete($childrenIds);
$processor->deleteChildren();
// и так далее...
}
Пока завёл баг в трекере. Как у себя логику проработаю — буду им потом pull-r выкатывать.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.