diff mod_adhoc_cmd_admin/mod_adhoc_cmd_admin.lua @ 227:648c24de9040

mod_adhoc_cmd_admin: Add suport for showing more detail
author Florian Zeitz <florob@babelmonkeys.de>
date Fri, 30 Jul 2010 01:40:19 +0200
parents d15c7d86db11
children 161067865850
line wrap: on
line diff
--- a/mod_adhoc_cmd_admin/mod_adhoc_cmd_admin.lua	Thu Jul 29 14:36:41 2010 +0800
+++ b/mod_adhoc_cmd_admin/mod_adhoc_cmd_admin.lua	Fri Jul 30 01:40:19 2010 +0200
@@ -108,6 +108,7 @@
 	{ name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" };
 	{ name = "max_items", type = "list-single", label = "Maximum number of users",
 		value = { "25", "50", "75", "100", "150", "200", "all" } };
+	{ name = "details", type = "boolean", label = "Show details" };
 };
 
 local get_online_users_result_layout = dataforms_new{
@@ -365,22 +366,36 @@
 			return { status = "canceled" };
 		end
 
-		local fields = add_user_layout:data(data.form);
-		
+		local fields = get_online_users_layout:data(data.form);
+
 		local max_items = nil
 		if fields.max_items ~= "all" then
 			max_items = tonumber(fields.max_items);
 		end
 		local count = 0;
-		local users = nil;
+		local users = {};
 		for username, user in pairs(hosts[data.to].sessions or {}) do
 			if (max_items ~= nil) and (count >= max_items) then
 				break;
 			end
-			users = ((users and users.."\n") or "")..(username.."@"..data.to);
+			users[#users+1] = username.."@"..data.to;
 			count = count + 1;
+			if fields.details then
+				for resource, session in pairs(user.sessions or {}) do
+					local status, priority = "unavailable", tostring(session.priority or "-");
+					if session.presence then
+						status = session.presence:child_with_name("show");
+						if status then
+							status = status:get_text() or "[invalid!]";
+						else
+							status = "available";
+						end
+					end
+					users[#users+1] = " - "..resource..": "..status.."("..priority..")";
+				end
+			end
 		end
-		return { status = "completed", result = {layout = get_online_users_result_layout, data = {onlineuserjids=users}} };
+		return { status = "completed", result = {layout = get_online_users_result_layout, data = {onlineuserjids=t_concat(users, "\n")}} };
 	else
 		return { status = "executing", form = get_online_users_layout }, "executing";
 	end