rev |
line source |
bsw/jbe@52
|
1 if not config.feature_rss_enabled then
|
bsw/jbe@52
|
2 error("feature not enabled")
|
bsw/jbe@52
|
3 end
|
bsw/jbe@52
|
4
|
bsw/jbe@52
|
5 local area_id = param.get("area_id", atom.integer)
|
bsw/jbe@52
|
6 local issue_id = param.get("issue_id", atom.integer)
|
bsw/jbe@52
|
7 local order = param.get("order") or "last_created"
|
bsw/jbe@52
|
8
|
bsw/jbe@52
|
9 local initiatives_selector = Initiative:new_selector()
|
bsw/jbe@52
|
10
|
bsw/jbe@52
|
11 local issue
|
bsw/jbe@52
|
12 local area
|
bsw/jbe@52
|
13
|
bsw/jbe@52
|
14 if issue_id then
|
bsw/jbe@52
|
15 issue = Issue:by_id(issue_id)
|
bsw/jbe@52
|
16 initiatives_selector:add_where{ "initiative.issue_id = ?", issue_id }
|
bsw/jbe@52
|
17 elseif area_id then
|
bsw/jbe@52
|
18 area = Area:by_id(area_id)
|
bsw/jbe@52
|
19 initiatives_selector:join("issue", nil, "issue.id = initiative.issue_id")
|
bsw/jbe@52
|
20 initiatives_selector:add_where{ "issue.area_id = ?", area_id }
|
bsw/jbe@52
|
21 end
|
bsw/jbe@52
|
22
|
bsw/jbe@52
|
23
|
bsw/jbe@52
|
24 if order == "last_created" then
|
bsw/jbe@52
|
25 initiatives_selector:add_order_by("initiative.created DESC")
|
bsw/jbe@52
|
26 initiatives_selector:add_field("initiative.created", "created_or_updated")
|
bsw/jbe@52
|
27 elseif order == "last_updated" then
|
bsw/jbe@52
|
28 initiatives_selector:add_field("(SELECT MAX(created) FROM draft WHERE initiative_id = initiative.id GROUP BY initiative_id)", "created_or_updated")
|
bsw/jbe@52
|
29 initiatives_selector:add_order_by("(SELECT MAX(created) FROM draft WHERE initiative_id = initiative.id GROUP BY initiative_id) DESC")
|
bsw/jbe@52
|
30 else
|
bsw/jbe@52
|
31 error("Invalid order")
|
bsw/jbe@52
|
32 end
|
bsw/jbe@52
|
33
|
bsw/jbe@52
|
34 initiatives_selector:add_order_by("id DESC")
|
bsw/jbe@52
|
35
|
bsw/jbe@52
|
36 initiatives_selector:limit(25)
|
bsw/jbe@52
|
37
|
bsw/jbe@52
|
38 local initiatives = initiatives_selector:exec()
|
bsw/jbe@52
|
39
|
bsw/jbe@19
|
40 slot.set_layout("atom")
|
bsw/jbe@19
|
41 request.force_absolute_baseurl()
|
bsw/jbe@19
|
42
|
bsw/jbe@52
|
43 ui.tag{
|
bsw/jbe@52
|
44 tag = "author",
|
bsw/jbe@52
|
45 content = function()
|
bsw/jbe@52
|
46 ui.tag{
|
bsw/jbe@52
|
47 tag = "name",
|
bsw/jbe@52
|
48 content = "LiquidFeedback"
|
bsw/jbe@52
|
49 }
|
bsw/jbe@52
|
50 end
|
bsw/jbe@52
|
51 }
|
bsw/jbe@52
|
52
|
bsw/jbe@52
|
53 local title
|
bsw/jbe@52
|
54
|
bsw/jbe@52
|
55 if issue then
|
bsw/jbe@52
|
56 title = "#" .. tostring(issue.id) .. " " .. issue.area.name
|
bsw/jbe@52
|
57 elseif area then
|
bsw/jbe@52
|
58 title = area.name
|
bsw/jbe@52
|
59 else
|
bsw/jbe@52
|
60 title = config.app_title
|
bsw/jbe@52
|
61 end
|
bsw/jbe@52
|
62
|
bsw/jbe@52
|
63 ui.tag{
|
bsw/jbe@52
|
64 tag = "title",
|
bsw/jbe@52
|
65 content = title
|
bsw/jbe@52
|
66 }
|
bsw/jbe@52
|
67
|
bsw/jbe@52
|
68 local subtitle
|
bsw/jbe@52
|
69 if order == "last_created" then
|
bsw/jbe@52
|
70 subtitle = "Initiatives (last created first)"
|
bsw/jbe@52
|
71 elseif order == "last_updated" then
|
bsw/jbe@52
|
72 subtitle = "Initiatives (last updated first)"
|
bsw/jbe@52
|
73 end
|
bsw/jbe@52
|
74
|
bsw/jbe@52
|
75 ui.tag{
|
bsw/jbe@52
|
76 tag = "subtitle",
|
bsw/jbe@52
|
77 content = subtitle
|
bsw/jbe@52
|
78 }
|
bsw/jbe@52
|
79
|
bsw/jbe@52
|
80 ui.tag{
|
bsw/jbe@52
|
81 tag = "id",
|
bsw@75
|
82 -- content = "urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6"
|
bsw/jbe@52
|
83 }
|
bsw/jbe@52
|
84
|
bsw@75
|
85 --[[
|
bsw/jbe@52
|
86 ui.tag{
|
bsw/jbe@52
|
87 tag = "updated",
|
bsw/jbe@52
|
88 content = "2003-12-14T10:20:09Z"
|
bsw/jbe@52
|
89 }
|
bsw@75
|
90 --]]
|
bsw/jbe@19
|
91
|
bsw/jbe@19
|
92 for i, initiative in ipairs(initiatives) do
|
bsw/jbe@19
|
93 ui.tag{
|
bsw/jbe@19
|
94 tag = "entry",
|
bsw/jbe@19
|
95 content = function()
|
bsw/jbe@52
|
96 slot.put("\n")
|
bsw/jbe@52
|
97 ui.tag{ tag = "category", attr = { term = encode.html(initiative.issue.area.name) } }
|
bsw/jbe@52
|
98 slot.put("\n")
|
bsw/jbe@52
|
99 ui.tag{ tag = "author", content = encode.html(initiative.current_draft.author.name) }
|
bsw/jbe@52
|
100 slot.put("\n")
|
bsw/jbe@52
|
101 ui.tag{ tag = "title", content = encode.html(initiative.shortened_name) }
|
bsw/jbe@52
|
102 slot.put("\n")
|
bsw/jbe@19
|
103 ui.tag{ tag = "link", attr = {
|
bsw/jbe@19
|
104 href = encode.url{
|
bsw/jbe@19
|
105 module = "initiative",
|
bsw/jbe@19
|
106 view = "show",
|
bsw/jbe@19
|
107 id = initiative.id
|
bsw/jbe@19
|
108 }
|
bsw/jbe@19
|
109 } }
|
bsw/jbe@52
|
110 slot.put("\n")
|
bsw/jbe@52
|
111 ui.tag{ tag = "id", content = "initiative_" .. tostring(initiative.id) }
|
bsw/jbe@52
|
112 slot.put("\n")
|
bsw/jbe@52
|
113 ui.tag{ tag = "updated", content = tostring(initiative.created_or_updated) }
|
bsw/jbe@52
|
114 slot.put("\n")
|
bsw/jbe@52
|
115 ui.tag{ tag = "content", content = encode.html(initiative.current_draft.content or "") }
|
bsw/jbe@52
|
116 slot.put("\n")
|
bsw/jbe@19
|
117 end
|
bsw/jbe@19
|
118 }
|
bsw/jbe@52
|
119 slot.put("\n")
|
bsw/jbe@52
|
120 end
|