bsw/jbe@0: Draft = mondelefant.new_class() bsw/jbe@0: Draft.table = 'draft' bsw/jbe@0: bsw@81: -- Many drafts belonging to an initiative bsw/jbe@0: Draft:add_reference{ bsw/jbe@0: mode = 'm1', bsw/jbe@0: to = "Initiative", bsw/jbe@0: this_key = 'initiative_id', bsw/jbe@0: that_key = 'id', bsw/jbe@0: ref = 'initiative', bsw/jbe@0: } bsw/jbe@0: bsw@81: -- Many drafts are authored by a member bsw/jbe@0: Draft:add_reference{ bsw/jbe@0: mode = 'm1', bsw/jbe@0: to = "Member", bsw/jbe@0: this_key = 'author_id', bsw/jbe@0: that_key = 'id', bsw/jbe@0: ref = 'author', bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: function Draft.object_get:author_name() bsw/jbe@0: return self.author and self.author.name or _"Unknown author" bsw/jbe@0: end bsw@81: bsw@81: -- render draft to html, save it as rendered_draft and return it bsw@81: function Draft.object:render_content() bsw@81: -- local draft for update bsw@81: local draft_lock = Draft:new_selector() bsw@81: :add_where{ "id = ?", self.id } bsw@81: :single_object_mode() bsw@81: :for_update() bsw@81: :exec() bsw@81: -- check if there is already a rendered draft bsw@81: local rendered_draft = RenderedDraft:new_selector() bsw@81: :add_where{ "draft_id = ?", self.id } bsw@81: :add_where{ "format = 'html'" } bsw@81: :optional_object_mode() bsw@81: :exec() bsw@81: if rendered_draft then bsw@81: return rendered_draft bsw@81: end bsw@81: -- create rendered_draft record bsw@81: local rendered_draft = RenderedDraft:new() bsw@81: rendered_draft.draft_id = self.id bsw@81: rendered_draft.format = "html" bsw@81: rendered_draft.content = format.wiki_text(self.content, self.formatting_engine) bsw@81: rendered_draft:save() bsw@81: -- and return it bsw@81: return rendered_draft bsw@81: end bsw@81: bsw@81: -- returns rendered version of draft for specific format bsw@81: function Draft.object:get_content(format) bsw@81: -- Fetch rendered_draft record for specified format bsw@81: local rendered_draft = RenderedDraft:new_selector() bsw@81: :add_where{ "draft_id = ?", self.id } bsw@81: :add_where{ "format = ?", format } bsw@81: :optional_object_mode() bsw@81: :exec() bsw@81: -- If this format isn't rendered yet, render it bsw@81: if not rendered_draft then bsw@81: rendered_draft = self:render_content() bsw@81: end bsw@81: -- return rendered content bsw@81: return rendered_draft.content bsw@81: end