roundabout,
created on Thursday, 5 September 2024, 11:17:30 (1725535050),
received on Thursday, 5 September 2024, 13:52:29 (1725544349)
Author identity: vlad <vlad.muntoiu@gmail.com>
1ac4e81abd1a4db4ef29d21a397acc0c37b6b28b
app.py
@@ -295,6 +295,10 @@ def profile(username):
@app.route("/upload")
def upload():
if "username" not in flask.session:
flask.flash("Log in to upload pictures.")
return flask.redirect("/accounts")
licences = Licence.query.order_by(Licence.free.desc(), Licence.pinned.desc(), Licence.title).all()
return flask.render_template("upload.html", licences=licences)
@@ -305,11 +309,38 @@ def upload_post():
description = flask.request.form["description"]
origin_url = flask.request.form["origin_url"]
author = db.session.get(User, flask.session.get("username"))
licence_ids = flask.request.form.getlist("licence")
if author is None:
flask.abort(401)
file = flask.request.files["file"]
if not file or not file.filename:
flask.flash("No selected file")
flask.flash("Select a file")
return flask.redirect(flask.request.url)
if not file.mimetype.startswith("image/"):
flask.flash("Only images are supported")
return flask.redirect(flask.request.url)
if not title:
flask.flash("Enter a title")
return flask.redirect(flask.request.url)
if not description:
flask.flash("Enter a description")
return flask.redirect(flask.request.url)
print(licence_ids)
if not licence_ids:
flask.flash("Select licences")
return flask.redirect(flask.request.url)
licences = [db.session.get(Licence, licence_id) for licence_id in licence_ids]
if not any(licence.free for licence in licences):
flask.flash("Select at least one free licence")
return flask.redirect(flask.request.url)
resource = PictureResource(title, author, description, origin_url, ["CC0-1.0"], file.mimetype)
@@ -317,6 +348,8 @@ def upload_post():
db.session.commit()
file.save(path.join(config.DATA_PATH, "pictures", str(resource.id)))
flask.flash("Picture uploaded successfully")
return flask.redirect("/picture/" + str(resource.id))
static/efficient-ui
@@ -1 +1 @@
Subproject commit 475381868136b3cb05e333950cd523f633ce501d
Subproject commit de68efc82aa23ebb7a5f007af0f393167e2c4105
static/style.css
@@ -264,3 +264,8 @@ iconify-icon {
grid-template-columns: auto 1fr;
align-items: center;
}
.required-asterisk::after {
content: "*";
color: var(--color-error);
}
templates/upload.html
@@ -5,19 +5,20 @@
<form method="POST" class="vbox" enctype="multipart/form-data">
<h2>Upload</h2>
<label>
Name
<span class="required-asterisk">Title</span>
<input type="text" name="title" required>
</label>
<label>
Description
<span class="required-asterisk">Description</span>
<textarea name="description" required></textarea>
</label>
<label>
Origin URL
<input type="url" name="origin_url" required>
<input type="url" name="origin_url">
Can be left blank if not applicable.
</label>
<x-vbox>
Licence
<span class="required-asterisk">Licences</span>
<div class="multi-select" style="height: clamp(320px, 50vh, 640px)">
{% for licence in licences %}
<div class="licence-selection">
@@ -67,7 +68,7 @@
</div>
</x-vbox>
<label>
File
<span class="required-asterisk">File</span>
<input type="file" name="file" required>
</label>
<button type="submit">Upload</button>