From 157f5b41995966f5aebcc02e4be18bcb6e055b1d Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Fri, 13 Oct 2023 21:41:51 +0200
Subject: [PATCH] =?UTF-8?q?Odkazy=20na=20dokumentaci=20se=20zobrazuj=C3=AD?=
 =?UTF-8?q?=20v=20z=C3=A1vislosti=20na=20roli=20u=C5=BEivatele?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Samotná dokumentace je dostupná všem, není v ní nic tajného.
Jen nechceme uživatele mást.
---
 mo/web/doc.py                   | 28 ++++++++++++++++--
 mo/web/templates/doc_index.html | 52 ++++++++++++++++++++++++++++-----
 2 files changed, 71 insertions(+), 9 deletions(-)

diff --git a/mo/web/doc.py b/mo/web/doc.py
index 88b6887c..a609d7a5 100644
--- a/mo/web/doc.py
+++ b/mo/web/doc.py
@@ -1,13 +1,37 @@
 # Web: Návody
 
-from flask import render_template
+from dataclasses import dataclass
+from flask import render_template, g
+from typing import List, Optional
 
+import mo.db as db
+from mo.rights import Right
 from mo.web import app
 
 
+@dataclass
+class Doc:
+    url: str
+    link_text: str
+    suffix: Optional[str] = None
+    min_role: Optional[db.RoleType] = None
+    cat: Optional[str] = None
+
+    def is_visible(self) -> bool:
+        if self.min_role is None and self.cat is None:
+            return True
+        assert g.gatekeeper is not None
+        rights = g.gatekeeper.rights_for(cat=self.cat, min_role=self.min_role)
+        return rights.have_right(Right.view_doc)
+
+
 @app.route('/doc/')
 def doc_index():
-    return render_template('doc_index.html')
+
+    def filter_doc(docs: List[Doc]) -> List[Doc]:
+        return [d for d in docs if d.is_visible()]
+
+    return render_template('doc_index.html', Doc=Doc, filter_doc=filter_doc)
 
 
 @app.route('/doc/organizatori')
diff --git a/mo/web/templates/doc_index.html b/mo/web/templates/doc_index.html
index 5a374341..8f8b9b4a 100644
--- a/mo/web/templates/doc_index.html
+++ b/mo/web/templates/doc_index.html
@@ -10,19 +10,57 @@
 
 {% if g.user.is_org or g.user.is_admin %}
 
+{% set docs = filter_doc([
+	Doc(
+		min_role=RoleType.garant_okres,
+		url='https://docs.google.com/document/d/1nHnvxj_XtnMD2loMtTeoMEbVa4Upd4pEVkXoEKklRY8/edit?usp=sharing',
+		link_text='Podrobnější návod pro okresní garanty',
+	),
+	Doc(
+		min_role=RoleType.garant_okres,
+		cat='A',
+		url=url_for('static', filename='doc/zakladani-skolnich-garantu.pdf'),
+		link_text='Zakládání školních garantů',
+		suffix=' (návod pro okresní a krajské garanty, PDF)'
+	),
+	Doc(
+		min_role=RoleType.garant_skola,
+		cat='A',
+		url='https://docs.google.com/document/d/1ghoLETZyykzk-GjU2SrMhVqpvMugg9ed4g0TQwfeqUM/edit?usp=sharing',
+		link_text='Podrobnější návod pro školní garanty středních škol',
+	),
+	Doc(
+		min_role=RoleType.garant_skola,
+		cat='Z',
+		url='https://docs.google.com/document/d/1OaX8kCcIkk0hK113n0C9SdZV8hMn2Btb2E6J0bshB3c/edit?usp=sharing',
+		link_text='Podrobnější návod pro školní garanty základních škol',
+	),
+	Doc(
+		url=url_for('doc_import'),
+		link_text='Importování',
+	),
+	Doc(
+		url=url_for('static', filename='doc/import-navod.pdf'),
+		link_text='Podrobnější návod k importům',
+		suffix=' (PDF)'
+	),
+	Doc(
+		min_role=RoleType.garant_okres,
+		url=url_for('static', filename='doc/import-skolnich-garantu.pdf'),
+		link_text='Import školních garantů',
+		suffix=' (PDF)'
+	),
+]) %}
+
 <h3>Pro organizátory</h3>
 
 <ul>
 <li><a href='{{ url_for('doc_org') }}'>Obecný popis systému pro organizátory</a>
-<li><a href='{{ url_for('static', filename='doc/zakladani-skolnich-garantu.pdf') }}'>Zakládání školních garantů</a> (návod pro okresní a krajské garanty, PDF)
 <li><a href='{{ url_for('static', filename='doc/prace-s-protokoly.pdf') }}'>Tisk a skenování protokolů</a> (PDF)
 {# <li><a href='{{ url_for('static', filename='doc/skolni-garanti.pdf') }}'>Podrobnější návod pro školní garanty středních škol</a> (PDF) <em>(zastaralý, bude aktualizován)</em> #}
-<li><a href='https://docs.google.com/document/d/1ghoLETZyykzk-GjU2SrMhVqpvMugg9ed4g0TQwfeqUM/edit?usp=sharing'>Podrobnější návod pro školní garanty středních škol</a>
-<li><a href='https://docs.google.com/document/d/1OaX8kCcIkk0hK113n0C9SdZV8hMn2Btb2E6J0bshB3c/edit?usp=sharing'>Podrobnější návod pro školní garanty základních škol</a>
-<li><a href='https://docs.google.com/document/d/1nHnvxj_XtnMD2loMtTeoMEbVa4Upd4pEVkXoEKklRY8/edit?usp=sharing'>Podrobnější návod pro okresní garanty</a>
-<li><a href='{{ url_for('doc_import') }}'>Importování</a>
-<li><a href='{{ url_for('static', filename='doc/import-navod.pdf') }}'>Podrobnější návod k importům</a> (PDF)
-<li><a href='{{ url_for('static', filename='doc/import-skolnich-garantu.pdf') }}'>Import školních garantů</a> (PDF)
+{% for d in docs %}
+<li><a href='{{ d.url }}'>{{ d.link_text }}</a>{{ d.suffix|none_value("") }}
+{% endfor %}
 </ul>
 
 <h3>Exporty</h3>
-- 
GitLab