liquid_feedback_frontend

annotate model/draft.lua @ 124:f740026b1518

add initiator support in delegation

if a delegation is issued from the initiative view, the initiators
from that one are added to the delegation target list. this makes it easier to delegate to the author without the need to add him to the contact list.
author Daniel Poelzleithner <poelzi@poelzi.org>
date Mon Sep 20 20:32:04 2010 +0200 (2010-09-20)
parents 134fce4bede3
children 23c98752e697
rev   line source
bsw/jbe@0 1 Draft = mondelefant.new_class()
bsw/jbe@0 2 Draft.table = 'draft'
bsw/jbe@0 3
bsw@81 4 -- Many drafts belonging to an initiative
bsw/jbe@0 5 Draft:add_reference{
bsw/jbe@0 6 mode = 'm1',
bsw/jbe@0 7 to = "Initiative",
bsw/jbe@0 8 this_key = 'initiative_id',
bsw/jbe@0 9 that_key = 'id',
bsw/jbe@0 10 ref = 'initiative',
bsw/jbe@0 11 }
bsw/jbe@0 12
bsw@81 13 -- Many drafts are authored by a member
bsw/jbe@0 14 Draft:add_reference{
bsw/jbe@0 15 mode = 'm1',
bsw/jbe@0 16 to = "Member",
bsw/jbe@0 17 this_key = 'author_id',
bsw/jbe@0 18 that_key = 'id',
bsw/jbe@0 19 ref = 'author',
bsw/jbe@0 20 }
bsw/jbe@0 21
bsw/jbe@0 22 function Draft.object_get:author_name()
bsw/jbe@0 23 return self.author and self.author.name or _"Unknown author"
bsw/jbe@0 24 end
bsw@81 25
bsw@81 26 -- render draft to html, save it as rendered_draft and return it
bsw@81 27 function Draft.object:render_content()
bsw@81 28 -- local draft for update
bsw@81 29 local draft_lock = Draft:new_selector()
bsw@81 30 :add_where{ "id = ?", self.id }
bsw@81 31 :single_object_mode()
bsw@81 32 :for_update()
bsw@81 33 :exec()
bsw@81 34 -- check if there is already a rendered draft
bsw@81 35 local rendered_draft = RenderedDraft:new_selector()
bsw@81 36 :add_where{ "draft_id = ?", self.id }
bsw@81 37 :add_where{ "format = 'html'" }
bsw@81 38 :optional_object_mode()
bsw@81 39 :exec()
bsw@81 40 if rendered_draft then
bsw@81 41 return rendered_draft
bsw@81 42 end
bsw@81 43 -- create rendered_draft record
bsw@81 44 local rendered_draft = RenderedDraft:new()
bsw@81 45 rendered_draft.draft_id = self.id
bsw@81 46 rendered_draft.format = "html"
bsw@81 47 rendered_draft.content = format.wiki_text(self.content, self.formatting_engine)
bsw@81 48 rendered_draft:save()
bsw@81 49 -- and return it
bsw@81 50 return rendered_draft
bsw@81 51 end
bsw@81 52
bsw@81 53 -- returns rendered version of draft for specific format
bsw@81 54 function Draft.object:get_content(format)
bsw@81 55 -- Fetch rendered_draft record for specified format
bsw@81 56 local rendered_draft = RenderedDraft:new_selector()
bsw@81 57 :add_where{ "draft_id = ?", self.id }
bsw@81 58 :add_where{ "format = ?", format }
bsw@81 59 :optional_object_mode()
bsw@81 60 :exec()
bsw@81 61 -- If this format isn't rendered yet, render it
bsw@81 62 if not rendered_draft then
bsw@81 63 rendered_draft = self:render_content()
bsw@81 64 end
bsw@81 65 -- return rendered content
bsw@81 66 return rendered_draft.content
bsw@81 67 end

Impressum / About Us