]> git.ipfire.org Git - pbs.git/commitdiff
users: Refactor editing profiles
authorMichael Tremer <michael.tremer@ipfire.org>
Thu, 6 Oct 2022 09:37:22 +0000 (09:37 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Thu, 6 Oct 2022 09:37:22 +0000 (09:37 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/templates/user-profile-edit-fail.html [deleted file]
src/templates/user-profile-edit.html [deleted file]
src/templates/users/edit.html [new file with mode: 0644]
src/web/__init__.py
src/web/users.py

index 2bec20f06215ab48f95adc5914284b0f264c2566..794a74e815f6bdeef08a004b99c2140898a6be3d 100644 (file)
@@ -176,9 +176,7 @@ dist_templates_DATA = \
        src/templates/package-properties.html \
        src/templates/queue.html \
        src/templates/search.html \
-       src/templates/source-list.html \
-       src/templates/user-profile-edit-fail.html \
-       src/templates/user-profile-edit.html
+       src/templates/source-list.html
 
 templatesdir = $(datadir)/templates
 
@@ -332,6 +330,7 @@ templates_packages_modulesdir = $(templates_packagesdir)/modules
 
 dist_templates_users_DATA = \
        src/templates/users/delete.html \
+       src/templates/users/edit.html \
        src/templates/users/index.html \
        src/templates/users/show.html
 
diff --git a/src/templates/user-profile-edit-fail.html b/src/templates/user-profile-edit-fail.html
deleted file mode 100644 (file)
index 485d82b..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-{% extends "base.html" %}
-
-{% block body %}
-
-       <div class="row">
-               <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
-                       <div class="alert alert-danger" role="alert">
-                               <h2 style="word-wrap: break-word;" class="alert-heading">
-                                       {{ _("Edit failed") }}
-                               </h2>
-                               <p>
-                                               {{ _("We are sorry.") }}
-                                               {{ _("The user profile cannot be saved.") }}
-                                       </p>
-
-                                       <ul>
-                                               {% for msg in messages %}
-                                                       <li>{{ msg }}</li>
-                                               {% end %}
-                                       </ul>
-
-                                       <p>
-                                               {{ _("Use the back button on your web browser to go back to the previous page and correct your submission.") }}
-                                       </p>
-                       </div>
-               </div>
-       </div>
-
-{% end %}
diff --git a/src/templates/user-profile-edit.html b/src/templates/user-profile-edit.html
deleted file mode 100644 (file)
index e2e9a35..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-{% extends "base.html" %}
-
-{% block title %}{{ _("Edit user profile: %s") % user.realname }}{% end block %}
-
-{% block body %}
-
-       <div class="row">
-               <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
-                       <nav aria-label="breadcrumb" role="navigation">
-                               <ol class="breadcrumb">
-                                       <li class="breadcrumb-item"><a href="/">{{ _("Home") }}</a></li>
-                                       <li class="breadcrumb-item">
-                                               <a href="/users">{{ _("Users") }}</a>
-                                       </li>
-                                       <li class="breadcrumb-item">
-                                               <a href="/user/{{ user.name }}">{{ user.realname }}</a>
-                                       </li>
-                                       <li class="breadcrumb-item active">
-                                               <a href="/user/{{ user.name }}/edit">{{ _("Edit") }}</a>
-                                       </li>
-                               </ol>
-                       </nav>
-               </div>
-       </div>
-
-       <div class="row">
-               <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
-                       <h2 style="word-wrap: break-word;">
-                               {{ _("Edit user profile: %s") % user.realname }}
-                       </h2>
-               </div>
-       </div>
-       <div class="row">
-               <div class="col-12 col-sm-12 col-md-12 col-lg-12 col-xl-12">
-                       <form method="POST" action="">
-                               {% raw xsrf_form_html() %}
-
-                               <fieldset>
-                                       <legend>{{ _("User Identity") }}</legend>
-
-                                       <div class="form-group">
-                                               <label for="username">{{ _("Username") }}</label>
-                                               <input type="text" class="form-control" id="username" name="username"
-                                                       aria-describedby="usernameHelp" value="{{ user.name }}" disabled>
-                                               <small id="usernameHelp" class="form-text text-muted">
-                                                               {{ _("Cannot be changed.") }}
-                                               </small>
-                                       </div>
-
-                                       <div class="form-group">
-                                               <label for="inputRealname">{{ _("Real name") }}</label>
-                                               <input type="text" class="form-control" id="inputRealname" name="realname" aria-describedby="realnameHelp"
-                                                       placeholder="{{ _("Real name") }}" value="{{ user.realname }}">
-                                               <small id="inputRealnameHelp" class="form-text text-muted">
-                                                               {{ _("This field is optional, but we appreciate it very much if you type in your real name.") }}
-                                               </small>
-                                       </div>
-                               </fieldset>
-
-                               <fieldset>
-                                       <legend>{{ _("Email Adresses") }}</legend>
-
-                                       <div class="form-group">
-                                               <label for="primary_email_address">{{ _("Primary email address") }}</label>
-                                               <select class="form-control" id="primary_email_address" name="primary_email_address" aria-describedby="primary_email_addressHelp">
-                                                       {% for email in user.emails %}
-                                                               <option {% if user.email == email %}selected{% end %}>{{ email }}</option>
-                                                       {% end %}
-                                               </select>
-                                               <small id="primary_email_addressHelp" class="form-text text-muted">
-                                                               {{ _("This email address will be used for all messages to you.") }}
-                                               </small>
-                                       </div>
-                               </fieldset>
-
-                               <fieldset>
-                                       <legend>{{ _("Locale & timezone settings") }}</legend>
-
-                                       <div class="form-group">
-                                               <label for="inputLocale">{{ _("Preferred language") }}</label>
-                                               {% module SelectLocale(name="locale", id="inputLocale", preselect=user.locale) %}
-                                               <small id="inputLocaleHelp" class="form-text text-muted">
-                                                       {{ _("Auto-detect will use the language transmitted by your browser.") }}
-                                               </small>
-                                       </div>
-
-                                       <div class="form-group">
-                                               <label for="inputTimezone">{{ _("Timezone") }}</label>
-                                               {% module SelectTimezone(name="timezone", id="inputTimezone", preselect=user.timezone.zone) %}
-                                               <small id="inputTimezoneHelp" class="form-text text-muted">
-                                                       {{ _("Auto-detect will use the timezone transmitted by your browser.") }}
-                                               </small>
-                                       </div>
-                               </fieldset>
-
-                               <button type="submit" class="btn btn-primary">{{ _("Save") }}</button>
-                               <a class="btn btn-light" href="/user/{{ user.name }}">{{ _("Cancel") }}</a>
-                       </form>
-{% end block %}
diff --git a/src/templates/users/edit.html b/src/templates/users/edit.html
new file mode 100644 (file)
index 0000000..d48b48c
--- /dev/null
@@ -0,0 +1,40 @@
+{% extends "../base.html" %}
+
+{% block title %}{{ user }} - {{ _("Edit User") }}{% end block %}
+
+{% block container %}
+       <nav aria-label="{{ _("You are here:") }}" role="navigation">
+               <ul class="breadcrumbs">
+                       <li>
+                               <a href="/">{{ _("Home") }}</a>
+                       </li>
+                       <li>
+                               <a href="/users">{{ _("Users") }}</a>
+                       </li>
+                       <li>
+                               <a href="/users/{{ user.name }}">{{ user }}</a>
+                       </li>
+                       <li>
+                               <span class="show-for-sr">{{ _("Current") }}: </span> {{ _("Edit") }}
+                       </li>
+               </ul>
+       </nav>
+
+       <div class="grid-x grid-padding-x">
+               <div class="cell large-6 float-center">
+                       <form method="POST" action="">
+                               <div class="callout">
+                                       {% raw xsrf_form_html() %}
+
+                                       {# XXX TODO there is nothing to do here right now #}
+                               </div>
+
+                               <button class="success button expanded" type="submit">{{ _("Save") }}</button>
+
+                               <a class="small danger button expanded" href="/users/{{ user.name }}/delete">
+                                       {{ _("Delete") }}
+                               </a>
+                       </form>
+               </div>
+       </div>
+{% end block %}
index ce1d29a2508907fd6de906600e0055af81fbbd37..6657d3fdea3a28aa6d682c1bc9a88480d6ded205 100644 (file)
@@ -116,10 +116,13 @@ class Application(tornado.web.Application):
                        (r"/login", auth.LoginHandler),
                        (r"/logout", auth.LogoutHandler),
 
-                       # User profiles
+                       # Users
                        (r"/users", users.IndexHandler),
                        (r"/users/(\w+)", users.ShowHandler),
                        (r"/users/(\w+)/delete", users.DeleteHandler),
+                       (r"/users/(\w+)/edit", users.EditHandler),
+
+                       # User Repositories
                        (r"/users/(\w+)/repos/create", repos.CreateCustomHandler),
                        (r"/users/(?P<user_slug>\w+)/repos/(?P<distro_slug>[A-Za-z0-9\-\.]+)/(?P<repo_slug>[A-Za-z0-9\-]+)",
                                repos.ShowHandler),
@@ -131,7 +134,6 @@ class Application(tornado.web.Application):
                                repos.EditHandler),
                        (r"/users/(?P<user_slug>\w+)/repos/(?P<distro_slug>[A-Za-z0-9\-\.]+)/(?P<repo_slug>[A-Za-z0-9\-]+)/mirrorlist",
                                repos.MirrorlistHandler),
-                       (r"/user/(\w+)/edit", users.UserEditHandler),
 
                        # Packages
                        (r"/packages", packages.IndexHandler),
index ab8279872b499d6e64c06d77421aeaf193044225..b26a49327e36a964570030aed7f8711e1c736705 100644 (file)
@@ -45,46 +45,29 @@ class DeleteHandler(base.BaseHandler):
                self.redirect("/users")
 
 
-class UserEditHandler(base.BaseHandler):
+class EditHandler(base.BaseHandler):
        @tornado.web.authenticated
        def get(self, name):
-               user = self.get_user(name)
+               user = self.backend.users.get_by_name(name)
+               if not user:
+                       raise tornado.web.HTTPError(404, "Could not find user %s" % name)
 
-               self.render("user-profile-edit.html", user=user)
+               # XXX Check for permissions
+
+               self.render("users/edit.html", user=user)
 
        @tornado.web.authenticated
        def post(self, name):
-               _ = self.locale.translate
+               user = self.backend.users.get_by_name(name)
+               if not user:
+                       raise tornado.web.HTTPError(404, "Could not find user %s" % name)
 
-               user = self.get_user(name)
+               # XXX Check for permissions
 
                with self.db.transaction():
-                       email = self.get_argument("primary_email_address")
-                       realname = self.get_argument("realname", user.realname)
-                       locale = self.get_argument("locale", "")
-
-                       # Collect error messages
-                       msgs = []
-
-                       if not email:
-                               msgs.append(_("No email address provided."))
-                       elif not "@" in email:
-                               msgs.append(_("Email address is invalid."))
-
-                       if msgs:
-                               self.render("user-profile-edit-fail.html", messages=msgs)
-                               return
-
-                       # Everything is okay, we can save the new settings.
-                       user.locale = locale
-                       user.set_primary_email(email)
-                       user.realname = realname
-
-                       # Get the timezone settings.
-                       tz = self.get_argument("timezone", None)
-                       user.timezone = tz
+                       pass
 
-               self.redirect("/user/%s" % user.name)
+               self.redirect("/users/%s" % user.name)
 
 
 class ListModule(ui_modules.UIModule):