rev |
line source |
bsw@11
|
1 local timeline_selector = param.get("timeline_selector", "table")
|
bsw@11
|
2 local event_names = param.get("event_names", "table")
|
bsw@11
|
3 local initiatives_per_page = param.get("initiatives_per_page", atom.number) or 3
|
bsw@11
|
4
|
poelzi@136
|
5
|
poelzi@136
|
6 -- test if selector is valid
|
poelzi@136
|
7 local test_selector = timeline_selector:get_db_conn():new_selector()
|
poelzi@136
|
8 test_selector:add_field('count(1)')
|
poelzi@136
|
9 test_selector:add_from(timeline_selector)
|
poelzi@136
|
10 test_selector:single_object_mode()
|
poelzi@136
|
11
|
poelzi@136
|
12 err, x = test_selector:try_exec()
|
bsw/jbe@19
|
13
|
poelzi@136
|
14 if err then
|
poelzi@136
|
15 slot.put_into("error", _"Invalid query")
|
poelzi@136
|
16 else
|
poelzi@136
|
17 ui.paginate{
|
poelzi@136
|
18 per_page = param.get("per_page", atom.number) or 25,
|
poelzi@136
|
19 selector = timeline_selector,
|
poelzi@145
|
20 container_attr = { class = "ui_paginate timeline_results" },
|
poelzi@136
|
21 content = function()
|
poelzi@136
|
22 local timelines = timeline_selector:exec()
|
poelzi@136
|
23 timelines:load("issue")
|
poelzi@136
|
24 timelines:load("initiative")
|
poelzi@136
|
25 timelines:load("member")
|
poelzi@136
|
26 ui.list{
|
poelzi@136
|
27 attr = { class = "nohover" },
|
poelzi@136
|
28 records = timelines,
|
poelzi@136
|
29 columns = {
|
poelzi@136
|
30 {
|
poelzi@136
|
31 field_attr = { style = "width: 10em;" },
|
poelzi@136
|
32 content = function(timeline)
|
bsw/jbe@19
|
33 ui.field.text{
|
poelzi@136
|
34 attr = { style = "font-size: 75%; font-weight: bold; background-color: #ccc; display: block; margin-bottom: 1ex;"},
|
poelzi@136
|
35 value = format.time(timeline.occurrence)
|
bsw/jbe@19
|
36 }
|
poelzi@136
|
37
|
poelzi@136
|
38 ui.field.text{
|
poelzi@136
|
39 attr = { style = "font-size: 75%; font-weight: bold;"},
|
poelzi@136
|
40 value = event_names[timeline.event] or timeline.event
|
poelzi@136
|
41 }
|
poelzi@136
|
42 if timeline.event == "draft_created" and timeline.count > 1 then
|
poelzi@136
|
43 ui.field.text{
|
poelzi@136
|
44 attr = { style = "font-size: 75%;"},
|
poelzi@136
|
45 value = _("(#{more_count} duplicates removed)", { more_count = timeline.count - 1 })
|
bsw@11
|
46 }
|
bsw@11
|
47 end
|
bsw@11
|
48 end
|
poelzi@136
|
49 },
|
poelzi@136
|
50 {
|
poelzi@136
|
51 content = function(timeline)
|
poelzi@136
|
52 local issue
|
poelzi@136
|
53 local initiative
|
poelzi@136
|
54 if timeline.issue then
|
poelzi@136
|
55 issue = timeline.issue
|
poelzi@136
|
56 elseif timeline.initiative then
|
poelzi@136
|
57 initiative = timeline.initiative
|
poelzi@136
|
58 issue = initiative.issue
|
poelzi@136
|
59 elseif timeline.draft then
|
poelzi@136
|
60 initiative = timeline.draft.initiative
|
poelzi@136
|
61 issue = initiative.issue
|
poelzi@136
|
62 elseif timeline.suggestion then
|
poelzi@136
|
63 initiative = timeline.suggestion.initiative
|
poelzi@136
|
64 issue = initiative.issue
|
poelzi@136
|
65 end
|
poelzi@136
|
66 if issue then
|
poelzi@136
|
67 if timeline.is_interested then
|
poelzi@136
|
68 local label = _"You are interested in this issue",
|
poelzi@136
|
69 ui.image{
|
poelzi@136
|
70 attr = { alt = label, title = label, style = "float: left; margin-right: 0.5em;" },
|
poelzi@136
|
71 static = "icons/16/eye.png"
|
poelzi@136
|
72 }
|
poelzi@136
|
73 end
|
poelzi@136
|
74 slot.put(" ")
|
poelzi@136
|
75 ui.tag{
|
poelzi@136
|
76 tag = "span",
|
poelzi@136
|
77 attr = { style = "font-size: 75%; font-weight: bold; background-color: #ccc; display: block; margin-bottom: 1ex;"},
|
bsw@265
|
78 content = issue.area.name_with_unit_name .. ", " .. _("Issue ##{id}", { id = issue.id })
|
poelzi@136
|
79 }
|
poelzi@136
|
80 else
|
poelzi@136
|
81 ui.tag{
|
poelzi@136
|
82 tag = "span",
|
poelzi@136
|
83 attr = { style = "font-size: 75%; background-color: #ccc; display: block; margin-bottom: 1ex;"},
|
poelzi@136
|
84 content = function() slot.put(" ") end
|
poelzi@136
|
85 }
|
poelzi@136
|
86 end
|
poelzi@136
|
87
|
poelzi@136
|
88 if timeline.member then
|
poelzi@136
|
89 execute.view{
|
poelzi@136
|
90 module = "member_image",
|
poelzi@136
|
91 view = "_show",
|
poelzi@136
|
92 params = {
|
poelzi@136
|
93 member = timeline.member,
|
poelzi@136
|
94 image_type = "avatar",
|
poelzi@136
|
95 show_dummy = true
|
poelzi@136
|
96 }
|
bsw@11
|
97 }
|
poelzi@136
|
98 ui.link{
|
poelzi@136
|
99 content = timeline.member.name,
|
poelzi@136
|
100 module = "member",
|
poelzi@136
|
101 view = "show",
|
poelzi@136
|
102 id = timeline.member.id
|
poelzi@136
|
103 }
|
poelzi@136
|
104 end
|
poelzi@136
|
105 if timeline.issue then
|
poelzi@136
|
106 local initiatives_selector = timeline.issue
|
poelzi@136
|
107 :get_reference_selector("initiatives")
|
poelzi@136
|
108 execute.view{
|
poelzi@136
|
109 module = "initiative",
|
poelzi@136
|
110 view = "_list",
|
poelzi@136
|
111 params = {
|
poelzi@136
|
112 issue = timeline.issue,
|
poelzi@136
|
113 initiatives_selector = initiatives_selector,
|
poelzi@136
|
114 per_page = initiatives_per_page,
|
poelzi@136
|
115 no_sort = true,
|
poelzi@136
|
116 limit = initiatives_per_page
|
poelzi@136
|
117 }
|
bsw@11
|
118 }
|
poelzi@136
|
119 elseif initiative then
|
poelzi@136
|
120 execute.view{
|
poelzi@136
|
121 module = "initiative",
|
poelzi@136
|
122 view = "_list",
|
poelzi@136
|
123 params = {
|
poelzi@136
|
124 issue = initiative.issue,
|
poelzi@136
|
125 initiatives_selector = Initiative:new_selector():add_where{ "initiative.id = ?", initiative.id },
|
poelzi@136
|
126 per_page = initiatives_per_page,
|
poelzi@136
|
127 no_sort = true
|
poelzi@136
|
128 }
|
poelzi@136
|
129 }
|
poelzi@136
|
130 end
|
poelzi@136
|
131 if timeline.suggestion then
|
poelzi@136
|
132 ui.link{
|
poelzi@136
|
133 module = "suggestion",
|
poelzi@136
|
134 view = "show",
|
poelzi@136
|
135 id = timeline.suggestion.id,
|
poelzi@136
|
136 content = timeline.suggestion.name
|
poelzi@136
|
137 }
|
poelzi@136
|
138 end
|
bsw@11
|
139 end
|
poelzi@136
|
140 },
|
poelzi@136
|
141 }
|
bsw@11
|
142 }
|
poelzi@136
|
143 end
|
poelzi@136
|
144 }
|
poelzi@136
|
145 end
|