plugins/mod_server_info.lua
changeset 13440 1ce18cb3e6cc
equal deleted inserted replaced
13439:b64064e4400b 13440:1ce18cb3e6cc
       
     1 local dataforms = require "prosody.util.dataforms";
       
     2 
       
     3 local server_info_config = module:get_option("server_info", {});
       
     4 local server_info_custom_fields = module:get_option_array("server_info_extensions");
       
     5 
       
     6 -- Source: http://xmpp.org/registrar/formtypes.html#http:--jabber.org-network-serverinfo
       
     7 local form_layout = dataforms.new({
       
     8 	{ var = "FORM_TYPE"; type = "hidden"; value = "http://jabber.org/network/serverinfo" };
       
     9 });
       
    10 
       
    11 if server_info_custom_fields then
       
    12 	for _, field in ipairs(server_info_custom_fields) do
       
    13 		table.insert(form_layout, field);
       
    14 	end
       
    15 end
       
    16 
       
    17 local generated_form;
       
    18 
       
    19 function update_form()
       
    20 	local new_form = form_layout:form(server_info_config, "result");
       
    21 	if generated_form then
       
    22 		module:remove_item("extension", generated_form);
       
    23 	end
       
    24 	generated_form = new_form;
       
    25 	module:add_item("extension", generated_form);
       
    26 end
       
    27 
       
    28 function add_fields(event)
       
    29 	local fields = event.item;
       
    30 	for _, field in ipairs(fields) do
       
    31 		table.insert(form_layout, field);
       
    32 	end
       
    33 	update_form();
       
    34 end
       
    35 
       
    36 function remove_fields(event)
       
    37 	local removed_fields = event.item;
       
    38 	for _, removed_field in ipairs(removed_fields) do
       
    39 		local removed_var = removed_field.var or removed_field.name;
       
    40 		for i, field in ipairs(form_layout) do
       
    41 			local var = field.var or field.name
       
    42 			if var == removed_var then
       
    43 				table.remove(form_layout, i);
       
    44 				break;
       
    45 			end
       
    46 		end
       
    47 	end
       
    48 	update_form();
       
    49 end
       
    50 
       
    51 module:handle_items("server-info-fields", add_fields, remove_fields);
       
    52 
       
    53 function module.load()
       
    54 	update_form();
       
    55 end