Как узнать id пользователя, который создал копию страницы в административной панели

Материал из Umicms
Перейти к:навигация, поиск

Актуально для версии 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();
			$sql="INSERT INTO copy_page_log (page_id, user_id, data) VALUES('{$pageId}','{$userId}', NOW())";
			l_mysql_query($sql);
		}
	}

и добавим на него права, для чего создадим в той же директории файл permissions.custom.php следующего содержания:

$permissions = Array(
		'sitetree' => Array('clonePageInfo')
	);

Теперь осталось только в нашей базе данных создать таблицу copy_page_log и добавить в нее page_id (сюда будет добавляться id страницы, которую копировали), user_id (id пользователя, который произвел копирование) и data (время, когда было произведено копирование).


В результате, мы всегда сможет увидеть кто из пользователей произвел копирование страницы, в таблице copy_page_log будет отображаться вся необходимая для этого информация.

Copy page log.jpg

Если Вы хотите реализовать вывод этой информации через модуль "События", то Вы можете написать кастомное событие по аналогии с примером в нашей документации - Кастомные события для модуля "События"