]> git.ipfire.org Git - pbs.git/commitdiff
releases: Implement controls to publish
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 14 Jun 2023 14:18:17 +0000 (14:18 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 14 Jun 2023 14:18:17 +0000 (14:18 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/templates/distros/releases/publish.html [new file with mode: 0644]
src/templates/distros/releases/show.html
src/web/__init__.py
src/web/distributions.py

index 678b85f9f6fe1b3b33cbe1e02ae9f31ce1af3db5..84b5f9e6665e120b2881a500f58442aa98b023a8 100644 (file)
@@ -237,6 +237,7 @@ dist_templates_distros_releases_DATA = \
        src/templates/distros/releases/delete.html \
        src/templates/distros/releases/edit.html \
        src/templates/distros/releases/index.html \
+       src/templates/distros/releases/publish.html \
        src/templates/distros/releases/show.html
 
 templates_distros_releasesdir = $(templates_distrosdir)/releases
diff --git a/src/templates/distros/releases/publish.html b/src/templates/distros/releases/publish.html
new file mode 100644 (file)
index 0000000..5cfda0e
--- /dev/null
@@ -0,0 +1,53 @@
+{% extends "../../modal.html" %}
+
+{% block title %}{{ release }} - {{ _("Publish") }}{% end block %}
+
+{% block breadcrumbs %}
+       <nav class="breadcrumb" aria-label="breadcrumbs">
+               <ul>
+                       <li>
+                               <a href="/distros">{{ _("Distributions") }}</a>
+                       </li>
+                       <li>
+                               <a href="/distros/{{ distro.slug }}">{{ distro }}</a>
+                       </li>
+                       <li>
+                               <a href="/distros/{{ distro.slug }}/releases">
+                                       {{ _("Releases") }}
+                               </a>
+                       </li>
+                       <li>
+                               <a href="{{ release.url }}">
+                                       {{ release }}
+                               </a>
+                       </li>
+                       <li class="is-active">
+                               <a href="#" aria-current="page">{{ _("Publish") }}</a>
+                       </li>
+               </ul>
+       </nav>
+{% end block %}
+
+{% block modal_title %}
+       <h4 class="title is-4">{{ _("Publish Release") }}</h4>
+       <h6 class="subtitle is-6">{{ release }}</h6>
+{% end block %}
+
+{% block modal %}
+       <form method="POST" action="">
+               {% raw xsrf_form_html() %}
+
+               <div class="content">
+                       <p>
+                               {{ _("Are you sure you want to publish %s?") % release }}
+                       </p>
+               </div>
+
+               {# Submit! #}
+               <div class="field">
+                       <button type="submit" class="button is-success is-fullwidth">
+                               {{ _("Publish Release") }}
+                       </button>
+               </div>
+       </form>
+{% end block %}
index c2c9fae093c731b1ebfa7f451733849c1fbe64e0..c5408f21d6b79edab6074d28f998d5212d07d716 100644 (file)
                <section class="section">
                        <div class="container">
                                <div class="buttons">
+                                       {% if not release.is_published() %}
+                                               <a class="button is-success" href="{{ release.url }}/publish">
+                                                       {{ _("Publish") }}
+                                               </a>
+                                       {% end %}
+
                                        <a class="button is-warning" href="{{ release.url }}/edit">
                                                {{ _("Edit") }}
                                        </a>
index a4c46f0aea37f72b0b7d19f2279299612ea6beca..669710bbbec1cce429820cc9ff6a7f5ae429878d 100644 (file)
@@ -227,6 +227,7 @@ class Application(tornado.web.Application):
                        (r"/distros/([A-Za-z0-9\-\.]+)/releases/([\w\-_]+)", distributions.ReleasesShowHandler),
                        (r"/distros/([A-Za-z0-9\-\.]+)/releases/([\w\-_]+)/delete", distributions.ReleasesDeleteHandler),
                        (r"/distros/([A-Za-z0-9\-\.]+)/releases/([\w\-_]+)/edit", distributions.ReleasesEditHandler),
+                       (r"/distros/([A-Za-z0-9\-\.]+)/releases/([\w\-_]+)/publish", distributions.ReleasesPublishHandler),
 
                        # Mirrors
                        (r"/mirrors",                                    mirrors.IndexHandler),
index 1ea990e3dcdd901595166ff41a2b368dc84b388b..5391360dab52117797a40af1e8bc5885867a42b8 100644 (file)
@@ -214,6 +214,46 @@ class ReleasesDeleteHandler(base.BaseHandler):
                self.redirect("/distros/%s/releases" % distro.slug)
 
 
+class ReleasesPublishHandler(base.BaseHandler):
+       @tornado.web.authenticated
+       def get(self, distro_slug, release_slug):
+               distro = self.backend.distros.get_by_slug(distro_slug)
+               if not distro:
+                       raise tornado.web.HTTPError(404, "Could not find distro: %s" % distro_slug)
+
+               # Fetch the release
+               release = distro.get_release(release_slug)
+               if not release:
+                       raise tornado.web.HTTPError(404, "Could not find release %s" % release_slug)
+
+               # Check permissions
+               if not release.has_perm(self.current_user):
+                       raise tornado.web.HTTPError(403)
+
+               self.render("distros/releases/publish.html", release=release, distro=distro)
+
+       @tornado.web.authenticated
+       async def post(self, distro_slug, release_slug):
+               distro = self.backend.distros.get_by_slug(distro_slug)
+               if not distro:
+                       raise tornado.web.HTTPError(404, "Could not find distro: %s" % distro_slug)
+
+               # Fetch the release
+               release = distro.get_release(release_slug)
+               if not release:
+                       raise tornado.web.HTTPError(404, "Could not find release %s" % release_slug)
+
+               # Check permissions
+               if not release.has_perm(self.current_user):
+                       raise tornado.web.HTTPError(403)
+
+               with self.db.transaction():
+                       await release.publish()
+
+               # Redirect back to the release
+               self.redirect(release.url)
+
+
 class ListModule(ui_modules.UIModule):
        def render(self, distros):
                return self.render_string("distros/modules/list.html", distros=distros)