]> granicus.if.org Git - ejabberd/commitdiff
* src/mod_muc/mod_muc.erl: Added default_room_options option
authorAlexey Shchepin <alexey@process-one.net>
Thu, 2 Aug 2007 02:30:25 +0000 (02:30 +0000)
committerAlexey Shchepin <alexey@process-one.net>
Thu, 2 Aug 2007 02:30:25 +0000 (02:30 +0000)
(thanks to Etan Reisner and Badlop)
* src/mod_muc/mod_muc_room.erl: Likewise
* doc/guide.tex: Updated

SVN Revision: 856

ChangeLog
doc/guide.tex
src/mod_muc/mod_muc.erl
src/mod_muc/mod_muc_room.erl

index 554da82bb3bd0b73ef2be280aa89ab5ba16f6e5a..f298509161f1a0034851d57006f3fe916af25cf3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,4 @@
+v v v v v v v
 2007-08-01  Mickael Remond  <mickael.remond@process-one.net>
 
        * doc/guide.tex: Front page table formatting that render correctly
        * src/Makefile.in: Likewise.
        * src/configure.ac: Likewise.
 
+*************
+2007-08-02  Alexey Shchepin  <alexey@sevcom.net>
+
+       * src/mod_muc/mod_muc.erl: Added default_room_options option
+       (thanks to Etan Reisner and Badlop)
+       * src/mod_muc/mod_muc_room.erl: Likewise
+       * doc/guide.tex: Updated
+
+^ ^ ^ ^ ^ ^ ^
 2007-07-31  Alexey Shchepin  <alexey@sevcom.net>
 
        * src/mod_version.erl: Added option to hide OS version (thanks to
index 84b042e01b6798a38750f0c9a7982154b4cfd4c2..8d8c1f0d8059f48c8b1252b23e9548759311c36b 100644 (file)
@@ -2039,6 +2039,18 @@ interval, the presence is cached by ejabberd and only the last
 presence is broadcasted to all users in the room after expiration of
 the interval delay. Intermediate presence packets are silently
 discarded. A good value for this option is 4 seconds.
+\titem{default\_room\_opts} \ind{options!default\_room\_opts}This option allow
+  to define the desired default room options.
+  Obviously, the room creator can modify the room options at any time.
+  The available room options are:
+  \option{allow\_change\_subj}, \option{allow\_private\_messages},
+  \option{allow\_query\_users}, \option{allow\_user\_invites},
+  \option{anonymous}, \option{logging}, \option{members\_by\_default},
+  \option{members\_only}, \option{moderated}, \option{password},
+  \option{password\_protected}, \option{persistent},
+  \option{public}, \option{public\_list}, \option{title}.
+  All of them can be set to \option{true} or \option{false},
+  except \option{password} and \option{title} which are strings.
 \end{description}
 
 Examples:
@@ -2115,6 +2127,26 @@ defined, but some user restriction could be added as well:
    ]}.
 \end{verbatim}
 
+\item This example shows how to use \option{default\_room\_opts} to make sure
+  newly created chatrooms have by default those options.
+  \begin{verbatim}
+  {modules,
+   [
+    ...
+    {mod_muc, [{access, muc_access},
+               {access_create, muc_admins},
+               {default_room_options, [
+                 {allow_change_subj, false},
+                 {allow_query_users, true},
+                 {allow_private_messages, true},
+                 {members_by_default, false},
+                 {title, "New chatroom"},
+                 {anonymous, false}
+               ]},
+               {access_admin, muc_admins}]},
+    ...
+   ]}.
+\end{verbatim}
 \end{itemize}
 
 The Multi-Users Chat module now supports clustering and load
index f3123093304995049ef77cdc8e04136e18777235..d516cc1c4b4a2b71f621d0c8617312f32775318e 100644 (file)
@@ -3,12 +3,10 @@
 %%% Author  : Alexey Shchepin <alexey@sevcom.net>
 %%% Purpose : MUC support (JEP-0045)
 %%% Created : 19 Mar 2003 by Alexey Shchepin <alexey@sevcom.net>
-%%% Id      : $Id$
 %%%----------------------------------------------------------------------
 
 -module(mod_muc).
 -author('alexey@sevcom.net').
--vsn('$Revision$ ').
 
 -behaviour(gen_server).
 -behaviour(gen_mod).
@@ -36,7 +34,7 @@
 -record(muc_online_room, {name_host, pid}).
 -record(muc_registered, {us_host, nick}).
 
--record(state, {host, server_host, access, history_size}).
+-record(state, {host, server_host, access, history_size, default_room_opts}).
 
 -define(PROCNAME, ejabberd_mod_muc).
 
@@ -156,12 +154,14 @@ init([Host, Opts]) ->
     AccessAdmin = gen_mod:get_opt(access_admin, Opts, none),
     AccessPersistent = gen_mod:get_opt(access_persistent, Opts, all),
     HistorySize = gen_mod:get_opt(history_size, Opts, 20),
+    DefRoomOpts = gen_mod:get_opt(default_room_options, Opts, []),
     ejabberd_router:register_route(MyHost),
     load_permanent_rooms(MyHost, Host, {Access, AccessCreate, AccessAdmin, AccessPersistent},
                         HistorySize),
     {ok, #state{host = MyHost,
                server_host = Host,
                access = {Access, AccessCreate, AccessAdmin, AccessPersistent},
+               default_room_opts = DefRoomOpts,
                history_size = HistorySize}}.
 
 %%--------------------------------------------------------------------
@@ -195,8 +195,9 @@ handle_info({route, From, To, Packet},
            #state{host = Host,
                   server_host = ServerHost,
                   access = Access,
+                  default_room_opts = DefRoomOpts,
                   history_size = HistorySize} = State) ->
-    case catch do_route(Host, ServerHost, Access, HistorySize, From, To, Packet) of
+    case catch do_route(Host, ServerHost, Access, HistorySize, From, To, Packet, DefRoomOpts) of
        {'EXIT', Reason} ->
            ?ERROR_MSG("~p", [Reason]);
        _ ->
@@ -254,11 +255,11 @@ stop_supervisor(Host) ->
     supervisor:terminate_child(ejabberd_sup, Proc),
     supervisor:delete_child(ejabberd_sup, Proc).
 
-do_route(Host, ServerHost, Access, HistorySize, From, To, Packet) ->
-    {AccessRoute, _AccessCreate, _AccessAdmin, AccessPersistent} = Access,
+do_route(Host, ServerHost, Access, HistorySize, From, To, Packet, DefRoomOpts) ->
+    {AccessRoute, _AccessCreate, _AccessAdmin, _AccessPersistent} = Access,
     case acl:match_rule(ServerHost, AccessRoute, From) of
        allow ->
-           do_route1(Host, ServerHost, Access, HistorySize, From, To, Packet);
+           do_route1(Host, ServerHost, Access, HistorySize, From, To, Packet, DefRoomOpts);
        _ ->
            {xmlelement, _Name, Attrs, _Els} = Packet,
            Lang = xml:get_attr_s("xml:lang", Attrs),
@@ -269,8 +270,8 @@ do_route(Host, ServerHost, Access, HistorySize, From, To, Packet) ->
     end.
 
 
-do_route1(Host, ServerHost, Access, HistorySize, From, To, Packet) ->
-    {_AccessRoute, AccessCreate, AccessAdmin, AccessPersistent} = Access,
+do_route1(Host, ServerHost, Access, HistorySize, From, To, Packet, DefRoomOpts) ->
+    {_AccessRoute, AccessCreate, AccessAdmin, _AccessPersistent} = Access,
     {Room, _, Nick} = jlib:jid_tolower(To),
     {xmlelement, Name, Attrs, _Els} = Packet,
     case Room of
@@ -395,7 +396,7 @@ do_route1(Host, ServerHost, Access, HistorySize, From, To, Packet) ->
                                    {ok, Pid} = mod_muc_room:start(
                                                  Host, ServerHost, Access,
                                                  Room, HistorySize, From,
-                                                 Nick),
+                                                 Nick, DefRoomOpts),
                                    register_room(Host, Room, Pid),
                                    mod_muc_room:route(Pid, From, Nick, Packet),
                                    ok;
index 4aa65521fa723623794f2d94c26779b3fe132ef6..998b89c3a8f1c6e0dd0a33bcf9b219b402577166 100644 (file)
@@ -14,9 +14,9 @@
 
 
 %% External exports
--export([start_link/7,
+-export([start_link/8,
         start_link/6,
-        start/7,
+        start/8,
         start/6,
         route/4]).
 
 %%%----------------------------------------------------------------------
 %%% API
 %%%----------------------------------------------------------------------
-start(Host, ServerHost, Access, Room, HistorySize, Creator, Nick) ->
+start(Host, ServerHost, Access, Room, HistorySize, Creator, Nick, DefRoomOpts) ->
     Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_muc_sup),
     supervisor:start_child(
-      Supervisor, [Host, ServerHost, Access, Room, HistorySize, Creator, Nick]).
+      Supervisor, [Host, ServerHost, Access, Room, HistorySize, Creator, Nick, DefRoomOpts]).
 
 start(Host, ServerHost, Access, Room, HistorySize, Opts) ->
     Supervisor = gen_mod:get_module_proc(ServerHost, ejabberd_mod_muc_sup),
     supervisor:start_child(
       Supervisor, [Host, ServerHost, Access, Room, HistorySize, Opts]).
 
-start_link(Host, ServerHost, Access, Room, HistorySize, Creator, Nick) ->
-    gen_fsm:start_link(?MODULE, [Host, ServerHost, Access, Room, HistorySize, Creator, Nick],
+start_link(Host, ServerHost, Access, Room, HistorySize, Creator, Nick, DefRoomOpts) ->
+    gen_fsm:start_link(?MODULE, [Host, ServerHost, Access, Room, HistorySize, Creator, Nick, DefRoomOpts],
                       ?FSMOPTS).
 
 start_link(Host, ServerHost, Access, Room, HistorySize, Opts) ->
@@ -119,7 +119,7 @@ start_link(Host, ServerHost, Access, Room, HistorySize, Opts) ->
 %%          ignore                              |
 %%          {stop, StopReason}                   
 %%----------------------------------------------------------------------
-init([Host, ServerHost, Access, Room, HistorySize, Creator, _Nick]) ->
+init([Host, ServerHost, Access, Room, HistorySize, Creator, _Nick, DefRoomOpts]) ->
     State = set_affiliation(Creator, owner,
                            #state{host = Host,
                                   server_host = ServerHost,
@@ -128,7 +128,8 @@ init([Host, ServerHost, Access, Room, HistorySize, Creator, _Nick]) ->
                                   history = lqueue_new(HistorySize),
                                   jid = jlib:make_jid(Room, Host, ""),
                                   just_created = true}),
-    {ok, normal_state, State};
+    State1 = set_opts(DefRoomOpts, State),
+    {ok, normal_state, State1};
 init([Host, ServerHost, Access, Room, HistorySize, Opts]) ->
     State = set_opts(Opts, #state{host = Host,
                                  server_host = ServerHost,
@@ -315,7 +316,7 @@ normal_state({route, From, "",
     end;
 
 normal_state({route, From, Nick,
-             {xmlelement, "presence", Attrs, _Els} = Packet},
+             {xmlelement, "presence", _Attrs, _Els} = Packet},
             StateData) ->
     Activity = case ?DICT:find(jlib:jid_tolower(From),
                               StateData#state.activity) of
@@ -593,7 +594,7 @@ code_change(_OldVsn, StateName, StateData, _Extra) ->
 %%          {next_state, NextStateName, NextStateData, Timeout} |
 %%          {stop, Reason, NewStateData}                         
 %%----------------------------------------------------------------------
-handle_info({process_presence, From}, normal_state = StateName, StateData) ->
+handle_info({process_presence, From}, normal_state = _StateName, StateData) ->
     Activity = case ?DICT:find(jlib:jid_tolower(From),
                               StateData#state.activity) of
                   {ok, A} -> A;