-
Notifications
You must be signed in to change notification settings - Fork 1
/
pollhead.rb
135 lines (128 loc) · 4.84 KB
/
pollhead.rb
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,2010 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 sucessfull
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.escapeHTML(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=\"#{columndescription}\""
ret += " id='active' " if activecolumn == columntitle
ret += ">"
ret += "<a href=\"?sort=#{CGI.escapeHTML(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.escapeHTML(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 Options (columns), you want to ask the participants of the poll. The participants will state one vote for every option you give here separately.")
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="#{description}" 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