mod_adhoc_groups/mod_adhoc_groups.lua
author Kim Alvefur <zash@zash.se>
Sun, 04 Feb 2018 15:57:52 +0100
changeset 2874 d8325dfb6a13
parent 2852 232da6b1d2c1
child 4034 0d7293c37e1a
permissions -rw-r--r--
mod_adhoc_groups: Fix typos [codespell]
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1545
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
local rostermanager = require"core.rostermanager";
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
local jid_join = require"util.jid".join;
2852
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
     3
local jid_split = require"util.jid".split;
1545
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
local host = module.host;
2852
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
     5
local st = require "util.stanza";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
     6
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
     7
local groups = module:open_store("groups");
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
     8
local memberships = module:open_store("groups", "map");
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
     9
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    10
module:depends("adhoc");
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    11
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    12
local adhoclib = module:require "adhoc";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    13
local dataform = require"util.dataforms";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    14
local adhoc_inital_data = require "util.adhoc".new_initial_data_form;
1545
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
-- Make a *one-way* subscription. User will see when contact is online,
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
-- contact will not see when user is online.
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
local function subscribe(user, contact)
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
	local user_jid, contact_jid = jid_join(user, host), jid_join(contact, host);
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
	-- Update user's roster to say subscription request is pending...
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
	rostermanager.set_contact_pending_out(user, host, contact_jid);
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
	-- Update contact's roster to say subscription request is pending...
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
	rostermanager.set_contact_pending_in(contact, host, user_jid);
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
	-- Update contact's roster to say subscription request approved...
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
	rostermanager.subscribed(contact, host, user_jid);
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
	-- Update user's roster to say subscription request approved...
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
	rostermanager.process_inbound_subscription_approval(user, host, contact_jid);
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
1802
3ae8c81a348b mod_roster_allinall: Cleanup, remove unused variables [luacheck]
Kim Alvefur <zash@zash.se>
parents: 1545
diff changeset
    30
	-- Push updates to both rosters
1545
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
	rostermanager.roster_push(user, host, contact_jid);
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
	rostermanager.roster_push(contact, host, user_jid);
2852
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    33
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    34
	module:send(st.presence({ type = "probe", from = user_jid, to = contact_jid }));
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    35
end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    36
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    37
local create_form = dataform.new {
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    38
	title = "Create a new group";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    39
	{
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    40
		type = "hidden";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    41
		name = "FORM_TYPE";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    42
		value = "xmpp:zash.se/adhoc_groups#new";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    43
	};
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    44
	{
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    45
		type = "text-single";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    46
		name = "group";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    47
		label = "Name of group";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    48
		required = true;
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    49
	};
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    50
};
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    51
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    52
local join_form = dataform.new {
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    53
	title = "Pick the group to join";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    54
	{
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    55
		type = "hidden";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    56
		name = "FORM_TYPE";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    57
		value = "xmpp:zash.se/adhoc_groups#join";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    58
	};
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    59
	{
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    60
		type = "list-single";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    61
		name = "group";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    62
		label = "Available groups";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    63
		required = true;
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    64
	};
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    65
};
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    66
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    67
local function _(f)
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    68
	return function (fields, form_err, data)
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    69
		local ok, message = f(fields, form_err, data);
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    70
		if ok then
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    71
			return { status = "completed", info = message };
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    72
		else
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    73
			return { status = "completed", error = { message = message} };
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    74
		end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    75
	end
1545
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    76
end
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    77
2852
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    78
module:add_item("adhoc",
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    79
	adhoclib.new("Create group",
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    80
		"xmpp:zash.se/adhoc_groups#new",
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    81
		adhoc_inital_data(create_form,
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    82
			function ()
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    83
				return {};
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    84
			end,
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    85
			_(function (fields, form_err, data)
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    86
				local user = jid_split(data.from);
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    87
				if form_err then
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    88
					return false, "Problem in submitted form";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    89
				end
1545
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    90
2852
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    91
				local group, err = groups:get(fields.group);
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    92
				if group then
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    93
					if err then
2874
d8325dfb6a13 mod_adhoc_groups: Fix typos [codespell]
Kim Alvefur <zash@zash.se>
parents: 2852
diff changeset
    94
						return false, "An error occurred on the server. Please try again later.";
2852
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    95
					else
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    96
						return false, "That group already exists";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    97
					end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    98
				end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
    99
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   100
				if not groups:set(fields.group, { [user] = true }) then
2874
d8325dfb6a13 mod_adhoc_groups: Fix typos [codespell]
Kim Alvefur <zash@zash.se>
parents: 2852
diff changeset
   101
					return false, "An error occurred while creating the group";
2852
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   102
				end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   103
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   104
				return true, ("The %s group has been created"):format(fields.group);
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   105
			end)), "local_user")); -- Maybe admins only?
1545
a104a159697d mod_roster_allinall: Adds all online users to the roster of newly signed in users, for a lazy everyone-in-everyones roster setup
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   106
2852
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   107
module:add_item("adhoc",
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   108
	adhoclib.new("Join group",
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   109
		"xmpp:zash.se/adhoc_groups#join",
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   110
		adhoc_inital_data(join_form,
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   111
			function ()
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   112
				local group_list = {};
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   113
				for group in groups:users() do
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   114
					table.insert(group_list, group);
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   115
					module:log("debug", "Group: %q", group);
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   116
				end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   117
				table.sort(group_list);
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   118
				return { group = group_list };
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   119
			end,
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   120
			_(function (fields, form_err, data)
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   121
				local user = jid_split(data.from);
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   122
				if form_err then
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   123
					return false, "Problem in submitted form";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   124
				end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   125
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   126
				local group, err = groups:get(fields.group);
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   127
				if not group then
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   128
					if err then
2874
d8325dfb6a13 mod_adhoc_groups: Fix typos [codespell]
Kim Alvefur <zash@zash.se>
parents: 2852
diff changeset
   129
						return false, "An error occurred on the server. Please try again later.";
2852
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   130
					else
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   131
						return false, "No such group";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   132
					end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   133
				end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   134
				if group[data.from] then
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   135
					return false, "You are already in this group.";
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   136
				end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   137
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   138
				if not memberships:set(fields.group, user, true) then
2874
d8325dfb6a13 mod_adhoc_groups: Fix typos [codespell]
Kim Alvefur <zash@zash.se>
parents: 2852
diff changeset
   139
					return false, "An error occurred while adding you to the group";
2852
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   140
				end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   141
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   142
				for member in pairs(group) do
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   143
					if member ~= user then
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   144
						subscribe(user, member);
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   145
						subscribe(member, user);
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   146
					end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   147
				end
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   148
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   149
				return true, ("Welcome to the %s group"):format(fields.group);
232da6b1d2c1 mod_adhoc_groups: Allow users to create and join roster groups
Kim Alvefur <zash@zash.se>
parents: 2851
diff changeset
   150
			end)), "local_user"));