Merge 0.9->0.10
[prosody.git] / plugins / muc / mod_muc.lua
index 042d3891efc6df0c2e6bd9bd745cb2e69781a270..693515042456856a5c7b1b994ecf5a19c48f02ec 100644 (file)
@@ -52,14 +52,15 @@ local function is_admin(jid)
        return um_is_admin(jid, module.host);
 end
 
-local _set_affiliation = muc_new_room.room_mt.set_affiliation;
-local _get_affiliation = muc_new_room.room_mt.get_affiliation;
+room_mt = muclib.room_mt; -- Yes, global.
+local _set_affiliation = room_mt.set_affiliation;
+local _get_affiliation = room_mt.get_affiliation;
 function muclib.room_mt:get_affiliation(jid)
        if is_admin(jid) then return "owner"; end
        return _get_affiliation(self, jid);
 end
 function muclib.room_mt:set_affiliation(actor, jid, affiliation, callback, reason)
-       if is_admin(jid) then return nil, "modify", "not-acceptable"; end
+       if affiliation ~= "owner" and is_admin(jid) then return nil, "modify", "not-acceptable"; end
        return _set_affiliation(self, actor, jid, affiliation, callback, reason);
 end
 
@@ -172,6 +173,7 @@ function stanza_handler(event)
        if room then
                room:handle_stanza(origin, stanza);
                if not next(room._occupants) and not persistent_rooms[room.jid] then -- empty, non-persistent room
+                       module:fire_event("muc-room-destroyed", { room = room });
                        rooms[bare] = nil; -- discard room
                end
        else