rev |
line source |
bsw@558
|
1 local notification_links = {}
|
bsw@558
|
2
|
bsw@558
|
3 if app.session.member.notify_email_unconfirmed then
|
bsw@558
|
4 notification_links[#notification_links+1] = {
|
bsw@558
|
5 module = "index", view = "email_unconfirmed",
|
bsw@558
|
6 text = _"Please confirm your email address"
|
bsw@558
|
7 }
|
bsw@558
|
8 end
|
bsw@558
|
9
|
bsw@558
|
10 if app.session.member.notify_level == nil then
|
bsw@558
|
11 notification_links[#notification_links+1] = {
|
bsw@558
|
12 module = "member", view = "settings_notification",
|
bsw@558
|
13 text = _"Please select your preferred notification level"
|
bsw@558
|
14 }
|
bsw@558
|
15 end
|
bsw@558
|
16
|
bsw@988
|
17 if config.check_delegations_interval_soft then
|
bsw@988
|
18 local member = Member:new_selector()
|
bsw@988
|
19 :add_where({ "id = ?", app.session.member_id })
|
bsw@988
|
20 :add_field({ "now() > COALESCE(last_delegation_check, activated) + ?::interval", config.check_delegations_interval_soft }, "needs_delegation_check_soft")
|
bsw@988
|
21 :single_object_mode()
|
bsw@988
|
22 :exec()
|
bsw@988
|
23
|
bsw@990
|
24
|
bsw@988
|
25 if member.needs_delegation_check_soft then
|
bsw@990
|
26
|
bsw@990
|
27 local delegations = Delegation:delegations_to_check_for_member_id(member.id)
|
bsw@990
|
28
|
bsw@990
|
29 if #delegations > 0 then
|
bsw@990
|
30 notification_links[#notification_links+1] = {
|
bsw@990
|
31 module = "index", view = "check_delegations",
|
bsw@990
|
32 text = _"Check your delegations!"
|
bsw@990
|
33 }
|
bsw@990
|
34 end
|
bsw@990
|
35
|
bsw@988
|
36 end
|
bsw@988
|
37 end
|
bsw@988
|
38
|
bsw@558
|
39 local broken_delegations_count = Delegation:selector_for_broken(app.session.member_id):count()
|
bsw@558
|
40
|
bsw@558
|
41 if broken_delegations_count > 0 then
|
bsw@558
|
42 notification_links[#notification_links+1] = {
|
bsw@558
|
43 module = "index", view = "broken_delegations",
|
bsw@558
|
44 text = _("#{count} of your outgoing delegation(s) are broken", { count = broken_delegations_count })
|
bsw@558
|
45 }
|
bsw@558
|
46
|
bsw@558
|
47 end
|
bsw@558
|
48
|
bsw@558
|
49 local selector = Issue:new_selector()
|
bsw@558
|
50 :join("area", nil, "area.id = issue.area_id")
|
bsw@558
|
51 :join("privilege", nil, { "privilege.unit_id = area.unit_id AND privilege.member_id = ? AND privilege.voting_right", app.session.member_id })
|
bsw@558
|
52 :left_join("direct_voter", nil, { "direct_voter.issue_id = issue.id AND direct_voter.member_id = ?", app.session.member.id })
|
bsw@889
|
53 :left_join("non_voter", nil, { "non_voter.issue_id = issue.id AND non_voter.member_id = ?", app.session.member.id })
|
bsw@558
|
54 :left_join("interest", nil, { "interest.issue_id = issue.id AND interest.member_id = ?", app.session.member.id })
|
bsw@558
|
55 :add_where{ "direct_voter.member_id ISNULL" }
|
bsw@889
|
56 :add_where{ "non_voter.member_id ISNULL" }
|
bsw@558
|
57 :add_where{ "interest.member_id NOTNULL" }
|
bsw@558
|
58 :add_where{ "issue.fully_frozen NOTNULL" }
|
bsw@558
|
59 :add_where{ "issue.closed ISNULL" }
|
bsw@558
|
60 :add_order_by{ "issue.fully_frozen + issue.voting_time ASC" }
|
bsw@558
|
61
|
bsw@558
|
62 local issues_to_vote_count = selector:count()
|
bsw@558
|
63 if issues_to_vote_count > 0 then
|
bsw@558
|
64 notification_links[#notification_links+1] = {
|
bsw@558
|
65 module = "index", view = "index",
|
bsw@558
|
66 params = {
|
bsw@559
|
67 tab = "open", filter = "frozen", filter_interest = "issue", filter_delegation = "direct", filter_voting = "not_voted"
|
bsw@558
|
68 },
|
bsw@559
|
69 text = _("You have not voted #{count} issue(s) you were interested in", { count = issues_to_vote_count })
|
bsw@558
|
70 }
|
bsw@558
|
71 end
|
bsw@558
|
72
|
bsw@558
|
73 local initiator_invites_count = Initiator:selector_for_invites(app.session.member_id):count()
|
bsw@558
|
74
|
bsw@558
|
75 if initiator_invites_count > 0 then
|
bsw@558
|
76 notification_links[#notification_links+1] = {
|
bsw@558
|
77 module = "index", view = "initiator_invites",
|
bsw@558
|
78 text = _("You are invited to #{count} initiative(s)", { count = initiator_invites_count })
|
bsw@558
|
79 }
|
bsw@558
|
80 end
|
bsw@558
|
81
|
bsw@558
|
82 updated_drafts_count = Initiative:selector_for_updated_drafts(app.session.member_id):count()
|
bsw@558
|
83
|
bsw@558
|
84 if updated_drafts_count > 0 then
|
bsw@558
|
85 notification_links[#notification_links+1] = {
|
bsw@558
|
86 module = "index", view = "updated_drafts",
|
bsw@558
|
87 text = _("New drafts for #{count} initiative(s) you are supporting", { count = updated_drafts_count })
|
bsw@558
|
88 }
|
bsw@558
|
89 end
|
bsw@558
|
90
|
bsw@558
|
91 if #notification_links > 0 then
|
bsw@558
|
92 ui.container{ attr = { class = "notifications" }, content = function()
|
bsw@558
|
93 ui.tag{ tag = "ul", attr = { class = "notifications" }, content = function()
|
bsw@558
|
94 for i, notification_link in ipairs(notification_links) do
|
bsw@558
|
95 ui.tag{ tag = "li", content = function()
|
bsw@558
|
96 ui.link(notification_link)
|
bsw@558
|
97 end }
|
bsw@558
|
98 end
|
bsw@558
|
99 end }
|
bsw@558
|
100 end }
|
bsw@558
|
101 end
|
bsw@558
|
102
|
bsw@558
|
103
|