Comparison

plugins/muc/muc.lib.lua @ 4119:813adb81d7da

MUC: Add option to allow participants to change the subject.
author Kim Alvefur <zash@zash.se>
date Fri, 14 Jan 2011 15:52:36 +0100
parent 3989:84792db89336
child 4201:9a8d2baf7a9c
comparison
equal deleted inserted replaced
4118:339b909c15a0 4119:813adb81d7da
324 if self.save then self:save(true); end 324 if self.save then self:save(true); end
325 end 325 end
326 end 326 end
327 function room_mt:is_hidden() 327 function room_mt:is_hidden()
328 return self._data.hidden; 328 return self._data.hidden;
329 end
330 function room_mt:set_changesubject(changesubject)
331 changesubject = changesubject and true or nil;
332 if self._data.changesubject ~= changesubject then
333 self._data.changesubject = changesubject;
334 if self.save then self:save(true); end
335 end
336 end
337 function room_mt:get_changesubject()
338 return self._data.changesubject;
329 end 339 end
330 340
331 function room_mt:handle_to_occupant(origin, stanza) -- PM, vCards, etc 341 function room_mt:handle_to_occupant(origin, stanza) -- PM, vCards, etc
332 local from, to = stanza.attr.from, stanza.attr.to; 342 local from, to = stanza.attr.from, stanza.attr.to;
333 local room = jid_bare(to); 343 local room = jid_bare(to);
563 type = 'boolean', 573 type = 'boolean',
564 label = 'Make Room Publicly Searchable?', 574 label = 'Make Room Publicly Searchable?',
565 value = not self:is_hidden() 575 value = not self:is_hidden()
566 }, 576 },
567 { 577 {
578 name = 'muc#roomconfig_changesubject',
579 type = 'boolean',
580 label = 'Allow Occupants to Change Subject?',
581 value = self:get_changesubject()
582 },
583 {
568 name = 'muc#roomconfig_whois', 584 name = 'muc#roomconfig_whois',
569 type = 'list-single', 585 type = 'list-single',
570 label = 'Who May Discover Real JIDs?', 586 label = 'Who May Discover Real JIDs?',
571 value = { 587 value = {
572 { value = 'moderators', label = 'Moderators Only', default = self._data.whois == 'moderators' }, 588 { value = 'moderators', label = 'Moderators Only', default = self._data.whois == 'moderators' },
635 module:log("debug", "membersonly=%s", tostring(membersonly)); 651 module:log("debug", "membersonly=%s", tostring(membersonly));
636 652
637 local public = fields['muc#roomconfig_publicroom']; 653 local public = fields['muc#roomconfig_publicroom'];
638 dirty = dirty or (self:is_hidden() ~= (not public and true or nil)) 654 dirty = dirty or (self:is_hidden() ~= (not public and true or nil))
639 655
656 local changesubject = fields['muc#roomconfig_changesubject'];
657 dirty = dirty or (self:get_changesubject() ~= (not changesubject and true or nil))
658 module:log('debug', 'changesubject=%s', changesubject and "true" or "false")
659
640 local whois = fields['muc#roomconfig_whois']; 660 local whois = fields['muc#roomconfig_whois'];
641 if not valid_whois[whois] then 661 if not valid_whois[whois] then
642 origin.send(st.error_reply(stanza, 'cancel', 'bad-request', "Invalid value for 'whois'")); 662 origin.send(st.error_reply(stanza, 'cancel', 'bad-request', "Invalid value for 'whois'"));
643 return; 663 return;
644 end 664 end
652 end 672 end
653 self:set_moderated(moderated); 673 self:set_moderated(moderated);
654 self:set_members_only(membersonly); 674 self:set_members_only(membersonly);
655 self:set_persistent(persistent); 675 self:set_persistent(persistent);
656 self:set_hidden(not public); 676 self:set_hidden(not public);
677 self:set_changesubject(changesubject);
657 678
658 if self.save then self:save(true); end 679 if self.save then self:save(true); end
659 origin.send(st.reply(stanza)); 680 origin.send(st.reply(stanza));
660 681
661 if dirty or whois_changed then 682 if dirty or whois_changed then
815 else 836 else
816 local from = stanza.attr.from; 837 local from = stanza.attr.from;
817 stanza.attr.from = current_nick; 838 stanza.attr.from = current_nick;
818 local subject = getText(stanza, {"subject"}); 839 local subject = getText(stanza, {"subject"});
819 if subject then 840 if subject then
820 if occupant.role == "moderator" then 841 if occupant.role == "moderator" or
842 ( self._data.changesubject and occupant.role == "participant" ) then -- and participant
821 self:set_subject(current_nick, subject); -- TODO use broadcast_message_stanza 843 self:set_subject(current_nick, subject); -- TODO use broadcast_message_stanza
822 else 844 else
823 stanza.attr.from = from; 845 stanza.attr.from = from;
824 origin.send(st.error_reply(stanza, "cancel", "forbidden")); 846 origin.send(st.error_reply(stanza, "cancel", "forbidden"));
825 end 847 end