liquid_feedback_frontend

view app/main/member/settings_notification.lua @ 286:c587d8762e62

Registration process updated for Core 2.0, lockable member fields, notification settings
author bsw
date Sat Feb 25 11:51:37 2012 +0100 (2012-02-25)
parents
children ee477a136fd4
line source
1 function send_notification(event)
3 local url
5 local body = ""
7 body = body .. _(" Unit: #{name}\n", { name = event.issue.area.unit.name })
8 body = body .. _(" Area: #{name}\n", { name = event.issue.area.name })
9 body = body .. _(" Issue: ##{id}\n", { id = event.issue_id })
10 body = body .. _(" Policy: #{phase}\n", { phase = event.issue.policy.name })
11 body = body .. _(" Phase: #{phase}\n\n", { phase = event.state })
12 body = body .. _(" Event: #{event}\n\n", { event = event.event })
14 if event.initiative_id then
15 url = request.get_absolute_baseurl() .. "initiative/show/" .. event.initiative_id .. ".html"
16 elseif event.suggestion_id then
17 url = request.get_absolute_baseurl() .. "suggestion/show/" .. event.suggestion_id .. ".html"
18 else
19 url = request.get_absolute_baseurl() .. "issue/show/" .. event.issue_id .. ".html"
20 end
22 body = body .. _(" URL: #{url}\n\n", { url = url })
24 if event.initiative_id then
25 local initiative = Initiative:by_id(event.initiative_id)
26 body = body .. _("i#{id}: #{name}\n\n", { id = initiative.id, name = initiative.name })
27 else
28 local initiative_count = Initiative:new_selector()
29 :add_where{ "initiative.issue_id = ?", event.issue_id }
30 :count()
31 local initiatives = Initiative:new_selector()
32 :add_where{ "initiative.issue_id = ?", event.issue_id }
33 :add_order_by("initiative.supporter_count DESC")
34 :limit(3)
35 :exec()
36 for i, initiative in ipairs(initiatives) do
37 body = body .. _("i#{id}: #{name}\n", { id = initiative.id, name = initiative.name })
38 end
39 if initiative_count - 3 > 0 then
40 body = body .. _("and #{count} more initiatives\n", { count = initiative_count })
41 end
42 body = body .. "\n"
43 end
45 if event.suggestion_id then
46 local suggestion = Suggestion:by_id(event.suggestion_id)
47 body = body .. _("#{name}\n\n", { name = suggestion.name })
48 end
50 slot.put("<pre>", encode.html_newlines(body), "</pre>")
51 slot.put("<hr />")
52 end
56 slot.put_into("title", _"Notification settings")
58 slot.select("actions", function()
59 ui.link{
60 content = function()
61 ui.image{ static = "icons/16/cancel.png" }
62 slot.put(_"Cancel")
63 end,
64 module = "member",
65 view = "settings"
66 }
67 end)
70 util.help("member.settings.notification", _"Notification settings")
72 ui.form{
73 attr = { class = "vertical" },
74 module = "member",
75 action = "update_notification",
76 routing = {
77 ok = {
78 mode = "redirect",
79 module = "index",
80 view = "index"
81 }
82 },
83 content = function()
84 ui.tag{ tag = "p", _"Send me notifications about issues in following phases:" }
86 ui.container{ content = function()
87 ui.tag{
88 tag = "input",
89 attr = { type = "radio", name = "notification_level", value = "voting" }
90 }
91 ui.tag{ content = _"Voting phase" }
92 ui.tag{ tag = "ul", content = function()
93 ui.tag{ tag = "li", content = _"Voting of an issue in one of my areas or I'm interested in starts" }
94 end }
95 end }
97 ui.container{ content = function()
98 ui.tag{
99 tag = "input",
100 attr = { type = "radio", name = "notification_level", value = "frozen" }
101 }
102 ui.tag{ content = _"Frozen and voting phase" }
103 ui.tag{ tag = "ul", content = function()
104 ui.tag{ tag = "li", content = _"An issue in one of my areas or I'm interested in enters phase 'frozen'" }
105 ui.tag{ tag = "li", content = _"A new initiative is created in an issue I'm interested in" }
106 ui.tag{ tag = "li", content = _"Voting of an issue in one of my areas or I'm interested in starts" }
107 end }
108 end }
110 ui.container{ content = function()
111 ui.tag{
112 tag = "input",
113 attr = { type = "radio", name = "notification_level", value = "discussion" }
114 }
115 ui.tag{ content = _"Discussion, frozen and voting phase" }
116 ui.tag{ tag = "ul", content = function()
117 ui.tag{ tag = "li", content = _"An issue in one of my areas or I'm interested in enters phase 'discussion'" }
118 ui.tag{ tag = "li", content = _"A new initiative is created in an issue I'm interested in" }
119 ui.tag{ tag = "li", content = _"The draft of an initiative I'm supporting is updated" }
120 ui.tag{ tag = "li", content = _"An initiative I was supporting is revoked" }
121 ui.tag{ tag = "li", content = _"A new suggestion is created in an initiative I'm supporting" }
122 ui.tag{ tag = "li", content = _"An issue in one of my areas or I'm interested in enters phase 'frozen'" }
123 ui.tag{ tag = "li", content = _"Voting of an issue in one of my areas or I'm interested in starts" }
124 end }
125 end }
127 ui.container{ content = function()
128 ui.tag{
129 tag = "input",
130 attr = { type = "radio", name = "notification_level", value = "any" }
131 }
132 ui.tag{ content = _"Any phase" }
133 ui.tag{ tag = "ul", content = function()
134 ui.tag{ tag = "li", content = _"A new issue is created in one of my areas" }
135 ui.tag{ tag = "li", content = _"An issue in one of my areas or i'm interested in enters phase 'discussion'" }
136 ui.tag{ tag = "li", content = _"A new initiative is created in an issue I'm interested in" }
137 ui.tag{ tag = "li", content = _"The draft of an initiative I'm supporting is updated" }
138 ui.tag{ tag = "li", content = _"An initiative I was supporting is revoked" }
139 ui.tag{ tag = "li", content = _"A new suggestion is created in an initiative I'm supporting" }
140 ui.tag{ tag = "li", content = _"An issue in one of my areas or I'm interested in enters phase 'frozen'" }
141 ui.tag{ tag = "li", content = _"Voting of an issue in one of my areas or I'm interested in starts" }
142 end }
143 end }
145 ui.container{ content = function()
146 ui.tag{
147 tag = "input",
148 attr = { type = "radio", name = "notification_level", value = "none" }
149 }
150 ui.tag{ content = _"No notifications at all" }
151 end }
155 ui.submit{ value = _"Change display settings" }
156 end
157 }
159 local last_id = 6000;
161 while last_id < 6050 do
163 local event = Event:new_selector()
164 :add_where{ "event.id > ?", last_id }
165 :add_order_by("event.id")
166 :limit(1)
167 :optional_object_mode()
168 :exec()
170 last_id = nil
171 if event then
172 last_id = event.id
173 local members_to_notify = Member:new_selector()
174 :join("event_seen_by_member", nil, { "event_seen_by_member.seen_by_member_id = member.id AND event_seen_by_member.notify_level <= member.notify_level AND event_seen_by_member.id = ?", event.id } )
175 :add_where("member.activated NOTNULL AND member.notify_email NOTNULL")
176 :exec()
177 ui.container{ content = _("Event #{id} -> #{num} members", { id = event.id, num = #members_to_notify }) }
179 send_notification(event)
181 end
182 end
185 -- select event.id, event.occurrence, membership.member_id NOTNULL as membership, interest.member_id NOTNULL as interest, supporter.member_id NOTNULL as supporter, event.event, event.state, issue.id, initiative.name FROM event JOIN issue ON issue.id = event.issue_id LEFT JOIN membership ON membership.area_id = issue.area_id AND membership.member_id = 41 LEFT JOIN interest ON interest.issue_id = issue.id AND interest.member_id = 41 LEFT JOIN initiative ON initiative.id = event.initiative_id LEFT JOIN supporter ON supporter.initiative_id = initiative.id AND supporter.member_id = 41 WHERE (((event.event = 'issue_state_changed' OR event.event = 'initiative_created_in_new_issue') AND membership.member_id NOTNULL OR interest.member_id NOTNULL) OR (event.event = 'initiative_created_in_existing_issue' AND interest.member_id NOTNULL) OR ((event.event = 'initiative_revoked' OR event.event = 'new_draft_created' OR event.event = 'suggestion_created') AND supporter.member_id NOTNULL)) AND event.id > 7000 ORDER by event.id ASC LIMIT 1;

Impressum / About Us