liquid_feedback_frontend

view app/main/initiative/_list.lua @ 480:af496baa9bda

Added search function again and raised initiatve list limit to 25
author bsw
date Thu Mar 15 13:12:51 2012 +0100 (2012-03-15)
parents 0df9f48e5ce9
children c1dc3b14a4f3
line source
1 local issue = param.get("issue", "table")
3 local initiatives_selector = param.get("initiatives_selector", "table")
5 local highlight_initiative = param.get("highlight_initiative", "table")
7 local for_member = param.get("for_member", "table") or app.session.member
9 initiatives_selector
10 :join("issue", nil, "issue.id = initiative.issue_id")
12 if app.session.member_id then
13 initiatives_selector
14 :left_join("initiator", "_initiator", { "_initiator.initiative_id = initiative.id AND _initiator.member_id = ? AND _initiator.accepted", for_member.id } )
15 :left_join("supporter", "_supporter", { "_supporter.initiative_id = initiative.id AND _supporter.member_id = ?", for_member.id} )
16 :left_join("delegating_interest_snapshot", "_delegating_interest_snapshot", { "_delegating_interest_snapshot.issue_id = initiative.issue_id AND _delegating_interest_snapshot.member_id = ? AND _delegating_interest_snapshot.event = issue.latest_snapshot_event", for_member.id} )
17 :left_join("direct_supporter_snapshot", "_direct_supporter_snapshot", "_direct_supporter_snapshot.initiative_id = initiative.id AND _direct_supporter_snapshot.member_id = _delegating_interest_snapshot.delegate_member_ids[array_upper(_delegating_interest_snapshot.delegate_member_ids, 1)] AND _direct_supporter_snapshot.event = issue.latest_snapshot_event")
19 :add_field("(_initiator.member_id NOTNULL)", "is_initiator")
20 :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)))", for_member.id }, "is_supporter")
21 :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)))", for_member.id }, "is_potential_supporter")
23 :add_field("_direct_supporter_snapshot.member_id NOTNULL", "is_supporter_via_delegation")
24 end
26 initiatives_selector:add_order_by("initiative.rank, initiative.supporter_count DESC, initiative.id")
28 local initiatives_count = initiatives_selector:count()
30 local limit = param.get("limit", atom.number)
32 local more_initiatives_count
33 if limit then
34 if initiatives_count > limit then
35 more_initiatives_count = initiatives_count - limit
36 end
37 initiatives_selector:limit(limit)
38 end
40 local issue = param.get("issue", "table")
42 local name = "initiative_list"
43 if issue then
44 name = "issue_" .. tostring(issue.id) .. "_initiative_list"
45 end
47 ui.add_partial_param_names{ name }
49 ui.paginate{
50 name = issue and "issue_" .. tostring(issue.id) .. "_page" or nil,
51 selector = initiatives_selector,
52 per_page = param.get("per_page", atom.number) or limit or 25,
53 content = function()
54 local initiatives = initiatives_selector:exec()
55 if highlight_initiative then
56 local highlight_initiative_found
57 for i, initiative in ipairs(initiatives) do
58 if initiative.id == highlight_initiative.id then
59 highhighlight_initiative_found = true
60 end
61 end
62 if not highhighlight_initiative_found then
63 initiatives[#initiatives+1] = highlight_initiative
64 if more_initiatives_count then
65 more_initiatives_count = more_initiatives_count - 1
66 end
67 end
68 end
69 for i, initiative in ipairs(initiatives) do
70 execute.view{
71 module = "initiative",
72 view = "_list_element",
73 params = {
74 initiative = initiative,
75 selected = highlight_initiative and highlight_initiative.id == initiative.id or nil,
76 }
77 }
78 end
79 end
80 }
82 if more_initiatives_count and more_initiatives_count > 0 then
83 local text
84 if more_initiatives_count == 1 then
85 text = _("and one more initiative")
86 else
87 text = _("and #{count} more initiatives", { count = more_initiatives_count })
88 end
89 ui.link{
90 attr = { class = "more_initiatives_link" },
91 content = text,
92 module = "issue",
93 view = "show",
94 id = issue.id,
95 }
96 end

Impressum / About Us