liquid_feedback_frontend

annotate app/main/delegation/_show_box.lua @ 281:b77e6a17ca77

Check unit voting right where neccessary, hide action buttons for units without voting right
author bsw
date Thu Feb 16 15:01:49 2012 +0100 (2012-02-16)
parents bde068b37608
children 56c13151d0b8
rev   line source
bsw@248 1 function change_delegation(scope, unit_id, area_id, issue, delegation, initiative_id)
bsw@281 2 local check_unit_id
bsw@281 3 if unit_id then
bsw@281 4 check_unit_id = unit_id
bsw@281 5 elseif area_id then
bsw@281 6 local area = Area:by_id(area_id)
bsw@281 7 check_unit_id = area.unit_id
bsw@281 8 else
bsw@281 9 local area = Area:by_id(issue.area_id)
bsw@281 10 check_unit_id = area.unit_id
bsw@281 11 end
bsw@281 12
bsw@281 13 if not app.session.member:has_voting_right_for_unit_id(check_unit_id) then
bsw@281 14 return
bsw@281 15 end
bsw@281 16
bsw/jbe@19 17 local image
bsw/jbe@19 18 local text
bsw@248 19 if scope == "unit" and delegation and delegation.unit_id then
bsw/jbe@19 20 image = { static = "icons/16/table_go.png" }
bsw@264 21 text = config.single_unit_id and _"Change global delegation" or _"Change unit delegation"
bsw@248 22 elseif scope == "unit" and not (delegation and delegation.unit_id) then
bsw/jbe@19 23 image = { static = "icons/16/table_go.png" }
bsw@264 24 text = config.single_unit_id and _"Set global delegation" or _"Set unit delegation"
bsw/jbe@19 25 elseif scope == "area" and delegation and delegation.area_id then
bsw/jbe@19 26 image = { static = "icons/16/table_go.png" }
bsw/jbe@19 27 text = _"Change area delegation"
bsw/jbe@19 28 elseif scope == "area" and not (delegation and delegation.area_id) then
bsw/jbe@19 29 image = { static = "icons/16/table_go.png" }
bsw/jbe@19 30 text = _"Set area delegation"
bsw/jbe@19 31 elseif scope == "issue" then
bsw/jbe@19 32 if delegation and delegation.issue_id then
bsw/jbe@19 33 image = { static = "icons/16/table_go.png" }
bsw/jbe@19 34 text = _"Change issue delegation"
bsw/jbe@19 35 elseif issue.state ~= "finished" and issue.state ~= "cancelled" then
bsw/jbe@19 36 image = { static = "icons/16/table_go.png" }
bsw/jbe@19 37 text = _"Set issue delegation"
bsw/jbe@19 38 end
bsw/jbe@19 39 end
bsw/jbe@19 40 ui.container{
bsw/jbe@19 41 attr = {
bsw/jbe@19 42 class = "change_delegation",
bsw/jbe@19 43 },
bsw/jbe@19 44 content = function()
bsw/jbe@19 45 ui.link{
bsw/jbe@19 46 image = image,
bsw/jbe@19 47 text = text,
bsw/jbe@19 48 module = "delegation",
bsw/jbe@19 49 view = "new",
bsw/jbe@19 50 params = {
bsw/jbe@19 51 issue_id = issue and issue.id or nil,
poelzi@111 52 initiative_id = initiative_id or nil,
bsw@248 53 area_id = area_id,
bsw@248 54 unit_id = unit_id
bsw/jbe@19 55 },
bsw/jbe@19 56 }
bsw/jbe@19 57 if delegation then
bsw/jbe@19 58 ui.link{
bsw/jbe@19 59 image = { static = "icons/16/delete.png" },
bsw/jbe@19 60 text = _"Revoke",
bsw/jbe@19 61 module = "delegation",
bsw/jbe@19 62 action = "update",
bsw@248 63 params = { issue_id = delegation.issue_id, area_id = delegation.area_id, unit_id = delegation.unit_id, delete = true },
bsw/jbe@19 64 routing = {
bsw/jbe@19 65 default = {
bsw/jbe@19 66 mode = "redirect",
bsw/jbe@19 67 module = request.get_module(),
bsw/jbe@19 68 view = request.get_view(),
bsw/jbe@19 69 id = param.get_id_cgi(),
bsw/jbe@19 70 params = param.get_all_cgi()
bsw/jbe@19 71 }
bsw/jbe@19 72 }
bsw/jbe@19 73 }
bsw/jbe@19 74 end
bsw/jbe@19 75 end
bsw/jbe@19 76 }
bsw/jbe@19 77 end
bsw/jbe@5 78
bsw/jbe@19 79 local delegation
bsw@248 80 local unit_id
bsw/jbe@19 81 local area_id
bsw/jbe@19 82 local issue_id
poelzi@111 83 local initiative_id
bsw/jbe@19 84
bsw@248 85 local scope = "unit"
bsw@248 86
bsw@248 87 unit_id = param.get("unit_id", atom.integer)
bsw/jbe@5 88
bsw@273 89 local inline = param.get("inline", atom.boolean)
bsw@273 90
bsw/jbe@19 91 if param.get("initiative_id", atom.integer) then
poelzi@111 92 initiative_id = param.get("initiative_id", atom.integer)
poelzi@111 93 issue_id = Initiative:by_id(initiative_id).issue_id
bsw/jbe@19 94 scope = "issue"
bsw/jbe@19 95 end
bsw/jbe@5 96
bsw/jbe@19 97 if param.get("issue_id", atom.integer) then
bsw/jbe@19 98 issue_id = param.get("issue_id", atom.integer)
bsw/jbe@19 99 scope = "issue"
bsw/jbe@19 100 end
bsw/jbe@19 101
bsw/jbe@19 102 if param.get("area_id", atom.integer) then
bsw/jbe@19 103 area_id = param.get("area_id", atom.integer)
bsw/jbe@19 104 scope = "area"
bsw/jbe@19 105 end
bsw/jbe@5 106
bsw/jbe@5 107
bsw/jbe@5 108
bsw/jbe@19 109 local delegation
bsw/jbe@19 110 local issue
poelzi@111 111
bsw/jbe@19 112 if issue_id then
bsw/jbe@19 113 issue = Issue:by_id(issue_id)
bsw@248 114 delegation = Delegation:by_pk(app.session.member.id, nil, nil, issue_id)
bsw/jbe@19 115 if not delegation then
bsw@248 116 delegation = Delegation:by_pk(app.session.member.id, nil, issue.area_id)
bsw/jbe@5 117 end
bsw@273 118 if not delegation then
bsw@273 119 delegation = Delegation:by_pk(app.session.member.id, issue.area.unit_id)
bsw@273 120 end
bsw/jbe@19 121 elseif area_id then
bsw@248 122 delegation = Delegation:by_pk(app.session.member.id, nil, area_id)
bsw@273 123 if not delegation then
bsw@273 124 local area = Area:by_id(area_id)
bsw@273 125 delegation = Delegation:by_pk(app.session.member.id, area.unit_id)
bsw@273 126 end
bsw/jbe@19 127 end
bsw/jbe@5 128
bsw/jbe@19 129 if not delegation then
bsw@248 130 delegation = Delegation:by_pk(app.session.member.id, unit_id)
bsw/jbe@19 131 end
bsw/jbe@19 132
bsw@273 133 local slot_name = "actions"
bsw/jbe@19 134
bsw@273 135 if inline then
bsw@273 136 slot_name = "default"
bsw@273 137 end
bsw@273 138
bsw@273 139 slot.select(slot_name, function()
bsw/jbe@19 140
bsw/jbe@5 141 if delegation then
bsw/jbe@5 142 ui.container{
bsw/jbe@5 143 attr = { class = "delegation vote_info"},
bsw/jbe@5 144 content = function()
bsw@2 145 ui.container{
bsw@2 146 attr = {
bsw/jbe@4 147 title = _"Click for details",
bsw/jbe@4 148 class = "head head_active",
bsw@2 149 style = "cursor: pointer;",
bsw/jbe@4 150 onclick = "document.getElementById('delegation_content').style.display = 'block';"
bsw@2 151 },
bsw/jbe@4 152 content = function()
bsw@180 153 if delegation.trustee_id then
bsw@180 154 ui.image{
bsw@180 155 static = "icons/16/table_go.png"
bsw@180 156 }
mail@251 157 local member = Member:new_selector()
mail@251 158 :reset_fields()
mail@251 159 :add_field("name", "delegation_name")
mail@251 160 :add_where({ "id = ?", delegation.trustee_id })
mail@251 161 :single_object_mode()
mail@251 162 :exec()
bsw@180 163 if delegation.issue_id then
mail@251 164 slot.put( _("Issue delegated to '#{name}'", { name = member.delegation_name }) )
bsw@180 165 elseif delegation.area_id then
mail@251 166 slot.put( _("Area delegated to '#{name}'", { name = member.delegation_name }) )
bsw@180 167 else
bsw@264 168 if config.single_unit_id then
bsw@264 169 slot.put( _("Global delegation set to '#{name}'", { name = member.delegation_name }) )
bsw@264 170 else
bsw@264 171 slot.put( _("Unit delegated to '#{name}'", { name = member.delegation_name }) )
bsw@264 172 end
bsw@180 173 end
mail@251 174
bsw/jbe@4 175 else
bsw@180 176 ui.image{
bsw@180 177 static = "icons/16/table_go_crossed.png"
bsw@180 178 }
bsw@180 179 if delegation.issue_id then
bsw@180 180 slot.put(_"Delegation turned off for issue")
bsw@180 181 elseif delegation.area_id then
bsw@180 182 slot.put(_"Delegation turned off for area")
bsw@180 183 end
bsw/jbe@4 184 end
bsw/jbe@4 185 ui.image{
bsw/jbe@4 186 static = "icons/16/dropdown.png"
bsw/jbe@4 187 }
bsw/jbe@4 188 end
bsw@2 189 }
bsw/jbe@4 190 ui.container{
bsw/jbe@4 191 attr = { class = "content", id = "delegation_content" },
bsw/jbe@4 192 content = function()
bsw@2 193 ui.container{
bsw/jbe@4 194 attr = {
bsw/jbe@4 195 class = "close",
bsw/jbe@4 196 style = "cursor: pointer;",
bsw/jbe@4 197 onclick = "document.getElementById('delegation_content').style.display = 'none';"
bsw/jbe@4 198 },
bsw@2 199 content = function()
bsw/jbe@4 200 ui.image{ static = "icons/16/cross.png" }
bsw/jbe@4 201 end
bsw/jbe@4 202 }
bsw/jbe@4 203
bsw/jbe@4 204 local delegation_chain = Member:new_selector()
bsw/jbe@4 205 :add_field("delegation_chain.*")
bsw@246 206 :join("delegation_chain(" .. tostring(app.session.member.id) .. ", " .. tostring(unit_id or "NULL") .. ", " .. tostring(area_id or "NULL") .. ", " .. tostring(issue_id or "NULL") .. ")", "delegation_chain", "member.id = delegation_chain.member_id")
bsw/jbe@4 207 :add_order_by("index")
bsw/jbe@4 208 :exec()
bsw/jbe@4 209
bsw/jbe@19 210 if not issue or (issue.state ~= "finished" and issue.state ~= "cancelled") then
bsw@248 211 change_delegation(scope, unit_id, area_id, issue, delegation, initiative_id)
bsw@277 212 slot.put("<br style='clear: left'/>")
bsw/jbe@19 213 end
bsw/jbe@19 214
bsw/jbe@4 215 for i, record in ipairs(delegation_chain) do
bsw/jbe@4 216 local style
bsw/jbe@4 217 local overridden = record.overridden
bsw/jbe@4 218 if record.scope_in then
bsw@2 219 ui.container{
bsw/jbe@4 220 attr = { class = "delegation_info" },
bsw@2 221 content = function()
bsw/jbe@4 222 if not overridden then
bsw/jbe@4 223 ui.image{
bsw/jbe@4 224 attr = { class = "delegation_arrow" },
bsw/jbe@4 225 static = "delegation_arrow_vertical.jpg"
bsw/jbe@4 226 }
bsw/jbe@4 227 else
bsw/jbe@4 228 ui.image{
bsw/jbe@4 229 attr = { class = "delegation_arrow delegation_arrow_overridden" },
bsw/jbe@4 230 static = "delegation_arrow_vertical.jpg"
bsw/jbe@4 231 }
bsw/jbe@4 232 end
bsw/jbe@4 233 ui.container{
bsw/jbe@4 234 attr = { class = "delegation_scope" .. (overridden and " delegation_scope_overridden" or "") },
bsw/jbe@4 235 content = function()
bsw@248 236 if record.scope_in == "unit" then
bsw@264 237 slot.put(config.single_object_mode and _"Global delegation" or _"Unit delegation")
bsw/jbe@4 238 elseif record.scope_in == "area" then
bsw/jbe@4 239 slot.put(_"Area delegation")
bsw/jbe@4 240 elseif record.scope_in == "issue" then
bsw/jbe@4 241 slot.put(_"Issue delegation")
bsw/jbe@4 242 end
bsw/jbe@4 243 end
bsw/jbe@4 244 }
bsw@2 245 end
bsw@2 246 }
bsw/jbe@4 247 end
bsw/jbe@4 248 ui.container{
bsw/jbe@4 249 attr = { class = overridden and "delegation_overridden" or "" },
bsw/jbe@4 250 content = function()
bsw/jbe@4 251 execute.view{
bsw/jbe@4 252 module = "member",
bsw/jbe@4 253 view = "_show_thumb",
bsw/jbe@4 254 params = { member = record }
bsw@2 255 }
bsw@2 256 end
bsw/jbe@4 257 }
bsw/jbe@4 258 if record.participation and not record.overridden then
bsw/jbe@4 259 ui.container{
bsw/jbe@4 260 attr = { class = "delegation_participation" },
bsw/jbe@4 261 content = function()
bsw/jbe@19 262 slot.put(_"This member is participating, the rest of delegation chain is suspended while discussing")
bsw/jbe@4 263 end
bsw/jbe@4 264 }
bsw@2 265 end
bsw/jbe@4 266 slot.put("<br style='clear: left'/>")
bsw/jbe@4 267 end
bsw/jbe@0 268 end
bsw/jbe@4 269 }
bsw/jbe@0 270 end
bsw/jbe@5 271 }
bsw/jbe@19 272 else
bsw@248 273 change_delegation(scope, unit_id, area_id, issue, nil, initiative_id)
bsw/jbe@5 274 end
bsw/jbe@0 275 end)

Impressum / About Us