aboutsummaryrefslogtreecommitdiff
path: root/src/mod_vcard_sql.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_vcard_sql.erl')
-rw-r--r--src/mod_vcard_sql.erl52
1 files changed, 49 insertions, 3 deletions
diff --git a/src/mod_vcard_sql.erl b/src/mod_vcard_sql.erl
index f448d0776..f8ac6be97 100644
--- a/src/mod_vcard_sql.erl
+++ b/src/mod_vcard_sql.erl
@@ -13,8 +13,8 @@
-behaviour(mod_vcard).
%% API
--export([init/2, get_vcard/2, set_vcard/4, search/4, remove_user/2,
- import/1, import/2, export/1]).
+-export([init/2, stop/1, get_vcard/2, set_vcard/4, search/4, remove_user/2,
+ search_fields/1, search_reported/1, import/1, import/2, export/1]).
-include("xmpp.hrl").
-include("mod_vcard.hrl").
@@ -27,6 +27,9 @@
init(_Host, _Opts) ->
ok.
+stop(_Host) ->
+ ok.
+
get_vcard(LUser, LServer) ->
case catch sql_queries:get_vcard(LServer, LUser) of
{selected, [{SVCARD}]} ->
@@ -93,12 +96,40 @@ search(LServer, Data, AllowReturnAll, MaxMatch) ->
<<"middle">>, <<"nickname">>, <<"bday">>, <<"ctry">>,
<<"locality">>, <<"email">>, <<"orgname">>,
<<"orgunit">>], Rs} when is_list(Rs) ->
- Rs;
+ [row_to_item(LServer, R) || R <- Rs];
Error ->
?ERROR_MSG("~p", [Error]), []
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) ->
ejabberd_sql:sql_transaction(
LServer,
@@ -240,3 +271,18 @@ make_val(Match, Field, Val) ->
<<"">> -> Condition;
_ -> [Match, <<" and ">>, Condition]
end.
+
+row_to_item(LServer, [Username, FN, Family, Given, Middle, Nickname, BDay,
+ CTRY, Locality, EMail, OrgName, OrgUnit]) ->
+ [{<<"jid">>, <<Username/binary, $@, LServer/binary>>},
+ {<<"fn">>, FN},
+ {<<"last">>, Family},
+ {<<"first">>, Given},
+ {<<"middle">>, Middle},
+ {<<"nick">>, Nickname},
+ {<<"bday">>, BDay},
+ {<<"ctry">>, CTRY},
+ {<<"locality">>, Locality},
+ {<<"email">>, EMail},
+ {<<"orgname">>, OrgName},
+ {<<"orgunit">>, OrgUnit}].