sprint/templates/solutions.html
Egor Matveev 9c0123cbf2 initial
2021-07-11 10:28:12 +03:00

315 lines
15 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% extends 'base.html' %}
{% load filters %}
{% block title %}{{ Block.name }} | решения{% endblock %}
{% block scripts %}
function filter() {
const idi = document.getElementById('idi').value;
const task = document.getElementById('task_name').value;
const user = document.getElementById('user').value;
const group = document.getElementById('group').value;
const last_solution = document.getElementById('last_solution').checked;
const best_result = document.getElementById('best_result').checked;
const only_students = document.getElementById('only_students').checked;
const not_seen = document.getElementById('not_seen').checked;
var req = '';
if (idi) {
req += '&solution_id=' + idi;
}
if (not_seen) {
req += '&not_seen=' + not_seen;
}
if (task) {
req += '&task_name=' + task;
}
if (user) {
req += '&user=' + user;
}
if (group) {
req += '&group=' + group;
}
if (last_solution) {
req += '&last_solution=' + last_solution;
}
if (best_result) {
req += '&best_result=' + best_result;
}
if (only_students) {
req += '&only_students=' + only_students;
}
window.location.href = '/admin/solutions?block_id={{ Block.id }}' + req;
}
function retest() {
let del = confirm("Подтвердите перетест");
if (del)
window.location.href = '/admin/retest?block_id={{ Block.id }}{% autoescape off %}{{ req }}{% endautoescape %}';
}
function download() {
let del = confirm("Подтвердите скачивание");
if (del) {
window.location.href = '/admin/download?block_id={{ Block.id }}{% autoescape off %}{{ req }}{% endautoescape %}';
}
}
function showHideTests() {
var text = document.getElementById('tests_text');
var button = document.getElementById('tests_button');
text.hidden = !text.hidden;
if (text.hidden) {
button.textContent = 'Показать тесты';
} else {
button.textContent = 'Скрыть тесты';
}
}
function showHideLog() {
var text = document.getElementById('log_text');
var button = document.getElementById('log_button');
text.hidden = !text.hidden;
if (text.hidden) {
button.textContent = 'Показать лог';
} else {
button.textContent = 'Скрыть лог';
}
}
function fillModalResults(id) {
jQuery.get('/get_result_data?id=' + id, function(data) {
const response = JSON.parse(data);
if (response['success'] == true) {
document.getElementById('resultModalLongTitle').innerHTML = 'Подробная информация о тестировании ' + id;
document.getElementById('results_text').innerHTML = response['results_text'];
document.getElementById('tests_text').innerHTML = '<h4>Тесты</h4><br>' + response['tests_text'];
document.getElementById('log_text').innerHTML = '<h4>Лог</h4><br>' + response['log_text'];
}
});
}
function fillModalComments(id) {
jQuery.get('/get_comment_data?id=' + id, function(data) {
const response = JSON.parse(data);
if (response['success'] == true) {
document.getElementById('commentModalLongTitle').innerHTML = 'Комментарий к решению ' + id;
document.getElementById('comment_text').innerHTML = response['comment_text'];
}
});
}
{% endblock %}
{% block styles %}
.input_field {
width: 500px;
}
{% endblock %}
{% block content %}
<!-- Modal -->
<div class="modal fade" id="resultModalLong" tabindex="-1" role="dialog" aria-labelledby="resultModalLongTitle" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="resultModalLongTitle"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<div class="col-12">
<div id="results_text"></div>
<hr>
<pre id="tests_text" hidden></pre>
<hr>
<pre id="log_text" hidden></pre>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" id="log_button" class="btn btn-warning" onclick="showHideLog()">Показать лог</button>
<button type="button" id="tests_button" class="btn btn-primary" onclick="showHideTests()">Показать тесты</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="commentModalLong" tabindex="-1" role="dialog" aria-labelledby="commentModalLongTitle" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="commentModalLongTitle"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<div class="col-12">
<pre id="comment_text"></pre>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<h2><a href="/admin/block?id={{ Block.id }}">{{ Block.name }}</a></h2>
<div class="row">
<div class="col-6">
<h4>Фильтр</h4>
<table>
<tr>
<td>Id</td>
<td><input class="input_field" type="text" placeholder="Id" id="idi" name="idi" value="{{ options.solution_id }}"></td>
</tr>
<tr>
<td>Таск</td>
<td>
<select class="input_field" id="task_name" name="task_name">
<option value="">Все</option>
{% for task in solutions_info.tasks %}
<option value="{{ task.name }}" {% if options.task_name == task.name %}selected{% endif %}>{{ task.name }}</option>
{% endfor %}
</select>
</td>
</tr>
<tr>
<td>Пользователь</td>
<td>
<select class="input_field" id="user" name="user">
<option value="">Все</option>
{% for u in solutions_info.users %}
<option value="{{ u }}" {% if options.user == u %}selected{% endif %}>{{ u }}</option>
{% endfor %}
</select>
</td>
</tr>
<tr>
<td>Группа</td>
<td>
<select class="input_field" id="group" name="group">
<option value="">Все</option>
{% for group in solutions_info.groups %}
<option value="{{ group }}" {% if options.group == group %}selected{% endif %}>{{ group }}</option>
{% endfor %}
</select>
</td>
</tr>
<tr>
<td>Последнее решение</td>
<td><input type="checkbox" id="last_solution" name="last_solution" {% if options.last_solution %}checked{% endif %}>{{ option.last_solution }}</td>
</tr>
<tr>
<td>Лучший результат</td>
<td><input type="checkbox" id="best_result" name="best_result" {% if options.best_result %}checked{% endif %}></td>
</tr>
<tr>
<td>Только студенты</td>
<td><input type="checkbox" id="only_students" name="only_students" {% if options.only_students %}checked{% endif %}></td>
</tr>
<tr>
<td>Еще не проверено</td>
<td><input type="checkbox" id="not_seen" name="not_seen" {% if options.not_seen %}checked{% endif %}></td>
</tr>
</table>
<button type="button" class="btn btn-dark" id="control" onclick="filter()" style="margin-top: 20px;"><i class="fa fa-check"></i> Применить</button><br>
<button type="button" class="btn btn-dark" id="control" onclick="window.location.href='/admin/solutions?block_id={{ Block.id }}'" style="margin-top: 10px;"><i class="fa fa-times"></i> Сбросить</button><br>
<button style="margin-top: 10px;" class="btn btn-dark" onclick="download()"><i class="fa fa-download"></i> Скачать решения</button><br>
<button style="margin-top: 10px;" class="btn btn-dark" onclick="retest()"><i class="fa fa-undo"></i> Перетест</button>
</div>
<div class="col-6">
<h4>Статистика по таскам</h4>
<table class="table">
<thead>
<th scope="col">Таск</th>
<th scope="col">Верно</th>
<th scope="col">Частично</th>
<th scope="col">С ошибкой</th>
<th scope="col">Все</th>
</thead>
<tbody>
{% for task in Block.tasks %}
<tr>
<th scope="row">{{ task.name }}</th>
<td>{{ task.correct_count }}</td>
<td>{{ task.partially_passed }}</td>
<td>{{ task.solutions_with_error }}</td>
<td>{{ task.solutions_count }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<hr>
<h5>Решения</h5>
<form method="POST" id="delete_form">
{% csrf_token %}
</form>
<table class="table">
<thead>
<tr>
<th scope="col">id</th>
<th scope="col">Таск</th>
<th scope="col">Пользователь</th>
<th scope="col">Время отправки</th>
<th scope="col">Группа</th>
<th scope="col">Результат</th>
<th scope="col">Оценка</th>
<th scope="col">Комментарий</th>
<th scope="col">Действия</th>
</tr>
</thead>
<tbody>
{% for solution in solutions %}
<tr style="background-color: {% if solution.result == 'TESTING' %}#FFE2B7{% else %}{% if solution.result == 'IN QUEUE' %}#EAEAFF{% endif %}{% endif %};">
<th scope="row">
<a href="/admin/solution?id={{ solution.id }}&solutions={{ filter }}">{{ solution.id }}</a>
</th>
<td>
<a href="/admin/task?id={{ solution.task.id }}">{{ solution.task.name }}</a>
</td>
<td>
{{ solution.userinfo.surname }} {{ solution.userinfo.name }} {{ solution.userinfo.middle_name }}
</td>
<td>
{{ solution.time_sent }}
</td>
<td>
{{ solution.userinfo.group }}
</td>
<td>
<!-- Button trigger modal -->
<button type="button" class="btn btn-link" data-toggle="modal" data-target="#resultModalLong" onclick="fillModalResults({{ solution.id }})">
{{ solution.result }}
</button>
</td>
<td>
{{ solution.mark_property }}
</td>
<td>
{% if solution.comment %}
<!-- Button trigger modal -->
<button type="button" class="btn btn-link" data-toggle="modal" data-target="#commentModalLong" onclick="fillModalComments({{ solution.id }})">
Посмотреть
</button>
{% else %}
<p>Нет комментария</p>
{% endif %}
</td>
<td>
<button class="btn btn-primary" onclick="window.location.href='/admin/download?block_id={{ Block.id }}&solution_id={{ solution.id }}';"><i class="fa fa-download"></i></button>
<button name="DELETE_SOLUTION" form="delete_form" value="{{ solution.id }}" onclick="var del = confirm('Подтвердите удаление');if (del){this.form.submit();}" class="btn btn-danger" type="игеещт"><i class="fa fa-trash"></i></button>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}