liquid_feedback_frontend

annotate model/event.lua @ 326:75ce92899049

Work on "config/example.lua" as complete example configuration; Removed config.absolute_base_url
author jbe
date Tue Feb 28 17:59:42 2012 +0100 (2012-02-28)
parents ee477a136fd4
children a80e74881caf
rev   line source
bsw@286 1 Event = mondelefant.new_class()
bsw@286 2 Event.table = 'event'
bsw@286 3
bsw@286 4 Event:add_reference{
bsw@286 5 mode = 'm1',
bsw@286 6 to = "Issue",
bsw@286 7 this_key = 'issue_id',
bsw@286 8 that_key = 'id',
bsw@286 9 ref = 'issue',
bsw@287 10 }
bsw@287 11
bsw@287 12 function Event.object:send_notification()
bsw@287 13
bsw@287 14 local url
bsw@287 15
bsw@287 16 local body = ""
bsw@287 17
bsw@287 18 body = body .. _(" Unit: #{name}\n", { name = self.issue.area.unit.name })
bsw@287 19 body = body .. _(" Area: #{name}\n", { name = self.issue.area.name })
bsw@287 20 body = body .. _(" Issue: ##{id}\n", { id = self.issue_id })
bsw@287 21 body = body .. _(" Policy: #{phase}\n", { phase = self.issue.policy.name })
bsw@287 22 body = body .. _(" Phase: #{phase}\n\n", { phase = self.state })
bsw@287 23 body = body .. _(" Event: #{event}\n\n", { event = self.event })
bsw@287 24
bsw@287 25 if self.initiative_id then
bsw@287 26 url = request.get_absolute_baseurl() .. "initiative/show/" .. self.initiative_id .. ".html"
bsw@287 27 elseif self.suggestion_id then
bsw@287 28 url = request.get_absolute_baseurl() .. "suggestion/show/" .. self.suggestion_id .. ".html"
bsw@287 29 else
bsw@287 30 url = request.get_absolute_baseurl() .. "issue/show/" .. self.issue_id .. ".html"
bsw@287 31 end
bsw@287 32
bsw@287 33 body = body .. _(" URL: #{url}\n\n", { url = url })
bsw@287 34
bsw@287 35 if self.initiative_id then
bsw@287 36 local initiative = Initiative:by_id(self.initiative_id)
bsw@287 37 body = body .. _("i#{id}: #{name}\n\n", { id = initiative.id, name = initiative.name })
bsw@287 38 else
bsw@287 39 local initiative_count = Initiative:new_selector()
bsw@287 40 :add_where{ "initiative.issue_id = ?", self.issue_id }
bsw@287 41 :count()
bsw@287 42 local initiatives = Initiative:new_selector()
bsw@287 43 :add_where{ "initiative.issue_id = ?", self.issue_id }
bsw@287 44 :add_order_by("initiative.supporter_count DESC")
bsw@287 45 :limit(3)
bsw@287 46 :exec()
bsw@287 47 for i, initiative in ipairs(initiatives) do
bsw@287 48 body = body .. _("i#{id}: #{name}\n", { id = initiative.id, name = initiative.name })
bsw@287 49 end
bsw@287 50 if initiative_count - 3 > 0 then
bsw@287 51 body = body .. _("and #{count} more initiatives\n", { count = initiative_count })
bsw@287 52 end
bsw@287 53 body = body .. "\n"
bsw@287 54 end
bsw@287 55
bsw@287 56 if self.suggestion_id then
bsw@287 57 local suggestion = Suggestion:by_id(self.suggestion_id)
bsw@287 58 body = body .. _("#{name}\n\n", { name = suggestion.name })
bsw@287 59 end
bsw@287 60
bsw@287 61 slot.put("<pre>", encode.html_newlines(body), "</pre>")
bsw@287 62 slot.put("<hr />")
bsw@287 63 end
bsw@287 64
bsw@287 65 function Event:send_next_notification(last_event_id)
bsw@287 66
bsw@287 67 local event = Event:new_selector()
bsw@287 68 :add_where{ "event.id > ?", last_id }
bsw@287 69 :add_order_by("event.id")
bsw@287 70 :limit(1)
bsw@287 71 :optional_object_mode()
bsw@287 72 :exec()
bsw@287 73
bsw@287 74 last_id = nil
bsw@287 75 if event then
bsw@287 76 last_id = event.id
bsw@287 77 local members_to_notify = Member:new_selector()
bsw@287 78 :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 } )
bsw@287 79 :add_where("member.activated NOTNULL AND member.notify_email NOTNULL")
bsw@287 80 :exec()
bsw@287 81
bsw@287 82 ui.container{ content = _("Event #{id} -> #{num} members", { id = event.id, num = #members_to_notify }) }
bsw@287 83
bsw@287 84 event:send_notification()
bsw@287 85
bsw@287 86 return event.id
bsw@287 87
bsw@287 88 else
bsw@287 89 return last_event_id
bsw@287 90
bsw@287 91 end
bsw@287 92
bsw@287 93 end

Impressum / About Us