MUC: Separate force-save parameter from save-entire-state flag
[prosody.git] / plugins / muc / muc.lib.lua
index 071f1f8b01f05eaf1a90e86233adf20c7052fcd5..eeb531a90c02c3783718d9a9bf2e8455d706a7eb 100644 (file)
@@ -769,7 +769,7 @@ function room_mt:process_form(origin, stanza)
                end
                event.field, event.value = nil, nil;
 
-               self:save();
+               self:save(true);
                origin.send(st.reply(stanza));
 
                if next(event.status_codes) then
@@ -852,7 +852,7 @@ function room_mt:handle_admin_query_set_command(origin, stanza)
        else
                success, errtype, err = nil, "cancel", "bad-request";
        end
-       self:save();
+       self:save(true);
        if not success then
                origin.send(st.error_reply(stanza, errtype, err));
        else
@@ -1219,7 +1219,7 @@ function room_mt:set_affiliation(actor, jid, affiliation, reason)
                end
        end
 
-       self:save();
+       self:save(true);
 
        module:fire_event("muc-set-affiliation", {
                room = self;
@@ -1358,7 +1358,7 @@ function _M.restore_room(frozen)
                        if not resource and type(data) == "string" then
                                -- bare jid: affiliation
                                room._affiliations[jid] = data;
-                       elseif host == room_host and node == room_name and resource then
+                       elseif host == room_host and node == room_name and resource and type(data) == "table" then
                                -- full room jid: bare real jid and role
                                local bare_jid = data.bare_jid;
                                local   occupant = occupant_lib.new(bare_jid, jid);
@@ -1372,7 +1372,7 @@ function _M.restore_room(frozen)
                                        end
                                end
                                occupant_sessions[bare_jid] = nil;
-                       else
+                       elseif type(data) == "table" and data.name then
                                -- full user jid: presence
                                local presence = st.deserialize(data);
                                local bare_jid = jid_bare(jid);