# HG changeset patch
# User bsw
# Date 1330556886 -3600
# Node ID a80e74881cafea865043c58a064266f8e04d555d
# Parent f0a59bbf659ad6a6af5d335384508b28f0719378
More work at the notification system
diff -r f0a59bbf659a -r a80e74881caf model/event.lua
--- a/model/event.lua Thu Mar 01 00:07:46 2012 +0100
+++ b/model/event.lua Thu Mar 01 00:08:06 2012 +0100
@@ -11,6 +11,14 @@
function Event.object:send_notification()
+ local members_to_notify = Member:new_selector()
+ :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 = ?", self.id } )
+ :add_where("member.activated NOTNULL AND member.notify_email NOTNULL")
+ :exec()
+
+ print (_("Event #{id} -> #{num} members", { id = self.id, num = #members_to_notify }))
+
+
local url
local body = ""
@@ -58,32 +66,48 @@
body = body .. _("#{name}\n\n", { name = suggestion.name })
end
- slot.put("
", encode.html_newlines(body), "
")
- slot.put("
")
+ for i, member in ipairs(members_to_notify) do
+ local success = net.send_mail{
+ envelope_from = config.mail_envelope_from,
+ from = config.mail_from,
+ reply_to = config.mail_reply_to,
+ to = member.notify_email,
+ subject = config.mail_subject_prefix .. _("##{id} #{event}", { id = self.issue_id, event = self.event }), content_type = "text/plain; charset=UTF-8",
+ content = body
+ }
+ end
+
+ print(body)
+ print("")
end
-function Event:send_next_notification(last_event_id)
-
+function Event:send_next_notification()
+
+ local notification_sent = NotificationSent:new_selector()
+ :optional_object_mode()
+ :for_update()
+ :exec()
+
+ local last_event_id = 0
+ if notification_sent then
+ last_event_id = notification_sent.event_id
+ end
+
local event = Event:new_selector()
- :add_where{ "event.id > ?", last_id }
+ :add_where{ "event.id > ?", last_event_id }
:add_order_by("event.id")
:limit(1)
:optional_object_mode()
:exec()
- last_id = nil
if event then
- last_id = event.id
- local members_to_notify = Member:new_selector()
- :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 } )
- :add_where("member.activated NOTNULL AND member.notify_email NOTNULL")
- :exec()
-
- ui.container{ content = _("Event #{id} -> #{num} members", { id = event.id, num = #members_to_notify }) }
+ if last_event_id == 0 then
+ db:query{ "INSERT INTO notification_sent (event_id) VALUES (?)", event.id }
+ else
+ db:query{ "UPDATE notification_sent SET event_id = ?", event.id }
+ end
event:send_notification()
-
- return event.id
else
return last_event_id
diff -r f0a59bbf659a -r a80e74881caf model/notification_sent.lua
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/model/notification_sent.lua Thu Mar 01 00:08:06 2012 +0100
@@ -0,0 +1,2 @@
+NotificationSent = mondelefant.new_class()
+NotificationSent.table = 'notification_sent'