123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- -module(n4u_cx).
- -include_lib("n4u/include/n4u.hrl").
- -export([context/2, context/3, add_action/1, cookies/0, add_cookie/4,
- fold/3, init_context/1 ]).
- % N4U Process Context
- context(Cx, Proto) -> lists:keyfind(Proto, 1, Cx#cx.state).
- context(Cx, Proto, UserCx) ->
- NewCx = Cx#cx{state=setkey(Proto, 1, Cx#cx.state, {Proto, UserCx})},
- erlang:put(context, NewCx),
- NewCx.
- setkey(Name, Pos, List, New) ->
- case lists:keyfind(Name, Pos, List) of
- false -> [New|List];
- _Element -> lists:keyreplace(Name, Pos, List, New)
- end.
- add_action(Action) ->
- Actions = case erlang:get(actions) of
- undefined -> [];
- E -> E
- end,
- erlang:put(actions, Actions ++ [Action]).
- %clear_actions() -> erlang:put(actions, []).
- cookies() ->
- C = erlang:get(cookies),
- case erlang:is_list(C) of
- true -> C;
- _ -> []
- end.
- add_cookie(Name, Value, Path, TTL) ->
- C = cookies(),
- Cookies = case lists:keyfind(Name, 1, C) of
- {Name, _, _, _} ->
- lists:keyreplace(Name, 1, C, {Name, Value, Path, TTL});
- false ->
- [{Name, Value, Path, TTL}|C]
- end,
- erlang:put(cookies, Cookies).
- fold(Fun, Handlers, Ctx) ->
- lists:foldl(
- fun({_, Module}, Ctx1) ->
- {ok, _, NewCtx} = Module:Fun([], Ctx1),
- NewCtx
- end, Ctx, Handlers).
- init_context(Req) ->
- #cx{actions=[], module=index, path=[], req=Req, params=[],
- handlers= [ {'query', application:get_env(n4u, 'query', n4u_query)},
- {session, application:get_env(n4u, session, n4u_session)},
- {route, application:get_env(n4u, route, n2o_dynroute)} ]}.
|