| 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 |