summaryrefslogtreecommitdiff
path: root/src/mod_vcard_riak.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-04-13 17:37:52 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-04-13 17:37:52 +0300
commitae69f09257c81847f1d2cbb1ea82d398df8b81bb (patch)
tree37bcb53bca7275bc4d4ed0c1164c251c83c158a4 /src/mod_vcard_riak.erl
parentClean mod_private.erl from DB specific code (diff)
Clean mod_vcard.erl from DB specific code
Diffstat (limited to 'src/mod_vcard_riak.erl')
-rw-r--r--src/mod_vcard_riak.erl151
1 files changed, 151 insertions, 0 deletions
diff --git a/src/mod_vcard_riak.erl b/src/mod_vcard_riak.erl
new file mode 100644
index 00000000..38634738
--- /dev/null
+++ b/src/mod_vcard_riak.erl
@@ -0,0 +1,151 @@
+%%%-------------------------------------------------------------------
+%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net>
+%%% @copyright (C) 2016, Evgeny Khramtsov
+%%% @doc
+%%%
+%%% @end
+%%% Created : 13 Apr 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net>
+%%%-------------------------------------------------------------------
+-module(mod_vcard_riak).
+
+-behaviour(mod_vcard).
+
+%% API
+-export([init/2, get_vcard/2, set_vcard/4, search/4, remove_user/2,
+ import/2]).
+
+-include("jlib.hrl").
+-include("mod_vcard.hrl").
+
+%%%===================================================================
+%%% API
+%%%===================================================================
+init(_Host, _Opts) ->
+ ok.
+
+get_vcard(LUser, LServer) ->
+ case ejabberd_riak:get(vcard, vcard_schema(), {LUser, LServer}) of
+ {ok, R} ->
+ [R#vcard.vcard];
+ {error, notfound} ->
+ [];
+ _ ->
+ error
+ end.
+
+set_vcard(LUser, LServer, VCARD,
+ #vcard_search{user = {User, _},
+ fn = FN,
+ lfn = LFN,
+ family = Family,
+ lfamily = LFamily,
+ given = Given,
+ lgiven = LGiven,
+ middle = Middle,
+ lmiddle = LMiddle,
+ nickname = Nickname,
+ lnickname = LNickname,
+ bday = BDay,
+ lbday = LBDay,
+ ctry = CTRY,
+ lctry = LCTRY,
+ locality = Locality,
+ llocality = LLocality,
+ email = EMail,
+ lemail = LEMail,
+ orgname = OrgName,
+ lorgname = LOrgName,
+ orgunit = OrgUnit,
+ lorgunit = LOrgUnit}) ->
+ US = {LUser, LServer},
+ {atomic,
+ ejabberd_riak:put(#vcard{us = US, vcard = VCARD},
+ vcard_schema(),
+ [{'2i', [{<<"user">>, User},
+ {<<"luser">>, LUser},
+ {<<"fn">>, FN},
+ {<<"lfn">>, LFN},
+ {<<"family">>, Family},
+ {<<"lfamily">>, LFamily},
+ {<<"given">>, Given},
+ {<<"lgiven">>, LGiven},
+ {<<"middle">>, Middle},
+ {<<"lmiddle">>, LMiddle},
+ {<<"nickname">>, Nickname},
+ {<<"lnickname">>, LNickname},
+ {<<"bday">>, BDay},
+ {<<"lbday">>, LBDay},
+ {<<"ctry">>, CTRY},
+ {<<"lctry">>, LCTRY},
+ {<<"locality">>, Locality},
+ {<<"llocality">>, LLocality},
+ {<<"email">>, EMail},
+ {<<"lemail">>, LEMail},
+ {<<"orgname">>, OrgName},
+ {<<"lorgname">>, LOrgName},
+ {<<"orgunit">>, OrgUnit},
+ {<<"lorgunit">>, LOrgUnit}]}])}.
+
+search(_LServer, _Data, _AllowReturnAll, _MaxMatch) ->
+ [].
+
+remove_user(LUser, LServer) ->
+ {atomic, ejabberd_riak:delete(vcard, {LUser, LServer})}.
+
+import(_LServer, #vcard{us = {LUser, LServer}, vcard = El} = VCard) ->
+ #vcard_search{fn = FN,
+ lfn = LFN,
+ family = Family,
+ lfamily = LFamily,
+ given = Given,
+ lgiven = LGiven,
+ middle = Middle,
+ lmiddle = LMiddle,
+ nickname = Nickname,
+ lnickname = LNickname,
+ bday = BDay,
+ lbday = LBDay,
+ ctry = CTRY,
+ lctry = LCTRY,
+ locality = Locality,
+ llocality = LLocality,
+ email = EMail,
+ lemail = LEMail,
+ orgname = OrgName,
+ lorgname = LOrgName,
+ orgunit = OrgUnit,
+ lorgunit = LOrgUnit} =
+ mod_vcard:make_vcard_search(LUser, LUser, LServer, El),
+ ejabberd_riak:put(VCard, vcard_schema(),
+ [{'2i', [{<<"user">>, LUser},
+ {<<"luser">>, LUser},
+ {<<"fn">>, FN},
+ {<<"lfn">>, LFN},
+ {<<"family">>, Family},
+ {<<"lfamily">>, LFamily},
+ {<<"given">>, Given},
+ {<<"lgiven">>, LGiven},
+ {<<"middle">>, Middle},
+ {<<"lmiddle">>, LMiddle},
+ {<<"nickname">>, Nickname},
+ {<<"lnickname">>, LNickname},
+ {<<"bday">>, BDay},
+ {<<"lbday">>, LBDay},
+ {<<"ctry">>, CTRY},
+ {<<"lctry">>, LCTRY},
+ {<<"locality">>, Locality},
+ {<<"llocality">>, LLocality},
+ {<<"email">>, EMail},
+ {<<"lemail">>, LEMail},
+ {<<"orgname">>, OrgName},
+ {<<"lorgname">>, LOrgName},
+ {<<"orgunit">>, OrgUnit},
+ {<<"lorgunit">>, LOrgUnit}]}]);
+import(_LServer, #vcard_search{}) ->
+ ok.
+
+%%%===================================================================
+%%% Internal functions
+%%%===================================================================
+vcard_schema() ->
+ {record_info(fields, vcard), #vcard{}}.