mod_vjud/mod_vjud.lua
author Kim Alvefur <zash@zash.se>
Thu, 09 Aug 2012 19:49:50 +0200
changeset 787 cec49ee88c23
parent 742 da8f561d79b4
child 789 7e40d6680093
permissions -rw-r--r--
mod_vjud: Correctly pass current state to form (Thanks Florob)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     1
local dm_load = require "util.datamanager".load;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     2
local dm_store = require "util.datamanager".store;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     3
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     4
local usermanager = require "core.usermanager";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     5
local dataforms_new = require "util.dataforms".new;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     6
local jid_split = require "util.jid".prepped_split;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     7
local vcard = module:require "vcard";
734
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
     8
local rawget, rawset = rawget, rawset;
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
     9
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    10
local st = require "util.stanza";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    11
local template = require "util.template";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    12
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    13
local get_reply = template[[
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    14
<query xmlns="jabber:iq:search">
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    15
  <instructions>Fill in one or more fields to search for any matching Jabber users.</instructions>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    16
  <first/>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    17
  <last/>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    18
  <nick/>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    19
  <email/>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    20
</query>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    21
]].apply({});
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    22
local item_template = template[[
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    23
<item xmlns="jabber:iq:search" jid="{jid}">
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    24
  <first>{first}</first>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    25
  <last>{last}</last>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    26
  <nick>{nick}</nick>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    27
  <email>{email}</email>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    28
</item>
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    29
]];
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    30
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    31
module:add_feature("jabber:iq:search");
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    32
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    33
local opted_in;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    34
function module.load()
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    35
	opted_in = dm_load(nil, module.host, "user_index") or {};
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    36
end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    37
function module.unload()
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    38
	dm_store(nil, module.host, "user_index", opted_in);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    39
end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    40
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    41
local opt_in_layout = dataforms_new{
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    42
	title = "Search settings";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    43
	instructions = "Do you want to appear in search results?";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    44
	{
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    45
		name = "searchable",
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    46
		label = "Appear in search results?",
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    47
		type = "boolean",
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    48
	},
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    49
};
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    50
local vCard_mt = {
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    51
	__index = function(t, k)
734
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
    52
		if type(k) ~= "string" then return nil end
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    53
		for i=1,#t do
734
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
    54
			local t_i = rawget(t, i);
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
    55
			if t_i and t_i.name == k then
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
    56
				rawset(t, k, t_i);
81de1e446bfe mod_vjud: Don't break on undefined properties.
Kim Alvefur <zash@zash.se>
parents: 733
diff changeset
    57
				return t_i;
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    58
			end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    59
		end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    60
	end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    61
};
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    62
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    63
local function get_user_vcard(user)
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    64
	local vCard = dm_load(user, module.host, "vcard");
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    65
	if vCard then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    66
		vCard = st.deserialize(vCard);
732
317e142fe6f1 mod_vjud: Update util.vcard from verse
Kim Alvefur <zash@zash.se>
parents: 730
diff changeset
    67
		vCard = vcard.from_xep54(vCard);
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    68
		return setmetatable(vCard, vCard_mt);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    69
	end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    70
end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    71
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    72
local at_host = "@"..module.host;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    73
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    74
module:hook("iq/host/jabber:iq:search:query", function(event)
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    75
	local origin, stanza = event.origin, event.stanza;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    76
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    77
	if stanza.attr.type == "get" then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    78
		origin.send(st.reply(stanza):add_child(get_reply));
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    79
	else -- type == "set"
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    80
		local query = stanza.tags[1];
730
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
    81
		local first, last, nick, email =
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
    82
			(query:get_child_text"first" or false),
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
    83
			(query:get_child_text"last" or false),
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
    84
			(query:get_child_text"nick" or false),
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
    85
			(query:get_child_text"email" or false);
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
    86
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
    87
		if not ( first or last or nick or email ) then
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
    88
			origin.send(st.error_reply(stanza, "modify", "not-acceptable", "All fields were empty"));
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
    89
			return true;
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
    90
		end
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
    91
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    92
		local reply = st.reply(stanza):query("jabber:iq:search");
730
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
    93
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    94
		local username, hostname = jid_split(email);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    95
		if hostname == module.host and username and usermanager.user_exists(username, hostname) then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    96
			local vCard = get_user_vcard(username);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    97
			if vCard then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    98
				reply:add_child(item_template.apply{
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
    99
					jid = username..at_host;
733
dd3b30c0dc8a mod_vjud: Switch first and last name in results to be correct.
Kim Alvefur <zash@zash.se>
parents: 732
diff changeset
   100
					first = vCard.N and vCard.N[2] or nil;
dd3b30c0dc8a mod_vjud: Switch first and last name in results to be correct.
Kim Alvefur <zash@zash.se>
parents: 732
diff changeset
   101
					last = vCard.N and vCard.N[1] or nil;
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   102
					nick = vCard.NICKNAME and vCard.NICKNAME[1] or username;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   103
					email = vCard.EMAIL and vCard.EMAIL[1] or nil;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   104
				});
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   105
			end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   106
		else
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   107
			for username in pairs(opted_in) do
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   108
				local vCard = get_user_vcard(username);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   109
				if vCard and (
730
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
   110
				(vCard.N and vCard.N[2] == first) or
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
   111
				(vCard.N and vCard.N[1] == last) or
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
   112
				(vCard.NICKNAME and vCard.NICKNAME[1] == nick) or
274bb1a96122 mod_vjud: Missing fields should not match everyone. (Thanks Pidgin)
Kim Alvefur <zash@zash.se>
parents: 715
diff changeset
   113
				(vCard.EMAIL and vCard.EMAIL[1] == email)) then
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   114
					reply:add_child(item_template.apply{
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   115
						jid = username..at_host;
733
dd3b30c0dc8a mod_vjud: Switch first and last name in results to be correct.
Kim Alvefur <zash@zash.se>
parents: 732
diff changeset
   116
						first = vCard.N and vCard.N[2] or nil;
dd3b30c0dc8a mod_vjud: Switch first and last name in results to be correct.
Kim Alvefur <zash@zash.se>
parents: 732
diff changeset
   117
						last = vCard.N and vCard.N[1] or nil;
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   118
						nick = vCard.NICKNAME and vCard.NICKNAME[1] or username;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   119
						email = vCard.EMAIL and vCard.EMAIL[1] or nil;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   120
					});
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   121
				end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   122
			end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   123
		end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   124
		origin.send(reply);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   125
	end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   126
	return true;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   127
end);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   128
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   129
local function opt_in_handler(self, data, state)
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   130
	local username, hostname = jid_split(data.from);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   131
	if state then -- the second return value
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   132
		if data.action == "cancel" then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   133
			return { status = "canceled" };
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   134
		end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   135
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   136
		if not username or not hostname or hostname ~= module.host then
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   137
			return { status = "error", error = { type = "cancel",
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   138
				condition = "forbidden", message = "Invalid user or hostname." } };
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   139
		end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   140
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   141
		local fields = opt_in_layout:data(data.form);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   142
		opted_in[username] = fields.searchable or nil
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   143
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   144
		return { status = "completed" }
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   145
	else -- No state, send the form.
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   146
		return { status = "executing", actions  = { "complete" },
787
cec49ee88c23 mod_vjud: Correctly pass current state to form (Thanks Florob)
Kim Alvefur <zash@zash.se>
parents: 742
diff changeset
   147
			form = { layout = opt_in_layout, values = { searchable = opted_in[username] } } }, true;
715
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   148
	end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   149
end
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   150
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   151
local adhoc_new = module:require "adhoc".new;
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   152
local adhoc_vjudsetup = adhoc_new("Search settings", "vjudsetup", opt_in_handler);--, "self");-- and nil);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   153
module:depends"adhoc";
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   154
module:provides("adhoc", adhoc_vjudsetup);
b1268d3aa6ce mod_vjud: Add. Thanks waqas for the base code.
Kim Alvefur <zash@zash.se>
parents:
diff changeset
   155