plugins/muc/muc.lib.lua
changeset 6434 540f4e33394a
parent 6432 675aea867574
child 6454 385932a83013
equal deleted inserted replaced
6433:ceaf2a0d05eb 6434:540f4e33394a
   396 			is_last_session = is_last_orig_session;
   396 			is_last_session = is_last_orig_session;
   397 		};
   397 		};
   398 		if orig_occupant == nil then
   398 		if orig_occupant == nil then
   399 			event_name = "muc-occupant-pre-join";
   399 			event_name = "muc-occupant-pre-join";
   400 			event.is_new_room = is_new_room;
   400 			event.is_new_room = is_new_room;
       
   401 			event.occupant = dest_occupant;
   401 		elseif dest_occupant == nil then
   402 		elseif dest_occupant == nil then
   402 			event_name = "muc-occupant-pre-leave";
   403 			event_name = "muc-occupant-pre-leave";
       
   404 			event.occupant = orig_occupant;
   403 		else
   405 		else
   404 			event_name = "muc-occupant-pre-change";
   406 			event_name = "muc-occupant-pre-change";
       
   407 			event.orig_occupant = orig_occupant;
       
   408 			event.dest_occupant = dest_occupant;
   405 		end
   409 		end
   406 		if module:fire_event(event_name, event) then return true; end
   410 		if module:fire_event(event_name, event) then return true; end
   407 
   411 
   408 		-- Check for nick conflicts
   412 		-- Check for nick conflicts
   409 		if dest_occupant ~= nil and not is_first_dest_session and bare_jid ~= jid_bare(dest_occupant.bare_jid) then -- new nick or has different bare real jid
   413 		if dest_occupant ~= nil and not is_first_dest_session and bare_jid ~= jid_bare(dest_occupant.bare_jid) then -- new nick or has different bare real jid
   458 			end
   462 			end
   459 			self:save_occupant(orig_occupant);
   463 			self:save_occupant(orig_occupant);
   460 			self:publicise_occupant_status(orig_occupant, orig_x, dest_nick);
   464 			self:publicise_occupant_status(orig_occupant, orig_x, dest_nick);
   461 
   465 
   462 			if is_last_orig_session then
   466 			if is_last_orig_session then
   463 				module:fire_event("muc-occupant-left", {room = self; nick = orig_occupant.nick;});
   467 				module:fire_event("muc-occupant-left", {room = self; nick = orig_occupant.nick; occupant = orig_occupant;});
   464 			end
   468 			end
   465 		end
   469 		end
   466 
   470 
   467 		if dest_occupant ~= nil then
   471 		if dest_occupant ~= nil then
   468 			dest_occupant:set_session(real_jid, stanza);
   472 			dest_occupant:set_session(real_jid, stanza);
   496 				self:route_stanza(pr);
   500 				self:route_stanza(pr);
   497 			end
   501 			end
   498 
   502 
   499 			if orig_occupant == nil then
   503 			if orig_occupant == nil then
   500 				if is_first_dest_session then
   504 				if is_first_dest_session then
   501 					module:fire_event("muc-occupant-joined", {room = self; nick = dest_occupant.nick; stanza = stanza;});
   505 					module:fire_event("muc-occupant-joined", {room = self; nick = dest_occupant.nick; occupant = dest_occupant;});
   502 				end
   506 				end
   503 				module:fire_event("muc-occupant-session-new", {room = self; nick = dest_occupant.nick; stanza = stanza; jid = real_jid;});
   507 				module:fire_event("muc-occupant-session-new", {room = self; nick = dest_occupant.nick; occupant = dest_occupant; stanza = stanza; jid = real_jid;});
   504 			end
   508 			end
   505 		end
   509 		end
   506 	elseif type ~= 'result' then -- bad type
   510 	elseif type ~= 'result' then -- bad type
   507 		if type ~= 'visible' and type ~= 'invisible' then -- COMPAT ejabberd can broadcast or forward XEP-0018 presences
   511 		if type ~= 'visible' and type ~= 'invisible' then -- COMPAT ejabberd can broadcast or forward XEP-0018 presences
   508 			origin.send(st.error_reply(stanza, "modify", "bad-request")); -- FIXME correct error?
   512 			origin.send(st.error_reply(stanza, "modify", "bad-request")); -- FIXME correct error?
   667 		self:save_occupant(occupant);
   671 		self:save_occupant(occupant);
   668 		occupants_updated[occupant] = true;
   672 		occupants_updated[occupant] = true;
   669 	end
   673 	end
   670 	for occupant in pairs(occupants_updated) do
   674 	for occupant in pairs(occupants_updated) do
   671 		self:publicise_occupant_status(occupant, x);
   675 		self:publicise_occupant_status(occupant, x);
   672 		module:fire_event("muc-occupant-left", { room = self; nick = occupant.nick; });
   676 		module:fire_event("muc-occupant-left", { room = self; nick = occupant.nick; occupant = occupant;});
   673 	end
   677 	end
   674 end
   678 end
   675 
   679 
   676 function room_mt:destroy(newjid, reason, password)
   680 function room_mt:destroy(newjid, reason, password)
   677 	local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user"})
   681 	local x = st.stanza("x", {xmlns = "http://jabber.org/protocol/muc#user"})