+
+local function is_admin(jid)
+ return um_is_admin(jid) or um_is_admin(jid, module.host);
+end
+
+local function room_route_stanza(room, stanza) core_post_stanza(component, stanza); end
+local function room_save(room, forced)
+ local node = jid_split(room.jid);
+ persistent_rooms[room.jid] = room._data.persistent;
+ if room._data.persistent then
+ local history = room._data.history;
+ room._data.history = nil;
+ local data = {
+ jid = room.jid;
+ _data = room._data;
+ _affiliations = room._affiliations;
+ };
+ datamanager.store(node, muc_host, "config", data);
+ room._data.history = history;
+ elseif forced then
+ datamanager.store(node, muc_host, "config", nil);
+ end
+ if forced then datamanager.store(nil, muc_host, "persistent", persistent_rooms); end
+end
+
+for jid in pairs(persistent_rooms) do
+ local node = jid_split(jid);
+ local data = datamanager.load(node, muc_host, "config") or {};
+ local room = muc_new_room(jid);
+ room._data = data._data;
+ room._affiliations = data._affiliations;
+ room.route_stanza = room_route_stanza;
+ room.save = room_save;
+ rooms[jid] = room;
+end
+