Diff

mod_mam_muc/mod_mam_muc.lua @ 1143:8098683b6d6f

mod_mam_muc: Allow archiving to be enabled trough in the room configuration
author Kim Alvefur <zash@zash.se>
date Sat, 10 Aug 2013 21:18:25 +0200
parent 1142:fabdaa0d99e3
child 1144:ccb0c5afe658
line wrap: on
line diff
--- a/mod_mam_muc/mod_mam_muc.lua	Sat Aug 10 21:17:12 2013 +0200
+++ b/mod_mam_muc/mod_mam_muc.lua	Sat Aug 10 21:18:25 2013 +0200
@@ -6,6 +6,7 @@
 local xmlns_mam     = "urn:xmpp:mam:tmp";
 local xmlns_delay   = "urn:xmpp:delay";
 local xmlns_forward = "urn:xmpp:forward:0";
+local muc_form_config_option = "muc#roomconfig_enablelogging"
 
 local st = require "util.stanza";
 local rsm = module:require "mod_mam/rsm";
@@ -23,11 +24,39 @@
 local timestamp, timestamp_parse = require "util.datetime".datetime, require "util.datetime".parse;
 local default_max_items, max_max_items = 20, module:get_option_number("max_archive_query_results", 50);
 
+local log_all_rooms = module:get_option_boolean("muc_log_all_rooms", false);
+local log_by_default = module:get_option_boolean("muc_log_by_default", true);
 local advertise_archive = module:get_option_boolean("muc_log_advertise", true);
 
 local archive = module:open_store("archive2", "archive");
 local rooms = hosts[module.host].modules.muc.rooms;
 
+module:hook("muc-config-form", function(event)
+	local room, form = event.room, event.form;
+	table.insert(form,
+	{
+		name = muc_form_config_option,
+		type = "boolean",
+		label = "Enable Logging?",
+		value = room._data.logging or false,
+	}
+	);
+end);
+
+module:hook("muc-config-submitted", function(event)
+	local room, fields, changed = event.room, event.fields, event.changed;
+	local new = fields[muc_form_config_option];
+	if new ~= room._data.logging then
+		room._data.logging = new;
+		if type(changed) == "table" then
+			changed[muc_form_config_option] = true;
+		else
+			event.changed = true;
+		end
+	end
+end);
+
+
 -- Handle archive queries
 module:hook("iq-get/bare/"..xmlns_mam..":query", function(event)
 	local origin, stanza = event.origin, event.stanza;
@@ -130,6 +159,10 @@
 	local room_obj = rooms[orig_to]
 	if not room_obj then return end -- No such room
 
+	if not ( log_all_rooms == true -- Logging forced on all rooms
+	or (room_obj._data.logging == nil and log_by_default == true)
+	or room_obj._data.logging ) then return end -- Don't log
+
 	local nick = room_obj._jid_nick[orig_from];
 	if not nick then return end -- Message from someone not in the room?