From ffc7f63e2c39fc5ef009208a5a7644181329641f Mon Sep 17 00:00:00 2001
From: Robert Anderson <randerson@lbsd.net>
Date: Wed, 13 May 2009 13:19:56 +0000
Subject: [PATCH] List, add, edit and remove group attributes

---
 webgui/ajax.php                               |  83 ++++++++++++++
 .../ajax/functions/AdminGroupAttributes.php   | 108 ++++++++++++++++++
 webgui/index.html                             |   1 +
 3 files changed, 192 insertions(+)
 create mode 100644 webgui/include/ajax/functions/AdminGroupAttributes.php

diff --git a/webgui/ajax.php b/webgui/ajax.php
index 73911b31..46e94277 100644
--- a/webgui/ajax.php
+++ b/webgui/ajax.php
@@ -9,6 +9,7 @@
 	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);
@@ -150,6 +151,30 @@
 
 	switch ($function) {
 
+		# getAdminUserLogs.js functions
+		case "getAdminUserLogs":
+
+			$rawData = getAdminUserLogs($soapParams);
+
+			$res = new json_response;
+			$res->setID('ID');
+			$res->addField('ID','int');
+			$res->addField('AcctStatusType','int');
+			$res->addField('ServiceType','int');
+			$res->addField('FramedProtocol','int');
+			$res->addField('NASPort','string');
+			$res->addField('NASPortType','int');
+			$res->addField('NASPortID','string');
+			$res->addField('CallingStationID','string');
+			$res->addField('CalledStationID','string');
+			$res->addField('AcctSessionID','string');
+			$res->addField('FramedIPAddress','string');
+			$res->parseHash($rawData);
+
+			echo json_encode($res->export());
+
+			break;
+	
 		# addAdminUserGroup.js functions
 		case "addAdminUserGroup":
 
@@ -185,6 +210,64 @@
 
 			break;
 
+		# AdminGroupAttributes.js functions
+		case "addAdminGroupAttribute":
+
+			$res = addAdminGroupAttribute($soapParams);
+			if (isset($res)) {
+				ajaxException($res);
+			}
+
+			break;
+
+		case "updateAdminGroupAttribute":
+
+			$res = updateAdminGroupAttribute($soapParams);
+			if (isset($res)) {
+				ajaxException($res);
+			}
+
+			break;
+
+		case "getAdminGroupAttribute":
+			$rawData = getAdminGroupAttribute($soapParams);
+
+			$res = new json_response;
+			$res->setID('ID');
+			$res->addField('ID','int');
+			$res->addField('Name','string');
+			$res->parseHash($rawData);
+
+			echo json_encode($res->export());
+			break;
+
+		case "getAdminGroupAttributes":
+
+			$res = getAdminGroupAttributes($soapParams);
+			$rawData = $res[0]; $numResults = $res[1];
+
+			$res = new json_response;
+			$res->setID('ID');
+			$res->addField('ID','int');
+			$res->addField('Name','string');
+			$res->addField('Operator','string');
+			$res->addField('Value','string');
+			$res->addField('Disabled','boolean');
+			$res->parseArray($rawData);
+			$res->setDatasetSize($numResults);
+
+			echo json_encode($res->export());
+			break;
+
+		case "removeAdminGroupAttribute":
+
+			$res = removeAdminGroupAttribute($soapParams);
+			if (isset($res)) {
+				ajaxException($res);
+			}
+
+			break;
+
 		# AdminUserAttributes.js functions
 		case "addAdminUserAttribute":
 
diff --git a/webgui/include/ajax/functions/AdminGroupAttributes.php b/webgui/include/ajax/functions/AdminGroupAttributes.php
new file mode 100644
index 00000000..c769b3f9
--- /dev/null
+++ b/webgui/include/ajax/functions/AdminGroupAttributes.php
@@ -0,0 +1,108 @@
+<?php
+
+include_once("include/db.php");
+
+# Add user attribute
+function addAdminGroupAttribute($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 user attribute
+function removeAdminGroupAttribute($params) {
+	global $db;
+
+	$res = DBDo("DELETE FROM group_attributes WHERE ID = ?",array($params[0]));
+	if (!is_numeric($res)) {
+		return $res;
+	}
+
+	return NULL;
+}
+
+# Edit attribute
+function updateAdminGroupAttribute($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 getAdminGroupAttribute($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 getAdminGroupAttributes($params) {
+	global $db;
+
+	# Filters and sorts are the same here
+	$filtersorts = array(
+		'ID' => 'group_attributes.ID',
+		'Name' => 'group_attributes.Name',
+		'Operator' => 'group_attributes.Operator',
+		'Value' => 'group_attributes.Value',
+		'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['Operator'] = $row->operator;
+		$item['Value'] = $row->value;
+		$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 24380881..ecb611db 100644
--- a/webgui/index.html
+++ b/webgui/index.html
@@ -76,6 +76,7 @@
 	<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/AdminRealms.js"></script>
 	<script type="text/javascript" src="js/app/windows/AdminUserLogs.js"></script>
 	<script type="text/javascript" src="js/app/windows/AdminUserAttributes.js"></script>
-- 
GitLab