Как узнать id пользователя, который создал копию страницы в административной панели
Актуально для версии 2.9.1
Если на сайте есть несколько менеджеров, то иногда возникает необходимость узнать, кто именно создал копию страницы в административной панели. Для решения данной задачи мы напишем кастомный обработчик для события systemCloneElement, которое вызывается при создании копии страницы в административной панели.
Создадим кастомный обработчик для события order-status-changed, для этого в директории /classes/modules/content/ создадим файл custom_events.php следующего содержания:
new umiEventListener('systemCloneElement', 'content', 'clonePageInfo');
Где systemCloneElement - имя события, clonePageInfo - метод, который будет вызываться при срабатывании этого события.
Теперь опишем этот метод clonePageInfo, для этого, в файле /classes/modules/content/__custom.php после слов "//TODO: Write here your own macroses" вставим следующий код:
public function clonePageInfo(iUmiEventPoint $event) {
if ($event->getMode() == 'after') {
$element = $event->getRef('element');
$userId = permissionsCollection::getInstance()->getUserId();
$pageId = $element->getId();
$info = 'Страница с id'.$pageId.'была скопирована пользователем с id'.$userId;
file_put_contents('log.txt', $info , FILE_APPEND);
}
}
и добавим на него права, для чего создадим в той же директории файл permissions.custom.php следующего содержания:
$permissions = Array(
'sitetree' => Array('clonePageInfo')
);
Если Вы хотите реализовать вывод этой информации через модуль "События", тогда создайте файл "custom_events.php" в директории модуля "events" ("/classes/modules/events") и пропишите туда следующий код - перехватчик события:
<?php
new UmiEventListener("systemCloneElement", "events", "clonePageInfo");
?>
Теперь необходимо реализовать метод "clonePageInfo". Для этого в директории модуля откройте файл "__custom.php" и пропишите код обработчика сразу же после строки "//TODO: Write here your own macroses":
public function clonePageInfo(iUmiEventPoint $event) {
if($event->getMode() == 'before') {
if(!$event->getRef('element') instanceof umiHierarchyElement) return;
$pageId = $event->getRef('element')->getId();
$hierarchy = umiHierarchy::getInstance();
$page = $hierarchy->getElement($pageId);
$this->registerEvent('systemCloneElement', array($page->getName()), null, null);
}
}
Осталось задать текст, который будет отображатся в миниблоке события. Для этого в директории модуля дублируйте файл "i18n.php" и переименуйте его в "i18n.ru.php". После чего, добавьте следующие константы:
'systemCloneElement' => 'Копирование страницы',
'systemCloneElement_msg' => 'Пользователь <a href="%s">%s</a> скопировал страницу "%s"',
'systemCloneElement_new' => 'Скопированные страницы',
'systemCloneElement_img' => '/images/cms/admin/mac/icons/medium/content.png'
Теперь, если какой-нибудь пользователь создаст копию страницы через модуль "Структура", то Вы сможете это увидеть в модуле "События":