liquid_feedback_frontend
annotate app/main/initiative/show_tab.lua @ 57:4f39f0a0d5b5
Listing of updated drafts on start page; Code cleanup; Minor bugfix
MOTD, initiator invite, issues to vote and listing of updated drafts shown as tabs on start page;
Bugfix: Initiator icon only shown when initiatorship has been accepted
MOTD, initiator invite, issues to vote and listing of updated drafts shown as tabs on start page;
Bugfix: Initiator icon only shown when initiatorship has been accepted
author | bsw |
---|---|
date | Sat Apr 17 21:59:02 2010 +0200 (2010-04-17) |
parents | 0849be391140 |
children | 65a1f7a01e7b |
rev | line source |
---|---|
bsw/jbe@19 | 1 local initiative = param.get("initiative", "table") |
bsw/jbe@19 | 2 local initiator = param.get("initiator", "table") |
bsw/jbe@19 | 3 |
bsw/jbe@19 | 4 if not initiative then |
bsw/jbe@19 | 5 initiative = Initiative:by_id(param.get("initiative_id", atom.number)) |
bsw/jbe@19 | 6 end |
bsw/jbe@19 | 7 |
bsw@51 | 8 if not initiator and app.session.member_id then |
bsw/jbe@19 | 9 initiator = Initiator:by_pk(initiative.id, app.session.member.id) |
bsw/jbe@19 | 10 end |
bsw/jbe@19 | 11 |
bsw/jbe@19 | 12 local current_draft_name = _"Current draft" |
bsw/jbe@19 | 13 if initiative.issue.half_frozen then |
bsw/jbe@19 | 14 current_draft_name = _"Voting proposal" |
bsw/jbe@19 | 15 end |
bsw/jbe@19 | 16 |
bsw/jbe@19 | 17 if initiative.issue.state == "finished" then |
bsw/jbe@19 | 18 current_draft_name = _"Voted proposal" |
bsw/jbe@19 | 19 end |
bsw/jbe@19 | 20 |
bsw/jbe@19 | 21 local tabs = { |
bsw/jbe@19 | 22 { |
bsw/jbe@19 | 23 name = "current_draft", |
bsw/jbe@19 | 24 label = current_draft_name, |
bsw/jbe@19 | 25 icon = { static = "icons/16/script.png" }, |
bsw/jbe@19 | 26 module = "initiative", |
bsw/jbe@19 | 27 view = "_current_draft", |
bsw/jbe@19 | 28 params = { |
bsw/jbe@19 | 29 initiative = initiative, |
bsw/jbe@19 | 30 initiator = initiator |
bsw/jbe@19 | 31 } |
bsw/jbe@19 | 32 } |
bsw/jbe@19 | 33 } |
bsw/jbe@19 | 34 |
bsw@51 | 35 if app.session.member_id then |
bsw@51 | 36 if initiative.issue.ranks_available then |
bsw@51 | 37 tabs[#tabs+1] = { |
bsw@51 | 38 name = "voting", |
bsw@51 | 39 label = _"Voting details", |
bsw@51 | 40 icon = { static = "icons/16/email_open.png" }, |
bsw@51 | 41 module = "initiative", |
bsw@51 | 42 view = "_show_voting", |
bsw@51 | 43 params = { |
bsw@51 | 44 initiative = initiative |
bsw@51 | 45 } |
bsw/jbe@19 | 46 } |
bsw@51 | 47 end |
bsw/jbe@19 | 48 end |
bsw/jbe@19 | 49 |
bsw/jbe@19 | 50 local suggestion_count = initiative:get_reference_selector("suggestions"):count() |
bsw/jbe@19 | 51 |
bsw/jbe@19 | 52 tabs[#tabs+1] = { |
bsw/jbe@19 | 53 name = "suggestions", |
bsw/jbe@19 | 54 label = _"Suggestions" .. " (" .. tostring(suggestion_count) .. ")", |
bsw/jbe@19 | 55 icon = { static = "icons/16/comments.png" }, |
bsw/jbe@19 | 56 module = "initiative", |
bsw/jbe@19 | 57 view = "_suggestions", |
bsw/jbe@19 | 58 params = { |
bsw/jbe@19 | 59 initiative = initiative |
bsw/jbe@19 | 60 } |
bsw/jbe@19 | 61 } |
bsw/jbe@19 | 62 |
bsw@51 | 63 if app.session.member_id then |
bsw@51 | 64 local members_selector = initiative:get_reference_selector("supporting_members_snapshot") |
bsw@51 | 65 :join("issue", nil, "issue.id = direct_supporter_snapshot.issue_id") |
bsw@51 | 66 :join("direct_interest_snapshot", nil, "direct_interest_snapshot.event = issue.latest_snapshot_event AND direct_interest_snapshot.issue_id = issue.id AND direct_interest_snapshot.member_id = member.id") |
bsw@51 | 67 :add_field("direct_interest_snapshot.weight") |
bsw@51 | 68 :add_where("direct_supporter_snapshot.event = issue.latest_snapshot_event") |
bsw@51 | 69 :add_where("direct_supporter_snapshot.satisfied") |
bsw@51 | 70 :add_field("direct_supporter_snapshot.informed", "is_informed") |
bsw@51 | 71 |
bsw@51 | 72 local tmp = db:query("SELECT count(1) AS count, sum(weight) AS weight FROM (" .. tostring(members_selector) .. ") as subquery", "object") |
bsw@51 | 73 local direct_satisfied_supporter_count = tmp.count |
bsw@51 | 74 local indirect_satisfied_supporter_count = (tmp.weight or 0) - tmp.count |
bsw@51 | 75 |
bsw@51 | 76 local count_string |
bsw@51 | 77 if indirect_satisfied_supporter_count > 0 then |
bsw@51 | 78 count_string = "(" .. tostring(direct_satisfied_supporter_count) .. "+" .. tostring(indirect_satisfied_supporter_count) .. ")" |
bsw@51 | 79 else |
bsw@51 | 80 count_string = "(" .. tostring(direct_satisfied_supporter_count) .. ")" |
bsw@51 | 81 end |
bsw@51 | 82 |
bsw@51 | 83 tabs[#tabs+1] = { |
bsw@51 | 84 name = "satisfied_supporter", |
bsw@51 | 85 label = _"Supporter" .. " " .. count_string, |
bsw@51 | 86 icon = { static = "icons/16/thumb_up_green.png" }, |
bsw@51 | 87 module = "member", |
bsw@51 | 88 view = "_list", |
bsw@51 | 89 params = { |
bsw@51 | 90 initiative = initiative, |
bsw@51 | 91 members_selector = members_selector |
bsw@51 | 92 } |
bsw/jbe@19 | 93 } |
bsw@51 | 94 |
bsw@51 | 95 local members_selector = initiative:get_reference_selector("supporting_members_snapshot") |
bsw@51 | 96 :join("issue", nil, "issue.id = direct_supporter_snapshot.issue_id") |
bsw@51 | 97 :join("direct_interest_snapshot", nil, "direct_interest_snapshot.event = issue.latest_snapshot_event AND direct_interest_snapshot.issue_id = issue.id AND direct_interest_snapshot.member_id = member.id") |
bsw@51 | 98 :add_field("direct_interest_snapshot.weight") |
bsw@51 | 99 :add_where("direct_supporter_snapshot.event = issue.latest_snapshot_event") |
bsw@51 | 100 :add_where("NOT direct_supporter_snapshot.satisfied") |
bsw@51 | 101 :add_field("direct_supporter_snapshot.informed", "is_informed") |
bsw@51 | 102 |
bsw@51 | 103 local tmp = db:query("SELECT count(1) AS count, sum(weight) AS weight FROM (" .. tostring(members_selector) .. ") as subquery", "object") |
bsw@51 | 104 local direct_potential_supporter_count = tmp.count |
bsw@51 | 105 local indirect_potential_supporter_count = (tmp.weight or 0) - tmp.count |
bsw@51 | 106 |
bsw@51 | 107 local count_string |
bsw@51 | 108 if indirect_potential_supporter_count > 0 then |
bsw@51 | 109 count_string = "(" .. tostring(direct_potential_supporter_count) .. "+" .. tostring(indirect_potential_supporter_count) .. ")" |
bsw@51 | 110 else |
bsw@51 | 111 count_string = "(" .. tostring(direct_potential_supporter_count) .. ")" |
bsw@51 | 112 end |
bsw@51 | 113 |
bsw@51 | 114 tabs[#tabs+1] = { |
bsw@51 | 115 name = "supporter", |
bsw@51 | 116 label = _"Potential supporter" .. " " .. count_string, |
bsw@51 | 117 icon = { static = "icons/16/thumb_up.png" }, |
bsw@51 | 118 module = "member", |
bsw@51 | 119 view = "_list", |
bsw@51 | 120 params = { |
bsw@51 | 121 initiative = initiative, |
bsw@51 | 122 members_selector = members_selector |
bsw@51 | 123 } |
bsw@51 | 124 } |
bsw@51 | 125 |
bsw@51 | 126 local initiators_members_selector = initiative:get_reference_selector("initiating_members") |
bsw@51 | 127 :add_field("initiator.accepted", "accepted") |
bsw@51 | 128 |
bsw@51 | 129 if not (initiator and initiator.accepted) then |
bsw@51 | 130 initiators_members_selector:add_where("initiator.accepted") |
bsw@51 | 131 end |
bsw@51 | 132 |
bsw@51 | 133 local initiator_count = initiators_members_selector:count() |
bsw@51 | 134 |
bsw@51 | 135 tabs[#tabs+1] = { |
bsw@51 | 136 name = "initiators", |
bsw@51 | 137 label = _"Initiators" .. " (" .. tostring(initiator_count) .. ")", |
bsw@51 | 138 icon = { static = "icons/16/user_edit.png" }, |
bsw@51 | 139 module = "initiative", |
bsw@51 | 140 view = "_initiators", |
bsw@51 | 141 params = { |
bsw@51 | 142 initiative = initiative, |
bsw@51 | 143 initiator = initiator, |
bsw@51 | 144 initiators_members_selector = initiators_members_selector |
bsw@51 | 145 } |
bsw@51 | 146 } |
bsw/jbe@19 | 147 end |
bsw/jbe@19 | 148 |
bsw/jbe@19 | 149 local drafts_count = initiative:get_reference_selector("drafts"):count() |
bsw/jbe@19 | 150 |
bsw/jbe@19 | 151 tabs[#tabs+1] = { |
bsw/jbe@19 | 152 name = "drafts", |
bsw/jbe@19 | 153 label = _"Draft history" .. " (" .. tostring(drafts_count) .. ")", |
bsw/jbe@19 | 154 icon = { static = "icons/16/script.png" }, |
bsw/jbe@19 | 155 module = "draft", |
bsw/jbe@19 | 156 view = "_list", |
bsw/jbe@19 | 157 params = { drafts = initiative.drafts } |
bsw/jbe@19 | 158 } |
bsw/jbe@19 | 159 |
bsw/jbe@19 | 160 tabs[#tabs+1] = { |
bsw/jbe@19 | 161 name = "details", |
bsw/jbe@19 | 162 label = _"Details", |
bsw/jbe@19 | 163 icon = { static = "icons/16/magnifier.png" }, |
bsw/jbe@19 | 164 module = "initiative", |
bsw/jbe@19 | 165 view = "_details", |
bsw/jbe@19 | 166 params = { |
bsw/jbe@19 | 167 initiative = initiative, |
bsw/jbe@19 | 168 members_selector = members_selector |
bsw/jbe@19 | 169 } |
bsw/jbe@19 | 170 } |
bsw/jbe@19 | 171 |
bsw/jbe@19 | 172 tabs.module = "initiative" |
bsw/jbe@19 | 173 tabs.view = "show_tab" |
bsw/jbe@19 | 174 tabs.static_params = { |
bsw/jbe@19 | 175 initiative_id = initiative.id |
bsw/jbe@19 | 176 } |
bsw/jbe@19 | 177 |
bsw/jbe@19 | 178 ui.tabs(tabs) |
bsw/jbe@19 | 179 |