liquid_feedback_frontend
annotate app/main/vote/_action/update.lua @ 160:cc7650c7053f
better title for draft/show
add source view mode into show draft fixes bug #298
add source view mode into show draft fixes bug #298
author | Daniel Poelzleithner <poelzi@poelzi.org> |
---|---|
date | Sat Oct 09 04:25:11 2010 +0200 (2010-10-09) |
parents | 3036f2732b83 |
children | ec86db506312 |
rev | line source |
---|---|
bsw/jbe@5 | 1 local issue = Issue:new_selector():add_where{ "id = ?", param.get("issue_id", atom.integer) }:for_share():single_object_mode():exec() |
bsw/jbe@5 | 2 |
bsw/jbe@5 | 3 if issue.closed then |
bsw/jbe@5 | 4 slot.put_into("error", _"This issue is already closed.") |
bsw/jbe@5 | 5 return false |
bsw/jbe@5 | 6 end |
bsw/jbe@5 | 7 |
bsw/jbe@5 | 8 if issue.state ~= "voting" then |
bsw/jbe@5 | 9 slot.put_into("error", _"Voting has not started yet.") |
bsw/jbe@5 | 10 return false |
bsw/jbe@5 | 11 end |
bsw/jbe@5 | 12 |
bsw@26 | 13 |
bsw@26 | 14 |
bsw/jbe@19 | 15 local move_up = param.get("move_up", atom.integer) |
bsw/jbe@19 | 16 local move_down = param.get("move_down", atom.integer) |
bsw/jbe@19 | 17 |
bsw/jbe@19 | 18 if not move_down and not move_up then |
bsw/jbe@19 | 19 local direct_voter = DirectVoter:by_pk(issue.id, app.session.member_id) |
bsw/jbe@19 | 20 |
bsw@26 | 21 if param.get("discard", atom.boolean) then |
bsw@26 | 22 if direct_voter then |
bsw@26 | 23 direct_voter:destroy() |
bsw@26 | 24 end |
bsw@26 | 25 slot.put_into("notice", _"Your vote has been discarded. Delegation rules apply if set.") |
bsw@26 | 26 return |
bsw@26 | 27 end |
bsw@26 | 28 |
bsw/jbe@19 | 29 if not direct_voter then |
bsw/jbe@19 | 30 direct_voter = DirectVoter:new() |
bsw/jbe@19 | 31 direct_voter.issue_id = issue.id |
bsw/jbe@19 | 32 direct_voter.member_id = app.session.member_id |
bsw/jbe@19 | 33 end |
bsw/jbe@19 | 34 |
bsw/jbe@19 | 35 direct_voter.autoreject = false |
bsw/jbe@19 | 36 direct_voter:save() |
bsw/jbe@19 | 37 |
bsw/jbe@19 | 38 local scoring = param.get("scoring") |
bsw/jbe@5 | 39 |
bsw/jbe@19 | 40 for initiative_id, grade in scoring:gmatch("([^:;]+):([^:;]+)") do |
bsw/jbe@19 | 41 local initiative_id = tonumber(initiative_id) |
bsw/jbe@19 | 42 local grade = tonumber(grade) |
bsw/jbe@19 | 43 local initiative = Initiative:by_id(initiative_id) |
bsw/jbe@19 | 44 if initiative.issue.id ~= issue.id then |
bsw/jbe@19 | 45 error("initiative from wrong issue") |
bsw/jbe@19 | 46 end |
bsw/jbe@19 | 47 local vote = Vote:by_pk(initiative_id, app.session.member.id) |
bsw/jbe@19 | 48 if not vote then |
bsw/jbe@19 | 49 vote = Vote:new() |
bsw/jbe@19 | 50 vote.issue_id = issue.id |
bsw/jbe@19 | 51 vote.initiative_id = initiative.id |
bsw/jbe@19 | 52 vote.member_id = app.session.member.id |
bsw/jbe@19 | 53 end |
bsw/jbe@19 | 54 vote.grade = grade |
bsw/jbe@19 | 55 vote:save() |
bsw/jbe@19 | 56 end |
bsw/jbe@19 | 57 |
bsw/jbe@19 | 58 else |
bsw/jbe@19 | 59 |
bsw/jbe@19 | 60 local tempvoting_string = param.get("scoring") |
bsw/jbe@5 | 61 |
bsw/jbe@19 | 62 local tempvotings = {} |
bsw/jbe@19 | 63 for match in tempvoting_string:gmatch("([^;]+)") do |
bsw/jbe@19 | 64 for initiative_id, grade in match:gmatch("([^:;]+):([^:;]+)") do |
bsw/jbe@19 | 65 tempvotings[tonumber(initiative_id)] = tonumber(grade) |
bsw/jbe@19 | 66 end |
bsw/jbe@19 | 67 end |
bsw/jbe@19 | 68 |
bsw/jbe@19 | 69 local current_initiative_id = move_up or move_down |
bsw/jbe@5 | 70 |
bsw/jbe@19 | 71 local current_grade = tempvotings[current_initiative_id] or 0 |
bsw/jbe@19 | 72 local is_alone = true |
bsw/jbe@19 | 73 if current_grade == 0 then |
bsw/jbe@19 | 74 is_alone = false |
bsw/jbe@19 | 75 else |
bsw/jbe@19 | 76 for initiative_id, grade in pairs(tempvotings) do |
bsw/jbe@19 | 77 if current_initiative_id ~= initiative_id and grade == current_grade then |
bsw/jbe@19 | 78 is_alone = false |
bsw/jbe@19 | 79 break |
bsw/jbe@19 | 80 end |
bsw/jbe@19 | 81 end |
bsw/jbe@19 | 82 end |
bsw/jbe@5 | 83 |
bsw/jbe@19 | 84 if move_up and current_grade >= 0 and is_alone then |
bsw/jbe@19 | 85 for initiative_id, grade in pairs(tempvotings) do |
bsw/jbe@19 | 86 if grade > current_grade then |
bsw/jbe@19 | 87 tempvotings[initiative_id] = grade - 1 |
bsw/jbe@19 | 88 end |
bsw/jbe@19 | 89 end |
bsw/jbe@5 | 90 |
bsw/jbe@19 | 91 elseif move_up and current_grade >= 0 and not is_alone then |
bsw/jbe@19 | 92 for initiative_id, grade in pairs(tempvotings) do |
bsw/jbe@19 | 93 if grade > current_grade then |
bsw/jbe@19 | 94 tempvotings[initiative_id] = grade + 1 |
bsw/jbe@19 | 95 end |
bsw/jbe@19 | 96 end |
bsw/jbe@19 | 97 tempvotings[current_initiative_id] = current_grade + 1 |
bsw/jbe@19 | 98 |
bsw/jbe@19 | 99 elseif move_up and current_grade < 0 and is_alone then |
bsw/jbe@19 | 100 tempvotings[current_initiative_id] = current_grade + 1 |
bsw/jbe@19 | 101 for initiative_id, grade in pairs(tempvotings) do |
bsw/jbe@19 | 102 if grade < current_grade then |
bsw/jbe@19 | 103 tempvotings[initiative_id] = grade + 1 |
bsw/jbe@19 | 104 end |
bsw/jbe@19 | 105 end |
bsw/jbe@19 | 106 |
bsw/jbe@19 | 107 elseif move_up and current_grade < 0 and not is_alone then |
bsw/jbe@19 | 108 for initiative_id, grade in pairs(tempvotings) do |
bsw/jbe@19 | 109 if grade <= current_grade then |
bsw/jbe@19 | 110 tempvotings[initiative_id] = grade - 1 |
bsw/jbe@19 | 111 end |
bsw/jbe@19 | 112 end |
bsw/jbe@19 | 113 tempvotings[current_initiative_id] = current_grade |
bsw/jbe@19 | 114 |
bsw/jbe@19 | 115 elseif move_down and current_grade <= 0 and is_alone then |
bsw/jbe@19 | 116 for initiative_id, grade in pairs(tempvotings) do |
bsw/jbe@19 | 117 if grade < current_grade then |
bsw/jbe@19 | 118 tempvotings[initiative_id] = grade + 1 |
bsw/jbe@19 | 119 end |
bsw/jbe@19 | 120 end |
bsw/jbe@19 | 121 |
bsw/jbe@19 | 122 elseif move_down and current_grade <= 0 and not is_alone then |
bsw/jbe@19 | 123 for initiative_id, grade in pairs(tempvotings) do |
bsw/jbe@19 | 124 if grade < current_grade then |
bsw/jbe@19 | 125 tempvotings[initiative_id] = grade - 1 |
bsw/jbe@19 | 126 end |
bsw/jbe@19 | 127 end |
bsw/jbe@19 | 128 tempvotings[current_initiative_id] = current_grade - 1 |
bsw/jbe@19 | 129 |
bsw/jbe@19 | 130 elseif move_down and current_grade > 0 and is_alone then |
bsw/jbe@19 | 131 tempvotings[current_initiative_id] = current_grade - 1 |
bsw/jbe@19 | 132 for initiative_id, grade in pairs(tempvotings) do |
bsw/jbe@19 | 133 if grade > current_grade then |
bsw/jbe@19 | 134 tempvotings[initiative_id] = grade - 1 |
bsw/jbe@19 | 135 end |
bsw/jbe@19 | 136 end |
bsw/jbe@19 | 137 |
bsw/jbe@19 | 138 elseif move_down and current_grade > 0 and not is_alone then |
bsw/jbe@19 | 139 for initiative_id, grade in pairs(tempvotings) do |
bsw/jbe@19 | 140 if grade >= current_grade then |
bsw/jbe@19 | 141 tempvotings[initiative_id] = grade + 1 |
bsw/jbe@19 | 142 end |
bsw/jbe@19 | 143 end |
bsw/jbe@19 | 144 tempvotings[current_initiative_id] = current_grade |
bsw/jbe@19 | 145 |
bsw/jbe@5 | 146 end |
bsw/jbe@19 | 147 |
bsw/jbe@19 | 148 local tempvotings_list = {} |
bsw/jbe@19 | 149 for key, val in pairs(tempvotings) do |
bsw/jbe@19 | 150 tempvotings_list[#tempvotings_list+1] = tostring(key) .. ":" .. tostring(val) |
bsw/jbe@5 | 151 end |
bsw/jbe@19 | 152 |
bsw/jbe@19 | 153 tempvoting_string = table.concat(tempvotings_list, ";") |
bsw/jbe@19 | 154 |
bsw/jbe@19 | 155 request.redirect{ |
bsw/jbe@19 | 156 module = "vote", |
bsw/jbe@19 | 157 view = "list", |
bsw/jbe@19 | 158 params = { |
bsw/jbe@19 | 159 issue_id = issue.id, |
bsw/jbe@19 | 160 scoring = tempvoting_string |
bsw/jbe@19 | 161 } |
bsw/jbe@19 | 162 } |
bsw/jbe@19 | 163 |
bsw/jbe@5 | 164 end |