summaryrefslogtreecommitdiffstats
path: root/modules-available/permissionmanager/page.inc.php
diff options
context:
space:
mode:
authorSimon Rettberg2018-02-13 16:29:55 +0100
committerSimon Rettberg2018-02-13 16:29:55 +0100
commit56e6f8698c49099f0c78d77e1d99b9eec2f13df9 (patch)
tree4a5561d50601f1753d9662098bb1b1522675f4ca /modules-available/permissionmanager/page.inc.php
parentindex.php: Hacky way of telling the php error handler to skip stack frames (diff)
downloadslx-admin-56e6f8698c49099f0c78d77e1d99b9eec2f13df9.tar.gz
slx-admin-56e6f8698c49099f0c78d77e1d99b9eec2f13df9.tar.xz
slx-admin-56e6f8698c49099f0c78d77e1d99b9eec2f13df9.zip
[permissionmanager] Slightly more efficient queries, wildcard support, debug mode, comments
Diffstat (limited to 'modules-available/permissionmanager/page.inc.php')
-rw-r--r--modules-available/permissionmanager/page.inc.php32
1 files changed, 25 insertions, 7 deletions
diff --git a/modules-available/permissionmanager/page.inc.php b/modules-available/permissionmanager/page.inc.php
index 4b961632..89c72842 100644
--- a/modules-available/permissionmanager/page.inc.php
+++ b/modules-available/permissionmanager/page.inc.php
@@ -103,14 +103,32 @@ class Page_PermissionManager extends Page
{
$res = "";
$toplevel = $permString == "";
- if ($toplevel && in_array("*", $selectedPermissions)) $selectAll = true;
+ if ($toplevel && in_array("*", $selectedPermissions)) {
+ $selectAll = true;
+ }
foreach ($permissions as $k => $v) {
- $leaf = isset($v['isLeaf']) && $v['isLeaf'];
- $nextPermString = $permString ? $permString.".".$k : $k;
- $id = $leaf ? $nextPermString : $nextPermString.".*";
- $selected = $selectAll || in_array($id, $selectedPermissions);
- $data = array("id" => $id,
- "name" => $toplevel ? Module::get($k)->getDisplayName() : $k,
+ $selected = $selectAll;
+ $nextPermString = $permString ? $permString . "." . $k : $k;
+ if ($toplevel) {
+ $displayName = Module::get($k)->getDisplayName();
+ } else {
+ $displayName = $k;
+ }
+ do {
+ $leaf = isset($v['isLeaf']) && $v['isLeaf'];
+ $id = $leaf ? $nextPermString : $nextPermString . ".*";
+ $selected = $selected || in_array($id, $selectedPermissions);
+ if ($leaf || count($v) !== 1)
+ break;
+ reset($v);
+ $k = key($v);
+ $v = $v[$k];
+ $nextPermString .= '.' . $k;
+ $displayName .= '.' . $k;
+ } while (true);
+ $data = array(
+ "id" => $id,
+ "name" => $displayName,
"toplevel" => $toplevel,
"checkboxname" => "permissions",
"selected" => $selected,