Поддержка аватаров

From EjudgeWiki

Навигация: Главная страница/Система ejudge/Использование/Поддержка аватаров

Аватар — это растровое изображение размера 90x90 пикселей, которое может быть загружено пользователем при регистрации или редактировании регистрационных данных турнира. Аватар пользователя отображается в административном интерфейсе просмотра посылок и протоколов тестирования, просмотра и ответа на сообщения и в списке пользователей. Аватар может отображаться в таблице текущих результатов, если установлена глобальная конфигурационная переменная stand_show_avatar.

Для поддержки аватаров система ejudge должна быть скомпилирована с включенной поддержкой mongodb. В глобальном конфигурационном файле ejudge.xml должен быть зарегистрирован плагин работы с аватарами, и в каждом турнире, в котором требуется поддержка аватаров, должны быть установлены соответствующие опции конфигурационного файла contest.xml.

При хранении аватаров в mongodb каждый запрос от браузера на отображение аватара должен обрабатываться системой ejudge и базой данных mongo. При одновременной загрузке аватаров (например, при отображении списка пользователей или таблицы текущих результатов) запросы на загрузку аватаров могут серьезно загрузить ejudge или базу mongodb. Поэтому предусмотрено хранение аватаров в файловой системе, чтобы изображения-аватары рассматривались веб-сервером как статический контент и обрабатывались на уровне веб-сервера или даже на уровне входного балансировщика nginx и не загружали систему ejudge. Для этого используются content-плагины. Content-плагин отвечает за сохранение аватара в файловой системе и генерацию корректного URL для доступа к нему.

Аватар идентифицируется 128-битным случайным числом, что делает перебор всех возможных идентификаторов с целью получения всех аватаров невыполнимым на практике.

Для включения поддержки аватаров в ejudge в конфигурационный файл ejudge.xml в раздел плагинов нужно добавить конфигурацию плагина для аватаров.

<plugin type="avatar" name="mongo" load="yes">
  <config/>
</plugin>

Раздел плагинов находится в элементе <plugins> конфигурационного файла и имеет примерно такой вид:

<plugins>
  <plugin type="TYPE1" name="NAME1" load="yes">
    <config>
    </config>
  </plugin>
  <plugin type="TYPE2" name="NAME2" load="yes">
    <config>
    </config>
  </plugin>
</plugins>

В этот раздел нужно добавить описание плагина avatar-mongo.

Чтобы задать использование этого плагина для всех турниров можно использовать элемент default_avatar_plugin:

<default_avatar_plugin>mongo</default_avatar_plugin>

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

Чтобы хранить аватары в файловой системе как статический контент во всех турнирах можно использовать элемент default_content_plugin:

<default_content_plugin>file</default_content_plugin>

Если не задавать плагин для статического контента по умолчанию в главном конфигурационном файле ejudge.xml, его можно задавать в конфигурационном файле contest.xml для каждого турнира.

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

Если плагин для хранения аватаров в файле включен, аватары по умолчанию сохраняются в каталог CONTESTS_HOME_DIR/var/content. Если CONTESTS_HOME_DIR сконфигурирован в /home/judges, то путь к каталогу с аватарами будет /home/judges/var/content. Если в ejudge загружены аватары, этот каталог будет содержать их. Например, вид каталога может быть примерно таким:

[cher@localhost ~]$ ls /home/judges/var/content
17n5g3k4l8848c3eflsqf9r73h.jpg  4ku4i470djmlaja3tuo0aglfvt.jpg
29211aapo72hvf0ltjvm2skq81.jpg  5ub8f6bij2jo1v7ca4k3ajerak.jpg
2vvoj415uv8cth55o6lh31e0tq.jpg  5v7858lh55vkror3knup9b6ba4.jpg
470lg24s803bm36t9lpf3r301a.jpg  616nvkmini27tesjuvujubippn.jpg
4gkg0c7tnl32ura98pegnniot8.jpg  7dhqn8lv0qgnajurc1skvdc76n.png

Этот каталог должен быть доступен веб-серверу либо с помощью символической ссылки из каталога документов веб-сервера, либо с помощью соответствующей директивы веб-сервера (apache или nginx).

Например, если каталог документов веб-сервера имеет путь /var/www/html, в нем уже находится каталог ejudge со стилевыми файлами ejudge, в каталоге /var/www/html может быть добавлена символическая ссылка на каталог с аватарами. Потребуется выполнить две команды:

cd /var/www/html
ln -s /home/judges/var/content content

В каталоге /var/www/html будет создана символическая ссылка content. Тогда URL вида http://localhost/content/29211aapo72hvf0ltjvm2skq81.jpg может использоваться для загрузки аватара.

Внимание! Убедитесь, что в конфигурационном файле apache включена поддержка символических ссылок (FollowSymLinks) и отключена поддержка показа содержимого каталога (Indexes). Для apache конфигурация каталога документов веб-сервера может иметь следующий вид:

<Directory "/var/www/html">
  Options -Indexes +FollowSymLinks
  AllowOverride None
</Directory>

Для генерации корректных URL аватаров требуется задать префикс URL. Если префикс URL не изменяется в зависимости от турнира, он может быть задан с помощью элемента default_content_url_prefix. Например, если веб-сервер настроен таким образом, что аватары доступны по URL вида http://localhost/content/29211aapo72hvf0ltjvm2skq81.jpg, префикс аватаров может быть задан как http://localhost/content/ или лучше как /content/. Обратите внимание, что префикс должен заканчиваться на знак /. Таким образом, значение элемента должно быть таким:

<default_content_url_prefix>/content/</default_content_url_prefix>

Настройки турнира

Чтобы включить поддержку аватаров в турнире нужно установить атрибут enable_avatar в элементе contest в значение yes в файле contest.xml.

<contest id="auto"
         disable_team_password="yes"
         managed="yes"
         enable_avatar="yes"
         run_managed="yes">

Можно отметить соответствующий пункт в графическом интерфейсе настройки турнира.

Если в глобальном конфигурационном файле ejudge.xml не задан элемент default_avatar_plugin, в конфигурационном файте турнира contest.xml нужно задать элемент avatar_plugin.

<avatar_plugin>mongo</avatar_plugin>

Для хранения аватаров как статического контента требуется либо задать элемент default_content_plugin в глобальном конфигурационном файле ejudge.xml, либо задать элемент content_plugin в конфигурационном файле турнира contest.xml.

<content_plugin>mongo</content_plugin>

Кроме того в конфигурационном файле турнира contest.xml требуется задать элемент content_url_prefix, если он не был задан в файле ejudge.xml.

<content_url_prefix>/content/</content_url_prefix>

Таким образом, лучше всего в глобальном конфигурационном файле ejudge.xml задать элементы default_avatar_plugin, default_content_plugin и content_url_prefix, а в турнирах, в которых требуется поддержка аватаров, установить атрибут enable_avatar и при необходимости, если префикс URL отличается от стандартного, задать элемент content_url_prefix.

Аватары поддерживаются с версии 3.7.0.