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

В этот раз мы рванем сразу с места в карьер и попробуем расширить профиль пользователя в Xwiki.

Если быть точным, то сегодня мы добавим новое поле в профиль, включим возможность каждому пользователю устанавливать собственную тему, а также напишем небольшой скрипт, который выведет нам список сотрудников подразделения.

Как и в моей первой статье цикла про Xwiki мы будем использовать Docker образ с LTS версией Xwiki (на момент публикации 12.10.8), а также установим Demo Flavor.

Оглавление:

Добавляем поле "Position"

XWiki под капотом имеет множество настроек, благодаря, которым мы можем прокачать нашу вики почти как в популярном шоу с участием Xzibit.

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

Перво-наперво включите продвинутый режим пользователя (если еще не включили).
Также мы включим отображение скрытых страниц.

Примечание: Отображение скрытых страниц удобно переключать с помощью "горячих клавиш". Просто кликните на пустое поле страницы и последовательно нажмите клавиши: xxxh

Настройки будут выглядеть следующим образом:

Экран настроек пользователя
Экран настроек пользователя

Перейдите в раздел "Перечень страниц" и вбейте в поле поиска "XWikiUsers".

На самом деле можно просто перейти по ссылке вида:
<домен с ХВики>/bin/edit/XWiki/XWikiUsers?editor=class.

В нашем случае, для докера на локальной машине, скорее всего будет следующий адрес:
http://localhost:8080/bin/edit/XWiki/XWikiUsers?editor=class

Если вы открыли страницу через поиск, то перейдите в режим редактирования классов (см. в правой части рисунка), если напрямую по ссылке, то этот шаг можно пропустить.

Добавьте новое поля "Position" с типом "String". Не забудьте нажать кнопку "Добавить"

Теперь у нас есть поле для хранения информации и осталось, только включить его отображение.

Перейдите на старицу User Profile.

Ссылка для localhost: http://localhost:8080/bin/view/XWiki/AdminUserProfileSheet

Добавьте в любой понравившийся раздел Position:Position

Сохраняем и видим результат

Ну вот поле с должностью есть, но что если мы захотим сделать его мультиязычным, как все остальные поля профиля?

Делаем перевод для поля "Position"

На самом деле это совсем не сложно.

Создадим страницу для переводов. В дальнейшем вы сможете использовать её для перевода любых других пар ключ-значение. В моем случае я прямо в корне создал страницу "Переводы"
и записал в текст страницы: Position=Должность

Далее в редакторе объектов добавим TranslationDocumentClass и выберем область действия WIKI

Примечание: Подробнее про механизм перевода текстов можно прочитать в официальной документации.

Вернемся обратно в XWikiUsers.
(http://localhost:8080/bin/edit/XWiki/XWikiUsers?editor=class)

Развернем поле Position и добавим в раздел "Pretty name" следующий код:
{{translation key="Position"/}}

Сохраняем и наслаждаемся результатом.

Добавляем возможность назначить тему пользователю

Этот совет я проверял только в XWiki версии 12.X. Необходимо добавить в класс пользователя поле colorTheme с типом String

Посмотреть названия тем можно в разделе "Глобальное администрирование: Темы".

В профиль пользователя тема добавляется аналогично полю "Position". Я выбрал тему FlamingoThemes.Superhero.

Как видно выше, новая тема применялась только к администратору, когда я вошел под пользователем "Иван Иванов" у него отображалась тема из глобальных настроек.

Пишем скрипт вывода пользователей с указанием их Position и colorTheme

Напоследок, закрепим результат, решив надуманную задачку по автоматизации.

Представим, что мы хотим вывести список всех участников определенной группы с указанием их имени, фамилии, должности и цветовой схемы.

Для этого я создал группу IT и включил в неё трех человек.

Осталось создать новую страницу или отредактировать старую, добавив в неё Velocity макрос следующего содержания:

## получить данные о группе IT
#set($allGroupsInUserWiki = $services.user.group.getMembers('xwiki:XWiki.IT', false))
## перебрать в цикле всех пользователей
#foreach($user in $allGroupsInUserWiki)
## получить ссылку на страницу пользователя
#set($userPage = $xwiki.getDocument($user))
## получить объект с данными пользователя со страницы
#set ($user =  $userPage.getObject('XWiki.XWikiUsers'))
## вывести необходимые данные на экран
**$user.getValue('first_name') $user.getValue('last_name')** - position: $user.getValue('Position'), ColorTheme: $user.getValue('colorTheme')
#end

Вот такой результат должен получиться:

Спасибо, что дочитали до конца.

P.S. Я помню, что в прошлой статье обещал разобрать работу со Swagger и Figma, к ним я постараюсь вернуться позже, когда будет больше свободного времени.

Комментарии (1)