summaryrefslogtreecommitdiffstats
path: root/lib/viewfunctions.lua
blob: c7aa53f07d7d15101691a86b3d418afe8be263af (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139

function displayinfo(myform,tags,viewtype)
	for k,v in pairs(tags) do 
		if (myform[v]) and (myform[v]["value"]) then
			local val = myform[v] 
			io.write("\n\t<DT")
			if (val.errtxt) then 
				val.class = "error"
				io.write(" class='error'")
			end
			io.write(">" .. val.label .. "</DT>")
			io.write("\n\t\t<DD>")
			if (viewtype == "viewonly") then
				if (val.value == "") and (val.errtxt == nil) and ((val.descr) and (val.descr == "")) then val.value = "&nbsp;" end
				io.write(val.value)
			elseif (val.type == "radio") and (type(val.option) == "table") and (#val.option > 0) then
				io.write("<span style='display:inline' class='" .. ( val.class or "") .. "'>")
				for k1,v1 in pairs(val.option) do
					io.write(tostring(v1.label) .. ":")
					io.write("<input style='margin-right:20px;margin-left:5px;' type='radio' class='" .. ( val.class or "") .. "' name='" .. val.name .. "'")
					if (tostring(val.value) == tostring(v1.value)) then io.write(" checked='yes'") end
					io.write(" value='" .. v1.value .. "'>")
				end
				io.write("</input></span>")
			else
				io.write(html.form[val.type](val))
			end
			if (val.descr) and (#val.descr > 0) then io.write("\n\t\t<P CLASS='descr'>" .. string.gsub(val.descr, "\n", "<BR>") .. "</P>") end
			if (val.errtxt) then io.write("\n\t\t<P CLASS='error'>" .. string.gsub(val.errtxt, "\n", "<BR>") .. "</P>") end
			io.write("\n\t\t</DD>\n")
		end
	end
end

function displaymanagement (myform,tags)
	local descriptions, errors
	for k,v in pairs(tags) do
		if (myform[v]) then
			if (myform[v]['descr']) and (#myform[v]['descr'] > 0) then 
				descriptions = (descriptions or "") .. myform[v]['descr']
			end
			if (myform[v]['errtxt']) and (#myform[v]['errtxt'] > 0) then 
				errors = (errors or "") .. myform[v]['errtxt']
			end
		end
	end

	if (myform) and (myform[tags[1]]) then
		io.write('<dt>' .. (myform[tags[1]]["label"] or myform[tags[1]]["name"]) .. '</dt>')
		io.write('<dd>')
		--Show buttons
		for k,v in pairs(tags) do
			if (myform[v]) then
				io.write(html.form[myform[v].type](myform[v]))
			end
		end
		if (descriptions) and (#descriptions > 0) then 
			io.write("\n\t\t<P CLASS='descr'>" .. string.gsub(descriptions, "\n", "<BR>") .. "</P>")
		end
		if (errors) and (#errors > 0) then 
			io.write("\n\t\t<P CLASS='error'>" .. string.gsub(errors, "\n", "<BR>") .. "</P>") 
		end
		io.write('</dd>')

		-- Display the result of previous action
		if (myform) and (myform['actionresult']) then
			if (myform['actionresult']['errtxt']) and (#myform['actionresult']['errtxt'] > 0) then
				io.write('<dt class="error">' .. myform['actionresult']['label'] .. '</dt>')
				io.write('<dd><pre class="error">' .. (myform['actionresult']['errtxt'] or "") .. '</pre></dd>')
			elseif (myform['actionresult']['descr']) and (#myform['actionresult']['descr'] > 0) then
				io.write('<dt>' .. myform['actionresult']['label'] .. '</dt>')
				io.write('<dd><pre>' .. (myform['actionresult']['descr'] or "") .. '</pre></dd>')
			end
		end
	end
end

function displayitem(myitem, viewtype)
	io.write("<DT")
	if myitem.errtxt then 
		myitem.class = "error"
		io.write(" class='error'")
	end
	io.write(">" .. myitem.label .. "</DT>\n")
	io.write("<DD>")
	if (viewtype == "viewonly") then
		myitem.disabled = "true"
	end
	if myitem.type == "multi" then
		-- FIXME multiple select doesn't work in haserl, so use series of checkboxes
		--myitem.type = "select"
		--myitem.multiple = "true"
		local tempname = myitem.name
		local tempval = myitem.value
		local reverseval = {}
		for x,val in ipairs(tempval) do
			reverseval[val] = x
		end
		for x,val in ipairs(myitem.option) do
			myitem.value = val
			myitem.checked = reverseval[val]
			myitem.name = tempname .. "." .. val
			io.write(html.form.checkbox(myitem) .. val .. "<br>\n")
		end
		myitem.name = tempname
		myitem.value = tempval
	else
		io.write(html.form[myitem.type](myitem) .. "\n")
	end
	if myitem.descr then io.write("<P CLASS='descr'>" .. string.gsub(myitem.descr, "\n", "<BR>") .. "</P>\n") end
	if myitem.errtxt then io.write("<P CLASS='error'>" .. string.gsub(myitem.errtxt, "\n", "<BR>") .. "</P>\n") end
	io.write("</DD>\n")
end

function displayform(myform, order)
	if myform.descr then io.write("<P CLASS='descr'>" .. string.gsub(myform.descr, "\n", "<BR>") .. "</P>\n") end
	if myform.errtxt then io.write("<P CLASS='error'>" .. string.gsub(myform.errtxt, "\n", "<BR>") .. "</P>\n") end
	io.write('<form action="' .. myform.action .. '" method="POST">\n')
	io.write('<DL>\n')
	local reverseorder= {}
	if order then
		for x,name in ipairs(order) do
			reverseorder[name] = x
			if myform.value[name] then
				myform.value[name].name = name
				displayitem(myform.value[name])
			end
		end
	end
	for name,item in pairs(myform.value) do
		if nil == reverseorder[name] then
			item.name = name
			displayitem(item)
		end
	end
	io.write('<DT><input class="submit" type="submit"  value="' .. myform.submit .. '"></DT>\n')
	io.write('</DL>\n')
	io.write('</FORM>')
end