server-tx part : web UI, PDF generator & transfer to RX server

This commit is contained in:
2025-05-15 14:34:08 +03:00
parent d969addd18
commit e1780fad99
32 changed files with 1272 additions and 0 deletions
@@ -0,0 +1,101 @@
{% extends "general.html" %}
{% block title %}Панель администратора{% endblock %}
{% block header %}Админ: {{ user.username }} | Панель | <a href="/">На главную</a>{% endblock %}
{% block content %}
<div class="card">
<h2>Список пользователей</h2>
<p><a href = "/admin/create">Тык</a>, чтобы создать пользователя</p>
<table>
<thead>
<tr>
<th class="username">Логин</th>
<th class="team">Команда</th>
<th class="actions">Действия</th>
</tr>
</thead>
<tbody>
{% for cuser in users %}
<tr>
<td>{{ cuser.username }}</td>
<td>{{ cuser.team }}</td>
<td class="action-buttons">
{% if cuser.team not in ("$root$") %}
<a href="edit/{{ cuser.id }}" class="icon-button" title="Редактировать">✏️</button>
<a href="remove/{{ cuser.id }}" class="icon-button" title="Удалить!">🗑️</button>
{% else %}
Только по запросу | ID: {{ cuser.id }}
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div class="card">
<h2>Активность пользователей</h2>
<p>Активность администраторов и преподавательского состава не отображается.</p>
<table>
<thead>
<tr>
<th>Логин</th>
<th>Последняя печать</th>
<th>Количество страниц</th>
</tr>
</thead>
<tbody>
{% for cuser in users %}
{% if cuser.team not in ("$root$", "$tutor$") %}
<tr>
<td>{{ cuser.username }}</td>
<td>{{ cuser.lastprint_ts|format_timestamp }}</td>
<td>{{ cuser.pages }}</td>
</tr>
{% endif %}
{% endfor %}
</tbody>
</table>
</div>
<div class="card">
<h2>Настройки печати</h2>
<br>
<form action="edit/settings" method="POST">
<div class="form-group">
<label for="watermark">Watermark на листах (доступные переменные: $time$, $team$, $page и $loc$):</label>
<input type="text" id="watermark" name="watermark" value="{{ settings['print']['watermark'] }}" required>
</div>
<div class="form-group">
<label for="pages-per-request">Лимит сгенерированных страниц на один запрос</label>
<input type="number" id="pages-per-request" name="pages-per-request" value="{{ settings['print']['limits']['pages-per-request'] }}" required>
</div>
<div class="form-group">
<label for="seconds-per-request">Лимит запросов на пользователя (задержка между запросами в секундах)</label>
<input type="number" id="seconds-per-request" name="seconds-per-request" value="{{ settings['print']['limits']['seconds-per-request'] }}" required>
</div>
<button type="submit" class="button">Сохранить текущие настройки</button>
</form>
</div>
<div class="card">
<h2>Настройки принимающего сервера</h2>
<p><span style = "color: red; font-weight: bold;">Перед любыми изменениям убедитесь, что вы знаете, что делаете!</span> По любым вопросам обращайтесь к Администратору системы.</p>
<p></p>
<br>
<form action="edit/server-rx" method="POST">
<div class="form-group">
<label for="server-ip">Принимающий сервер : IP</label>
<input type="text" id="server-ip" name="server-ip" value="{{ settings['server']['ip'] }}" required>
</div>
<div class="form-group">
<label for="server-port">Принимающий сервер : Port</label>
<input type="number" id="server-port" name="server-port" value="{{ settings['server']['port'] }}" required>
</div>
<div class="form-group">
<label for="server-secret">Принимающий сервер : Секретная фраза</label>
<input type="texts" id="server-secret" name="server-secret" value="{{ settings['server']['secret'] }}" required>
</div>
<button type="submit" class="button">Сохранить и скачать server-rx.json</button>
</form>
</div>
{% endblock %}
@@ -0,0 +1,29 @@
{% extends "general.html" %}
{% block title %}Создание пользователя{% endblock %}
{% block header %}Создание пользователя{% endblock %}
{% block content %}
<div class="card">
<h2>Создание новой команды</h2>
<form action="account_created" method="POST">
<div class="form-group">
<label for="username">Логин</label>
<input type="text" id="username" name="username" placeholder="Логин, например, ahmet" required>
</div>
<div class="form-group">
<label for="team_name">Команда</label>
<input type="text" id="team_name" name="team_name" placeholder="Короткое название команды, например, Физтех.Бегемотики" required>
</div>
<div class="form-group">
<label for="location">Позиция (стол, секция, пр.)</label>
<input type="text" id="location" name="location" placeholder="Метка, например, '1р1с' (т.е., 1 ряд 1 стол)" required>
</div>
<div class="form-group">
<label for="password">Пароль</label>
<input type="text" id="password" name="password" required>
</div>
<button type="submit" class="button">Создать пользователя</button>
</form>
</div>
{% endblock %}
@@ -0,0 +1,29 @@
{% extends "general.html" %}
{% block title %}Создание пользователя{% endblock %}
{% block header %}Создание пользователя{% endblock %}
{% block content %}
<div class="card">
<h2>Создание новой команды</h2>
<form action="account_created_many" method="POST">
<div class="form-group">
<label for="username">Логин</label>
<input type="text" id="username" name="username" placeholder="Логин, например, ahmet" required>
</div>
<div class="form-group">
<label for="team_name">Команда</label>
<input type="text" id="team_name" name="team_name" placeholder="Короткое название команды, например, Физтех.Бегемотики" required>
</div>
<div class="form-group">
<label for="location">Позиция (стол, секция, пр.)</label>
<input type="text" id="location" name="location" placeholder="Метка, например, '1р1с' (т.е., 1 ряд 1 стол)" required>
</div>
<div class="form-group">
<label for="password">Пароль</label>
<input type="text" id="password" name="password" required>
</div>
<button type="submit" class="button">Создать пользователя</button>
</form>
</div>
{% endblock %}
@@ -0,0 +1,33 @@
{% extends "general.html" %}
{% block title %}Пользователь создан{% endblock %}
{% block header %}Пользователь создан{% endblock %}
{% block content %}
<div class="card">
<h2>Успешно создан пользователь {{ cuser.username }}!</h2>
<form action="">
<div class="form-group">
<label for="username">Логин</label>
<input type="text" id="username" name="username" value="{{ cuser.username }}" readonly>
</div>
<div class="form-group">
<label for="team_name">Команда</label>
<input type="text" id="team_name" name="team_name" value="{{ cuser.team }}" readonly>
</div>
<div class="form-group">
<label for="location">Позиция (стол, секция, пр.)</label>
<input type="text" id="location" name="locat ion" value="{{ cuser.loc }}" readonly>
</div>
<div class="form-group">
<label for="password">Пароль (отображается один раз, на данной странице)</label>
<input type="text" id="password" name="password" value="{{ password_onetime }}" readonly>
</div>
Данную страницу можно отправить новому пользователю платформы!
</form>
</div>
<div class="card">
<a href="../admin">Вернуться обратно</a>
</div>
{% endblock %}
@@ -0,0 +1,29 @@
{% extends "general.html" %}
{% block title %}Редактирование пользователя{% endblock %}
{% block header %}Редактирование {{ edituser.username }}{% endblock %}
{% block content %}
<div class="card">
<h2>Редактирование команды</h2>
<form action="proc/{{ edituser.id }}" method="POST">
<div class="form-group">
<label for="username">Логин (не изменяем)</label>
<input type="text" id="username" name="username" value="{{ edituser.username }}" readonly>
</div>
<div class="form-group">
<label for="team_name">Команда</label>
<input type="text" id="team_name" name="team_name" value="{{ edituser.team }}" required>
</div>
<div class="form-group">
<label for="location">Позиция (стол, секция, пр.)</label>
<input type="text" id="location" name="location" value="{{ edituser.loc }}" required>
</div>
<div class="form-group" id="new_password">
<label for="new_password">Новый пароль (должен превышать 3 символа, если хотите изменить, иначе - пустое)</label>
<input type="text" id="new_password" name="new_password">
</div>
<button type="submit" class="button">Сохранить изменения</button>
</form>
</div>
{% endblock %}