From 2313b8347ecb3ab7af059b557a17e33865910622 Mon Sep 17 00:00:00 2001 From: Robert Anderson <randerson@lbsd.net> Date: Wed, 13 May 2009 14:44:15 +0000 Subject: [PATCH] Some support for listing group members Cosmetic changes --- webgui/ajax.php | 39 ++- .../ajax/functions/AdminGroupMembers.php | 104 ++++++++ webgui/index.html | 13 +- webgui/js/app/windows/AdminGroupMembers.js | 251 ++++++++++++++++++ 4 files changed, 399 insertions(+), 8 deletions(-) create mode 100644 webgui/include/ajax/functions/AdminGroupMembers.php create mode 100644 webgui/js/app/windows/AdminGroupMembers.js diff --git a/webgui/ajax.php b/webgui/ajax.php index 46e94277..8b94870b 100644 --- a/webgui/ajax.php +++ b/webgui/ajax.php @@ -2,14 +2,18 @@ # Requires / Includes include_once("include/ajax/json.php"); + include_once("include/ajax/functions/AdminUsers.php"); + include_once("include/ajax/functions/AdminUserAttributes.php"); + include_once("include/ajax/functions/AdminUserGroups.php"); + include_once("include/ajax/functions/AdminGroups.php"); + include_once("include/ajax/functions/AdminGroupAttributes.php"); + include_once("include/ajax/functions/AdminGroupMembers.php"); + include_once("include/ajax/functions/AdminRealms.php"); include_once("include/ajax/functions/WiSPLocations.php"); include_once("include/ajax/functions/WiSPUsers.php"); - include_once("include/ajax/functions/AdminUserAttributes.php"); - include_once("include/ajax/functions/AdminUserGroups.php"); - include_once("include/ajax/functions/AdminGroupAttributes.php"); define('RES_OK',0); define('RES_ERR',-1); @@ -151,7 +155,34 @@ switch ($function) { - # getAdminUserLogs.js functions + # AdminGroupMembers.js functions + case "getAdminGroupMembers": + + $res = getAdminGroupMembers($soapParams); + $rawData = $res[0]; $numResults = $res[1]; + + $res = new json_response; + $res->setID('ID'); + $res->addField('ID','int'); + $res->addField('Name','string'); + $res->addField('Disabled','boolean'); + $res->parseArray($rawData); + $res->setDatasetSize($numResults); + + echo json_encode($res->export()); + + break; + + case "removeAdminGroupMember": + + $res = removeAdminGroupMember($soapParams); + if (isset($res)) { + ajaxException($res); + } + + break; + + # AdminUserLogs.js functions case "getAdminUserLogs": $rawData = getAdminUserLogs($soapParams); diff --git a/webgui/include/ajax/functions/AdminGroupMembers.php b/webgui/include/ajax/functions/AdminGroupMembers.php new file mode 100644 index 00000000..e99d1ea6 --- /dev/null +++ b/webgui/include/ajax/functions/AdminGroupMembers.php @@ -0,0 +1,104 @@ +<?php + +include_once("include/db.php"); + +# Add group attribute +function addAdminGroupMember($params) { + global $db; + + $res = DBDo("INSERT INTO group_attributes (GroupID,Name) VALUES (?,?)",array($params[0]['GroupID'],$params[0]['Name'])); + if (!is_numeric($res)) { + return $res; + } + + return NULL; +} + +# Remove group attribute +function removeAdminGroupMember($params) { + global $db; + + $res = DBDo("DELETE FROM users_to_groups WHERE ID = ?",array($params[0])); + if (!is_numeric($res)) { + return $res; + } + + return NULL; +} + +# Edit attribute +function updateAdminGroupMember($params) { + global $db; + + $res = DBDo("UPDATE group_attributes SET Name = ? WHERE ID = ?",array($params[0]['Name'],$params[0]['ID'])); + if (!is_numeric($res)) { + return $res; + } + + return NULL; +} + +# Return specific attribute row +function getAdminGroupMember($params) { + global $db; + + + $res = DBSelect("SELECT ID, Name FROM group_attributes WHERE ID = ?",array($params[0])); + if (!is_object($res)) { + return $res; + } + + $resultArray = array(); + + $row = $res->fetchObject(); + + $resultArray['ID'] = $row->id; + $resultArray['Name'] = $row->name; + + return $resultArray; +} + +# Return list of attributes +function getAdminGroupMembers($params) { + global $db; + + # Filters and sorts are the same here + $filtersorts = array( + 'ID' => 'users_to_groups.ID', + 'Name' => 'group_attributes.Name', + 'Disabled' => 'group_attributes.Disabled' + ); + + $res = DBSelectSearch(" + SELECT + ID, Name, Operator, Value, Disabled + FROM + group_attributes + WHERE + GroupID = ".DBQuote($params[0])." + ",$params[1],$filtersorts,$filtersorts); + + $sth = $res[0]; $numResults = $res[1]; + # If STH is blank, return the error back to whoever requested the data + if (!isset($sth)) { + return $res; + } + + $resultArray = array(); + + # loop through rows + while ($row = $sth->fetchObject()) { + $item = array(); + + $item['ID'] = $row->id; + $item['Name'] = $row->name; + $item['Disabled'] = $row->disabled; + + # push this row onto array + array_push($resultArray,$item); + } + + return array($resultArray,$numResults); +} + +?> diff --git a/webgui/index.html b/webgui/index.html index ecb611db..d41668f9 100644 --- a/webgui/index.html +++ b/webgui/index.html @@ -69,19 +69,24 @@ <script type="text/javascript" src="js/app/menus.js"></script> <script type="text/javascript">document.getElementById('loading-msg').innerHTML = 'Windows...';</script> - <script type="text/javascript" src="js/app/windows/WiSPResellers.js"></script> <script type="text/javascript" src="js/app/windows/WiSPUsers.js"></script> <script type="text/javascript" src="js/app/windows/WiSPUserLogs.js"></script> <script type="text/javascript" src="js/app/windows/WiSPUserTopups.js"></script> + <script type="text/javascript" src="js/app/windows/WiSPLocations.js"></script> - <script type="text/javascript" src="js/app/windows/AdminUsers.js"></script> - <script type="text/javascript" src="js/app/windows/AdminGroups.js"></script> - <script type="text/javascript" src="js/app/windows/AdminGroupAttributes.js"></script> + <script type="text/javascript" src="js/app/windows/WiSPResellers.js"></script> <script type="text/javascript" src="js/app/windows/AdminRealms.js"></script> + + <script type="text/javascript" src="js/app/windows/AdminUsers.js"></script> <script type="text/javascript" src="js/app/windows/AdminUserLogs.js"></script> <script type="text/javascript" src="js/app/windows/AdminUserAttributes.js"></script> <script type="text/javascript" src="js/app/windows/AdminUserGroups.js"></script> + <script type="text/javascript" src="js/app/windows/AdminGroups.js"></script> + <script type="text/javascript" src="js/app/windows/AdminGroupAttributes.js"></script> + <script type="text/javascript" src="js/app/windows/AdminGroupMembers.js"></script> + + <script type="text/javascript">document.getElementById('loading-msg').innerHTML = 'Layout...';</script> <script type="text/javascript" src="js/app/main-layout.js"></script> diff --git a/webgui/js/app/windows/AdminGroupMembers.js b/webgui/js/app/windows/AdminGroupMembers.js new file mode 100644 index 00000000..d8f840f9 --- /dev/null +++ b/webgui/js/app/windows/AdminGroupMembers.js @@ -0,0 +1,251 @@ + + +function showAdminGroupMembersWindow(groupID) { + + var AdminGroupMembersWindow = new Ext.ux.GenericGridWindow( + // Window config + { + title: "Members", + + width: 600, + height: 335, + + minWidth: 600, + minHeight: 335, + }, + // Grid config + { + // Inline toolbars + tbar: [ + { + text:'Add', + tooltip:'Add member', + iconCls:'add', + handler: function() { + showAdminGroupMemberAddEditWindow(groupID); + } + }, + '-', + { + text:'Edit', + tooltip:'Edit member', + iconCls:'edit', + handler: function() { + var selectedItem = AdminGroupMembersWindow.getComponent('gridpanel').getSelectionModel().getSelected(); + // Check if we have selected item + if (selectedItem) { + // If so display window + showAdminGroupMemberAddEditWindow(groupID,selectedItem.data.ID); + } else { + AdminGroupMembersWindow.getEl().mask(); + + // Display error + Ext.Msg.show({ + title: "Nothing selected", + msg: "No member selected", + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.CANCEL, + modal: false, + fn: function() { + AdminGroupMembersWindow.getEl().unmask(); + } + }); + } + } + }, + '-', + { + text:'Remove', + tooltip:'Remove member', + iconCls:'remove', + handler: function() { + var selectedItem = AdminGroupMembersWindow.getComponent('gridpanel').getSelectionModel().getSelected(); + // Check if we have selected item + if (selectedItem) { + // If so display window + showAdminGroupMemberRemoveWindow(AdminGroupMembersWindow,selectedItem.data.ID); + } else { + AdminGroupMembersWindow.getEl().mask(); + + // Display error + Ext.Msg.show({ + title: "Nothing selected", + msg: "No member selected", + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.CANCEL, + modal: false, + fn: function() { + AdminGroupMembersWindow.getEl().unmask(); + } + }); + } + } + } + ], + // Column model + colModel: new Ext.grid.ColumnModel([ + { + id: 'ID', + header: "ID", + sortable: true, + dataIndex: 'ID' + }, + { + header: "Name", + sortable: true, + dataIndex: 'Name' + }, + { + header: "Disabled", + sortable: true, + dataIndex: 'Disabled' + } + ]), + autoExpandColumn: 'Name' + }, + // Store config + { + baseParams: { + ID: groupID, + SOAPUsername: globalConfig.soap.username, + SOAPPassword: globalConfig.soap.password, + SOAPAuthType: globalConfig.soap.authtype, + SOAPModule: 'AdminGroupMembers', + SOAPFunction: 'getAdminGroupMembers', + SOAPParams: 'ID,__search' + } + }, + // Filter config + { + filters: [ + {type: 'numeric', dataIndex: 'ID'}, + {type: 'string', dataIndex: 'Name'}, + {type: 'boolean', dataIndex: 'Disabled'} + ] + } + ); + + AdminGroupMembersWindow.show(); +} + + +// Display edit/add form +function showAdminGroupMemberAddEditWindow(groupID,userID) { + + var submitAjaxConfig; + + + // We doing an update + if (userID) { + submitAjaxConfig = { + ID: userID, + SOAPFunction: 'updateAdminGroupMember', + SOAPParams: + '0:ID,'+ + '0:Name' + }; + + // We doing an Add + } else { + submitAjaxConfig = { + GroupID: groupID, + SOAPFunction: 'addAdminGroupMember', + SOAPParams: + '0:GroupID,'+ + '0:Name' + }; + } + + // Create window + var adminGroupMembersFormWindow = new Ext.ux.GenericFormWindow( + // Window config + { + title: "Member Information", + + width: 475, + height: 260, + + minWidth: 475, + minHeight: 260 + }, + // Form panel config + { + labelWidth: 85, + baseParams: { + SOAPUsername: globalConfig.soap.username, + SOAPPassword: globalConfig.soap.password, + SOAPAuthType: globalConfig.soap.authtype, + SOAPModule: 'AdminGroupMembers' + }, + items: [ + { + fieldLabel: 'Name', + name: 'Name', + vtype: 'usernamePart', + maskRe: usernamePartRe, + allowBlank: false + }, + ], + }, + // Submit button config + submitAjaxConfig + ); + + adminGroupMembersFormWindow.show(); + + if (userID) { + adminGroupMembersFormWindow.getComponent('formpanel').load({ + params: { + ID: userID, + SOAPUsername: globalConfig.soap.username, + SOAPPassword: globalConfig.soap.password, + SOAPAuthType: globalConfig.soap.authtype, + SOAPModule: 'AdminGroupMembers', + SOAPFunction: 'getAdminGroupMember', + SOAPParams: 'ID' + } + }); + } +} + + + + +// Display remove form +function showAdminGroupMemberRemoveWindow(parent,id) { + // Mask parent window + parent.getEl().mask(); + + // Display remove confirm window + Ext.Msg.show({ + title: "Confirm removal", + msg: "Are you very sure you wish to remove this member?", + icon: Ext.MessageBox.ERROR, + buttons: Ext.Msg.YESNO, + modal: false, + fn: function(buttonId,text) { + // Check if user clicked on 'yes' button + if (buttonId == 'yes') { + + // Do ajax request + uxAjaxRequest(parent,{ + params: { + ID: id, + SOAPUsername: globalConfig.soap.username, + SOAPPassword: globalConfig.soap.password, + SOAPAuthType: globalConfig.soap.authtype, + SOAPModule: 'AdminGroupMembers', + SOAPFunction: 'removeAdminGroupMember', + SOAPParams: 'ID' + } + }); + + + // Unmask if user answered no + } else { + parent.getEl().unmask(); + } + } + }); +} + -- GitLab