summaryrefslogtreecommitdiff
path: root/src/mod_vcard_mnesia.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-07-29 17:39:13 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-07-29 17:39:13 +0300
commit9bf1bac7df54f5be9cdca9a5d7a36160c40e25dd (patch)
treec40f739fa35b9a5c3d38aa74b798d97b14d190b4 /src/mod_vcard_mnesia.erl
parentRewrite several modules to use XML generator (diff)
Rewrite mod_vcard_ldap to use XML generator
Diffstat (limited to 'src/mod_vcard_mnesia.erl')
-rw-r--r--src/mod_vcard_mnesia.erl55
1 files changed, 52 insertions, 3 deletions
diff --git a/src/mod_vcard_mnesia.erl b/src/mod_vcard_mnesia.erl
index 67abed09..3b64c29e 100644
--- a/src/mod_vcard_mnesia.erl
+++ b/src/mod_vcard_mnesia.erl
@@ -11,7 +11,8 @@
-behaviour(mod_vcard).
%% API
--export([init/2, import/2, get_vcard/2, set_vcard/4, search/4, remove_user/2]).
+-export([init/2, stop/1, import/2, get_vcard/2, set_vcard/4, search/4,
+ search_fields/1, search_reported/1, remove_user/2]).
-include("ejabberd.hrl").
-include("xmpp.hrl").
@@ -43,6 +44,9 @@ init(_Host, _Opts) ->
mnesia:add_table_index(vcard_search, lorgname),
mnesia:add_table_index(vcard_search, lorgunit).
+stop(_Host) ->
+ ok.
+
get_vcard(LUser, LServer) ->
US = {LUser, LServer},
F = fun () -> mnesia:read({vcard, US}) end,
@@ -71,15 +75,44 @@ search(LServer, Data, AllowReturnAll, MaxMatch) ->
{'EXIT', Reason} ->
?ERROR_MSG("~p", [Reason]), [];
Rs ->
+ Fields = lists:map(fun record_to_item/1, Rs),
case MaxMatch of
infinity ->
- Rs;
+ Fields;
Val ->
- lists:sublist(Rs, Val)
+ lists:sublist(Fields, Val)
end
end
end.
+search_fields(_LServer) ->
+ [{<<"User">>, <<"user">>},
+ {<<"Full Name">>, <<"fn">>},
+ {<<"Name">>, <<"first">>},
+ {<<"Middle Name">>, <<"middle">>},
+ {<<"Family Name">>, <<"last">>},
+ {<<"Nickname">>, <<"nick">>},
+ {<<"Birthday">>, <<"bday">>},
+ {<<"Country">>, <<"ctry">>},
+ {<<"City">>, <<"locality">>},
+ {<<"Email">>, <<"email">>},
+ {<<"Organization Name">>, <<"orgname">>},
+ {<<"Organization Unit">>, <<"orgunit">>}].
+
+search_reported(_LServer) ->
+ [{<<"Jabber ID">>, <<"jid">>},
+ {<<"Full Name">>, <<"fn">>},
+ {<<"Name">>, <<"first">>},
+ {<<"Middle Name">>, <<"middle">>},
+ {<<"Family Name">>, <<"last">>},
+ {<<"Nickname">>, <<"nick">>},
+ {<<"Birthday">>, <<"bday">>},
+ {<<"Country">>, <<"ctry">>},
+ {<<"City">>, <<"locality">>},
+ {<<"Email">>, <<"email">>},
+ {<<"Organization Name">>, <<"orgname">>},
+ {<<"Organization Unit">>, <<"orgunit">>}].
+
remove_user(LUser, LServer) ->
US = {LUser, LServer},
F = fun () ->
@@ -211,3 +244,19 @@ parts_to_string(Parts) ->
str:strip(list_to_binary(
lists:map(fun (S) -> <<S/binary, $.>> end, Parts)),
right, $.).
+
+-spec record_to_item(#vcard_search{}) -> [{binary(), binary()}].
+record_to_item(R) ->
+ {User, Server} = R#vcard_search.user,
+ [{<<"jid">>, <<User/binary, "@", Server/binary>>},
+ {<<"fn">>, (R#vcard_search.fn)},
+ {<<"last">>, (R#vcard_search.family)},
+ {<<"first">>, (R#vcard_search.given)},
+ {<<"middle">>, (R#vcard_search.middle)},
+ {<<"nick">>, (R#vcard_search.nickname)},
+ {<<"bday">>, (R#vcard_search.bday)},
+ {<<"ctry">>, (R#vcard_search.ctry)},
+ {<<"locality">>, (R#vcard_search.locality)},
+ {<<"email">>, (R#vcard_search.email)},
+ {<<"orgname">>, (R#vcard_search.orgname)},
+ {<<"orgunit">>, (R#vcard_search.orgunit)}].