diff --git a/app/models.py b/app/models.py index c1ec727..f0ee43c 100644 --- a/app/models.py +++ b/app/models.py @@ -481,6 +481,10 @@ class Package(db.Model): return url_for("create_edit_editrequest_page", author=self.author.username, name=self.name) + def getBulkReleaseURL(self): + return url_for("bulk_change_release_page", + author=self.author.username, name=self.name) + def getDownloadURL(self): return url_for("package_download_page", author=self.author.username, name=self.name) diff --git a/app/templates/macros/forms.html b/app/templates/macros/forms.html index 255a4ca..858e0d4 100644 --- a/app/templates/macros/forms.html +++ b/app/templates/macros/forms.html @@ -115,7 +115,7 @@ {% macro render_checkbox_field(field, label=None) -%} {% if not label %}{% set label=field.label.text %}{% endif %} -
+
diff --git a/app/templates/packages/release_bulk_change.html b/app/templates/packages/release_bulk_change.html new file mode 100644 index 0000000..73d45e1 --- /dev/null +++ b/app/templates/packages/release_bulk_change.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} + +{% block title %} + Create a release | {{ package.title }} +{% endblock %} + +{% block content %} +

Bulk Change Releases

+ +

+ Use this page to set the min and max of all releases for your package. +

+ + {% from "macros/forms.html" import render_field, render_submit_field, render_checkbox_field %} +
+ {{ form.hidden_tag() }} + +
+ {{ render_checkbox_field(form.set_min, class_="col-sm-2") }} + {{ render_field(form.min_rel, class_="col-sm-10") }} +
+
+ {{ render_checkbox_field(form.set_max, class_="col-sm-2") }} + {{ render_field(form.max_rel, class_="col-sm-10") }} +
+ + {{ render_submit_field(form.submit) }} +
+{% endblock %} diff --git a/app/templates/packages/view.html b/app/templates/packages/view.html index bd49a87..2150a8c 100644 --- a/app/templates/packages/view.html +++ b/app/templates/packages/view.html @@ -237,10 +237,12 @@
Releases - {% if package.checkPerm(current_user, "MAKE_RELEASE") %} - + - {% endif %} +
+ {% if package.checkPerm(current_user, "MAKE_RELEASE") %} + bulk + + + {% endif %} +
    {% for rel in releases %} diff --git a/app/views/packages/releases.py b/app/views/packages/releases.py index 98a72a1..13f0a32 100644 --- a/app/views/packages/releases.py +++ b/app/views/packages/releases.py @@ -160,3 +160,38 @@ def edit_release_page(package, id): return redirect(package.getDetailsURL()) return render_template("packages/release_edit.html", package=package, release=release, form=form) + + + +class BulkReleaseForm(FlaskForm): + set_min = BooleanField("Set Min") + min_rel = QuerySelectField("Minimum Minetest Version", [InputRequired()], + query_factory=lambda: MinetestRelease.query.order_by(db.asc(MinetestRelease.id)), get_pk=lambda a: a.id, get_label=lambda a: a.name) + set_max = BooleanField("Set Max") + max_rel = QuerySelectField("Maximum Minetest Version", [InputRequired()], + query_factory=lambda: MinetestRelease.query.order_by(db.asc(MinetestRelease.id)), get_pk=lambda a: a.id, get_label=lambda a: a.name) + submit = SubmitField("Update") + + +@app.route("/packages///releases/bulk_change/", methods=["GET", "POST"]) +@login_required +@is_package_page +def bulk_change_release_page(package): + if not package.checkPerm(current_user, Permission.MAKE_RELEASE): + return redirect(package.getDetailsURL()) + + # Initial form class from post data and default data + form = BulkReleaseForm() + + if request.method == "POST" and form.validate(): + for release in package.releases.all(): + if form["set_min"].data: + release.min_rel = form["min_rel"].data.getActual() + if form["set_max"].data: + release.max_rel = form["max_rel"].data.getActual() + + db.session.commit() + + return redirect(package.getDetailsURL()) + + return render_template("packages/release_bulk_change.html", package=package, form=form)