liquid_feedback_frontend

annotate app/main/initiative/_list.lua @ 51:0849be391140

Public read access; Read-only API for initiatives; Prepared integration of OpenID
author bsw
date Sun Apr 04 22:05:11 2010 +0200 (2010-04-04)
parents 81586ea68d57
children 4f39f0a0d5b5
rev   line source
bsw/jbe@19 1 ui.script{ script = "lf_initiative_expanded = {};" }
bsw@11 2
bsw/jbe@0 3 local issue = param.get("issue", "table")
bsw/jbe@0 4
bsw/jbe@19 5 local initiatives_selector = param.get("initiatives_selector", "table")
bsw@51 6
bsw@11 7 initiatives_selector
bsw/jbe@19 8 :join("issue", nil, "issue.id = initiative.issue_id")
bsw@11 9
bsw@51 10 if app.session.member_id then
bsw@51 11 initiatives_selector
bsw@51 12 :left_join("initiator", "_initiator", { "_initiator.initiative_id = initiative.id AND _initiator.member_id = ?", app.session.member.id} )
bsw@51 13 :left_join("supporter", "_supporter", { "_supporter.initiative_id = initiative.id AND _supporter.member_id = ?", app.session.member.id} )
bsw@51 14
bsw@51 15 :add_field("(_initiator.member_id NOTNULL)", "is_initiator")
bsw@51 16 :add_field({"(_supporter.member_id NOTNULL) AND NOT EXISTS(SELECT 1 FROM opinion WHERE opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)))", app.session.member.id }, "is_supporter")
bsw@51 17 :add_field({"EXISTS(SELECT 1 FROM opinion WHERE opinion.initiative_id = initiative.id AND opinion.member_id = ? AND ((opinion.degree = 2 AND NOT fulfilled) OR (opinion.degree = -2 AND fulfilled)))", app.session.member.id }, "is_potential_supporter")
bsw@51 18 end
bsw@11 19
bsw/jbe@19 20 local initiatives_count = initiatives_selector:count()
bsw@11 21
bsw/jbe@19 22 local limit = param.get("limit", atom.number)
bsw/jbe@19 23 local no_sort = param.get("no_sort", atom.boolean)
bsw/jbe@19 24
bsw/jbe@19 25 local show_for_issue = param.get("show_for_issue", atom.boolean)
bsw/jbe@19 26
bsw/jbe@19 27 local show_for_initiative
bsw/jbe@19 28
bsw/jbe@19 29 local show_for_initiative_id = param.get("for_initiative_id", atom.number)
bsw/jbe@19 30
bsw/jbe@19 31 if show_for_initiative_id then
bsw/jbe@19 32 show_for_initiative = Initiative:by_id(show_for_initiative_id)
bsw/jbe@19 33
bsw/jbe@19 34 elseif not show_for_initiative_id and show_for_issue and issue and issue.ranks_available then
bsw/jbe@19 35 winning_initiative = Initiative:new_selector()
bsw/jbe@19 36 :add_where{ "issue_id = ?", issue.id }
bsw/jbe@19 37 :add_where("rank = 1")
bsw@24 38 :optional_object_mode()
bsw/jbe@19 39 :exec()
bsw/jbe@19 40 if winning_initiative then
bsw/jbe@19 41 show_for_initiative = winning_initiative
bsw/jbe@19 42 ui.container{
bsw/jbe@19 43 attr = { class = "admitted_info" },
bsw/jbe@19 44 content = _"This issue has been finished with the following winning initiative:"
bsw/jbe@19 45 }
bsw/jbe@19 46 else
bsw/jbe@19 47 ui.container{
bsw/jbe@19 48 attr = { class = "not_admitted_info" },
bsw/jbe@19 49 content = _"This issue has been finished without any winning initiative."
bsw/jbe@19 50 }
bsw/jbe@19 51 end
bsw/jbe@19 52 end
bsw/jbe@19 53
bsw/jbe@19 54
bsw/jbe@19 55 if show_for_initiative then
bsw/jbe@19 56 ui.script{ script = "lf_initiative_expanded['initiative_content_" .. tostring(show_for_initiative.id) .. "'] = true;" }
bsw/jbe@19 57 initiatives_selector:add_where{ "initiative.id != ?", show_for_initiative.id }
bsw/jbe@19 58
bsw/jbe@19 59 execute.view{
bsw/jbe@19 60 module = "initiative",
bsw/jbe@19 61 view = "_list_element",
bsw/jbe@19 62 params = {
bsw/jbe@19 63 initiative = show_for_initiative,
bsw/jbe@19 64 expanded = true,
bsw/jbe@19 65 expandable = true
bsw/jbe@19 66 }
bsw/jbe@19 67 }
bsw/jbe@19 68 if show_for_issue then
bsw/jbe@19 69 slot.put("<br />")
bsw/jbe@19 70 ui.container{
bsw/jbe@19 71 attr = { style = "font-weight: bold;" },
bsw/jbe@0 72 content = function()
bsw/jbe@19 73 slot.put(_"Alternative initiatives")
bsw/jbe@0 74 end
bsw/jbe@0 75 }
bsw/jbe@0 76 end
bsw/jbe@19 77 elseif show_for_issue then
bsw/jbe@19 78 ui.container{
bsw/jbe@19 79 attr = { style = "font-weight: bold;" },
bsw/jbe@19 80 content = function()
bsw/jbe@19 81 slot.put(_"Alternative initiatives")
bsw/jbe@19 82 end
bsw@11 83 }
bsw@11 84 end
bsw/jbe@19 85
bsw/jbe@19 86 if not show_for_initiative or initiatives_count > 1 then
bsw/jbe@19 87
bsw/jbe@19 88
bsw/jbe@19 89 local more_initiatives_count
bsw/jbe@19 90 if limit then
bsw/jbe@19 91 limit = limit - (show_for_initiative and 1 or 0)
bsw/jbe@19 92 if initiatives_count > limit then
bsw/jbe@19 93 more_initiatives_count = initiatives_count - limit
bsw/jbe@19 94 end
bsw/jbe@19 95 initiatives_selector:limit(limit)
bsw/jbe@19 96 end
bsw/jbe@19 97
bsw/jbe@19 98 local expandable = param.get("expandable", atom.boolean)
bsw/jbe@19 99
bsw/jbe@19 100 local issue = param.get("issue", "table")
bsw/jbe@19 101
bsw/jbe@19 102 local name = "initiative_list"
bsw/jbe@19 103 if issue then
bsw/jbe@19 104 name = "issue_" .. tostring(issue.id) .. "_initiative_list"
bsw/jbe@19 105 end
bsw/jbe@19 106
bsw/jbe@19 107 ui.add_partial_param_names{ name }
bsw/jbe@19 108
bsw/jbe@19 109 local order_filter = {
bsw/jbe@19 110 name = name,
bsw/jbe@19 111 label = _"Order by"
bsw/jbe@19 112 }
bsw/jbe@19 113
bsw/jbe@19 114 if issue and issue.ranks_available then
bsw/jbe@19 115 order_filter[#order_filter+1] = {
bsw/jbe@19 116 name = "rank",
bsw/jbe@19 117 label = _"Rank",
bsw/jbe@19 118 selector_modifier = function(selector) selector:add_order_by("initiative.rank, initiative.admitted DESC, vote_ratio(initiative.positive_votes, initiative.negative_votes) DESC, initiative.id") end
bsw/jbe@19 119 }
bsw/jbe@19 120 end
bsw/jbe@19 121
bsw/jbe@19 122 order_filter[#order_filter+1] = {
bsw/jbe@19 123 name = "potential_support",
bsw/jbe@19 124 label = _"Potential support",
bsw/jbe@19 125 selector_modifier = function(selector) selector:add_order_by("initiative.supporter_count::float / issue.population::float DESC, initiative.id") end
bsw/jbe@19 126 }
bsw/jbe@19 127
bsw/jbe@19 128 order_filter[#order_filter+1] = {
bsw/jbe@19 129 name = "support",
bsw/jbe@19 130 label = _"Support",
bsw/jbe@19 131 selector_modifier = function(selector) selector:add_order_by("initiative.satisfied_supporter_count::float / issue.population::float DESC, initiative.id") end
bsw/jbe@19 132 }
bsw/jbe@19 133
bsw/jbe@19 134 order_filter[#order_filter+1] = {
bsw/jbe@19 135 name = "newest",
bsw/jbe@19 136 label = _"Newest",
bsw/jbe@19 137 selector_modifier = function(selector) selector:add_order_by("initiative.created DESC, initiative.id") end
bsw/jbe@19 138 }
bsw/jbe@19 139
bsw/jbe@19 140 order_filter[#order_filter+1] = {
bsw/jbe@19 141 name = "oldest",
bsw/jbe@19 142 label = _"Oldest",
bsw/jbe@19 143 selector_modifier = function(selector) selector:add_order_by("initiative.created, initiative.id") end
bsw/jbe@19 144 }
bsw/jbe@19 145
bsw/jbe@19 146 ui_filters = ui.filters
bsw/jbe@19 147
bsw/jbe@19 148 if no_sort then
bsw/jbe@19 149 ui_filters = function(args) args.content() end
bsw/jbe@19 150 if issue.ranks_available then
bsw/jbe@19 151 initiatives_selector:add_order_by("initiative.rank, initiative.admitted DESC, vote_ratio(initiative.positive_votes, initiative.negative_votes) DESC, initiative.id")
bsw/jbe@19 152 else
bsw/jbe@19 153 initiatives_selector:add_order_by("initiative.supporter_count::float / issue.population::float DESC, initiative.id")
bsw/jbe@19 154 end
bsw/jbe@19 155 end
bsw/jbe@19 156
bsw/jbe@19 157 ui_filters{
bsw/jbe@19 158 label = _"Change order",
bsw/jbe@19 159 order_filter,
bsw/jbe@19 160 selector = initiatives_selector,
bsw/jbe@19 161 content = function()
bsw/jbe@19 162 ui.paginate{
bsw/jbe@19 163 name = issue and "issue_" .. tostring(issue.id) .. "_page" or nil,
bsw/jbe@19 164 selector = initiatives_selector,
bsw/jbe@19 165 per_page = param.get("per_page", atom.number),
bsw/jbe@19 166 content = function()
bsw/jbe@19 167 local initiatives = initiatives_selector:exec()
bsw/jbe@19 168 for i, initiative in ipairs(initiatives) do
bsw/jbe@19 169 local expanded = config.user_tab_mode == "accordeon_all_expanded" and expandable or
bsw/jbe@19 170 show_for_initiative and initiative.id == show_for_initiative.id
bsw/jbe@19 171 if expanded then
bsw/jbe@19 172 ui.script{ script = "lf_initiative_expanded['initiative_content_" .. tostring(initiative.id) .. "'] = true;" }
bsw/jbe@19 173 end
bsw/jbe@19 174 execute.view{
bsw/jbe@19 175 module = "initiative",
bsw/jbe@19 176 view = "_list_element",
bsw/jbe@19 177 params = {
bsw/jbe@19 178 initiative = initiative,
bsw/jbe@19 179 expanded = expanded,
bsw/jbe@19 180 expandable = expandable
bsw/jbe@19 181 }
bsw/jbe@19 182 }
bsw/jbe@19 183 end
bsw/jbe@19 184 end
bsw/jbe@19 185 }
bsw/jbe@19 186 end
bsw/jbe@19 187 }
bsw/jbe@19 188
bsw/jbe@19 189 if more_initiatives_count then
bsw/jbe@19 190 ui.link{
bsw/jbe@19 191 attr = { style = "font-size: 75%; font-style: italic;" },
bsw/jbe@19 192 content = _("and #{count} more initiatives", { count = more_initiatives_count }),
bsw/jbe@19 193 module = "issue",
bsw/jbe@19 194 view = "show",
bsw/jbe@19 195 id = issue.id,
bsw/jbe@19 196 }
bsw/jbe@19 197 end
bsw/jbe@19 198
bsw/jbe@19 199 end
bsw/jbe@19 200
bsw/jbe@19 201 if show_for_issue then
bsw/jbe@19 202 slot.put("<br />")
bsw/jbe@19 203
bsw/jbe@19 204 if issue and initiatives_count == 1 then
bsw/jbe@19 205 ui.container{
bsw/jbe@19 206 content = function()
bsw/jbe@19 207 if issue.fully_frozen or issue.closed then
bsw/jbe@19 208 slot.put(_"There were no more alternative initiatives.")
bsw/jbe@19 209 else
bsw/jbe@19 210 slot.put(_"There are no more alternative initiatives currently.")
bsw/jbe@19 211 end
bsw/jbe@19 212 end
bsw/jbe@19 213 }
bsw/jbe@19 214 end
bsw/jbe@19 215
bsw@51 216 if app.session.member_id and not (issue.fully_frozen or issue.closed) then
bsw/jbe@19 217 slot.put(" ")
bsw/jbe@19 218 ui.link{
bsw/jbe@19 219 content = function()
bsw/jbe@19 220 ui.image{ static = "icons/16/script_add.png" }
bsw/jbe@19 221 slot.put(" ")
bsw/jbe@19 222 slot.put(_"Create alternative initiative")
bsw/jbe@19 223 end,
bsw/jbe@19 224 module = "initiative",
bsw/jbe@19 225 view = "new",
bsw/jbe@19 226 params = { issue_id = issue.id }
bsw/jbe@19 227 }
bsw/jbe@19 228 end
bsw/jbe@19 229 end

Impressum / About Us