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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «'''Актуально для версии 2.9.1''' Если на сайте есть несколько менеджеров, то иногда возникает …»)
 
 
(не показаны 4 промежуточные версии этого же участника)
Строка 20: Строка 20:
 
$userId = permissionsCollection::getInstance()->getUserId();
 
$userId = permissionsCollection::getInstance()->getUserId();
 
$pageId = $element->getId();
 
$pageId = $element->getId();
$sql="INSERT INTO copy_page_log (page_id, user_id, data) VALUES('{$pageId}','{$userId}', NOW())";
+
                        $info = 'Страница с id'.$pageId.'была скопирована пользователем с id'.$userId;
l_mysql_query($sql);
+
                        file_put_contents('log.txt', $info , FILE_APPEND);
 +
 
}
 
}
 
}
 
}
Строка 33: Строка 34:
 
</source>
 
</source>
  
Теперь осталось только в нашей базе данных создать таблицу copy_page_log и добавить в нее page_id (сюда будет добавляться id страницы, которую копировали), user_id (id пользователя, который произвел копирование) и data (время, когда было произведено копирование).
 
  
 +
Если Вы хотите реализовать вывод этой информации через модуль "События", тогда создайте файл "custom_events.php" в директории модуля "events" ("/classes/modules/events") и пропишите туда следующий код - перехватчик события:
 +
<source lang="php">
 +
<?php
 +
  new UmiEventListener("systemCloneElement", "events", "clonePageInfo");
 +
?>
 +
</source>
 +
 +
Теперь необходимо реализовать метод "clonePageInfo". Для этого в директории модуля откройте файл "__custom.php" и пропишите код обработчика сразу же после строки "//TODO: Write here your own macroses":
 +
<source lang="php">
 +
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);
 +
    }
 +
}
 +
</source>
 +
 +
Осталось задать текст, который будет отображатся в миниблоке события. Для этого в директории модуля дублируйте файл "i18n.php" и переименуйте его в "i18n.ru.php". После чего, добавьте следующие константы:
 +
<source lang="php">
 +
'systemCloneElement'              => 'Копирование страницы',
 +
'systemCloneElement_msg'          => 'Пользователь <a href="%s">%s</a> скопировал страницу "%s"',
 +
'systemCloneElement_new'          => 'Скопированные страницы',
 +
'systemCloneElement_img'          => '/images/cms/admin/mac/icons/medium/content.png'
 +
</source>
  
В результате, мы всегда сможет увидеть кто из пользователей произвел копирование страницы, в таблице copy_page_log будет отображаться вся необходимая для этого информация.
+
Теперь, если какой-нибудь пользователь создаст копию страницы через модуль "Структура", то Вы сможете это увидеть в модуле "События":
  
[[Файл:copy_page_log.jpg]]
+
[[Файл:cope_info.jpg]]
  
 
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Модуль Структура]]
 
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Модуль Структура]]

Текущая версия на 13:59, 25 ноября 2013

Актуально для версии 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'

Теперь, если какой-нибудь пользователь создаст копию страницы через модуль "Структура", то Вы сможете это увидеть в модуле "События":

Cope info.jpg