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
dist_templates_users_DATA = \
src/templates/users/delete.html \
+ src/templates/users/edit.html \
src/templates/users/index.html \
src/templates/users/show.html
+++ /dev/null
-{% 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 %}
+++ /dev/null
-{% 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 %}
--- /dev/null
+{% 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 %}
(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),
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),
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):