]> granicus.if.org Git - ejabberd/commitdiff
Fixed support for multi-resource occupants (EJAB-305)
authorBadlop <badlop@process-one.net>
Thu, 8 Sep 2011 14:18:22 +0000 (16:18 +0200)
committerBadlop <badlop@process-one.net>
Thu, 8 Sep 2011 14:18:22 +0000 (16:18 +0200)
src/mod_muc/mod_muc_room.erl

index dc97cf04073b2e476e52f81132b4505aaf00a14c..2ea2272f079950de8671c99f5b9dece63aa25dc9 100644 (file)
@@ -2462,7 +2462,7 @@ process_admin_items_set(UJID, Items, Lang, StateData) ->
                lists:foldl(
                  fun(E, SD) ->
                        process_admin_items_set(E, SD)
-                 end, StateData, Res),
+                 end, StateData, lists:flatten(Res)),
            case (NSD#state.config)#config.persistent of
                true ->
                    mod_muc:store_room(NSD#state.host, NSD#state.room,
@@ -2571,7 +2571,7 @@ find_changed_items(UJID, UAffiliation, URole,
               _ ->
                   case exmpp_xml:get_attribute(Item, <<"nick">>, false) of
                       N when N =/= false ->
-                          case find_jid_by_nick(N, StateData) of
+                          case find_jids_by_nick(N, StateData) of
                               false ->
                                   ErrText =
                                       io_lib:format(
@@ -2588,7 +2588,7 @@ find_changed_items(UJID, UAffiliation, URole,
                   end
           end,
     case TJID of
-       {value, JID} ->
+       {value, [JID|_]=JIDs} ->
            TAffiliation = get_affiliation(JID, StateData),
            TRole = get_role(JID, StateData),
            case exmpp_xml:get_attribute_as_binary(Item, <<"role">>,false) of
@@ -2638,16 +2638,13 @@ find_changed_items(UJID, UAffiliation, URole,
                                              Items, Lang, StateData,
                                              Res);
                                        true ->
+                                           Reason = exmpp_xml:get_path(Item, [{element, 'reason'}, cdata]),
+                                           MoreRes = [{exmpp_jid:bare(Jidx), affiliation, SAffiliation, Reason} || Jidx <- JIDs],
                                            find_changed_items(
                                              UJID,
                                              UAffiliation, URole,
                                              Items, Lang, StateData,
-                                             [{exmpp_jid:bare(JID),
-                                               affiliation,
-                                               SAffiliation,
-                                               exmpp_xml:get_path(
-                                                 Item, [{element, 'reason'},
-                                                        cdata])} | Res]);
+                                             [MoreRes | Res]);
                                        false ->
                                            {error, 'not-allowed'}
                                    end
@@ -2695,14 +2692,13 @@ find_changed_items(UJID, UAffiliation, URole,
                                      Items, Lang, StateData,
                                      Res);
                                true ->
+                                   Reason = exmpp_xml:get_path(Item, [{element, 'reason'}, cdata]),
+                                   MoreRes = [{Jidx, role, SRole, Reason} || Jidx <- JIDs],
                                    find_changed_items(
                                      UJID,
                                      UAffiliation, URole,
                                      Items, Lang, StateData,
-                                     [{JID, role, SRole,
-                                       exmpp_xml:get_path(
-                                         Item, [{element, 'reason'},
-                                                cdata])} | Res]);
+                                     [MoreRes | Res]);
                                _ ->
                                    {error, 'not-allowed'}
                            end