From 3c441a9af4a1d6135f07bb8fd76329a3b6d7af00 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Mon, 15 Mar 2021 14:32:17 +0100
Subject: [PATCH] =?UTF-8?q?Web=20um=C3=AD=20pos=C3=ADlat=20i=20origin?=
 =?UTF-8?q?=C3=A1ln=C3=AD=20rozbit=C3=BD=20submit?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 mo/web/org_contest.py |  8 +++++---
 mo/web/util.py        | 16 ++++++++++++----
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index d5ee83ab..fffa0b16 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -892,8 +892,10 @@ class SubmitEditForm(FlaskForm):
     submit = wtforms.SubmitField("Uložit")
 
 
-@app.route('/org/contest/c/<int:contest_id>/paper/<int:paper_id>/<filename>')
-@app.route('/org/contest/c/<int:contest_id>/site/<int:site_id>/paper/<int:paper_id>/<filename>')
+@app.route('/org/contest/c/<int:contest_id>/paper/<int:paper_id>/<filename>', endpoint='org_submit_paper')
+@app.route('/org/contest/c/<int:contest_id>/site/<int:site_id>/paper/<int:paper_id>/<filename>', endpoint='org_submit_paper')
+@app.route('/org/contest/c/<int:contest_id>/paper/orig/<int:paper_id>/<filename>', endpoint='org_submit_paper_orig')
+@app.route('/org/contest/c/<int:contest_id>/site/<int:site_id>/paper/orig/<int:paper_id>/<filename>', endpoint='org_submit_paper_orig')
 def org_submit_paper(contest_id: int, paper_id: int, filename: str, site_id: Optional[int] = None):
     paper = (db.get_session().query(db.Paper)
              .options(joinedload(db.Paper.task))    # pro task_paper_filename()
@@ -906,7 +908,7 @@ def org_submit_paper(contest_id: int, paper_id: int, filename: str, site_id: Opt
 
     get_solution_context(contest_id, paper.for_user, paper.for_task, site_id)
 
-    return mo.web.util.send_task_paper(paper)
+    return mo.web.util.send_task_paper(paper, (request.endpoint == 'org_submit_paper_orig'))
 
 
 def get_solutions_query(
diff --git a/mo/web/util.py b/mo/web/util.py
index 56dc2e9b..40e6ecd8 100644
--- a/mo/web/util.py
+++ b/mo/web/util.py
@@ -72,20 +72,28 @@ def _task_paper_filename(user: db.User, paper: db.Paper) -> str:
 def org_paper_link(contest_or_id: Union[db.Contest, int],
                    site: Optional[db.Place],
                    user: db.User,
-                   paper: db.Paper) -> str:
+                   paper: db.Paper,
+                   orig: bool = False) -> str:
     """Doporučujeme preloadovat paper.task."""
     if isinstance(contest_or_id, db.Contest):
         contest_or_id = contest_or_id.contest_id
 
-    return url_for('org_submit_paper',
+    return url_for('org_submit_paper' if not orig else 'org_submit_paper_orig',
                    contest_id=contest_or_id,
                    paper_id=paper.paper_id,
                    site_id=site.place_id if site else None,
                    filename=_task_paper_filename(user, paper))
 
 
-def send_task_paper(paper: db.Paper) -> Response:
-    file = os.path.join(mo.util.data_dir('submits'), paper.file_name)
+def send_task_paper(paper: db.Paper, orig: bool = False) -> Response:
+    if orig:
+        name = paper.orig_file_name
+    else:
+        name = paper.file_name or paper.orig_file_name
+    if not name:
+        logger.error(f'Paper #{paper.paper_id} nemá žádný soubor')
+        raise werkzeug.exceptions.NotFound()
+    file = os.path.join(mo.util.data_dir('submits'), name)
 
     if os.path.isfile(file):
         return send_file(file, mimetype='application/pdf')
-- 
GitLab