From 00f5732a0d9ee5069fa0c41c254702ca2a826202 Mon Sep 17 00:00:00 2001 From: mrgoldy Date: Thu, 9 Apr 2020 01:04:06 +0200 Subject: [PATCH 1/5] [ticket/16430] Sort permissions PHPBB3-16430 --- phpBB/includes/acp/auth.php | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/phpBB/includes/acp/auth.php b/phpBB/includes/acp/auth.php index f203f9d3ba..9e44e94d1a 100644 --- a/phpBB/includes/acp/auth.php +++ b/phpBB/includes/acp/auth.php @@ -1134,6 +1134,8 @@ class auth_admin extends \phpbb\auth\auth /* @var $phpbb_permissions \phpbb\permissions */ $phpbb_permissions = $phpbb_container->get('acl.permissions'); + $order = array_flip(array_keys($phpbb_permissions->get_permissions())); + foreach ($category_array as $cat => $cat_array) { if (!$phpbb_permissions->category_defined($cat)) @@ -1149,21 +1151,11 @@ class auth_admin extends \phpbb\auth\auth 'CAT_NAME' => $phpbb_permissions->get_category_lang($cat), )); - /* Sort permissions by name (more naturaly and user friendly than sorting by a primary key) - * Commented out due to it's memory consumption and time needed - * - $key_array = array_intersect(array_keys($user->lang), array_map(create_function('$a', 'return "acl_" . $a;'), array_keys($cat_array['permissions']))); - $values_array = $cat_array['permissions']; - $cat_array['permissions'] = array(); + uksort($cat_array['permissions'], function($a, $b) use ($order) { + return $order[$a] <=> $order[$b]; + }); - foreach ($key_array as $key) - { - $key = str_replace('acl_', '', $key); - $cat_array['permissions'][$key] = $values_array[$key]; - } - unset($key_array, $values_array); -*/ foreach ($cat_array['permissions'] as $permission => $allowed) { if (!$phpbb_permissions->permission_defined($permission)) @@ -1229,7 +1221,6 @@ class auth_admin extends \phpbb\auth\auth } $permissions = $permission_row[$forum_id]; - ksort($permissions); foreach ($permissions as $permission => $auth_setting) { From dbdbf23bea8eea01c9f6f1da8c31bd299d562cc5 Mon Sep 17 00:00:00 2001 From: mrgoldy Date: Thu, 9 Apr 2020 01:17:09 +0200 Subject: [PATCH 2/5] [ticket/16430] Fix empty lines issue in permissions PHPBB3-16430 --- phpBB/includes/acp/auth.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/phpBB/includes/acp/auth.php b/phpBB/includes/acp/auth.php index 9e44e94d1a..a34831bb54 100644 --- a/phpBB/includes/acp/auth.php +++ b/phpBB/includes/acp/auth.php @@ -1131,7 +1131,7 @@ class auth_admin extends \phpbb\auth\auth { global $template, $phpbb_admin_path, $phpEx, $phpbb_container; - /* @var $phpbb_permissions \phpbb\permissions */ + /** @var \phpbb\permissions $phpbb_permissions */ $phpbb_permissions = $phpbb_container->get('acl.permissions'); $order = array_flip(array_keys($phpbb_permissions->get_permissions())); @@ -1151,7 +1151,6 @@ class auth_admin extends \phpbb\auth\auth 'CAT_NAME' => $phpbb_permissions->get_category_lang($cat), )); - uksort($cat_array['permissions'], function($a, $b) use ($order) { return $order[$a] <=> $order[$b]; }); From 6326b6b63120aea849ef62c4c6bbb43f1341a1e2 Mon Sep 17 00:00:00 2001 From: mrgoldy Date: Thu, 9 Apr 2020 21:23:22 +0200 Subject: [PATCH 3/5] [ticket/16430] Ensure permissions are defined PHPBB3-16430 --- phpBB/includes/acp/auth.php | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/phpBB/includes/acp/auth.php b/phpBB/includes/acp/auth.php index a34831bb54..451646bbf1 100644 --- a/phpBB/includes/acp/auth.php +++ b/phpBB/includes/acp/auth.php @@ -1136,13 +1136,10 @@ class auth_admin extends \phpbb\auth\auth $order = array_flip(array_keys($phpbb_permissions->get_permissions())); + $category_array = array_filter($category_array, [$phpbb_permissions, 'permission_defined'], ARRAY_FILTER_USE_KEY); + foreach ($category_array as $cat => $cat_array) { - if (!$phpbb_permissions->category_defined($cat)) - { - continue; - } - $template->assign_block_vars($tpl_cat, array( 'S_YES' => ($cat_array['S_YES'] && !$cat_array['S_NEVER'] && !$cat_array['S_NO']) ? true : false, 'S_NEVER' => ($cat_array['S_NEVER'] && !$cat_array['S_YES'] && !$cat_array['S_NO']) ? true : false, From a2a199b48e320b6bd1bde1474906501648c8eb18 Mon Sep 17 00:00:00 2001 From: mrgoldy Date: Sat, 11 Apr 2020 13:50:21 +0200 Subject: [PATCH 4/5] [ticket/16430] Filter the correct permissions array PHPBB3-16430 --- phpBB/includes/acp/auth.php | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/phpBB/includes/acp/auth.php b/phpBB/includes/acp/auth.php index 451646bbf1..5ddba0bc31 100644 --- a/phpBB/includes/acp/auth.php +++ b/phpBB/includes/acp/auth.php @@ -1136,10 +1136,13 @@ class auth_admin extends \phpbb\auth\auth $order = array_flip(array_keys($phpbb_permissions->get_permissions())); - $category_array = array_filter($category_array, [$phpbb_permissions, 'permission_defined'], ARRAY_FILTER_USE_KEY); - foreach ($category_array as $cat => $cat_array) { + if (!$phpbb_permissions->category_defined($cat)) + { + continue; + } + $template->assign_block_vars($tpl_cat, array( 'S_YES' => ($cat_array['S_YES'] && !$cat_array['S_NEVER'] && !$cat_array['S_NO']) ? true : false, 'S_NEVER' => ($cat_array['S_NEVER'] && !$cat_array['S_YES'] && !$cat_array['S_NO']) ? true : false, @@ -1148,17 +1151,14 @@ class auth_admin extends \phpbb\auth\auth 'CAT_NAME' => $phpbb_permissions->get_category_lang($cat), )); - uksort($cat_array['permissions'], function($a, $b) use ($order) { + $permissions = array_filter($cat_array['permissions'], [$phpbb_permissions, 'permission_defined'], ARRAY_FILTER_USE_KEY); + + uksort($permissions, function($a, $b) use ($order) { return $order[$a] <=> $order[$b]; }); - foreach ($cat_array['permissions'] as $permission => $allowed) + foreach ($permissions as $permission => $allowed) { - if (!$phpbb_permissions->permission_defined($permission)) - { - continue; - } - if ($s_view) { $template->assign_block_vars($tpl_cat . '.' . $tpl_mask, array( From 45a00f1a93167e38fcc41bfa326826eadf2a64b2 Mon Sep 17 00:00:00 2001 From: mrgoldy Date: Sat, 2 May 2020 15:29:24 +0200 Subject: [PATCH 5/5] [ticket/16430] Sort permissions for roles as well PHPBB3-16430 --- phpBB/includes/acp/auth.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/phpBB/includes/acp/auth.php b/phpBB/includes/acp/auth.php index 5ddba0bc31..ee0c217d2c 100644 --- a/phpBB/includes/acp/auth.php +++ b/phpBB/includes/acp/auth.php @@ -1206,9 +1206,11 @@ class auth_admin extends \phpbb\auth\auth { global $phpbb_container; - /* @var $phpbb_permissions \phpbb\permissions */ + /** @var \phpbb\permissions $phpbb_permissions */ $phpbb_permissions = $phpbb_container->get('acl.permissions'); + $order = array_flip(array_keys($phpbb_permissions->get_permissions())); + foreach ($key_sort_array as $forum_id) { if (!isset($permission_row[$forum_id])) @@ -1216,7 +1218,11 @@ class auth_admin extends \phpbb\auth\auth continue; } - $permissions = $permission_row[$forum_id]; + $permissions = array_filter($permission_row[$forum_id], [$phpbb_permissions, 'permission_defined'], ARRAY_FILTER_USE_KEY); + + uksort($permissions, function($a, $b) use ($order) { + return $order[$a] <=> $order[$b]; + }); foreach ($permissions as $permission => $auth_setting) {