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