examples/x_data.lua
author Myhailo Danylenko <isbear@ukrpost.net>
Sun, 22 Mar 2009 19:46:26 +0200
changeset 53 2162188b20cf
parent 49 95f3bf77c598
child 60 b9fd051c0d7c
permissions -rw-r--r--
Fixes to form handling
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     1
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     2
-- DATA FORMS (XEP-0004)
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     3
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     4
-- library
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     5
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     6
require 'lm'
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     7
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     8
-- public
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
     9
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    10
x_data = { }
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    11
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    12
-- iq_register should encapsulate x_data in results, so, looks like we need callbacks again?
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    13
-- though, it can redefine method... but it is not too pretty. for now it will be so.
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    14
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    15
-- result needs separate routine? (reported & item's)
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    16
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    17
function x_data.format ( form, root )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    18
	root.x = { xmlns = 'jabber:x:data', type = form.type }
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    19
	local fields = { }
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    20
	for i, field in ipairs ( form ) do
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    21
		if field.type ~= 'fixed' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    22
			local value
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    23
			if field.type == 'list-multi' or field.type == 'text-multi' or field.type == 'jid-multi' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    24
				value = { }
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    25
				for j, v in ipairs ( field.value ) do
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    26
					table.insert ( value, { v } )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    27
				end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    28
			else
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    29
				value = { field.value }
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    30
			end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    31
			table.insert ( fields, { type = field.type, var = field.var, value = value } )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    32
		end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    33
	end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    34
	root.x.field = fields
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    35
	return root
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    36
end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    37
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    38
function x_data.parse ( x )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    39
	local f = { xmlns = 'jabber:x:data', type = x:attribute ( 'type' ) }
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    40
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    41
	local title = x:child ( 'title' )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    42
	if title then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    43
		f.title = title:value ()
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    44
	end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    45
	local instructions = x:child ( 'instructions' )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    46
	if instructions then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    47
		f.instructions = instructions:value ()
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    48
	end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    49
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    50
	local field = x:children ()
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    51
	while field do
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    52
		if field:name () == 'field' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    53
			local ftype = field:attribute ( 'type' ) or 'text-single'
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    54
			local r = {
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    55
				type  = ftype,
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    56
				var   = field:attribute ( 'var' ), -- may be absent on 'fixed' fields
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    57
				label = field:attribute ( 'label' ),
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    58
			}
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    59
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    60
			local desc = field:child ( 'desc' )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    61
			if desc then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    62
				r.decs = desc:value ()
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    63
			end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    64
			if field:child ( 'required' ) then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    65
				r.required = true
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    66
			end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    67
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    68
			if ftype == 'jid-multi' or ftype == 'list-multi' or ftype == 'text-multi' or ftype == 'list-single' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    69
				local values  = { }
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    70
				local options = { }
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    71
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    72
				local item = field:children ()
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    73
				while item do
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    74
					local name = item:name ()
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    75
					if name == 'value' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    76
						table.insert ( values, item:value () )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    77
					elseif name == 'option' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    78
						table.insert ( options, item:child( 'value' ):value () ) -- FIXME labels
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    79
					end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    80
					item = item:next ()
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    81
				end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    82
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    83
				if ftype == 'list-single' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    84
					local value = field:child ( 'value' )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    85
					if value then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    86
						r.value = value:value ()
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    87
					end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    88
				else
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    89
					r.value = values
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    90
				end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    91
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    92
				if ftype == 'list-multi' or ftype == 'list-single' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    93
					r.options = options
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    94
				end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    95
			else
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    96
				local value = field:child ( 'value' )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    97
				if value then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    98
					r.value = value:value ()
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
    99
				end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   100
			end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   101
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   102
			table.insert ( f, r )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   103
		end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   104
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   105
		field = field:next ()
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   106
	end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   107
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   108
	f.format = x_data.format
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   109
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   110
	return f
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   111
end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   112
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   113
function x_data.set ( f, name, value )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   114
	for i, field in ipairs ( f ) do
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   115
		if field.var == name then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   116
			if field.type == 'jid-multi' or field.type == 'list-multi' or field.type == 'text-multi' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   117
				if value == nil then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   118
					field.value = { }
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   119
				else
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   120
					table.insert ( field.value, value )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   121
				end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   122
			else
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   123
				field.value = value
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   124
			end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   125
		end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   126
	end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   127
end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   128
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   129
-- mcabber
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   130
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   131
local form_cid = main.add_category { 'del', 'send' }
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   132
forms = { }
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   133
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   134
function insert_form ( form )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   135
	table.insert ( forms, form )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   136
	main.add_completion ( form_cid, tostring(#forms) )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   137
	return #forms
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   138
end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   139
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   140
main.command ( 'form',
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   141
	function ( args )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   142
		local id, action = tonumber (args[1]), args[2]
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   143
		if forms[id] then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   144
			local form = forms[id].form
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   145
			if action == 'send' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   146
				forms[id].submit ( form )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   147
			elseif action == 'reject' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   148
				forms[id].reject ( form )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   149
			elseif action == 'del' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   150
				main.del_completion ( form_cid, id )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   151
				forms[id] = nil
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   152
			elseif action == 'set' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   153
				x_data.set ( form, args[3], args[4] )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   154
			elseif action then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   155
				x_data.set ( form, action, args[3] )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   156
			else
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   157
				local desc = 'Form ' .. id
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   158
				local fields = 'Fields:'
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   159
				for index, field in pairs ( form ) do
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   160
					if type(index) == 'number' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   161
						fields = fields .. '\n - '
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   162
						if field.required then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   163
							fields = fields .. '* '
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   164
						end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   165
						if field.label then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   166
							fields = fields .. field.label .. ' (' .. ( field.var or '' ) .. ')'
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   167
						else
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   168
							fields = fields .. ( field.var or '<no name>' )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   169
						end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   170
						fields = fields .. ' [' .. field.type .. ']'
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   171
						if field.desc then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   172
							fields = fields .. ': ' .. desc
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   173
						end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   174
						if field.options then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   175
							fields = fields .. '\n   Options:'
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   176
							for i, opt in ipairs ( field.options ) do
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   177
								fields = fields .. ' ' .. opt
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   178
							end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   179
						end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   180
						if field.type == 'list-multi' or field.type == 'text-multi' or field.type == 'jid-multi' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   181
							fields = fields .. '\n   Values: '
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   182
							for vin, value in ipairs ( field.value ) do
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   183
								fields = fields .. '\n    * ' .. value
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   184
							end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   185
						else
53
2162188b20cf Fixes to form handling
Myhailo Danylenko <isbear@ukrpost.net>
parents: 49
diff changeset
   186
							fields = fields .. '\n   Value: ' .. ( field.value or '' )
49
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   187
						end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   188
					else
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   189
						if type(field) ~= 'function' then -- skip any methods
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   190
							desc = desc .. '\n - ' .. index .. ': ' .. field
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   191
						end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   192
					end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   193
				end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   194
				print ( desc .. '\n' .. fields )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   195
			end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   196
		else
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   197
			local text = ''
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   198
			for id, form in pairs ( forms ) do
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   199
				text = text .. '\n - ' .. id .. ' ' .. ( form.form.title or 'Untitled' ) .. ' [' .. form.form.xmlns .. ', ' .. form.form.type .. ']'
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   200
			end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   201
			if text ~= '' then
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   202
				print ( 'Forms list:' .. text )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   203
			else
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   204
				print ( 'No forms' )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   205
			end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   206
		end
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   207
	end, true, form_cid )
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   208
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   209
commands_help['form'] = "[del form_id | send form_id | form_id [field_name {clear | [set] value}]\n\nWith bare form id prints info on that form.\nWith field name sets or clears field value. Set subcommand is optional, just to allow values, starting with 'clear'.\nWithout arguments prints form list."
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   210
95f3bf77c598 Forms in modular way
Myhailo Danylenko <isbear@ukrpost.net>
parents:
diff changeset
   211
-- vim: se ts=4: --