diff --git a/libraries/classes/Server/UserGroups.php b/libraries/classes/Server/UserGroups.php index 834bfb949b..1df70dcd8c 100644 --- a/libraries/classes/Server/UserGroups.php +++ b/libraries/classes/Server/UserGroups.php @@ -10,6 +10,7 @@ namespace PhpMyAdmin\Server; use PhpMyAdmin\Html\Generator; use PhpMyAdmin\Relation; +use PhpMyAdmin\Template; use PhpMyAdmin\Url; use PhpMyAdmin\Util; @@ -29,11 +30,11 @@ class UserGroups */ public static function getHtmlForListingUsersofAGroup($userGroup) { + $users = []; + $numRows = 0; $relation = new Relation($GLOBALS['dbi']); - $html_output = '

' - . sprintf(__('Users of \'%s\' user group'), htmlspecialchars($userGroup)) - . '

'; + $userGroupSpecialChars = htmlspecialchars($userGroup); $cfgRelation = $relation->getRelationsParam(); $usersTable = Util::backquote($cfgRelation['db']) . '.' . Util::backquote($cfgRelation['users']); @@ -42,28 +43,25 @@ class UserGroups . "'"; $result = $relation->queryAsControlUser($sql_query, false); if ($result) { - if ($GLOBALS['dbi']->numRows($result) == 0) { - $html_output .= '

' - . __('No users were found belonging to this user group.') - . '

'; - } else { - $html_output .= '' - . '' - . ''; + $numRows = $GLOBALS['dbi']->numRows($result); + if ($numRows != 0) { $i = 0; while ($row = $GLOBALS['dbi']->fetchRow($result)) { $i++; - $html_output .= '' - . '' - . '' - . ''; + $user = []; + $user['count'] = $i; + $user['user'] = $row[0]; + $users[] = $user; } - $html_output .= '' - . '
#' . __('User') . '
' . $i . ' ' . htmlspecialchars($row[0]) . '
'; } } $GLOBALS['dbi']->freeResult($result); - return $html_output; + $template = new Template(); + return $template->render('/server/user_groups/user_listings', [ + 'user_group_special_chars' => $userGroupSpecialChars, + 'num_rows' => $numRows, + 'users' => $users, + ]); } /** @@ -74,29 +72,18 @@ class UserGroups public static function getHtmlForUserGroupsTable() { $relation = new Relation($GLOBALS['dbi']); - $html_output = '

' . __('User groups') . '

'; $cfgRelation = $relation->getRelationsParam(); $groupTable = Util::backquote($cfgRelation['db']) . '.' . Util::backquote($cfgRelation['usergroups']); $sql_query = 'SELECT * FROM ' . $groupTable . ' ORDER BY `usergroup` ASC'; $result = $relation->queryAsControlUser($sql_query, false); - - if ($result && $GLOBALS['dbi']->numRows($result)) { - $html_output .= '
'; - $html_output .= Url::getHiddenInputs(); - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - - $userGroups = []; + $numRows = $GLOBALS['dbi']->numRows($result); + $userGroups = []; + $userGroupsValues = []; + $action = Url::getFromRoute('/server/privileges'); + $hidden_inputs = null; + if ($result && $numRows) { + $hidden_inputs = Url::getHiddenInputs(); while ($row = $GLOBALS['dbi']->fetchAssoc($result)) { $groupName = $row['usergroup']; if (! isset($userGroups[$groupName])) { @@ -104,66 +91,56 @@ class UserGroups } $userGroups[$groupName][$row['tab']] = $row['allowed']; } + foreach ($userGroups as $groupName => $tabs) { - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; - $html_output .= ''; + $userGroupVal = []; + $userGroupVal['name'] = htmlspecialchars($groupName); + $userGroupVal['serverTab'] = self::getAllowedTabNames($tabs, 'server'); + $userGroupVal['dbTab'] = self::getAllowedTabNames($tabs, 'db'); + $userGroupVal['tableTab'] = self::getAllowedTabNames($tabs, 'table'); + $userGroupVal['userGroupUrl'] = Url::getFromRoute('/server/user-groups'); + $userGroupVal['viewUsersUrl'] = Url::getCommon( + [ + 'viewUsers' => 1, + 'userGroup' => $groupName, + ], + '' + ); + $userGroupVal['viewUsersIcon'] = Generator::getIcon('b_usrlist', __('View users')); - $html_output .= ''; + $userGroupVal['editUsersUrl'] = Url::getCommon( + [ + 'editUserGroup' => 1, + 'userGroup' => $groupName, + ], + '' + ); + $userGroupVal['editUsersIcon'] = Generator::getIcon('b_edit', __('Edit')); - $html_output .= ''; + $userGroupVal['deleteUsersUrl'] = Url::getCommon( + [ + 'deleteUserGroup' => 1, + 'userGroup' => $groupName, + ], + '' + ); + $userGroupVal['deleteUsersIcon'] = Generator::getIcon('b_drop', __('Delete')); + $userGroupsValues[] = $userGroupVal; } - - $html_output .= ''; - $html_output .= '
' - . __('User group') . '' . __('Server level tabs') . '' . __('Database level tabs') . '' . __('Table level tabs') . '' . __('Action') . '
' . htmlspecialchars($groupName) . '' . self::getAllowedTabNames($tabs, 'server') . '' . self::getAllowedTabNames($tabs, 'db') . '' . self::getAllowedTabNames($tabs, 'table') . ''; - $html_output .= '' - . Generator::getIcon('b_usrlist', __('View users')) - . ''; - $html_output .= '  '; - $html_output .= '' - . Generator::getIcon('b_edit', __('Edit')) . ''; - $html_output .= '  '; - $html_output .= '' - . Generator::getIcon('b_drop', __('Delete')) . ''; - $html_output .= '
'; - $html_output .= '
'; } + $addUserUrl = Url::getFromRoute('/server/user-groups', ['addUserGroup' => 1]); + $addUserIcon = Generator::getIcon('b_usradd'); $GLOBALS['dbi']->freeResult($result); - - $html_output .= '
'; - $html_output .= '' - . Generator::getIcon('b_usradd') - . __('Add user group') . ''; - $html_output .= '
'; - - return $html_output; + $template = new Template(); + return $template->render('server/user_groups/user_groups', [ + 'action' => $action, + 'hidden_inputs' => isset($hidden_inputs) ? $hidden_inputs : '', + 'result' => $result, + 'has_rows' => $numRows, + 'user_groups_values' => $userGroupsValues, + 'add_user_url' => $addUserUrl, + 'add_user_icon' => $addUserIcon, + ]); } /** @@ -224,44 +201,22 @@ class UserGroups public static function getHtmlToEditUserGroup($userGroup = null) { $relation = new Relation($GLOBALS['dbi']); - $html_output = ''; - if ($userGroup == null) { - $html_output .= '

' . __('Add user group') . '

'; - } else { - $html_output .= '

' - . sprintf(__('Edit user group: \'%s\''), htmlspecialchars($userGroup)) - . '

'; - } - - $html_output .= '
'; $urlParams = []; + + $editUserGroupSpecialChars = ''; + if ($userGroup != null) { + $editUserGroupSpecialChars = htmlspecialchars($userGroup); + } if ($userGroup != null) { $urlParams['userGroup'] = $userGroup; $urlParams['editUserGroupSubmit'] = '1'; } else { $urlParams['addUserGroupSubmit'] = '1'; } - $html_output .= Url::getHiddenInputs($urlParams); - - $html_output .= '
'; - $html_output .= '' . __('User group menu assignments') - . '   ' - . '' - . '' - . ''; - - if ($userGroup == null) { - $html_output .= ''; - $html_output .= ''; - $html_output .= '
'; - } - $allowedTabs = [ 'server' => [], - 'db' => [], - 'table' => [], + 'db' => [], + 'table' => [], ]; if ($userGroup != null) { $cfgRelation = $relation->getRelationsParam(); @@ -288,31 +243,30 @@ class UserGroups } $GLOBALS['dbi']->freeResult($result); } - - $html_output .= self::getTabList( + $tabList = self::getTabList( __('Server-level tabs'), 'server', $allowedTabs['server'] ); - $html_output .= self::getTabList( + $tabList .= self::getTabList( __('Database-level tabs'), 'db', $allowedTabs['db'] ); - $html_output .= self::getTabList( + $tabList .= self::getTabList( __('Table-level tabs'), 'table', $allowedTabs['table'] ); - $html_output .= '
'; - - $html_output .= ''; - - return $html_output; + $template = new Template(); + return $template->render('/server/user_groups/edit_user_groups', [ + 'user_group' => $userGroup, + 'edit_user_group_special_chars' => $editUserGroupSpecialChars, + 'user_group_url' => Url::getFromRoute('/server/user-groups'), + 'hidden_inputs' => Url::getHiddenInputs($urlParams), + 'tab_list' => $tabList, + ]); } /** @@ -328,20 +282,20 @@ class UserGroups public static function getTabList($title, $level, array $selected) { $tabs = Util::getMenuTabList($level); - $html_output = '
'; - $html_output .= '' . $title . ''; + $tabDetails = []; foreach ($tabs as $tab => $tabName) { - $html_output .= '
'; - $html_output .= ''; - $html_output .= ''; - $html_output .= '
'; + $tabDetail = []; + $tabDetail['in_array'] = (in_array($tab, $selected) ? ' checked="checked"' : ''); + $tabDetail['tab'] = $tab; + $tabDetail['tab_name'] = $tabName; + $tabDetails[] =$tabDetail; } - $html_output .= '
'; - return $html_output; + $template = new Template(); + return $template->render('/server/user_groups/tab_list', [ + 'title' => $title, + 'level' => $level, + 'tab_details' => $tabDetails, + ]); } /** diff --git a/templates/server/user_groups/edit_user_groups.twig b/templates/server/user_groups/edit_user_groups.twig new file mode 100644 index 0000000000..6215c2bc5f --- /dev/null +++ b/templates/server/user_groups/edit_user_groups.twig @@ -0,0 +1,23 @@ +{% if user_group == null %} +

{% trans 'Add user group' %}

+{% else %} +

{{ 'Edit user group: \'%s\''|trans|format(edit_user_group_special_chars) }}

+{% endif %} + + {{ hidden_inputs|raw }} +
+ {% trans 'User group menu assignments' %}     + + + + {% if user_group == null %} + + +
+ {% endif %} + {{ tab_list|raw }} +
+ +
diff --git a/templates/server/user_groups/tab_list.twig b/templates/server/user_groups/tab_list.twig new file mode 100644 index 0000000000..5b8a140278 --- /dev/null +++ b/templates/server/user_groups/tab_list.twig @@ -0,0 +1,13 @@ +
+ + {{ title }} + + {% for tab_detail in tab_details %} +
+ + +
+ {% endfor %} +
diff --git a/templates/server/user_groups/user_groups.twig b/templates/server/user_groups/user_groups.twig new file mode 100644 index 0000000000..4f8b9466c8 --- /dev/null +++ b/templates/server/user_groups/user_groups.twig @@ -0,0 +1,49 @@ +

{% trans 'User groups' %}

+{% if has_rows > 0 %} +
+ {{ hidden_inputs|raw }} + + + + + + + + + + + + {% for groupName in user_groups_values %} + + + + + + + + {% endfor %} + +
+ {% trans 'User groups' %} + + {% trans 'Server level tabs' %} + + {% trans 'Database level tabs' %} + + {% trans 'Table level tabs' %} + + {% trans 'Action' %} +
{{ groupName.name }}{{ groupName.serverTab }}{{ groupName.dbTab }}{{ groupName.tableTab }} + {{ groupName.viewUsersIcon|raw }} +    + {{ groupName.editUsersIcon|raw }} +    + {{ groupName.deleteUsersIcon|raw }} +
+
+{% endif %} +
+
+ {{ add_user_icon|raw }}{% trans 'Add user group' %} +
+
diff --git a/templates/server/user_groups/user_listings.twig b/templates/server/user_groups/user_listings.twig new file mode 100644 index 0000000000..54fcef6d2d --- /dev/null +++ b/templates/server/user_groups/user_listings.twig @@ -0,0 +1,22 @@ +

{{ 'Users of \'%s\' user group'|trans|format(user_group_special_chars) }}

+{% if num_rows == 0 %} +

{% trans 'No users were found belonging to this user group.' %}

+{% else %} + + + + + + + + + {% for obj in users %} + + + + + {% endfor %} + +
#{% trans 'User' %}
{{ obj.count }}{{ obj.user }}
+ +{% endif %}