Changeset

3519:489b683988fe

Merge hoelzro->trunk
author Matthew Wild <mwild1@gmail.com>
date Fri, 15 Oct 2010 17:07:17 +0100
parents 3517:530f7de1d265 (diff) 3518:d3399d1b484a (current diff)
children 3521:896ffec79f57
files
diffstat 3 files changed, 101 insertions(+), 45 deletions(-) [+]
line wrap: on
line diff
--- a/core/configmanager.lua	Fri Oct 15 00:53:05 2010 -0500
+++ b/core/configmanager.lua	Fri Oct 15 17:07:17 2010 +0100
@@ -137,6 +137,12 @@
 			rawset(env, "__currenthost", name);
 			-- Needs at least one setting to logically exist :)
 			set(name or "*", "core", "defined", true);
+			return function (config_options)
+				rawset(env, "__currenthost", "*"); -- Return to global scope
+				for option_name, option_value in pairs(config_options) do
+					set(name or "*", "core", option_name, option_value);
+				end
+			end;
 		end
 		env.Host, env.host = env.VirtualHost, env.VirtualHost;
 		
@@ -149,11 +155,19 @@
 			-- Don't load the global modules by default
 			set(name, "core", "load_global_modules", false);
 			rawset(env, "__currenthost", name);
+			local function handle_config_options(config_options)
+				rawset(env, "__currenthost", "*"); -- Return to global scope
+				for option_name, option_value in pairs(config_options) do
+					set(name or "*", "core", option_name, option_value);
+				end
+			end
 	
 			return function (module)
 					if type(module) == "string" then
 						set(name, "core", "component_module", module);
+						return handle_config_options;
 					end
+					return handle_config_options(module);
 				end
 		end
 		env.component = env.Component;
--- a/core/loggingmanager.lua	Fri Oct 15 00:53:05 2010 -0500
+++ b/core/loggingmanager.lua	Fri Oct 15 17:07:17 2010 +0100
@@ -89,9 +89,25 @@
 -- the log_sink_types table.
 function apply_sink_rules(sink_type)
 	if type(logging_config) == "table" then
+		
+		if sink_type == "file" then
+			for _, level in ipairs(logging_levels) do
+				if type(logging_config[level]) == "string" then
+					add_rule({
+						to = "file",
+						filename = logging_config[level],
+						timestamps = true,
+						levels = { min = level },
+					});
+				end
+			end
+		end
+		
 		for _, sink_config in pairs(logging_config) do
-			if sink_config.to == sink_type then
+			if (type(sink_config) == "table" and sink_config.to == sink_type) then
 				add_rule(sink_config);
+			elseif (type(sink_config) == "string" and sink_config:match("^%*(.+)") == sink_type) then
+				add_rule({ levels = { min = "debug" }, to = sink_type });
 			end
 		end
 	elseif type(logging_config) == "string" and (not logging_config:match("^%*")) and sink_type == "file" then
@@ -151,7 +167,9 @@
 	logger.reset();
 
 	default_logging = { { to = "console" , levels = { min = (debug_mode and "debug") or "info" } } };
-	default_file_logging = { { to = "file", levels = { min = (debug_mode and "debug") or "info" }, timestamps = true } };
+	default_file_logging = {
+		{ to = "file", levels = { min = (debug_mode and "debug") or "info" }, timestamps = true } 
+	};
 	default_timestamp = "%b %d %H:%M:%S";
 
 	logging_config = config.get("*", "core", "log") or default_logging;
--- a/plugins/muc/muc.lib.lua	Fri Oct 15 00:53:05 2010 -0500
+++ b/plugins/muc/muc.lib.lua	Fri Oct 15 17:07:17 2010 +0100
@@ -12,6 +12,8 @@
 local datamanager = require "util.datamanager";
 local datetime = require "util.datetime";
 
+local dataform = require "util.dataforms";
+
 local jid_split = require "util.jid".split;
 local jid_bare = require "util.jid".bare;
 local jid_prep = require "util.jid".prep;
@@ -178,7 +180,7 @@
 		if seconds then seconds = datetime.datetime(os.time() - math.floor(seconds)); end
 
 		local since = history_tag and history_tag.attr.since;
-		if since and not since:match("^%d%d%d%d%-%d%d%-%d%dT%d%d:%d%d:%d%dZ$") then since = nil; end -- FIXME timezone support
+		if since then since = datetime.parse(since); since = since and datetime.datetime(since); end
 		if seconds and (not since or since < seconds) then since = seconds; end
 
 		local n = 0;
@@ -220,14 +222,10 @@
 		:tag("feature", {var=self:is_persistent() and "muc_persistent" or "muc_temporary"}):up()
 		:tag("feature", {var=self:is_hidden() and "muc_hidden" or "muc_public"}):up()
 		:tag("feature", {var=self._data.whois ~= "anyone" and "muc_semianonymous" or "muc_nonanonymous"}):up()
-		:tag("x", {xmlns="jabber:x:data", type="result"})
-			:tag("field", {var="FORM_TYPE", type="hidden"})
-				:tag("value"):text("http://jabber.org/protocol/muc#roominfo"):up()
-			:up()
-			:tag("field", {var="muc#roominfo_description", label="Description"})
-				:tag("value"):text(self:get_description()):up()
-			:up()
-		:up()	
+		:add_child(dataform.new({
+			{ name = "FORM_TYPE", type = "hidden", value = "http://jabber.org/protocol/muc#roominfo" },
+			{ name = "muc#roominfo_description", label = "Description"}
+		}):form({["muc#roominfo_description"] = self:get_description()}, 'result'))
 	;
 end
 function room_mt:get_disco_items(stanza)
@@ -526,40 +524,66 @@
 function room_mt:send_form(origin, stanza)
 	local title = "Configuration for "..self.jid;
 	origin.send(st.reply(stanza):query("http://jabber.org/protocol/muc#owner")
-		:tag("x", {xmlns='jabber:x:data', type='form'})
-			:tag("title"):text(title):up()
-			:tag("instructions"):text(title):up()
-			:tag("field", {type='hidden', var='FORM_TYPE'}):tag("value"):text("http://jabber.org/protocol/muc#roomconfig"):up():up()
-			:tag("field", {type='text-single', label='Name', var='muc#roomconfig_roomname'})
-				:tag("value"):text(self:get_name() or ""):up()
-			:up()
-			:tag("field", {type='text-single', label='Description', var='muc#roomconfig_roomdesc'})
-				:tag("value"):text(self:get_description() or ""):up()
-			:up()
-			:tag("field", {type='boolean', label='Make Room Persistent?', var='muc#roomconfig_persistentroom'})
-				:tag("value"):text(self:is_persistent() and "1" or "0"):up()
-			:up()
-			:tag("field", {type='boolean', label='Make Room Publicly Searchable?', var='muc#roomconfig_publicroom'})
-				:tag("value"):text(self:is_hidden() and "0" or "1"):up()
-			:up()
-			:tag("field", {type='list-single', label='Who May Discover Real JIDs?', var='muc#roomconfig_whois'})
-			    :tag("value"):text(self._data.whois or 'moderators'):up()
-			    :tag("option", {label = 'Moderators Only'})
-				:tag("value"):text('moderators'):up()
-				:up()
-			    :tag("option", {label = 'Anyone'})
-				:tag("value"):text('anyone'):up()
-				:up()
-			:up()
-			:tag("field", {type='text-private', label='Password', var='muc#roomconfig_roomsecret'})
-				:tag("value"):text(self:get_password() or ""):up()
-			:up()
-			:tag("field", {type='boolean', label='Make Room Moderated?', var='muc#roomconfig_moderatedroom'})
-				:tag("value"):text(self:is_moderated() and "1" or "0"):up()
-			:up()
-			:tag("field", {type='boolean', label='Make Room Members-Only?', var='muc#roomconfig_membersonly'})
-				:tag("value"):text(self:is_members_only() and "1" or "0"):up()
-			:up()
+	:add_child(dataform.new({
+		title = title,
+		instructions = title,
+		{
+			name = 'FORM_TYPE',
+			type = 'hidden',
+			value = 'http://jabber.org/protocol/muc#roomconfig'
+		},
+		{
+			name = 'muc#roomconfig_roomname',
+			type = 'text-single',
+			label = 'Name',
+			value = self:get_name() or "",
+		},
+		{
+			name = 'muc#roomconfig_roomdesc',
+			type = 'text-single',
+			label = 'Description',
+			value = self:get_description() or "",
+		},
+		{
+			name = 'muc#roomconfig_persistentroom',
+			type = 'boolean',
+			label = 'Make Room Persistent?',
+			value = self:is_persistent()
+		},
+		{
+			name = 'muc#roomconfig_publicroom',
+			type = 'boolean',
+			label = 'Make Room Publicly Searchable?',
+			value = not self:is_hidden()
+		},
+		{
+			name = 'muc#roomconfig_whois',
+			type = 'list-single',
+			label = 'Who May Discover Real JIDs?',
+			value = {
+				{ value = 'moderators', label = 'Moderators Only', default = self._data.whois == 'moderators' },
+				{ value = 'anyone',     label = 'Anyone',          default = self._data.whois == 'anyone' }
+			}
+		},
+		{
+			name = 'muc#roomconfig_roomsecret',
+			type = 'text-private',
+			label = 'Password',
+			value = self:get_password() or "",
+		},
+		{
+			name = 'muc#roomconfig_moderatedroom',
+			type = 'boolean',
+			label = 'Make Room Moderated?',
+			value = self:is_moderated()
+		},
+		{
+			name = 'muc#roomconfig_membersonly',
+			type = 'boolean',
+			label = 'Make Room Members-Only?',
+			value = self:is_members_only()
+		}
+	}):form())
 	);
 end