From d142484f3048130a0e8c9f36001575abe6b2f3cd Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Tue, 26 Jan 2021 18:20:29 +0100
Subject: [PATCH] =?UTF-8?q?Ve=20v=C5=A1ech=20v=C3=BDpisech=20upozor=C5=88u?=
 =?UTF-8?q?jeme=20na=20nekorektnost=20PDF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Také se vyrovnáme s tím, že paper nemusí mít vyplněné pages a bytes.

CSS třídu sol-late jsem zobecnil na sol-warn a občas to používám
i na upozornění na nekorektní PDF.
---
 mo/web/templates/base.html                     |  2 +-
 mo/web/templates/org_contest_solutions.html    | 16 +++++++++-------
 mo/web/templates/org_submit_list.html          | 12 ++++++------
 mo/web/templates/parts/org_solution_table.html | 18 ++++++++++++++----
 mo/web/templates/user_contest.html             |  9 ++++++++-
 mo/web/templates/user_contest_task.html        |  4 ++--
 static/mo.css                                  |  4 ++--
 7 files changed, 42 insertions(+), 23 deletions(-)

diff --git a/mo/web/templates/base.html b/mo/web/templates/base.html
index b8720148..11f35b2b 100644
--- a/mo/web/templates/base.html
+++ b/mo/web/templates/base.html
@@ -3,7 +3,7 @@
 <head>
 	<title>Odevzdávací systém MO: {% block title %}{% endblock %}</title>
 	<link rel=stylesheet href="{{ url_for('static', filename='bootstrap.min.css') }}?v=2" type='text/css' media=all>
-	<link rel=stylesheet href="{{ url_for('static', filename='mo.css') }}?v=7" type='text/css' media=all>
+	<link rel=stylesheet href="{{ url_for('static', filename='mo.css') }}?v=8" type='text/css' media=all>
 {% block head %}{% endblock %}
 </head>
 <body>
diff --git a/mo/web/templates/org_contest_solutions.html b/mo/web/templates/org_contest_solutions.html
index 5606f4e6..a7b03097 100644
--- a/mo/web/templates/org_contest_solutions.html
+++ b/mo/web/templates/org_contest_solutions.html
@@ -51,8 +51,8 @@ konkrétní úlohu. Symbol <b>+</b> značí, že existuje více verzí dostupný
 				{% if sol.final_submit_obj %}
 					{% set p = sol.final_submit_obj %}
 					{% set late = p.check_deadline(round) %}
-					<td class="sol {% if late %}sol-late{% endif %}">
-						<a href="{{ paper_link(u, p) }}" title="{{ p.uploaded_at|timeformat }} - {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}{% if late %} - {{ late }}{% endif %}">🖺</a>
+					<td class="sol{% if late or p.broken %} sol-warn{% endif %}">
+						<a href="{{ paper_link(u, p) }}" title="{{ p.uploaded_at|timeformat }}{% if p.broken %} - nekorektní PDF{% endif %}{% if p.pages != None %} - {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}{% endif %}{% if late %} - {{ late }}{% endif %}">🖺</a>
 						{% set key = (u.user_id, task.task_id, "solution") %}
 						{% if key in paper_counts and paper_counts[key] > 1 %}
 							<b title="Celkem {{ paper_counts[key]|inflected('verze', 'verze', 'verzí') }}">+</b>
@@ -60,15 +60,17 @@ konkrétní úlohu. Symbol <b>+</b> značí, že existuje více verzí dostupný
 				{% else %}
 					<td class="sol">
 				{% endif %}
-					<td class="sol">
-						{% if sol.final_feedback_obj %}
-						{% set p = sol.final_feedback_obj %}
-						<a href="{{ paper_link(u, p) }}" title="{{ p.uploaded_at|timeformat }} - {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}">🖺</a>
+				{% if sol.final_feedback_obj %}
+					{% set p = sol.final_feedback_obj %}
+					<td class="sol{% if p.broken %} sol-warn{% endif %}">
+						<a href="{{ paper_link(u, p) }}" title="{{ p.uploaded_at|timeformat }}{% if p.broken %} - nekorektní PDF{% endif %}{% if p.pages != None %} - {{ p.pages|inflected('stránka', 'stránky', 'stránek') }}{% endif %}">🖺</a>
 						{% set key = (u.user_id, task.task_id, "feedback") %}
 						{% if key in paper_counts and paper_counts[key] > 1 %}
 							<b title="Celkem {{ paper_counts[key]|inflected('verze', 'verze', 'verzí') }}">+</b>
 						{% endif %}
-						{% endif %}
+				{% else %}
+					<td class="sol">
+				{% endif %}
 				<td class="sol">
 					{% if sol.points is not none %}
 						{{ sol.points }}
diff --git a/mo/web/templates/org_submit_list.html b/mo/web/templates/org_submit_list.html
index 489b3aac..ea618ebd 100644
--- a/mo/web/templates/org_submit_list.html
+++ b/mo/web/templates/org_submit_list.html
@@ -48,11 +48,11 @@
 	{% for p in sol_papers %}
 		{% set late = p.check_deadline(sc.round) %}
 		<tr{% if p.paper_id == active_sol_id %} class='sol-active'{% endif %}>
-			<td{% if late %} class='sol-late'{% endif %}>{{ p.uploaded_at|timeformat }}
-			<td>{{ p.pages }}
-			<td>{{ p.bytes }}
+			<td{% if late %} class='sol-warn'{% endif %}>{{ p.uploaded_at|timeformat }}
+			<td>{% if p.broken %}nekorektní PDF{% else %}{{ p.pages|or_dash }}{% endif %}
+			<td>{{ p.bytes|or_dash }}
 			<td>{{ p.uploaded_by_obj|user_link }}
-			<td>{% if late %}<span class='sol-late'>({{ late }})</span> {% endif %}{{ p.note }}
+			<td>{% if late %}<span class='sol-warn'>({{ late }})</span> {% endif %}{{ p.note }}
 			<td><div class="btn-group">
 				<a class='btn btn-xs btn-primary' href='{{ paper_link(p) }}'>Stáhnout</a>
 				{% if p.paper_id != active_sol_id and set_final_form %}
@@ -98,8 +98,8 @@ jen finální opravu a ani se nedozví, kolik různých verzí existovalo.
 	{% for p in fb_papers %}
 		<tr{% if p.paper_id == active_fb_id %} class='sol-active'{% endif %}>
 			<td>{{ p.uploaded_at|timeformat }}
-			<td>{{ p.pages }}
-			<td>{{ p.bytes }}
+			<td>{% if p.broken %}nekorektní PDF{% else %}{{ p.pages|or_dash }}{% endif %}
+			<td>{{ p.bytes|or_dash }}
 			<td>{{ p.uploaded_by_obj|user_link }}
 			<td>{{ p.note }}
 			<td><div class="btn-group">
diff --git a/mo/web/templates/parts/org_solution_table.html b/mo/web/templates/parts/org_solution_table.html
index 93d622e8..3e7184b1 100644
--- a/mo/web/templates/parts/org_solution_table.html
+++ b/mo/web/templates/parts/org_solution_table.html
@@ -4,7 +4,7 @@ finální řešení, finální oprava a přidělené body. Historii všech odevz
 finální (ve výchozím stavu poslední nahrané).{% endif %}
 </i></p>
 
-<p><i>Legenda k symbolům: <span class='sol-late'><b>⚠</b></span> odevzdané po termínu,
+<p><i>Legenda k symbolům: <span class='sol-warn'><b>⚠</b></span> odevzdané po termínu,
 <b>🛈</b> nahráno někým jiným, než řešitelem, <b>+</b> existuje více verzí. Symboly po najetí myší zobrazí bližší informace.
 </i></p>
 
@@ -34,9 +34,14 @@ finální (ve výchozím stavu poslední nahrané).{% endif %}
 		<td>{% if sol.final_submit_obj %}
 			{% set p = sol.final_submit_obj %}
 			{% set late = p.check_deadline(round) %}
-			{% if late %}<span class='sol-late' title="{{ late }}"><b>⚠</b></span> {% endif %}
+			{% if late %}<span class='sol-warn' title="{{ late }}"><b>⚠</b></span> {% endif %}
 			<a href='{{ paper_link(u, p) }}'>
-				{{- p.uploaded_at|timeformat }} ({{ p.pages|inflected('strana', 'strany', 'stran') }})
+				{{- p.uploaded_at|timeformat }}
+				{% if p.broken %}
+					(nekorektní PDF)
+				{% elif p.pages != None %}
+					({{ p.pages|inflected('strana', 'strany', 'stran') }})
+				{% endif %}
 			</a>
 			{% if p.uploaded_by_obj != u %}
 				<a href="{{ url_for('org_user', id=p.uploaded_by) }}" title="nahrál {{ p.uploaded_by_obj.full_name() }}" ><b>🛈</b></a>
@@ -49,7 +54,12 @@ finální (ve výchozím stavu poslední nahrané).{% endif %}
 		<td>{% if sol.final_feedback_obj %}
 			{% set p = sol.final_feedback_obj %}
 			<a title="nahrál {{ p.uploaded_by_obj.full_name() }}" href='{{ paper_link(u, p) }}'>
-				{{ (p.uploaded_at if p else None)|timeformat }} ({{ p.pages|inflected('strana', 'strany', 'stran') }})
+				{{ (p.uploaded_at if p else None)|timeformat }}
+				{% if p.broken %}
+					(nekorektní PDF)
+				{% elif p.pages != None %}
+					({{ p.pages|inflected('strana', 'strany', 'stran') }})
+				{% endif %}
 			</a>
 			{% set key = (obj.task_id if for_user else obj.user_id, "feedback") %}
 			{% if key in paper_counts and paper_counts[key] > 1 %}
diff --git a/mo/web/templates/user_contest.html b/mo/web/templates/user_contest.html
index 49b3f0a0..f7822f71 100644
--- a/mo/web/templates/user_contest.html
+++ b/mo/web/templates/user_contest.html
@@ -75,7 +75,14 @@
 		<tr>
 			<td>{{ task.code }}: {{ task.name }}
 		{% if sol.final_submit_obj %}
-			<td><a href='{{ url_for('user_paper', id=sol.final_submit_obj.paper_id) }}'>{{- sol.final_submit_obj.uploaded_at|timeformat }} ({{ sol.final_submit_obj.pages|inflected('strana', 'strany', 'stran') }})</a>
+			{% set p = sol.final_submit_obj %}
+			<td><a href='{{ url_for('user_paper', id=p.paper_id) }}'>{{- p.uploaded_at|timeformat }}
+				{% if p.broken %}
+					<strong>(nekorektní PDF)</strong>
+				{% elif p.pages != None %}
+					({{ p.pages|inflected('strana', 'strany', 'stran') }})
+				{% endif %}
+			</a>
 		{% else %}
 			<td>
 		{% endif %}
diff --git a/mo/web/templates/user_contest_task.html b/mo/web/templates/user_contest_task.html
index 504c4a2d..57066df2 100644
--- a/mo/web/templates/user_contest_task.html
+++ b/mo/web/templates/user_contest_task.html
@@ -61,8 +61,8 @@
 {% for p in papers %}
 		<tr{% if round.state == RoundState.closed and papers|length > 1 and p.paper_id == sol.final_submit %} class="sol-active"{% endif %}>
 			<td>{{ p.uploaded_at|timeformat }}
-			<td>{{ p.pages }}
-			<td>{{ p.bytes }}
+			<td>{% if p.broken %}nekorektní PDF{% else %}{{ p.pages|or_dash }}{% endif %}
+			<td>{{ p.bytes|or_dash }}
 			<td>{{ p.uploaded_by_obj.full_name() }}
 			<td>{{ p.note }}
 			<td><a class='btn btn-xs btn-primary' href='{{ url_for('user_paper', id=p.paper_id) }}'>Stáhnout</a>
diff --git a/static/mo.css b/static/mo.css
index 3af005c1..4af48c46 100644
--- a/static/mo.css
+++ b/static/mo.css
@@ -106,7 +106,7 @@ table.data td.sol {
 table.data td.sol a {
 	color: black;
 }
-table.data td.sol-late {
+table.data td.sol-warn {
 	background-color: #ffaaaa;
 }
 
@@ -180,7 +180,7 @@ nav#main-menu a.active {
 	background-color: yellow;
 }
 
-.sol-late {
+.sol-warn {
 	color: red;
 }
 
-- 
GitLab