Software / code / prosody
Comparison
plugins/muc/muc.lib.lua @ 6203:b6ffce01e6cf
plugins/muc/muc.lib: Modify muc-config-submitted to keep a list of status codes instead of fields changed
| author | daurnimator <quae@daurnimator.com> |
|---|---|
| date | Wed, 02 Apr 2014 11:35:00 -0400 |
| parent | 6202:64ed7f538f81 |
| child | 6204:c3254827698d |
comparison
equal
deleted
inserted
replaced
| 6202:64ed7f538f81 | 6203:b6ffce01e6cf |
|---|---|
| 1012 if fields.FORM_TYPE ~= "http://jabber.org/protocol/muc#roomconfig" then | 1012 if fields.FORM_TYPE ~= "http://jabber.org/protocol/muc#roomconfig" then |
| 1013 origin.send(st.error_reply(stanza, "cancel", "bad-request", "Form is not of type room configuration")); | 1013 origin.send(st.error_reply(stanza, "cancel", "bad-request", "Form is not of type room configuration")); |
| 1014 return true; | 1014 return true; |
| 1015 end | 1015 end |
| 1016 | 1016 |
| 1017 local changed = {}; | 1017 local event = {room = self; origin = origin; stanza = stanza; fields = fields; status_codes = {};}; |
| 1018 | 1018 function event.update_option(name, field, allowed) |
| 1019 local function handle_option(name, field, allowed) | |
| 1020 local new = fields[field]; | 1019 local new = fields[field]; |
| 1021 if new == nil then return; end | 1020 if new == nil then return; end |
| 1022 if allowed and not allowed[new] then return; end | 1021 if allowed and not allowed[new] then return; end |
| 1023 if new == self["get_"..name](self) then return; end | 1022 if new == self["get_"..name](self) then return; end |
| 1024 changed[name] = true; | 1023 event.status_codes["104"] = true; |
| 1025 self["set_"..name](self, new); | 1024 self["set_"..name](self, new); |
| 1026 end | 1025 return true; |
| 1027 | 1026 end |
| 1028 local event = { room = self, fields = fields, changed = changed, stanza = stanza, origin = origin, update_option = handle_option }; | |
| 1029 module:fire_event("muc-config-submitted", event); | 1027 module:fire_event("muc-config-submitted", event); |
| 1030 | 1028 |
| 1031 if self.save then self:save(true); end | 1029 if self.save then self:save(true); end |
| 1032 if self:is_locked() then | 1030 if self:is_locked() then |
| 1033 self:unlock(); | 1031 self:unlock(); |
| 1034 end | 1032 end |
| 1035 origin.send(st.reply(stanza)); | 1033 origin.send(st.reply(stanza)); |
| 1036 | 1034 |
| 1037 if next(changed) then | 1035 if next(event.status_codes) then |
| 1038 local msg = st.message({type='groupchat', from=self.jid}) | 1036 local msg = st.message({type='groupchat', from=self.jid}) |
| 1039 :tag('x', {xmlns='http://jabber.org/protocol/muc#user'}) | 1037 :tag('x', {xmlns='http://jabber.org/protocol/muc#user'}) |
| 1040 :tag('status', {code = '104'}):up() | 1038 for code in pairs(event.status_codes) do |
| 1041 :up(); | 1039 msg:tag("status", {code = code;}):up(); |
| 1042 if changed.whois then | 1040 end |
| 1043 local code = (self:get_whois() == 'moderators') and "173" or "172"; | 1041 msg:up(); |
| 1044 msg.tags[1]:tag('status', {code = code}):up(); | |
| 1045 end | |
| 1046 self:broadcast_message(msg, false) | 1042 self:broadcast_message(msg, false) |
| 1047 end | 1043 end |
| 1048 else | 1044 else |
| 1049 origin.send(st.error_reply(stanza, "cancel", "bad-request", "Not a submitted form")); | 1045 origin.send(st.error_reply(stanza, "cancel", "bad-request", "Not a submitted form")); |
| 1050 end | 1046 end |
| 1073 end); | 1069 end); |
| 1074 module:hook("muc-config-submitted", function(event) | 1070 module:hook("muc-config-submitted", function(event) |
| 1075 event.update_option("historylength", "muc#roomconfig_historylength"); | 1071 event.update_option("historylength", "muc#roomconfig_historylength"); |
| 1076 end); | 1072 end); |
| 1077 module:hook("muc-config-submitted", function(event) | 1073 module:hook("muc-config-submitted", function(event) |
| 1078 event.update_option("whois", "muc#roomconfig_whois", valid_whois); | 1074 if event.update_option("whois", "muc#roomconfig_whois", valid_whois) then |
| 1075 local code = (event.room:get_whois() == 'moderators') and "173" or "172"; | |
| 1076 event.status_codes[code] = true; | |
| 1077 end | |
| 1079 end); | 1078 end); |
| 1080 module:hook("muc-config-submitted", function(event) | 1079 module:hook("muc-config-submitted", function(event) |
| 1081 event.update_option("password", "muc#roomconfig_roomsecret"); | 1080 event.update_option("password", "muc#roomconfig_roomsecret"); |
| 1082 end); | 1081 end); |
| 1083 | 1082 |