Возможность восстановления

Начиная с Elgg 6.0 можно установить возможность restorable capability на ElggEntity. Включение этой возможности отметит сущность как удалённую в базе данных при вызове функции ElggEntity::delete(). Затем сущность больше не будет отображаться в списках или работать при прямом просмотре.

Настройка сайта

Администратор сайта имеет возможность включить/отключить все функции восстановления. По умолчанию эта функция отключена. Это означает, что даже если сущность имеет возможность restorable, она всегда будет постоянно удалена из базы данных.

Регистрация

Как и любую другую возможность сущности, вы можете включить возможность restorable в elgg-plugin.php

'entities' => [
        [
                'type' => 'object',
                'subtype' => 'my_custom_subtype',
                'capabilities' => [
                        'restorable' => true,
                ],
        ],
]

Меню сущности

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

Если сущность имеет возможность restorable, этот элемент меню будет заменён элементом меню, который отметит сущность как удалённую.

Примечание

Когда администратор сайта не включил функцию, никакие элементы меню не будут заменены.

Примечание

Есть 2 общих действия, чтобы помочь разработчикам, если им нужно добавить ссылку удаления где-либо.

  • entity/delete: это навсегда удалит сущность из базы данных, требует передачи guid в действие

  • entity/trash: это отметит сущность как удалённую в базе данных, требует передачи guid в действие

Просмотр удалённых элементов

Как только сущность будет отмечена как удалённая, она больше не будет отображаться в нормальной функциональности вашего сайта Elgg.

Чтобы пользователь мог видеть удалённые сущности, в настройках пользователя есть ссылка на список всех удалённых элементов, принадлежащих данному пользователю.

Владельцы групп также имеют возможность видеть удалённый контент из их группы. Это доступно со страницы профиля группы. Список покажет весь удалённый контент, содержащийся в их группе.

Примечание

Список будет отображать только удалённые сущности с возможностью restorable. Например, когда блог был удалён, у которого также есть комментарии, только блог появится в списке удалённых владельца (и в списке удалённых группы, если блог был опубликован в группе).

Комментарии не появятся ни в одном списке удалённых элементов.

Пользовательские представления

Когда разработчику нужно иметь пользовательское представление удалённого элемента, можно создать представление trash/<entity_type>/<entity_subtype>, которое получит удалённую сущность в $vars['entity']. В качестве отката будет попробовано trash/<entity_type>/default и в конечном итоге trash/entity/default, которое предоставляется ядром Elgg.

Различные подэлементы можно найти в представлениях trash/elements/*.

Примечание

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

Восстановить удалённый элемент

Из списка удалённых пользователь (или владелец группы) имеет возможность восстановить удалённый элемент до его исходного состояния. Если сущность содержалась в группе, которая была удалена, у пользователя есть возможность восстановить сущность в другой контейнер.

События

Когда сущность отмечается как удалённая, существует последовательность событий 'trash', '<entity_type>', с помощью которой разработчик может запрограммировать дополнительное действие или логику.

Функции ElggEntity

В ElggEntity есть 3 функции, связанные с удалением этой сущности:

  • public function delete(bool $recursive = true, ?bool $persistent = null): bool

  • protected function persistentDelete(bool $recursive = true): bool

  • protected function trash(bool $recursive = true): bool

  • public function isDeleted(): bool

Функция: delete

Это единственная публичная функция для удаления сущности. Параметр $recursive определит, будут ли также удалены другие сущности, у которых эта сущность является владельцем или контейнером (по умолчанию true).

Параметр $persistent может принудительно выполнить постоянное удаление из базы данных или пометить его как удалённый. Значение по умолчанию — null, что означает, что будет проверена возможность restorable.

Предупреждение

Не рекомендуется, чтобы разработчик переопределял эту функцию, так как разработчику придётся обрабатывать часть логики определения правильного значения параметра $persistent.

Функция: persistentDelete

Эта функция вызывается, когда параметр $persistent равен true в функции delete(). Эта функция должна обрабатывать случаи, когда сущность постоянно удаляется из базы данных. Примером того, когда разработчик переопределял бы эту функцию, является ElggFile, где физический файл на диске должен быть удалён, когда сущность удаляется из базы данных, но физический файл не должен удаляться с диска, когда сущность только помечается как удалённая в базе данных.

Это запустит последовательность событий 'delete', '<entity_type>'.

Функция: trash

Эта функция вызывается, когда параметр $persistent равен false в функции delete(). Эта функция должна обрабатывать случаи, когда сущность помечается как удалённая в базе данных.

Это запустит последовательность событий 'trash', '<entity_type>'.

Функция: isDeleted

Для проверки, отмечена ли сущность как удалённая.

Показать удалённые элементы

Когда разработчику нужно быть уверенным, что удалённые сущности включены при получении/списке сущностей, код должен быть обёрнут в elgg_call() с флагом ELGG_SHOW_DELETED_ENTITIES.

То же самое применяется, когда разработчику нужно быть уверенным, что все удалённые элементы исключены, установите флаг ELGG_HIDE_DELETED_ENTITIES.

Очистка удалённых сущностей

Для очистки базы данных от удалённых сущностей задание cron выполняется каждый час. Оно очистит все удалённые сущности, которые были удалены, когда истёк период хранения. Администратор сайта может установить этот период хранения (по умолчанию: 30 дней).

Чтобы не создавать слишком большую нагрузку на систему, задание cron будет выполняться максимум 5 минут в час. Сущности, которые не удалось удалить за этот период, будут удалены в следующем периоде. Сначала будет удалена самая старая удалённая сущность (по времени удаления сущности).

Дополнительная информация

См.также

Ознакомьтесь с документацией Возможности