From a0b7f4f0c3810466f8f91d989b49b7da22f6573e Mon Sep 17 00:00:00 2001 From: augustin64 Date: Sun, 18 Dec 2022 22:40:07 +0100 Subject: [PATCH] Add edit and delete partition --- partitioncloud/modules/partition.py | 66 ++++++++++++++++++- partitioncloud/modules/utils.py | 63 ++++++++++++++++++ partitioncloud/static/style.css | 7 +- .../templates/albums/add-partition.html | 2 +- .../templates/partition/delete.html | 16 +++++ partitioncloud/templates/partition/edit.html | 24 +++++++ 6 files changed, 174 insertions(+), 4 deletions(-) create mode 100644 partitioncloud/templates/partition/delete.html create mode 100644 partitioncloud/templates/partition/edit.html diff --git a/partitioncloud/modules/partition.py b/partitioncloud/modules/partition.py index 5a663dd..2b88ef0 100644 --- a/partitioncloud/modules/partition.py +++ b/partitioncloud/modules/partition.py @@ -3,11 +3,11 @@ Partition module """ import os -from flask import Blueprint, abort, send_file, render_template, request, redirect +from flask import Blueprint, abort, send_file, render_template, request, redirect, flash, session from .db import get_db from .auth import login_required, admin_required -from .utils import get_all_partitions +from .utils import get_all_partitions, User, Partition bp = Blueprint("partition", __name__, url_prefix="/partition") @@ -31,6 +31,68 @@ def partition(uuid): download_name = f"{partition['name']}.pdf" ) +@bp.route("//edit", methods=["GET", "POST"]) +@login_required +def edit(uuid): + db = get_db() + try: + partition = Partition(uuid=uuid) + except LookupError: + abort(404) + + user = User(session.get("user_id")) + if user.access_level != 1 and partition.user_id != user.id: + flash("Vous n'êtes pas autorisé à modifier cette partition.") + return redirect("/albums") + + if request.method == "GET": + return render_template("partition/edit.html", partition=partition) + + error = None + + if "name" not in request.form or request.form["name"].strip() == "": + error = "Un titre est requis." + elif "author" not in request.form: + error = "Un nom d'auteur est requis (à minima nul)" + elif "body" not in request.form: + error = "Des paroles sont requises (à minima nulles)" + + if error is not None: + flash(error) + return redirect(f"/partition/{ uuid }/edit") + + partition.update( + name=request.form["name"], + author=request.form["author"], + body=request.form["body"] + ) + + flash(f"Partition {request.form['name']} modifiée avec succès.") + return redirect("/albums") + + +@bp.route("//delete", methods=["GET", "POST"]) +@login_required +def delete(uuid): + try: + partition = Partition(uuid=uuid) + except LookupError: + abort(404) + + user = User(session.get("user_id")) + + if user.access_level != 1 and partition.user_id != user.id: + flash("Vous n'êtes pas autorisé à supprimer cette partition.") + return redirect("/albums") + + if request.method == "GET": + return render_template("partition/delete.html", partition=partition) + + partition.delete() + + flash("Partition supprimée.") + return redirect("/albums") + @bp.route("/search/") @login_required diff --git a/partitioncloud/modules/utils.py b/partitioncloud/modules/utils.py index 97084d2..215f2ce 100644 --- a/partitioncloud/modules/utils.py +++ b/partitioncloud/modules/utils.py @@ -232,6 +232,69 @@ class Album(): db.commit() +class Partition(): + def __init__(self, uuid=None): + db = get_db() + if uuid is not None: + self.uuid = uuid + data = db.execute( + """ + SELECT * FROM partition + WHERE uuid = ? + """, + (self.uuid,) + ).fetchone() + if data is None: + raise LookupError + self.name = data["name"] + self.author = data["author"] + self.body = data["body"] + self.user_id = data["user_id"] + else: + raise LookupError + + def delete(self): + db = get_db() + db.execute( + """ + DELETE FROM contient_partition + WHERE partition_uuid = ? + """, + (self.uuid,) + ) + db.commit() + + os.remove(f"partitioncloud/partitions/{self.uuid}.pdf") + if os.path.exists(f"partitioncloud/static/thumbnails/{self.uuid}.jpg"): + os.remove(f"partitioncloud/static/thumbnails/{self.uuid}.jpg") + + partitions = db.execute( + """ + DELETE FROM partition + WHERE uuid = ? + """, + (self.uuid,) + ) + db.commit() + + def update(self, name=None, author="", body=""): + if name is None: + return Exception("name cannot be None") + + db = get_db() + db.execute( + """ + UPDATE partition + SET name = ?, + author = ?, + body = ? + WHERE uuid = ? + """, + (name, author, body, self.uuid) + ) + db.commit() + + def get_all_partitions(): db = get_db() partitions = db.execute( diff --git a/partitioncloud/static/style.css b/partitioncloud/static/style.css index cbc4edc..33666de 100644 --- a/partitioncloud/static/style.css +++ b/partitioncloud/static/style.css @@ -325,4 +325,9 @@ td { border-width: 1px; box-shadow: 1px 2px 2px #7f7f7f; - } \ No newline at end of file +} + +#paroles { + font-family: inherit; + font-size: 0.8rem; +} \ No newline at end of file diff --git a/partitioncloud/templates/albums/add-partition.html b/partitioncloud/templates/albums/add-partition.html index 9024236..515886b 100644 --- a/partitioncloud/templates/albums/add-partition.html +++ b/partitioncloud/templates/albums/add-partition.html @@ -11,7 +11,7 @@ Auteur Paroles - + {% if partition_uuid %} {% else %} diff --git a/partitioncloud/templates/partition/delete.html b/partitioncloud/templates/partition/delete.html new file mode 100644 index 0000000..45ec4e1 --- /dev/null +++ b/partitioncloud/templates/partition/delete.html @@ -0,0 +1,16 @@ +{% extends 'base.html' %} + +{% block header %} +

{% block title %}Supprimer {{ partition.name }}{% endblock %}

+{% endblock %} + +{% block content %} +Êtes vous sûr de vouloir supprimer cette partition ? +
+ +
+ + + + +{% endblock %} \ No newline at end of file diff --git a/partitioncloud/templates/partition/edit.html b/partitioncloud/templates/partition/edit.html new file mode 100644 index 0000000..a1c28b1 --- /dev/null +++ b/partitioncloud/templates/partition/edit.html @@ -0,0 +1,24 @@ +{% extends 'base.html' %} + +{% block header %} +

{% block title %}Edit - {{ partition.name }}{% endblock %}

+{% endblock %} + +{% block content %} +
+
voir le fichier ↗
+ +
+ Titre* + + Auteur + + Paroles + + +
+ + + + +{% endblock %} \ No newline at end of file