liquid_feedback_frontend

annotate app/main/delegation/_show_box.lua @ 111:bf885faf3452

add initiator support in delegation

if a delegation is issued from the initiative view, the initiators
from that one are added to the delegation target list. this makes it easier to delegate to the author without the need to add him to the contact list.
author Daniel Poelzleithner <poelzi@poelzi.org>
date Mon Sep 20 20:32:04 2010 +0200 (2010-09-20)
parents 00d1004545f1
children 02aacb3dffe0
rev   line source
poelzi@111 1 function change_delegation(scope, area_id, issue, delegation, initiative_id)
bsw/jbe@19 2 local image
bsw/jbe@19 3 local text
bsw/jbe@19 4 if scope == "global" and delegation then
bsw/jbe@19 5 image = { static = "icons/16/table_go.png" }
bsw/jbe@19 6 text = _"Change global delegation"
bsw/jbe@19 7 elseif scope == "global" and not delegation then
bsw/jbe@19 8 image = { static = "icons/16/table_go.png" }
bsw/jbe@19 9 text = _"Set global delegation"
bsw/jbe@19 10 elseif scope == "area" and delegation and delegation.area_id then
bsw/jbe@19 11 image = { static = "icons/16/table_go.png" }
bsw/jbe@19 12 text = _"Change area delegation"
bsw/jbe@19 13 elseif scope == "area" and not (delegation and delegation.area_id) then
bsw/jbe@19 14 image = { static = "icons/16/table_go.png" }
bsw/jbe@19 15 text = _"Set area delegation"
bsw/jbe@19 16 elseif scope == "issue" then
bsw/jbe@19 17 if delegation and delegation.issue_id then
bsw/jbe@19 18 image = { static = "icons/16/table_go.png" }
bsw/jbe@19 19 text = _"Change issue delegation"
bsw/jbe@19 20 elseif issue.state ~= "finished" and issue.state ~= "cancelled" then
bsw/jbe@19 21 image = { static = "icons/16/table_go.png" }
bsw/jbe@19 22 text = _"Set issue delegation"
bsw/jbe@19 23 end
bsw/jbe@19 24 end
bsw/jbe@19 25 ui.container{
bsw/jbe@19 26 attr = {
bsw/jbe@19 27 class = "change_delegation",
bsw/jbe@19 28 },
bsw/jbe@19 29 content = function()
bsw/jbe@19 30 ui.link{
bsw/jbe@19 31 image = image,
bsw/jbe@19 32 text = text,
bsw/jbe@19 33 module = "delegation",
bsw/jbe@19 34 view = "new",
bsw/jbe@19 35 params = {
bsw/jbe@19 36 issue_id = issue and issue.id or nil,
poelzi@111 37 initiative_id = initiative_id or nil,
bsw/jbe@19 38 area_id = area_id
bsw/jbe@19 39 },
bsw/jbe@19 40 }
bsw/jbe@19 41 if delegation then
bsw/jbe@19 42 ui.link{
bsw/jbe@19 43 image = { static = "icons/16/delete.png" },
bsw/jbe@19 44 text = _"Revoke",
bsw/jbe@19 45 module = "delegation",
bsw/jbe@19 46 action = "update",
bsw/jbe@19 47 params = { issue_id = delegation.issue_id, area_id = delegation.area_id, delete = true },
bsw/jbe@19 48 routing = {
bsw/jbe@19 49 default = {
bsw/jbe@19 50 mode = "redirect",
bsw/jbe@19 51 module = request.get_module(),
bsw/jbe@19 52 view = request.get_view(),
bsw/jbe@19 53 id = param.get_id_cgi(),
bsw/jbe@19 54 params = param.get_all_cgi()
bsw/jbe@19 55 }
bsw/jbe@19 56 }
bsw/jbe@19 57 }
bsw/jbe@19 58 end
bsw/jbe@19 59 end
bsw/jbe@19 60 }
bsw/jbe@19 61 end
bsw/jbe@5 62
bsw/jbe@19 63 local delegation
bsw/jbe@19 64 local area_id
bsw/jbe@19 65 local issue_id
poelzi@111 66 local initiative_id
bsw/jbe@19 67
bsw/jbe@19 68 local scope = "global"
bsw/jbe@5 69
bsw/jbe@19 70 if param.get("initiative_id", atom.integer) then
poelzi@111 71 initiative_id = param.get("initiative_id", atom.integer)
poelzi@111 72 issue_id = Initiative:by_id(initiative_id).issue_id
bsw/jbe@19 73 scope = "issue"
bsw/jbe@19 74 end
bsw/jbe@5 75
bsw/jbe@19 76 if param.get("issue_id", atom.integer) then
bsw/jbe@19 77 issue_id = param.get("issue_id", atom.integer)
bsw/jbe@19 78 scope = "issue"
bsw/jbe@19 79 end
bsw/jbe@19 80
bsw/jbe@19 81 if param.get("area_id", atom.integer) then
bsw/jbe@19 82 area_id = param.get("area_id", atom.integer)
bsw/jbe@19 83 scope = "area"
bsw/jbe@19 84 end
bsw/jbe@5 85
bsw/jbe@5 86
bsw/jbe@5 87
bsw/jbe@19 88 local delegation
bsw/jbe@19 89 local issue
poelzi@111 90
bsw/jbe@19 91 if issue_id then
bsw/jbe@19 92 issue = Issue:by_id(issue_id)
bsw/jbe@19 93 delegation = Delegation:by_pk(app.session.member.id, nil, issue_id)
bsw/jbe@19 94 if not delegation then
bsw/jbe@19 95 delegation = Delegation:by_pk(app.session.member.id, issue.area_id)
bsw/jbe@5 96 end
bsw/jbe@19 97 elseif area_id then
bsw/jbe@19 98 delegation = Delegation:by_pk(app.session.member.id, area_id)
bsw/jbe@19 99 end
bsw/jbe@5 100
bsw/jbe@19 101 if not delegation then
bsw/jbe@19 102 delegation = Delegation:by_pk(app.session.member.id)
bsw/jbe@19 103 end
bsw/jbe@19 104
bsw/jbe@19 105
bsw/jbe@19 106 slot.select("actions", function()
bsw/jbe@19 107
bsw/jbe@5 108 if delegation then
bsw/jbe@5 109 ui.container{
bsw/jbe@5 110 attr = { class = "delegation vote_info"},
bsw/jbe@5 111 content = function()
bsw@2 112 ui.container{
bsw@2 113 attr = {
bsw/jbe@4 114 title = _"Click for details",
bsw/jbe@4 115 class = "head head_active",
bsw@2 116 style = "cursor: pointer;",
bsw/jbe@4 117 onclick = "document.getElementById('delegation_content').style.display = 'block';"
bsw@2 118 },
bsw/jbe@4 119 content = function()
bsw/jbe@4 120 ui.image{
bsw/jbe@4 121 static = "icons/16/error.png"
bsw/jbe@4 122 }
bsw/jbe@4 123 if delegation.issue_id then
bsw/jbe@4 124 slot.put(_"Issue delegation active")
bsw/jbe@4 125 elseif delegation.area_id then
bsw/jbe@4 126 slot.put(_"Area wide delegation active")
bsw/jbe@4 127 else
bsw/jbe@4 128 slot.put(_"Global delegation active")
bsw/jbe@4 129 end
bsw/jbe@4 130 ui.image{
bsw/jbe@4 131 static = "icons/16/dropdown.png"
bsw/jbe@4 132 }
bsw/jbe@4 133 end
bsw@2 134 }
bsw/jbe@4 135 ui.container{
bsw/jbe@4 136 attr = { class = "content", id = "delegation_content" },
bsw/jbe@4 137 content = function()
bsw@2 138 ui.container{
bsw/jbe@4 139 attr = {
bsw/jbe@4 140 class = "close",
bsw/jbe@4 141 style = "cursor: pointer;",
bsw/jbe@4 142 onclick = "document.getElementById('delegation_content').style.display = 'none';"
bsw/jbe@4 143 },
bsw@2 144 content = function()
bsw/jbe@4 145 ui.image{ static = "icons/16/cross.png" }
bsw/jbe@4 146 end
bsw/jbe@4 147 }
bsw/jbe@4 148
bsw/jbe@4 149 local delegation_chain = Member:new_selector()
bsw/jbe@4 150 :add_field("delegation_chain.*")
bsw/jbe@4 151 :join("delegation_chain(" .. tostring(app.session.member.id) .. ", " .. tostring(area_id or "NULL") .. ", " .. tostring(issue_id or "NULL") .. ")", "delegation_chain", "member.id = delegation_chain.member_id")
bsw/jbe@4 152 :add_order_by("index")
bsw/jbe@4 153 :exec()
bsw/jbe@4 154
bsw/jbe@19 155 if not issue or (issue.state ~= "finished" and issue.state ~= "cancelled") then
poelzi@111 156 change_delegation(scope, area_id, issue, delegation, initiative_id)
bsw/jbe@19 157 end
bsw/jbe@19 158
bsw/jbe@4 159 for i, record in ipairs(delegation_chain) do
bsw/jbe@4 160 local style
bsw/jbe@4 161 local overridden = record.overridden
bsw/jbe@4 162 if record.scope_in then
bsw@2 163 ui.container{
bsw/jbe@4 164 attr = { class = "delegation_info" },
bsw@2 165 content = function()
bsw/jbe@4 166 if not overridden then
bsw/jbe@4 167 ui.image{
bsw/jbe@4 168 attr = { class = "delegation_arrow" },
bsw/jbe@4 169 static = "delegation_arrow_vertical.jpg"
bsw/jbe@4 170 }
bsw/jbe@4 171 else
bsw/jbe@4 172 ui.image{
bsw/jbe@4 173 attr = { class = "delegation_arrow delegation_arrow_overridden" },
bsw/jbe@4 174 static = "delegation_arrow_vertical.jpg"
bsw/jbe@4 175 }
bsw/jbe@4 176 end
bsw/jbe@4 177 ui.container{
bsw/jbe@4 178 attr = { class = "delegation_scope" .. (overridden and " delegation_scope_overridden" or "") },
bsw/jbe@4 179 content = function()
bsw/jbe@4 180 if record.scope_in == "global" then
bsw/jbe@4 181 slot.put(_"Global delegation")
bsw/jbe@4 182 elseif record.scope_in == "area" then
bsw/jbe@4 183 slot.put(_"Area delegation")
bsw/jbe@4 184 elseif record.scope_in == "issue" then
bsw/jbe@4 185 slot.put(_"Issue delegation")
bsw/jbe@4 186 end
bsw/jbe@4 187 end
bsw/jbe@4 188 }
bsw@2 189 end
bsw@2 190 }
bsw/jbe@4 191 end
bsw/jbe@4 192 ui.container{
bsw/jbe@4 193 attr = { class = overridden and "delegation_overridden" or "" },
bsw/jbe@4 194 content = function()
bsw/jbe@4 195 execute.view{
bsw/jbe@4 196 module = "member",
bsw/jbe@4 197 view = "_show_thumb",
bsw/jbe@4 198 params = { member = record }
bsw@2 199 }
bsw@2 200 end
bsw/jbe@4 201 }
bsw/jbe@4 202 if record.participation and not record.overridden then
bsw/jbe@4 203 ui.container{
bsw/jbe@4 204 attr = { class = "delegation_participation" },
bsw/jbe@4 205 content = function()
bsw/jbe@19 206 slot.put(_"This member is participating, the rest of delegation chain is suspended while discussing")
bsw/jbe@4 207 end
bsw/jbe@4 208 }
bsw@2 209 end
bsw/jbe@4 210 slot.put("<br style='clear: left'/>")
bsw/jbe@4 211 end
bsw/jbe@0 212 end
bsw/jbe@4 213 }
bsw/jbe@0 214 end
bsw/jbe@5 215 }
bsw/jbe@19 216 else
poelzi@111 217 change_delegation(scope, area_id, issue, nil, initiative_id)
bsw/jbe@5 218 end
bsw/jbe@0 219 end)

Impressum / About Us