From 26a810574898b2b395b45060d6bd6815b841e6dd Mon Sep 17 00:00:00 2001 From: Holger Frey Date: Tue, 7 Apr 2020 16:43:28 +0200 Subject: [PATCH] completed usermanagement --- ordr3/repo.py | 8 ++++ ordr3/schemas/account.py | 7 +++- ordr3/static/script.js | 15 ++++++++ ordr3/static/style.css | 25 +++++++++++++ ordr3/templates/layout_full.jinja2 | 22 +++++------ ordr3/templates/macros.jinja2 | 2 +- ordr3/templates/users/delete.jinja2 | 32 ++++++++++++++++ ordr3/templates/users/edit.jinja2 | 3 +- ordr3/views/users.py | 58 ++++++++++++++++++++++++++++- tests/test_services.py | 4 ++ 10 files changed, 158 insertions(+), 18 deletions(-) create mode 100644 ordr3/templates/users/delete.jinja2 diff --git a/ordr3/repo.py b/ordr3/repo.py index 9ae00f0..fedd5e3 100644 --- a/ordr3/repo.py +++ b/ordr3/repo.py @@ -36,6 +36,10 @@ class AbstractOrderRepository(abc.ABC): def add_user(self, user): """ add a user to the datastore """ + @abc.abstractmethod + def delete_user(self, user): + """ removes a user from the datastore """ + @abc.abstractmethod def get_user(self, reference): """ get a user from the datastore by primary key """ @@ -113,6 +117,10 @@ class SqlAlchemyRepository(AbstractOrderRepository): """ add a user to the database """ self._add_item_to_db(user) + def delete_user(self, user): + """ removes a user from the datastore """ + self._delete_item_from_db(user) + def get_user(self, reference): """ get a user from the database by primary key """ try: diff --git a/ordr3/schemas/account.py b/ordr3/schemas/account.py index 92d9cde..65d7a99 100644 --- a/ordr3/schemas/account.py +++ b/ordr3/schemas/account.py @@ -139,7 +139,7 @@ class MyAccountSchema(CSRFSchema): @classmethod def as_form(cls, request, **override): settings = { - "buttons": ("Save", "Cancel"), + "buttons": ("Save Changes", "Cancel"), "css_class": "form-horizontal registration", } settings.update(override) @@ -156,7 +156,10 @@ class EditAccountSchema(CSRFSchema): ), ) role = colander.SchemaNode( - colander.String(), widget=deform.widget.SelectWidget(values=ROLES) + colander.String(), + widget=deform.widget.SelectWidget( + values=ROLES, css_class="custom-select" + ), ) first_name = colander.SchemaNode(colander.String(),) last_name = colander.SchemaNode(colander.String(),) diff --git a/ordr3/static/script.js b/ordr3/static/script.js index 3f4d08c..d49c41a 100644 --- a/ordr3/static/script.js +++ b/ordr3/static/script.js @@ -63,6 +63,21 @@ $(function() { $(target).fadeOut( 100 ).delay( 100 ).fadeIn( 100 ); }); + $(".o3-confirmation").on("click", function(event) { + var target = $(event.delegateTarget); + var checkbox = $(target).find(".custom-control-input"); + var button = $(".o3-confirm-button"); + if (checkbox.is(':checked')) { + button.prop('disabled', false); + button.addClass("btn-danger") + button.removeClass("btn-outline-danger") + } else { + button.prop('disabled', true); + button.removeClass("btn-danger") + button.addClass("btn-outline-danger") + } + }); + var infinite = new Waypoint.Infinite({ element: $('.infinite-container')[0] }); diff --git a/ordr3/static/style.css b/ordr3/static/style.css index e8b9ce9..4aa6b5f 100644 --- a/ordr3/static/style.css +++ b/ordr3/static/style.css @@ -140,3 +140,28 @@ td.o3-actions a:hover { .o3-alerts { max-width: 16.666667%; } + +.o3-delete-warning { + padding:1rem; + } + + +.o3-delete-warning .custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + border-color: #dc3545; + background-color:#dc3545; +} + +.o3-delete-warning .custom-control-input:focus ~ .custom-control-label::before { + box-shadow:0 0 0 .2rem rgba(0, 123, 255, .25) +} + +.o3-delete-warning .custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color:#80bdff +} + +.o3-delete-warning .custom-control-input:not(:disabled):active ~ .custom-control-label::before { + color: #fff; + background-color: #b3d7ff; + border-color:#b3d7ff +} diff --git a/ordr3/templates/layout_full.jinja2 b/ordr3/templates/layout_full.jinja2 index 9730b9f..aac59a9 100644 --- a/ordr3/templates/layout_full.jinja2 +++ b/ordr3/templates/layout_full.jinja2 @@ -44,22 +44,22 @@ {{ macros.icon("eye-slash") }} - {% if request.user.role.name == "ADMIN" %} - - {% endif %} - {% elif is_user_list %} + {% endif %} + {% if is_user_list %} + {% elif request.user.role.name == "ADMIN" %} + {% endif %} diff --git a/ordr3/templates/macros.jinja2 b/ordr3/templates/macros.jinja2 index d6c3a52..16439fc 100644 --- a/ordr3/templates/macros.jinja2 +++ b/ordr3/templates/macros.jinja2 @@ -8,7 +8,7 @@ {% for channel in ("info", "warning") %} {% for message in request.session.pop_flash(channel) %}