Changeset

6226:7582deb85812

plugins/muc: Move 'moderated' code to seperate file; changes default "muc-get-default-role" behaviour
author daurnimator <quae@daurnimator.com>
date Fri, 18 Apr 2014 12:19:04 -0400
parents 6225:12537f1c1fec
children 6227:bb75c011b15e
files plugins/muc/moderated.lib.lua plugins/muc/muc.lib.lua
diffstat 2 files changed, 58 insertions(+), 32 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/plugins/muc/moderated.lib.lua	Fri Apr 18 12:19:04 2014 -0400
@@ -0,0 +1,53 @@
+-- Prosody IM
+-- Copyright (C) 2008-2010 Matthew Wild
+-- Copyright (C) 2008-2010 Waqas Hussain
+-- Copyright (C) 2014 Daurnimator
+--
+-- This project is MIT/X11 licensed. Please see the
+-- COPYING file in the source package for more information.
+--
+
+local function get_moderated(room)
+	return room._data.moderated;
+end
+
+local function set_moderated(room, moderated)
+	moderated = moderated and true or nil;
+	if get_moderated(room) == moderated then return false; end
+	room._data.moderated = moderated;
+	if room.save then room:save(true); end
+	return true;
+end
+
+module:hook("muc-disco#info", function(event)
+	event.reply:tag("feature", {var = get_moderated(event.room) and "muc_moderated" or "muc_unmoderated"}):up();
+end);
+
+module:hook("muc-config-form", function(event)
+	table.insert(event.form, {
+		name = "muc#roomconfig_moderatedroom";
+		type = "boolean";
+		label = "Make Room Moderated?";
+		value = get_moderated(event.room);
+	});
+end);
+
+module:hook("muc-config-submitted", function(event)
+	local new = event.fields["muc#roomconfig_moderatedroom"];
+	if new ~= nil and set_moderated(event.room, new) then
+		event.status_codes["104"] = true;
+	end
+end);
+
+module:hook("muc-get-default-role", function(event)
+	if event.affiliation == nil then
+		if get_moderated(event.room) then
+			return "visitor"
+		end
+	end
+end, 1);
+
+return {
+	get = get_moderated;
+	set = set_moderated;
+};
--- a/plugins/muc/muc.lib.lua	Wed Apr 16 14:16:14 2014 -0400
+++ b/plugins/muc/muc.lib.lua	Fri Apr 18 12:19:04 2014 -0400
@@ -49,15 +49,10 @@
 module:hook("muc-get-default-role", function(event)
 	if event.affiliation_rank >= valid_affiliations.admin then
 		return "moderator";
-	elseif event.affiliation_rank >= valid_affiliations.member then
+	elseif event.affiliation_rank >= valid_affiliations.none then
 		return "participant";
 	end
 end);
-module:hook("muc-get-default-role", function(event)
-	if not event.affiliation then
-		return event.room:get_moderated() and "visitor" or "participant";
-	end
-end, -1);
 
 --- Occupant functions
 function room_mt:new_occupant(bare_real_jid, nick)
@@ -278,9 +273,6 @@
 	event.reply:tag("feature", {var = "http://jabber.org/protocol/muc"}):up();
 end);
 module:hook("muc-disco#info", function(event)
-	event.reply:tag("feature", {var = event.room:get_moderated() and "muc_moderated" or "muc_unmoderated"}):up();
-end);
-module:hook("muc-disco#info", function(event)
 	local count = iterators.count(event.room:each_occupant());
 	table.insert(event.form, { name = "muc#roominfo_occupants", label = "Number of occupants", value = tostring(count) });
 end);
@@ -311,23 +303,11 @@
 	return true;
 end
 
-function room_mt:set_moderated(moderated)
-	moderated = moderated and true or nil;
-	if self._data.moderated ~= moderated then
-		self._data.moderated = moderated;
-		if self.save then self:save(true); end
-	end
-end
-function room_mt:get_moderated()
-	return self._data.moderated;
-end
-
 -- Give the room creator owner affiliation
 module:hook("muc-room-pre-create", function(event)
 	event.room:set_affiliation(true, jid_bare(event.stanza.attr.from), "owner");
 end, -1);
 
-
 -- check if user is banned
 module:hook("muc-occupant-pre-join", function(event)
 	local room, stanza = event.room, event.stanza;
@@ -602,14 +582,6 @@
 	});
 	return module:fire_event("muc-config-form", { room = self, actor = actor, form = form }) or form;
 end
-module:hook("muc-config-form", function(event)
-	table.insert(event.form, {
-		name = 'muc#roomconfig_moderatedroom',
-		type = 'boolean',
-		label = 'Make Room Moderated?',
-		value = event.room:get_moderated()
-	});
-end);
 
 function room_mt:process_form(origin, stanza)
 	local form = stanza.tags[1]:get_child("x", "jabber:x:data");
@@ -651,9 +623,6 @@
 	end
 	return true;
 end
-module:hook("muc-config-submitted", function(event)
-	event.update_option("moderated", "muc#roomconfig_moderatedroom");
-end);
 
 -- Removes everyone from the room
 function room_mt:clear(x)
@@ -1119,6 +1088,10 @@
 room_mt.get_members_only = members_only.get;
 room_mt.set_members_only = members_only.set;
 
+local moderated = module:require "muc/moderated";
+room_mt.get_moderated = moderated.get;
+room_mt.set_moderated = moderated.set;
+
 local persistent = module:require "muc/persistent";
 room_mt.get_persistent = persistent.get;
 room_mt.set_persistent = persistent.set;