aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/muc/muc.lib.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2011-01-14 15:52:36 +0100
committerKim Alvefur <zash@zash.se>2011-01-14 15:52:36 +0100
commit572952044af121312269c399574c2d2f7a03e8d5 (patch)
treebc004a812907018c5cbe3ced1c74c255d8be0da7 /plugins/muc/muc.lib.lua
parentdde898cca7be5861443d00d76fe0a73d2f33b042 (diff)
downloadprosody-572952044af121312269c399574c2d2f7a03e8d5.tar.gz
prosody-572952044af121312269c399574c2d2f7a03e8d5.zip
MUC: Add option to allow participants to change the subject.
Diffstat (limited to 'plugins/muc/muc.lib.lua')
-rw-r--r--plugins/muc/muc.lib.lua24
1 files changed, 23 insertions, 1 deletions
diff --git a/plugins/muc/muc.lib.lua b/plugins/muc/muc.lib.lua
index 7a069852..8bbf0df2 100644
--- a/plugins/muc/muc.lib.lua
+++ b/plugins/muc/muc.lib.lua
@@ -327,6 +327,16 @@ end
function room_mt:is_hidden()
return self._data.hidden;
end
+function room_mt:set_changesubject(changesubject)
+ changesubject = changesubject and true or nil;
+ if self._data.changesubject ~= changesubject then
+ self._data.changesubject = changesubject;
+ if self.save then self:save(true); end
+ end
+end
+function room_mt:get_changesubject()
+ return self._data.changesubject;
+end
function room_mt:handle_to_occupant(origin, stanza) -- PM, vCards, etc
local from, to = stanza.attr.from, stanza.attr.to;
@@ -565,6 +575,12 @@ function room_mt:get_form_layout()
value = not self:is_hidden()
},
{
+ name = 'muc#roomconfig_changesubject',
+ type = 'boolean',
+ label = 'Allow Occupants to Change Subject?',
+ value = self:get_changesubject()
+ },
+ {
name = 'muc#roomconfig_whois',
type = 'list-single',
label = 'Who May Discover Real JIDs?',
@@ -637,6 +653,10 @@ function room_mt:process_form(origin, stanza)
local public = fields['muc#roomconfig_publicroom'];
dirty = dirty or (self:is_hidden() ~= (not public and true or nil))
+ local changesubject = fields['muc#roomconfig_changesubject'];
+ dirty = dirty or (self:get_changesubject() ~= (not changesubject and true or nil))
+ module:log('debug', 'changesubject=%s', changesubject and "true" or "false")
+
local whois = fields['muc#roomconfig_whois'];
if not valid_whois[whois] then
origin.send(st.error_reply(stanza, 'cancel', 'bad-request', "Invalid value for 'whois'"));
@@ -654,6 +674,7 @@ function room_mt:process_form(origin, stanza)
self:set_members_only(membersonly);
self:set_persistent(persistent);
self:set_hidden(not public);
+ self:set_changesubject(changesubject);
if self.save then self:save(true); end
origin.send(st.reply(stanza));
@@ -817,7 +838,8 @@ function room_mt:handle_to_room(origin, stanza) -- presence changes and groupcha
stanza.attr.from = current_nick;
local subject = getText(stanza, {"subject"});
if subject then
- if occupant.role == "moderator" then
+ if occupant.role == "moderator" or
+ ( self._data.changesubject and occupant.role == "participant" ) then -- and participant
self:set_subject(current_nick, subject); -- TODO use broadcast_message_stanza
else
stanza.attr.from = from;