aboutsummaryrefslogtreecommitdiff
path: root/pollhead.rb
blob: 31b21e6de7d6e4e6fa30892aaa30d5aedbff810e (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
############################################################################
# Copyright 2009-2019 Benjamin Kellermann                                  #
#                                                                          #
# This file is part of Dudle.                                              #
#                                                                          #
# Dudle is free software: you can redistribute it and/or modify it under   #
# the terms of the GNU Affero General Public License as published by       #
# the Free Software Foundation, either version 3 of the License, or        #
# (at your option) any later version.                                      #
#                                                                          #
# Dudle is distributed in the hope that it will be useful, but WITHOUT ANY #
# WARRANTY; without even the implied warranty of MERCHANTABILITY or        #
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public     #
# License for more details.                                                #
#                                                                          #
# You should have received a copy of the GNU Affero General Public License #
# along with dudle.  If not, see <http://www.gnu.org/licenses/>.           #
############################################################################

class PollHead
	def initialize
		@data = {}
	end
	def col_size
		@data.size
	end

	# returns a sorted array of all columns
	#	column should be the internal representation
	#	column.to_s should deliver humanreadable form
	def columns
		@data.keys.sort
	end

	# column is in human readable form
	# returns true if deletion successful
	def delete_column(column)
		@data.delete(column) != nil
	end

	# add new column if columnid = ""
	# returns parsed title or false if parsed title == ""
	def edit_column(column, newtitle, cgi)
		delete_column(column) if column != ""
		parsedtitle = newtitle.strip

		if parsedtitle != ""
			@data[parsedtitle] = cgi["columndescription"].strip
			return parsedtitle
		else
			return false
		end
	end

	def to_html(scols, showeditbuttons = false,activecolumn = nil)
		def sortsymb(scols,col)
			return <<SORTSYMBOL
<span class='sortsymb'> #{scols.include?(col) ? SORT : NOSORT}</span>
SORTSYMBOL
		end
		ret = "<tr>"
		ret += "<th colspan='2'><a href='?sort=name'>" + _("Name") + " #{sortsymb(scols,"name")}</a></th>\n" unless showeditbuttons
		@data.sort.each{|columntitle,columndescription|
			ret += "<th title=\"#{CGI.escapeHTML(columndescription)}\""
			ret += " id='active' " if activecolumn == columntitle
			ret += ">"
			ret += "<a href=\"?sort=#{CGI.escape(columntitle)}\">" unless showeditbuttons
			ret += "#{CGI.escapeHTML(columntitle)}"
			ret += "#{sortsymb(scols,columntitle)}</a>" unless showeditbuttons
			if showeditbuttons
				editstr = _("Edit option")
				deletestr = _("Delete option")
				ret += <<EDITDELETE
<form method='post' action=''>
	<div class='editdelete'>
			<a class='editcolumn' href="?editcolumn=#{CGI.escape(columntitle)}" title="#{editstr}">
				#{EDIT}
			</a>|
		<input style='padding:0;margin:0' title='#{deletestr}' class='delete' type='submit' value='#{DELETE}' />
		<input type='hidden' name='deletecolumn' value="#{CGI.escapeHTML(columntitle)}" />
	</div>
</form>
EDITDELETE
			end
			ret += "</th>"
		}
		ret += "<th><a href='?'>" + _("Last edit") + " #{sortsymb(scols,"timestamp")}</a></th>\n" unless showeditbuttons
		ret += "</tr>\n"
		ret
	end

	def edit_column_htmlform(activecolumn, revision)
		if activecolumn != ""
			title = activecolumn
			description = @data[title]
			title = CGI.escapeHTML(title)
			hiddeninput = "<input type='hidden' name='columnid' value=\"#{title}\" />"
		end
		columntitlestr = _("Option")
		descriptionstr = _("Description (optional)")
		addeditstr = _("Add/Edit option")
		previewstr = _("Preview")
		hint = _("Enter all the options (columns) which you want the participants of the poll to choose among. For each option you give here, the participants will choose a vote.")
		ret = <<END
<form method='post' action='' accept-charset='utf-8'>
	<div class='textcolumn'>#{hint}</div>
	<table class='settingstable'>
		<tr>
			<td class='label'><label for='columntitle'>#{columntitlestr}:</label></td>
			<td><input id='columntitle' type='text' value="#{title}" name='new_columnname' /></td>
		</tr><tr>
			<td class='label'><label for='columndescription'>#{descriptionstr}:</label></td>
			<td><input id='columndescription' type='text' value="#{CGI.escapeHTML(description.to_s)}" name='columndescription' /></td>
		</tr><tr>
			<td></td>
			<td>
				<input type='hidden' name='undo_revision' value='#{revision}' />
				#{hiddeninput}
				<input type='submit' value='#{addeditstr}' />
			</td>
		</tr>
	</table>
</form>
END
		if col_size > 0
			ret += <<END
<h2>#{previewstr}</h2>
<table>
#{to_html([],true,activecolumn)}
</table>
END
		end
		ret
	end
end