From 8e9777353e8771352d29862a51000b3f050bd07b Mon Sep 17 00:00:00 2001 From: Julian Lobbes Date: Sun, 20 Nov 2022 21:50:04 +0100 Subject: [PATCH] fix(usermanager): generate static images on launch --- lumi2/__init__.py | 1 - .../static/js/{groupEdit.js => group_edit.js} | 29 ++++++++++++++++--- lumi2/templates/usermanager/group_edit.html | 4 ++- lumi2/usermanager.py | 10 +++++++ 4 files changed, 38 insertions(+), 6 deletions(-) rename lumi2/static/js/{groupEdit.js => group_edit.js} (81%) diff --git a/lumi2/__init__.py b/lumi2/__init__.py index 46571eb..45338da 100644 --- a/lumi2/__init__.py +++ b/lumi2/__init__.py @@ -45,6 +45,5 @@ def create_app(test_config=None): app.add_url_rule('/', endpoint='index') # TODO create OUs - # TODO create static files return app diff --git a/lumi2/static/js/groupEdit.js b/lumi2/static/js/group_edit.js similarity index 81% rename from lumi2/static/js/groupEdit.js rename to lumi2/static/js/group_edit.js index ba81020..0ee4afa 100644 --- a/lumi2/static/js/groupEdit.js +++ b/lumi2/static/js/group_edit.js @@ -17,6 +17,7 @@ function removeUserFromFormField(username) { } } formField.value = JSON.stringify(newMembersList); + adjustLastMemberButtonState(); }; function addUserToFormField(username) { @@ -24,6 +25,7 @@ function addUserToFormField(username) { let oldMembersList = JSON.parse(formField.value); oldMembersList.push(username); formField.value = JSON.stringify(oldMembersList); + adjustLastMemberButtonState(); }; class MemberEntry extends AbstractUserEntry { @@ -68,9 +70,9 @@ function createRemovedMemberRow(username) { let newTableDataButton = document.createElement("td"); let newTableButton = document.createElement("button"); newTableButton.type = "button"; - newTableButton.className = "toggleMembershipButton btn btn-outline-light"; + newTableButton.className = "toggleMembershipButton inProgress btn btn-outline-light"; newTableButton.disabled = true; - newTableButton.textContent = "Being removed..."; + newTableButton.textContent = "Will be removed"; newTableDataButton.appendChild(newTableButton); newTableRow.appendChild(newTableDataButton); }; @@ -101,13 +103,31 @@ function createAddedMemberRow(username) { let newTableDataButton = document.createElement("td"); let newTableButton = document.createElement("button"); newTableButton.type = "button"; - newTableButton.className = "toggleMembershipButton btn btn-outline-light"; + newTableButton.className = "toggleMembershipButton inProgress btn btn-outline-light"; newTableButton.disabled = true; - newTableButton.textContent = "Being added..."; + newTableButton.textContent = "Will be added"; newTableDataButton.appendChild(newTableButton); newTableRow.appendChild(newTableDataButton); }; +/** + * If there is only one member in the group member table, disables that member's + * remove button. + * If there is more than one member, activates the removal button. + */ +function adjustLastMemberButtonState() { + memberRows = membersTable.querySelectorAll(".userEntry"); + if (memberRows.length == 1) { + memberRows[0].querySelector(".toggleMembershipButton").disabled = true; + } else { + for (let button of membersTable.querySelectorAll(".toggleMembershipButton")) { + if (!button.className.includes("inProgress")) { + button.disabled = false; + } + } + } +} + const membersTable = document.getElementById("groupMembers"); const nonMembersTable = document.getElementById("groupNonMembers"); let memberEntries = new Set(); @@ -120,3 +140,4 @@ for (let userEntry of document.body.querySelectorAll(".userEntry")) { nonMemberEntries.add(new NonMemberEntry(userEntry.id, userEntry)); } } +adjustLastMemberButtonState(); diff --git a/lumi2/templates/usermanager/group_edit.html b/lumi2/templates/usermanager/group_edit.html index 564f9fd..2d4e826 100644 --- a/lumi2/templates/usermanager/group_edit.html +++ b/lumi2/templates/usermanager/group_edit.html @@ -4,6 +4,8 @@

Editing group: {{ groupname }}

+

Add or remove members from {{ groupname }} here. Hit the Apply button to save your changes.

+

Note that Groups must always have at least one member.

@@ -80,5 +82,5 @@
- + {% endblock content %} diff --git a/lumi2/usermanager.py b/lumi2/usermanager.py index d235916..c039c92 100644 --- a/lumi2/usermanager.py +++ b/lumi2/usermanager.py @@ -23,6 +23,16 @@ from lumi2.exceptions import InvalidStringFormatException, InvalidImageException bp = Blueprint('usermanager', __name__) +@bp.before_app_first_request +def _init_static_images(): + conn = ldap.get_connection() + users = ldap.get_users(conn) + conn.unbind() + for user in users: + user._generate_static_images() + + + @bp.route('/') def index(): """Home page view."""