]> granicus.if.org Git - ejabberd/commitdiff
* src/web/ejabberd_web_admin.erl: Added user's roster page
authorAlexey Shchepin <alexey@process-one.net>
Mon, 2 Aug 2004 22:17:05 +0000 (22:17 +0000)
committerAlexey Shchepin <alexey@process-one.net>
Mon, 2 Aug 2004 22:17:05 +0000 (22:17 +0000)
* src/mod_irc/mod_irc_connection.erl: Bugfix

SVN Revision: 253

ChangeLog
src/mod_irc/mod_irc_connection.erl
src/web/ejabberd_web_admin.erl

index 9f00cb1068061df69b36b7c6c45dc5a12393f8e3..7e6d7b60f51d395484738a8c7fce232334eae62d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2004-08-03  Alexey Shchepin  <alexey@sevcom.net>
+
+       * src/web/ejabberd_web_admin.erl: Added user's roster page
+
+       * src/mod_irc/mod_irc_connection.erl: Bugfix
+
 2004-08-01  Alexey Shchepin  <alexey@sevcom.net>
 
        * src/tls/tls.erl: Added recv_data/2 function
index 671c9832887dd3d5c757032a0d45b2987c1909b7..f4e1c29d3b7c95cab60dc0a2e16ef5c0a347d667 100644 (file)
@@ -303,8 +303,8 @@ handle_info({route_chan, Channel, Resource,
             {xmlelement, "iq", Attrs, Els} = El},
            StateName, StateData) ->
     From = StateData#state.user,
-    To = {lists:concat([Channel, "%", StateData#state.server]),
-         StateData#state.myname, StateData#state.nick},
+    To = jlib:make_jid(lists:concat([Channel, "%", StateData#state.server]),
+                      StateData#state.myname, StateData#state.nick),
     case jlib:iq_query_info(El) of
        #iq{xmlns = ?NS_MUC_ADMIN} = IQ ->
            iq_admin(StateData, Channel, From, To, IQ);
index 457ebee5891cf827be7244ce7cf7b485a92c904d..550d3ecd09cdc790859dc614a044422866804f0e 100644 (file)
@@ -777,6 +777,13 @@ process_admin(#request{user = User,
     Res = user_info(U, Query, Lang),
     make_xhtml(Res, Lang);
 
+process_admin(#request{user = User,
+                      path = ["user", U, "roster"],
+                      q = Query,
+                      lang = Lang} = Request) ->
+    Res = user_roster(U, Query, Lang),
+    make_xhtml(Res, Lang);
+
 process_admin(#request{user = User,
                       path = ["nodes"],
                       q = Query,
@@ -1135,6 +1142,65 @@ user_parse_query(User, Query) ->
     end.
 
 
+-record(roster, {uj,
+                user,
+                jid,
+                name = "",
+                subscription = none,
+                ask = none,
+                groups = [],
+                xattrs = [],
+                xs = []}).
+
+ask_to_pending(subscribe) -> out;
+ask_to_pending(unsubscribe) -> none;
+ask_to_pending(Ask) -> Ask.
+
+user_roster(User, Query, Lang) ->
+    %Res = user_parse_query(User, Query),
+    Res = nothing, % TODO
+    LUser = jlib:nameprep(User),
+    Items = mnesia:dirty_index_read(roster, LUser, #roster.user),
+    SItems = lists:sort(Items),
+    FItems =
+       case SItems of
+           [] ->
+               [?CT("None")];
+           _ ->
+               [?XE("table",
+                    [?XE("thead",
+                         [?XE("tr",
+                              [?XCT("td", "JID"),
+                               ?XCT("td", "Name"),
+                               ?XCT("td", "Subscription"),
+                               ?XCT("td", "Pending")
+                              ])]),
+                     ?XE("tbody",
+                         lists:map(
+                           fun(R) ->
+                                   ?XE("tr",
+                                       [?XE("td", [?C(jlib:jid_to_string(
+                                                        R#roster.jid))]),
+                                        ?XE("td", [?C(R#roster.name)]),
+                                        ?XE("td",
+                                            [?C(atom_to_list(
+                                                  R#roster.subscription))]),
+                                        ?XE("td",
+                                            [?C(atom_to_list(
+                                                  ask_to_pending(
+                                                    R#roster.ask)))])])
+                           end, SItems))])]
+       end,
+    [?XC("h1", "Roster of " ++ User)] ++
+       case Res of
+           ok -> [?CT("submitted"), ?P];
+           error -> [?CT("bad format"), ?P];
+           nothing -> []
+       end ++
+       [?XAE("form", [{"method", "post"}],
+             FItems)].
+
+
 get_nodes(Lang) ->
     RunningNodes = mnesia:system_info(running_db_nodes),
     StoppedNodes = lists:usort(mnesia:system_info(db_nodes) ++