mirror of
https://github.com/almet/copanier.git
synced 2025-04-28 19:42:37 +02:00
Attach the group to the user and to the request
This commit is contained in:
parent
cef7a200dc
commit
690c551627
4 changed files with 41 additions and 18 deletions
|
@ -106,7 +106,16 @@ async def auth_required(request, response):
|
||||||
if not email:
|
if not email:
|
||||||
response.redirect = f"/sésame?next={request.path}"
|
response.redirect = f"/sésame?next={request.path}"
|
||||||
return response
|
return response
|
||||||
user = Person(email=email)
|
|
||||||
|
groups = Groups.load()
|
||||||
|
request["groups"] = groups
|
||||||
|
|
||||||
|
group = groups.get_user_group(email)
|
||||||
|
user = Person(
|
||||||
|
email=email,
|
||||||
|
group_id=group.id,
|
||||||
|
group_name=group.name)
|
||||||
|
|
||||||
request["user"] = user
|
request["user"] = user
|
||||||
session.user.set(user)
|
session.user.set(user)
|
||||||
|
|
||||||
|
@ -183,14 +192,14 @@ async def home(request, response):
|
||||||
|
|
||||||
@app.route("/groupes", methods=["GET"])
|
@app.route("/groupes", methods=["GET"])
|
||||||
async def handle_groups(request, response):
|
async def handle_groups(request, response):
|
||||||
response.html("groups.html", {"groups": Groups.load()})
|
response.html("groups.html", {"groups": request["groups"]})
|
||||||
|
|
||||||
|
|
||||||
@app.route("/groupes/{id}/rejoindre", method=["GET"])
|
@app.route("/groupes/{id}/rejoindre", method=["GET"])
|
||||||
async def join_group(request, response, id):
|
async def join_group(request, response, id):
|
||||||
groups = Groups.load()
|
|
||||||
user = session.user.get(None)
|
user = session.user.get(None)
|
||||||
group = groups.add_user(user.email, id)
|
group = request["groups"].add_user(user.email, id)
|
||||||
groups.persist()
|
request['groups'].persist()
|
||||||
response.message(f"Vous avez bien rejoint le groupe '{group.name}'")
|
response.message(f"Vous avez bien rejoint le groupe '{group.name}'")
|
||||||
response.redirect = "/groupes"
|
response.redirect = "/groupes"
|
||||||
|
|
||||||
|
@ -207,9 +216,8 @@ async def create_group(request, response):
|
||||||
id=slugify(form.get('name')),
|
id=slugify(form.get('name')),
|
||||||
name=form.get('name'),
|
name=form.get('name'),
|
||||||
members=members)
|
members=members)
|
||||||
groups = Groups.load()
|
request["groups"].add_group(group)
|
||||||
groups.add_group(group)
|
request["groups"].persist()
|
||||||
groups.persist()
|
|
||||||
response.message(f"Le groupe {group.name} à bien été créé")
|
response.message(f"Le groupe {group.name} à bien été créé")
|
||||||
response.redirect = "/groupes"
|
response.redirect = "/groupes"
|
||||||
response.html("edit_group.html", group=group)
|
response.html("edit_group.html", group=group)
|
||||||
|
@ -217,9 +225,8 @@ async def create_group(request, response):
|
||||||
|
|
||||||
@app.route("/groupes/{id}/éditer", methods=["GET", "POST"])
|
@app.route("/groupes/{id}/éditer", methods=["GET", "POST"])
|
||||||
async def edit_group(request, response, id):
|
async def edit_group(request, response, id):
|
||||||
groups = Groups.load()
|
assert id in request["groups"].groups, "Impossible de trouver le groupe"
|
||||||
assert id in groups.groups, "Impossible de trouver le groupe"
|
group = request["groups"].groups[id]
|
||||||
group = groups.groups[id]
|
|
||||||
if request.method == "POST":
|
if request.method == "POST":
|
||||||
form = request.form
|
form = request.form
|
||||||
members = []
|
members = []
|
||||||
|
@ -227,20 +234,21 @@ async def edit_group(request, response, id):
|
||||||
members = [m.strip() for m in form.get('members').split(',')]
|
members = [m.strip() for m in form.get('members').split(',')]
|
||||||
group.members = members
|
group.members = members
|
||||||
group.name = form.get('name')
|
group.name = form.get('name')
|
||||||
groups.groups[id] = group
|
request["groups"].groups[id] = group
|
||||||
groups.persist()
|
request["groups"].persist()
|
||||||
response.redirect = "/groupes"
|
response.redirect = "/groupes"
|
||||||
response.html("edit_group.html", group=group)
|
response.html("edit_group.html", group=group)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/groupes/{id}/supprimer", methods=["GET"])
|
@app.route("/groupes/{id}/supprimer", methods=["GET"])
|
||||||
async def delete_group(request, response, id):
|
async def delete_group(request, response, id):
|
||||||
groups = Groups.load()
|
assert id in request["groups"].groups, "Impossible de trouver le groupe"
|
||||||
assert id in groups.groups, "Impossible de trouver le groupe"
|
deleted = request["groups"].groups.pop(id)
|
||||||
deleted = groups.groups.pop(id)
|
request["groups"].persist()
|
||||||
groups.persist()
|
|
||||||
response.message(f"Le groupe {deleted.name} à bien été supprimé")
|
response.message(f"Le groupe {deleted.name} à bien été supprimé")
|
||||||
response.redirect = "/groupes"
|
response.redirect = "/groupes"
|
||||||
|
|
||||||
|
|
||||||
@app.route("/archives", methods=["GET"])
|
@app.route("/archives", methods=["GET"])
|
||||||
async def view_archives(request, response):
|
async def view_archives(request, response):
|
||||||
response.html("archive.html", {"deliveries": Delivery.all(is_archived=True)})
|
response.html("archive.html", {"deliveries": Delivery.all(is_archived=True)})
|
||||||
|
|
|
@ -87,11 +87,14 @@ class Person(Base):
|
||||||
email: str
|
email: str
|
||||||
first_name: str = ""
|
first_name: str = ""
|
||||||
last_name: str = ""
|
last_name: str = ""
|
||||||
|
group_id: str = ""
|
||||||
|
group_name: str = ""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_staff(self):
|
def is_staff(self):
|
||||||
return not config.STAFF or self.email in config.STAFF
|
return not config.STAFF or self.email in config.STAFF
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class Group(Base):
|
class Group(Base):
|
||||||
id: str
|
id: str
|
||||||
|
@ -136,6 +139,12 @@ class Groups(PersistedBase):
|
||||||
if email in group.members:
|
if email in group.members:
|
||||||
group.members.remove(email)
|
group.members.remove(email)
|
||||||
|
|
||||||
|
def get_user_group(self, email):
|
||||||
|
for group in self.groups.values():
|
||||||
|
if email in group.members:
|
||||||
|
return group
|
||||||
|
return None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def init_fs(cls):
|
def init_fs(cls):
|
||||||
cls.get_root().mkdir(parents=True, exist_ok=True)
|
cls.get_root().mkdir(parents=True, exist_ok=True)
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
{% if request.user.is_staff %}
|
{% if request.user.is_staff %}
|
||||||
<a class="button" href="/livraison"><i class="icon-hotairballoon"></i> Nouvelle livraison</a>
|
<a class="button" href="/livraison"><i class="icon-hotairballoon"></i> Nouvelle livraison</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<i class="icon-lock"></i> <span>{{ request["user"].email }}</span>
|
<i class="icon-lock"></i> <span>{{ request["user"].email }} {% if request["user"].group_name %}({{ request["user"].group_name }}){% endif %}</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</nav>
|
</nav>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -9,4 +9,10 @@
|
||||||
{% include "includes/delivery_list.html" %}
|
{% include "includes/delivery_list.html" %}
|
||||||
{% endwith %}
|
{% endwith %}
|
||||||
<a href="/archives">Voir les livraisons archivées</a>
|
<a href="/archives">Voir les livraisons archivées</a>
|
||||||
|
<hr>
|
||||||
|
<ul class="toolbox">
|
||||||
|
<li>
|
||||||
|
<a href="/groupes" class="button"><i class="icon-globe"></i> Gérer les groupes</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
{% endblock body %}
|
{% endblock body %}
|
||||||
|
|
Loading…
Reference in a new issue