Стандартные процессоры resource/update/publish/delete и непонятки с publishedon/deletedon

В общем обнаружил странное дело.
Когда запускаются стандартные процессоры на publish/unpublish/delete, то в них происходит нормальныя обработка полей publishedon/unpublishedon/deletedon (выставляется время выполнения данного действия) и publishedby/unpublishedby/deletedby (записывается юзер, который сделал данное действие).
В случае с процессором на удаление, то ещё и выбираются все дочерние ресурсы и так же удаляются:

И для каждого дочернего ресурса проставляются — кто и когда их удалил.

Это всё специальные процессоры под специальные кнопочки в админке:


Но! Если выставить соответствующие галочки при редактировании ресурса:

и

, то корректно обработается только галочка «Опубликовать». В процессоре resource/update есть специальные методы для обработки поля published и выставлении сопутствующих полей (кто и когда).

А вот с удалением в процессоре resource/update — нифига! Просто deleted = 1 — не записывается кто и когда удалил, дочерние ресурсы не удаляются:

Ладно хоть права проверяет.

И вот вопрос — это нормально, что мне кажется это не нормальным? Или всё на самом деле нормально и я зря гоню волну?
Я просто делаю свой CMP и на этом завязана некоторая логика. Текущая логика меня не устраивает, буду расширять свои процессоры.

Но изначально так и было задумано или есть в этом погрешности и разработчикам можно будет слать коммит?
Алексей Карташов
19 сентября 2013, 04:40
modx.pro
1 296
0

Комментарии: 4

Василий Наумкин
19 сентября 2013, 08:50
0
Это однозначно ошибка.
Проверяется просто: через контекстное меню удалить стартовую страницу нельзя, а через редактирование — можно.

На мой взгляд, из процессора update нужно запускать процессоры publish и delete в нужных случаях, чтобы было всё верно.

Пиши коммит.
    Алексей Карташов
    19 сентября 2013, 08:57
    0
    А с точки зрения организации кода — можно ли запускать процессор из процессора?
    Такого в родных процессорах я вроде не встречал и этого могут не принять.
    Да и, скорей всего, это будет не правильно — ведь в процессорах на (un)publish/delete в конце чистится кеш, ставятся/снимаются блокировки — всё это и так делается в процессоре на update. Такого точно не примут.
    Значит надо будет методы переносить и компоновать.
      Василий Наумкин
      19 сентября 2013, 09:02
      0
      Чего переживать? Создай вопрос на bugs.modx.com
      Если есть желание — предложи своё решение, а там пусть думают как лучше сделать.

      В конце концов, процессор — это класс, и из него можно запускать методы отдельно — они там все public.
      if ($processor = new modResourceDeleteProcessor($this->modx, $this->properties)) {
      	$childrenIds = $processor->getChildrenIds();
      	$processor->fireBeforeDelete($childrenIds);
      	$processor->deleteChildren();
      	// и так далее...
      }
        Алексей Карташов
        19 сентября 2013, 10:17
        0
        Пока завёл баг в трекере. Как у себя логику проработаю — буду им потом pull-r выкатывать.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4