-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
diff --git a/modules-available/adduser/templates/user-permissions.html b/modules-available/adduser/templates/user-permissions.html
new file mode 100644
index 00000000..ce51630f
--- /dev/null
+++ b/modules-available/adduser/templates/user-permissions.html
@@ -0,0 +1,24 @@
+
{{lang_assignRoles}}
+
+
\ No newline at end of file
diff --git a/modules-available/permissionmanager/inc/permissiondbupdate.inc.php b/modules-available/permissionmanager/inc/permissiondbupdate.inc.php
index 1f56f4ea..5f528a37 100644
--- a/modules-available/permissionmanager/inc/permissiondbupdate.inc.php
+++ b/modules-available/permissionmanager/inc/permissiondbupdate.inc.php
@@ -7,17 +7,19 @@ class PermissionDbUpdate
* Insert all user/role combinations into the role_x_user table.
*
* @param int[] $users userids
- * @param string[] $roles roleids
+ * @param int[] $roles roleids
*/
public static function addRoleToUser($users, $roles)
{
+ if (empty($users) || empty($roles))
+ return 0;
$arg = array();
foreach ($users AS $userid) {
foreach ($roles AS $roleid) {
$arg[] = compact('userid', 'roleid');
}
}
- Database::exec("INSERT IGNORE INTO role_x_user (userid, roleid) VALUES :arg",
+ return Database::exec("INSERT IGNORE INTO role_x_user (userid, roleid) VALUES :arg",
['arg' => $arg]);
}
@@ -25,12 +27,28 @@ class PermissionDbUpdate
* Remove all user/role combinations from the role_x_user table.
*
* @param int[] $users userids
- * @param string[] $roles roleids
+ * @param int[] $roles roleids
*/
public static function removeRoleFromUser($users, $roles)
{
+ if (empty($users) || empty($roles))
+ return 0;
$query = "DELETE FROM role_x_user WHERE userid IN (:users) AND roleid IN (:roles)";
- Database::exec($query, array("users" => $users, "roles" => $roles));
+ return Database::exec($query, array("users" => $users, "roles" => $roles));
+ }
+
+ /**
+ * Assign the specified roles to given users, removing any roles from the users
+ * that are not in the given set.
+ *
+ * @param int[] $users list of user ids
+ * @param int[] $roles list of role ids
+ */
+ public static function setRolesForUser($users, $roles)
+ {
+ $count = Database::exec("DELETE FROM role_x_user WHERE userid in (:users) AND roleid NOT IN (:roles)",
+ compact('users', 'roles'));
+ return $count + self::addRoleToUser($users, $roles);
}
/**
@@ -40,7 +58,7 @@ class PermissionDbUpdate
*/
public static function deleteRole($roleid)
{
- Database::exec("DELETE FROM role WHERE roleid = :roleid", array("roleid" => $roleid));
+ return Database::exec("DELETE FROM role WHERE roleid = :roleid", array("roleid" => $roleid));
}
/**
diff --git a/modules-available/permissionmanager/inc/permissionutil.inc.php b/modules-available/permissionmanager/inc/permissionutil.inc.php
index 29663ed9..a3a2b610 100644
--- a/modules-available/permissionmanager/inc/permissionutil.inc.php
+++ b/modules-available/permissionmanager/inc/permissionutil.inc.php
@@ -231,6 +231,28 @@ class PermissionUtil
return $permissions;
}
+ /**
+ * Get all existing roles.
+ *
+ * @param int|false $userid Which user to consider, false = none
+ * @param bool $onlyMatching true = filter roles the user doesn't have
+ * @return array list of roles
+ */
+ public static function getRoles($userid = false, $onlyMatching = true)
+ {
+ if ($userid === false) {
+ return Database::queryAll('SELECT roleid, rolename FROM role ORDER BY rolename ASC');
+ }
+ $ret = Database::queryAll('SELECT r.roleid, r.rolename, u.userid AS hasRole FROM role r
+ LEFT JOIN role_x_user u ON (r.roleid = u.roleid AND u.userid = :userid)
+ GROUP BY r.roleid
+ ORDER BY rolename ASC', ['userid' => $userid]);
+ foreach ($ret as &$role) {
+ settype($role['hasRole'], 'bool');
+ }
+ return $ret;
+ }
+
/**
* Place a permission into the given permission tree.
*
@@ -252,4 +274,5 @@ class PermissionUtil
}
$tree = array('description' => $description, 'location-aware' => $locationAware, 'isLeaf' => true);
}
+
}
\ No newline at end of file
--
cgit v1.2.3-55-g7522
From 2abf30cf3d1f007690ab3c17c3d2ecd453f1fb23 Mon Sep 17 00:00:00 2001
From: Simon Rettberg
Date: Tue, 27 Mar 2018 10:56:14 +0200
Subject: [adduser] add user: Check various input fields via js for immediate
feedback
Refs #3344
---
.../adduser/lang/de/template-tags.json | 4 +++
.../adduser/lang/en/template-tags.json | 4 +++
modules-available/adduser/style.css | 4 +++
.../adduser/templates/page-adduser.html | 36 +++++++++++++++++++---
4 files changed, 43 insertions(+), 5 deletions(-)
(limited to 'modules-available/adduser/templates/page-adduser.html')
diff --git a/modules-available/adduser/lang/de/template-tags.json b/modules-available/adduser/lang/de/template-tags.json
index 31a7871e..e13c3876 100644
--- a/modules-available/adduser/lang/de/template-tags.json
+++ b/modules-available/adduser/lang/de/template-tags.json
@@ -10,8 +10,12 @@
"lang_editUser": "Benutzer bearbeiten",
"lang_email": "E-Mail",
"lang_fullName": "Vollst\u00e4ndiger Name",
+ "lang_fullnameMissing": "Kein Name angegeben",
"lang_login": "Login",
+ "lang_loginTooShort": "Login zu kurz",
"lang_name": "Name",
+ "lang_passwordTooShort": "Passwort zu kurz",
+ "lang_passwordsDontMatch": "Passworte stimmen nicht \u00fcberein",
"lang_phone": "Telefon",
"lang_role": "Rolle",
"lang_userDeleteConfirm": "M\u00f6chten Sie diesen Benutzer wirklich l\u00f6schen?",
diff --git a/modules-available/adduser/lang/en/template-tags.json b/modules-available/adduser/lang/en/template-tags.json
index 4fe03711..de57b385 100644
--- a/modules-available/adduser/lang/en/template-tags.json
+++ b/modules-available/adduser/lang/en/template-tags.json
@@ -10,8 +10,12 @@
"lang_editUser": "Edit user",
"lang_email": "Email",
"lang_fullName": "Full Name",
+ "lang_fullnameMissing": "Full name missing",
"lang_login": "Login",
+ "lang_loginTooShort": "Login too short",
"lang_name": "Name",
+ "lang_passwordTooShort": "Password too short",
+ "lang_passwordsDontMatch": "Passwords don't match",
"lang_phone": "Phone",
"lang_role": "Role",
"lang_userDeleteConfirm": "Do you want to delete this user?",
diff --git a/modules-available/adduser/style.css b/modules-available/adduser/style.css
index e459352b..15f04b80 100644
--- a/modules-available/adduser/style.css
+++ b/modules-available/adduser/style.css
@@ -13,3 +13,7 @@
-moz-box-sizing: border-box;
box-sizing: border-box;
}
+
+#add-msg {
+ height: 1em;
+}
\ No newline at end of file
diff --git a/modules-available/adduser/templates/page-adduser.html b/modules-available/adduser/templates/page-adduser.html
index bd16dbbf..18d79a3b 100644
--- a/modules-available/adduser/templates/page-adduser.html
+++ b/modules-available/adduser/templates/page-adduser.html
@@ -3,18 +3,18 @@
{{lang_createUser}}
@@ -30,8 +30,34 @@
-
+
+
+
\ No newline at end of file
--
cgit v1.2.3-55-g7522
From 1a4c38fddc0003ca36e2c3838b5a4c9233d51a35 Mon Sep 17 00:00:00 2001
From: Simon Rettberg
Date: Mon, 9 Apr 2018 18:09:07 +0200
Subject: [adduser] JS checks while editing user; second save button below role
list
---
modules-available/adduser/page.inc.php | 5 +++-
.../adduser/templates/js-add-edit.html | 26 ++++++++++++++++++
.../adduser/templates/page-adduser.html | 32 ++++------------------
.../adduser/templates/page-edituser.html | 14 ++++++----
.../adduser/templates/user-permissions.html | 12 +++++++-
5 files changed, 55 insertions(+), 34 deletions(-)
create mode 100644 modules-available/adduser/templates/js-add-edit.html
(limited to 'modules-available/adduser/templates/page-adduser.html')
diff --git a/modules-available/adduser/page.inc.php b/modules-available/adduser/page.inc.php
index 3af4ea6d..e95cb78a 100644
--- a/modules-available/adduser/page.inc.php
+++ b/modules-available/adduser/page.inc.php
@@ -106,7 +106,7 @@ class Page_AddUser extends Page
if ($ret > 0) {
Message::addSuccess('user-edited');
}
- if (!empty($pass1)) {
+ if (!empty($pass1) && $userid !== User::getId()) {
$data = [
'pass' => Crypto::hash6($pass1),
'userid' => $userid,
@@ -168,6 +168,7 @@ class Page_AddUser extends Page
}
Render::openTag('form', ['class' => 'form-adduser', 'action' => '?do=adduser', 'method' => 'post']);
Render::addTemplate('page-adduser');
+ Render::addTemplate('js-add-edit');
if ($hasUsers) {
$this->showRoles();
}
@@ -184,9 +185,11 @@ class Page_AddUser extends Page
if ($user === false) {
Message::addError('user-not-found', $userid);
} else {
+ $user['password_disabled'] = User::getId() === $userid ? 'disabled' : false;
// TODO: LDAP -> disallow pw change, maybe other fields too?
Render::openTag('form', ['class' => 'form-adduser', 'action' => '?do=adduser', 'method' => 'post']);
Render::addTemplate('page-edituser', $user);
+ Render::addTemplate('js-add-edit');
$this->showRoles($userid);
Render::closeTag('form');
}
diff --git a/modules-available/adduser/templates/js-add-edit.html b/modules-available/adduser/templates/js-add-edit.html
new file mode 100644
index 00000000..95454c22
--- /dev/null
+++ b/modules-available/adduser/templates/js-add-edit.html
@@ -0,0 +1,26 @@
+
\ No newline at end of file
diff --git a/modules-available/adduser/templates/page-adduser.html b/modules-available/adduser/templates/page-adduser.html
index 18d79a3b..08587373 100644
--- a/modules-available/adduser/templates/page-adduser.html
+++ b/modules-available/adduser/templates/page-adduser.html
@@ -30,34 +30,12 @@
-
+
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/modules-available/adduser/templates/page-edituser.html b/modules-available/adduser/templates/page-edituser.html
index 36293b11..68376213 100644
--- a/modules-available/adduser/templates/page-edituser.html
+++ b/modules-available/adduser/templates/page-edituser.html
@@ -4,7 +4,7 @@
@@ -18,9 +18,9 @@
-
{{#password_disabled}}
@@ -37,7 +37,7 @@
@@ -59,12 +59,16 @@
+
diff --git a/modules-available/adduser/templates/user-permissions.html b/modules-available/adduser/templates/user-permissions.html
index ce51630f..11ebd77a 100644
--- a/modules-available/adduser/templates/user-permissions.html
+++ b/modules-available/adduser/templates/user-permissions.html
@@ -21,4 +21,14 @@
{{/roles}}
-
\ No newline at end of file
+
+
+
+
+
+
+
+
\ No newline at end of file
--
cgit v1.2.3-55-g7522