Mercurial > prosody-modules
comparison 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 |
comparison
equal
deleted
inserted
replaced
225:95d4d53f09a1 | 227:648c24de9040 |
---|---|
106 instructions = "How many users should be returned at most?"; | 106 instructions = "How many users should be returned at most?"; |
107 | 107 |
108 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; | 108 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; |
109 { name = "max_items", type = "list-single", label = "Maximum number of users", | 109 { name = "max_items", type = "list-single", label = "Maximum number of users", |
110 value = { "25", "50", "75", "100", "150", "200", "all" } }; | 110 value = { "25", "50", "75", "100", "150", "200", "all" } }; |
111 { name = "details", type = "boolean", label = "Show details" }; | |
111 }; | 112 }; |
112 | 113 |
113 local get_online_users_result_layout = dataforms_new{ | 114 local get_online_users_result_layout = dataforms_new{ |
114 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; | 115 { name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/admin" }; |
115 { name = "onlineuserjids", type = "text-multi", label = "The list of all online users" }; | 116 { name = "onlineuserjids", type = "text-multi", label = "The list of all online users" }; |
363 if state then | 364 if state then |
364 if data.action == "cancel" then | 365 if data.action == "cancel" then |
365 return { status = "canceled" }; | 366 return { status = "canceled" }; |
366 end | 367 end |
367 | 368 |
368 local fields = add_user_layout:data(data.form); | 369 local fields = get_online_users_layout:data(data.form); |
369 | 370 |
370 local max_items = nil | 371 local max_items = nil |
371 if fields.max_items ~= "all" then | 372 if fields.max_items ~= "all" then |
372 max_items = tonumber(fields.max_items); | 373 max_items = tonumber(fields.max_items); |
373 end | 374 end |
374 local count = 0; | 375 local count = 0; |
375 local users = nil; | 376 local users = {}; |
376 for username, user in pairs(hosts[data.to].sessions or {}) do | 377 for username, user in pairs(hosts[data.to].sessions or {}) do |
377 if (max_items ~= nil) and (count >= max_items) then | 378 if (max_items ~= nil) and (count >= max_items) then |
378 break; | 379 break; |
379 end | 380 end |
380 users = ((users and users.."\n") or "")..(username.."@"..data.to); | 381 users[#users+1] = username.."@"..data.to; |
381 count = count + 1; | 382 count = count + 1; |
382 end | 383 if fields.details then |
383 return { status = "completed", result = {layout = get_online_users_result_layout, data = {onlineuserjids=users}} }; | 384 for resource, session in pairs(user.sessions or {}) do |
385 local status, priority = "unavailable", tostring(session.priority or "-"); | |
386 if session.presence then | |
387 status = session.presence:child_with_name("show"); | |
388 if status then | |
389 status = status:get_text() or "[invalid!]"; | |
390 else | |
391 status = "available"; | |
392 end | |
393 end | |
394 users[#users+1] = " - "..resource..": "..status.."("..priority..")"; | |
395 end | |
396 end | |
397 end | |
398 return { status = "completed", result = {layout = get_online_users_result_layout, data = {onlineuserjids=t_concat(users, "\n")}} }; | |
384 else | 399 else |
385 return { status = "executing", form = get_online_users_layout }, "executing"; | 400 return { status = "executing", form = get_online_users_layout }, "executing"; |
386 end | 401 end |
387 end | 402 end |
388 | 403 |