From 7807e30a69ab39b3f2a7f20d2608ba6b46b456e8 Mon Sep 17 00:00:00 2001 From: Christian Hofmaier Date: Tue, 28 Mar 2017 11:23:24 +0200 Subject: [permission-manager] first part of UI, database table, sql queries and db methods --- .../permissionmanager/clientscript.js | 12 ++ modules-available/permissionmanager/config.json | 3 +- .../permissionmanager/inc/dbupdate.inc.php | 37 +++++ .../permissionmanager/inc/getdata.inc.php | 43 ++++++ .../permissionmanager/install.inc.php | 27 ++++ .../permissionmanager/lang/de/template-tags.json | 13 +- .../permissionmanager/lang/en/template-tags.json | 13 +- modules-available/permissionmanager/page.inc.php | 63 +++++++- modules-available/permissionmanager/style.css | 29 ++++ .../permissionmanager/templates/_page.html | 24 +++- .../templates/locationsTable.html | 14 ++ .../permissionmanager/templates/rolesTable.html | 65 +++++++++ .../permissionmanager/templates/usersTable.html | 160 +++++++++++++++++++++ 13 files changed, 492 insertions(+), 11 deletions(-) create mode 100644 modules-available/permissionmanager/clientscript.js create mode 100644 modules-available/permissionmanager/inc/dbupdate.inc.php create mode 100644 modules-available/permissionmanager/inc/getdata.inc.php create mode 100644 modules-available/permissionmanager/install.inc.php create mode 100644 modules-available/permissionmanager/style.css create mode 100644 modules-available/permissionmanager/templates/locationsTable.html create mode 100644 modules-available/permissionmanager/templates/rolesTable.html create mode 100644 modules-available/permissionmanager/templates/usersTable.html diff --git a/modules-available/permissionmanager/clientscript.js b/modules-available/permissionmanager/clientscript.js new file mode 100644 index 00000000..da825984 --- /dev/null +++ b/modules-available/permissionmanager/clientscript.js @@ -0,0 +1,12 @@ +document.addEventListener("DOMContentLoaded", function() { + var table = $("table").stupidtable(); + + // to show the sort-arrow next to the table header + table.on("aftertablesort", function (event, data) { + var th = $(this).find("th"); + th.find(".arrow").remove(); + var dir = $.fn.stupidtable.dir; + var arrow = data.direction === dir.ASC ? "down" : "up"; + th.eq(data.column).append(' '); + }); +}); \ No newline at end of file diff --git a/modules-available/permissionmanager/config.json b/modules-available/permissionmanager/config.json index 706412d0..3aeab3e5 100644 --- a/modules-available/permissionmanager/config.json +++ b/modules-available/permissionmanager/config.json @@ -1,3 +1,4 @@ { - "category":"main.content" + "category":"main.content", + "dependencies": [ "js_stupidtable"] } diff --git a/modules-available/permissionmanager/inc/dbupdate.inc.php b/modules-available/permissionmanager/inc/dbupdate.inc.php new file mode 100644 index 00000000..20ff746a --- /dev/null +++ b/modules-available/permissionmanager/inc/dbupdate.inc.php @@ -0,0 +1,37 @@ +fetch(PDO::FETCH_ASSOC)) { + $data[] = array( + 'userid' => $row['userid'], + 'name' => $row['login'], + 'role' => explode(",",$row['role']) + ); + } + return $data; + } + + // get all roles from database (id and name) + public static function getRoles() { + $res = Database::simpleQuery("SELECT id, name FROM role ORDER BY name"); + $data = array(); + while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + $data[] = array( + 'roleId' => $row['id'], + 'roleName' => $row['name'] + ); + } + return $data; + } + + // UserID, User Login Name, Roles of each User + private static function queryUserData() { + $res = Database::simpleQuery("SELECT user.userid AS userid, user.login AS login, GROUP_CONCAT(role.name) AS role + FROM user + LEFT JOIN userXrole ON user.userid = userXrole.userid + LEFT JOIN role ON userXrole.roleid = role.id + GROUP BY user.userid + "); + return $res; + } + +} \ No newline at end of file diff --git a/modules-available/permissionmanager/install.inc.php b/modules-available/permissionmanager/install.inc.php new file mode 100644 index 00000000..a873f2c0 --- /dev/null +++ b/modules-available/permissionmanager/install.inc.php @@ -0,0 +1,27 @@ + 'bar', - 'now' => date('d.m.Y H:i:s') - )); + $show = Request::get("show", false); + // get menu button colors + $buttonColors = self::setButtonColors($show); + + $data = array(); + + // switch between tables, but always show menu to switch tables + if (!$show || $show === 'roles' || $show === 'users' || $show === 'locations') { + Render::openTag('div', array('class' => 'row')); + Render::addtemplate('_page', $buttonColors); + Render::closeTag('div'); + + if ($show === "roles") { + $data = array("roles" => GetData::getRoles()); + Render::addTemplate('rolesTable', $data); + } else if ($show === "users") { + $data = array("user" => GetData::getUserData(), "roles" => GetData::getRoles()); + Render::addTemplate('usersTable', $data); + } else if ($show === "locations") { + Render::addTemplate('locationsTable', $data); + } + } + } + + // Menu: Selected table is shown in blue (btn-primary) + function setButtonColors($show) { + if ($show === 'roles') { + $buttonColors['rolesButtonClass'] = 'btn-primary'; + $buttonColors['usersButtonClass'] = 'btn-default'; + $buttonColors['locationsButtonClass'] = 'btn-default'; + } else if ($show === 'users') { + $buttonColors['rolesButtonClass'] = 'btn-default'; + $buttonColors['usersButtonClass'] = 'btn-primary'; + $buttonColors['locationsButtonClass'] = 'btn-default'; + } else if ($show === 'locations') { + $buttonColors['rolesButtonClass'] = 'btn-default'; + $buttonColors['usersButtonClass'] = 'btn-default'; + $buttonColors['locationsButtonClass'] = 'btn-primary'; + } else { + $buttonColors['rolesButtonClass'] = 'btn-default'; + $buttonColors['usersButtonClass'] = 'btn-default'; + $buttonColors['locationsButtonClass'] = 'btn-default'; + } + + return $buttonColors; } } diff --git a/modules-available/permissionmanager/style.css b/modules-available/permissionmanager/style.css new file mode 100644 index 00000000..ee81bf47 --- /dev/null +++ b/modules-available/permissionmanager/style.css @@ -0,0 +1,29 @@ +#switchForm { + text-align: center; + margin-bottom: 50px; +} + +.table { + margin-top: 20px; +} + +.table > tbody > tr > td { + vertical-align: middle; + height: 50px; +} + +.checkbox { + margin-top: 0; + margin-bottom: 0; +} + +.scrollingTable { + height: 500px; + overflow: auto; +} + +.customSpanMargin { + display: inline-block; + margin-top: 2px; + margin-bottom: 2px; +} \ No newline at end of file diff --git a/modules-available/permissionmanager/templates/_page.html b/modules-available/permissionmanager/templates/_page.html index dfc941ae..3b436eda 100644 --- a/modules-available/permissionmanager/templates/_page.html +++ b/modules-available/permissionmanager/templates/_page.html @@ -1,4 +1,20 @@ -
-

{{lang_hello}}, {{foo}}

- ** {{now}} ** -
\ No newline at end of file +
+ + +
+ + + + + +
+
\ No newline at end of file diff --git a/modules-available/permissionmanager/templates/locationsTable.html b/modules-available/permissionmanager/templates/locationsTable.html new file mode 100644 index 00000000..bd3b7f88 --- /dev/null +++ b/modules-available/permissionmanager/templates/locationsTable.html @@ -0,0 +1,14 @@ +
+
+ + + + + + + + + +
+
+
\ No newline at end of file diff --git a/modules-available/permissionmanager/templates/rolesTable.html b/modules-available/permissionmanager/templates/rolesTable.html new file mode 100644 index 00000000..40cdda96 --- /dev/null +++ b/modules-available/permissionmanager/templates/rolesTable.html @@ -0,0 +1,65 @@ +
+ + + + +
+
+ + + + + + + + + + + {{#roles}} + + + + + + {{/roles}} + +
{{lang_Roles}}{{lang_Edit}}{{lang_Delete}}
{{roleName}} + {{lang_Edit}} + + {{lang_Delete}} +
+
+
+ + + + + +
+ + \ No newline at end of file diff --git a/modules-available/permissionmanager/templates/usersTable.html b/modules-available/permissionmanager/templates/usersTable.html new file mode 100644 index 00000000..3db1ebdb --- /dev/null +++ b/modules-available/permissionmanager/templates/usersTable.html @@ -0,0 +1,160 @@ +
+ + + + +
+
+ + + + + + + + + + + {{#user}} + + + + + + {{/user}} + +
{{lang_Users}}{{lang_Roles}}{{lang_Selected}}
{{name}} + {{#role}} + {{.}} + {{/role}} + +
+ + +
+
+
+
+ + + + + +
+ + \ No newline at end of file -- cgit v1.2.3-55-g7522