liquid_feedback_frontend

annotate app/main/vote/_action/update.lua @ 1132:a97f95ab885a

Added tag translate for changeset e2ff0e88180e
author jbe
date Wed Dec 24 13:53:06 2014 +0100 (2014-12-24)
parents 701a5cf6b067
children 32cc544d5a5b
rev   line source
bsw@879 1 local cancel = param.get("cancel") and true or false
bsw@879 2 if cancel then return end
bsw@879 3
bsw/jbe@5 4 local issue = Issue:new_selector():add_where{ "id = ?", param.get("issue_id", atom.integer) }:for_share():single_object_mode():exec()
bsw/jbe@5 5
bsw@1045 6 local preview = (param.get("preview") or param.get("edit")) and true or false
bsw@879 7
bsw@281 8 if not app.session.member:has_voting_right_for_unit_id(issue.area.unit_id) then
bsw@281 9 error("access denied")
bsw@281 10 end
bsw@281 11
bsw@1045 12 local update_comment = param.get("update_comment") and true or false
bsw@879 13
bsw@964 14 if issue.state ~= "voting" and not issue.closed then
bsw@964 15 slot.put_into("error", _"Voting has not started yet.")
bsw/jbe@5 16 return false
bsw/jbe@5 17 end
bsw/jbe@5 18
bsw@1045 19 if (issue.phase_finished or issue.closed) and preview then
bsw@1045 20 return
bsw@1045 21 end
bsw@1045 22
bsw@964 23 if issue.phase_finished or issue.closed and not update_comment then
bsw@964 24 slot.put_into("error", _"This issue is already closed.")
bsw/jbe@5 25 return false
bsw/jbe@5 26 end
bsw/jbe@5 27
bsw@521 28 local direct_voter = DirectVoter:by_pk(issue.id, app.session.member_id)
bsw@521 29
bsw@521 30 if param.get("discard", atom.boolean) then
bsw@521 31 if direct_voter then
bsw@521 32 direct_voter:destroy()
bsw@521 33 end
bsw@521 34 slot.put_into("notice", _"Your vote has been discarded. Delegation rules apply if set.")
bsw@521 35 return
bsw@521 36 end
bsw@26 37
bsw@519 38 local move_up
bsw@519 39 local move_down
bsw@26 40
bsw@519 41 local tempvoting_string = param.get("scoring")
bsw@519 42
bsw@519 43 local tempvotings = {}
bsw@879 44 if not update_comment then
bsw@879 45 for match in tempvoting_string:gmatch("([^;]+)") do
bsw@879 46 for initiative_id, grade in match:gmatch("([^:;]+):([^:;]+)") do
bsw@879 47 tempvotings[tonumber(initiative_id)] = tonumber(grade)
bsw@879 48 if param.get("move_up_" .. initiative_id .. ".x", atom.integer) then
bsw@879 49 move_up = tonumber(initiative_id)
bsw@879 50 elseif param.get("move_down_" .. initiative_id .. ".x", atom.integer) then
bsw@879 51 move_down = tonumber(initiative_id)
bsw@879 52 end
bsw@519 53 end
bsw@519 54 end
bsw@519 55 end
bsw/jbe@19 56
bsw/jbe@19 57 if not move_down and not move_up then
bsw@879 58 if not preview then
bsw@879 59 if not direct_voter then
bsw@879 60 if issue.closed then
bsw@879 61 slot.put_into("error", _"This issue is already closed.")
bsw@879 62 return false
bsw@879 63 else
bsw@879 64 direct_voter = DirectVoter:new()
bsw@879 65 direct_voter.issue_id = issue.id
bsw@879 66 direct_voter.member_id = app.session.member_id
bsw@879 67 direct_voter:save()
bsw@879 68
bsw@879 69 direct_voter = DirectVoter:by_pk(issue.id, app.session.member_id)
bsw@879 70 end
bsw@879 71 end
bsw@879 72
bsw@1045 73 local formatting_engine
bsw@1045 74 if config.enforce_formatting_engine then
bsw@1045 75 formatting_engine = config.enforce_formatting_engine
bsw@1045 76 else
bsw@1045 77 formatting_engine = param.get("formatting_engine")
bsw@1045 78 local formatting_engine_valid = false
bsw@1045 79 for i, fe in ipairs(config.formatting_engines) do
bsw@1045 80 if formatting_engine == fe.id then
bsw@1045 81 formatting_engine_valid = true
bsw@1045 82 end
bsw@1045 83 end
bsw@1045 84 if not formatting_engine_valid then
bsw@1045 85 error("invalid formatting engine!")
bsw@1045 86 end
bsw@1045 87 end
bsw@1045 88
bsw@925 89 local comment = param.get("comment")
bsw@879 90
bsw@879 91 if comment ~= direct_voter.comment then
bsw@879 92 if #comment > 0 then
bsw@879 93 direct_voter.formatting_engine = formatting_engine
bsw@879 94 direct_voter.comment = comment
bsw@880 95 if issue.closed then
bsw@880 96 direct_voter.comment_changed = 'now'
bsw@880 97 end
bsw@879 98 direct_voter:render_content(true)
bsw@879 99 else
bsw@879 100 direct_voter.formatting_engine = null
bsw@879 101 direct_voter.comment = null
bsw@880 102 if issue.closed then
bsw@880 103 direct_voter.comment_changed = 'now'
bsw@880 104 end
bsw@879 105 end
bsw@879 106 end
bsw@879 107 direct_voter:save()
bsw@879 108
bsw/jbe@19 109 end
bsw/jbe@19 110
bsw@879 111 if not update_comment then
bsw@879 112 local scoring = param.get("scoring")
bsw/jbe@5 113
bsw@879 114 for initiative_id, grade in scoring:gmatch("([^:;]+):([^:;]+)") do
bsw@879 115 local initiative_id = tonumber(initiative_id)
bsw@879 116 local grade = tonumber(grade)
bsw@879 117 local initiative = Initiative:by_id(initiative_id)
bsw@879 118 if initiative.issue.id ~= issue.id then
bsw@879 119 error("initiative from wrong issue")
bsw@879 120 end
bsw@879 121 if not preview and not issue.closed then
bsw@879 122 local vote = Vote:by_pk(initiative_id, app.session.member.id)
bsw@879 123 if not vote then
bsw@879 124 vote = Vote:new()
bsw@879 125 vote.issue_id = issue.id
bsw@879 126 vote.initiative_id = initiative.id
bsw@879 127 vote.member_id = app.session.member.id
bsw@879 128 end
bsw@879 129 vote.grade = grade
bsw@879 130 vote:save()
bsw@879 131 end
bsw/jbe@19 132 end
bsw@879 133 end
bsw@879 134
bsw@879 135 if not preview and not cancel then
bsw@879 136 request.redirect{
bsw@879 137 module = "issue",
bsw@879 138 view = "show",
bsw@879 139 id = issue.id
bsw@879 140 }
bsw/jbe@19 141 end
bsw/jbe@19 142
bsw/jbe@19 143 else
bsw/jbe@19 144
bsw/jbe@19 145 local current_initiative_id = move_up or move_down
bsw/jbe@5 146
bsw/jbe@19 147 local current_grade = tempvotings[current_initiative_id] or 0
bsw/jbe@19 148 local is_alone = true
bsw/jbe@19 149 if current_grade == 0 then
bsw/jbe@19 150 is_alone = false
bsw/jbe@19 151 else
bsw/jbe@19 152 for initiative_id, grade in pairs(tempvotings) do
bsw/jbe@19 153 if current_initiative_id ~= initiative_id and grade == current_grade then
bsw/jbe@19 154 is_alone = false
bsw/jbe@19 155 break
bsw/jbe@19 156 end
bsw/jbe@19 157 end
bsw/jbe@19 158 end
bsw/jbe@5 159
bsw/jbe@19 160 if move_up and current_grade >= 0 and is_alone then
bsw/jbe@19 161 for initiative_id, grade in pairs(tempvotings) do
bsw/jbe@19 162 if grade > current_grade then
bsw/jbe@19 163 tempvotings[initiative_id] = grade - 1
bsw/jbe@19 164 end
bsw/jbe@19 165 end
bsw/jbe@5 166
bsw/jbe@19 167 elseif move_up and current_grade >= 0 and not is_alone then
bsw/jbe@19 168 for initiative_id, grade in pairs(tempvotings) do
bsw/jbe@19 169 if grade > current_grade then
bsw/jbe@19 170 tempvotings[initiative_id] = grade + 1
bsw/jbe@19 171 end
bsw/jbe@19 172 end
bsw/jbe@19 173 tempvotings[current_initiative_id] = current_grade + 1
bsw/jbe@19 174
bsw/jbe@19 175 elseif move_up and current_grade < 0 and is_alone then
bsw/jbe@19 176 tempvotings[current_initiative_id] = current_grade + 1
bsw/jbe@19 177 for initiative_id, grade in pairs(tempvotings) do
bsw/jbe@19 178 if grade < current_grade then
bsw/jbe@19 179 tempvotings[initiative_id] = grade + 1
bsw/jbe@19 180 end
bsw/jbe@19 181 end
bsw/jbe@19 182
bsw/jbe@19 183 elseif move_up and current_grade < 0 and not is_alone then
bsw/jbe@19 184 for initiative_id, grade in pairs(tempvotings) do
bsw/jbe@19 185 if grade <= current_grade then
bsw/jbe@19 186 tempvotings[initiative_id] = grade - 1
bsw/jbe@19 187 end
bsw/jbe@19 188 end
bsw/jbe@19 189 tempvotings[current_initiative_id] = current_grade
bsw/jbe@19 190
bsw/jbe@19 191 elseif move_down and current_grade <= 0 and is_alone then
bsw/jbe@19 192 for initiative_id, grade in pairs(tempvotings) do
bsw/jbe@19 193 if grade < current_grade then
bsw/jbe@19 194 tempvotings[initiative_id] = grade + 1
bsw/jbe@19 195 end
bsw/jbe@19 196 end
bsw/jbe@19 197
bsw/jbe@19 198 elseif move_down and current_grade <= 0 and not is_alone then
bsw/jbe@19 199 for initiative_id, grade in pairs(tempvotings) do
bsw/jbe@19 200 if grade < current_grade then
bsw/jbe@19 201 tempvotings[initiative_id] = grade - 1
bsw/jbe@19 202 end
bsw/jbe@19 203 end
bsw/jbe@19 204 tempvotings[current_initiative_id] = current_grade - 1
bsw/jbe@19 205
bsw/jbe@19 206 elseif move_down and current_grade > 0 and is_alone then
bsw/jbe@19 207 tempvotings[current_initiative_id] = current_grade - 1
bsw/jbe@19 208 for initiative_id, grade in pairs(tempvotings) do
bsw/jbe@19 209 if grade > current_grade then
bsw/jbe@19 210 tempvotings[initiative_id] = grade - 1
bsw/jbe@19 211 end
bsw/jbe@19 212 end
bsw/jbe@19 213
bsw/jbe@19 214 elseif move_down and current_grade > 0 and not is_alone then
bsw/jbe@19 215 for initiative_id, grade in pairs(tempvotings) do
bsw/jbe@19 216 if grade >= current_grade then
bsw/jbe@19 217 tempvotings[initiative_id] = grade + 1
bsw/jbe@19 218 end
bsw/jbe@19 219 end
bsw/jbe@19 220 tempvotings[current_initiative_id] = current_grade
bsw/jbe@19 221
bsw/jbe@5 222 end
bsw/jbe@19 223
bsw/jbe@19 224 local tempvotings_list = {}
bsw/jbe@19 225 for key, val in pairs(tempvotings) do
bsw/jbe@19 226 tempvotings_list[#tempvotings_list+1] = tostring(key) .. ":" .. tostring(val)
bsw/jbe@5 227 end
bsw/jbe@19 228
bsw/jbe@19 229 tempvoting_string = table.concat(tempvotings_list, ";")
bsw/jbe@19 230
bsw/jbe@19 231 request.redirect{
bsw/jbe@19 232 module = "vote",
bsw/jbe@19 233 view = "list",
bsw/jbe@19 234 params = {
bsw/jbe@19 235 issue_id = issue.id,
bsw/jbe@19 236 scoring = tempvoting_string
bsw/jbe@19 237 }
bsw/jbe@19 238 }
bsw/jbe@19 239
bsw/jbe@5 240 end

Impressum / About Us