liquid_feedback_frontend
annotate app/main/initiative/show_tab.lua @ 52:88ac7798b562
Several bugfixes (getpic.c, accepted but canceled issues, ...); Listing of available policies
- Bugfixes in fastpath/getpic.c (related to crashes since alpha5)
- Respect Content-Types of images in database
(needs database update, as Content-Type was incorrectly stored by previous versions)
- Typo fixed in help messages
- RSS-Feed (currently only after manual authentication while session is valid)
- Listing of available policies
- German translation fixed: "gebe" -> "gib" (Imperativ)
- Bugfixes related to issues which had been accepted but canceled afterwards
- Prohibit creation of initiatives in disabled areas or with disabled policies
- Bugfixes in fastpath/getpic.c (related to crashes since alpha5)
- Respect Content-Types of images in database
(needs database update, as Content-Type was incorrectly stored by previous versions)
- Typo fixed in help messages
- RSS-Feed (currently only after manual authentication while session is valid)
- Listing of available policies
- German translation fixed: "gebe" -> "gib" (Imperativ)
- Bugfixes related to issues which had been accepted but canceled afterwards
- Prohibit creation of initiatives in disabled areas or with disabled policies
| author | bsw/jbe | 
|---|---|
| date | Thu Apr 15 19:58:25 2010 +0200 (2010-04-15) | 
| 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 |