Ajout d'une option permettant de quitter un album

This commit is contained in:
augustin64 2022-08-30 19:47:29 +02:00
parent dc4f1f21d3
commit e40a344e2b
3 changed files with 49 additions and 7 deletions

View File

@ -70,7 +70,8 @@ def album(uuid):
"albums/album.html", "albums/album.html",
album=album, album=album,
partitions=partitions, partitions=partitions,
not_participant=not_participant not_participant=not_participant,
user=user
) )
except LookupError: except LookupError:
@ -160,6 +161,25 @@ def join_album(uuid):
return redirect(f"/albums/{uuid}") return redirect(f"/albums/{uuid}")
@bp.route("/<uuid>/quit")
@login_required
def quit_album(uuid):
user = User(session.get("user_id"))
album = Album(uuid=uuid)
users = album.get_users()
if user.id not in [u["id"] for u in users]:
flash("Vous ne faites pas partie de cet album")
return redirect(f"/albums/{uuid}")
if len(users) == 1:
flash("Vous êtes seul dans cet album, le quitter entraînera sa suppression.")
return redirect(f"/albums/{uuid}/delete")
user.quit_album(uuid)
flash("Album quitté.")
return redirect(f"/albums")
@bp.route("/<uuid>/delete", methods=["GET", "POST"]) @bp.route("/<uuid>/delete", methods=["GET", "POST"])
@login_required @login_required
def delete_album(uuid): def delete_album(uuid):
@ -298,7 +318,7 @@ def add_partition_from_search():
error = "Il est nécessaire de sélectionner une partition." error = "Il est nécessaire de sélectionner une partition."
elif "partition-type" not in request.form: elif "partition-type" not in request.form:
error = "Il est nécessaire de spécifier un type de partition." error = "Il est nécessaire de spécifier un type de partition."
elif not user.is_participant(request.form["album-uuid"]): elif (not user.is_participant(request.form["album-uuid"])) and (user.access_level != 1):
error = "Vous ne participez pas à cet album." error = "Vous ne participez pas à cet album."
if error is not None: if error is not None:

View File

@ -6,16 +6,25 @@
{% block header_actions %} {% block header_actions %}
<div id="users-list"> <div id="users-list">
{% for user in album.users %} {% for album_user in album.users %}
<div class="user-profile-picture" style="background-color:{{ user.color }};" title="{{ user.username }}"> <div class="user-profile-picture" style="background-color:{{ album_user.color }};" title="{{ album_user.username }}">
{{ user.username[0] | upper }} {{ album_user.username[0] | upper }}
</div> </div>
{% endfor %} {% endfor %}
</div> </div>
{% if user.access_level == 1 %}
<a class="button-href" href="/albums/{{ album.uuid }}/delete">
<button id="delete-album">Supprimer</button>
</a>
{% endif %}
{% if not_participant %} {% if not_participant %}
<a class="button-href" href="/albums/{{ album.uuid }}/join"> <a class="button-href" href="/albums/{{ album.uuid }}/join">
<button id="join-album">Rejoindre</button> <button id="join-album">Rejoindre</button>
</a> </a>
{% else %}
<a class="button-href" href="/albums/{{ album.uuid }}/quit">
<button id="quit-album">Quitter</button>
</a>
{% endif %} {% endif %}
{% if g.user %} {% if g.user %}
<a class="button-href" href="/albums/{{ album.uuid }}/add-partition"> <a class="button-href" href="/albums/{{ album.uuid }}/add-partition">

View File

@ -26,8 +26,7 @@ class User():
def is_participant(self, album_uuid): def is_participant(self, album_uuid):
db = get_db() db = get_db()
if self.access_level == 1:
return True
return len(db.execute( return len(db.execute(
""" """
SELECT album.id FROM album SELECT album.id FROM album
@ -71,6 +70,20 @@ class User():
) )
db.commit() db.commit()
def quit_album(self, album_uuid):
db = get_db()
album = Album(uuid=album_uuid)
db.execute(
"""
DELETE FROM contient_user
WHERE user_id = ?
AND album_id = ?
""",
(self.id, album.id)
)
db.commit()
def get_color(self): def get_color(self):
integer = int.from_bytes(self.username.encode(), "little") % 16777215 integer = int.from_bytes(self.username.encode(), "little") % 16777215