liquid_feedback_frontend
view env/model/has_rendered_content.lua @ 1013:a25e3b9a8059
Corrected wrong usage of initiative list partial view in admin cancel issue
| author | bsw | 
|---|---|
| date | Sun Aug 11 22:08:01 2013 +0200 (2013-08-11) | 
| parents | 403e8c211592 | 
| children | 701a5cf6b067 | 
 line source
     1 function model.has_rendered_content(class, rendered_class, content_field_name)
     3   local content_field_name = content_field_name or 'content'
     5   -- render content to html, save it as rendered_class and return it
     6   function class.object:render_content(force_rendering)
     7     -- local draft for update
     9     local selector = class:new_selector()
    11     if type(class.primary_key) == "table" then
    12       for i, key in ipairs(class.primary_key) do
    13         selector:add_where{ "$ = ?", { key }, self[key] }
    14       end
    15     else
    16       selector:add_where{ "id = ?", self.id }
    17     end
    19     local lock = selector:single_object_mode():for_update():exec()
    21     -- check if there is already a rendered content
    22     local selector = rendered_class:new_selector()
    23       if type(class.primary_key) == "table" then
    24         for i, key in ipairs(class.primary_key) do
    25           selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self[key] }
    26         end
    27       else
    28         selector:add_where{ "$." .. class.table .. "_id = ?", { rendered_class.table }, self.id }
    29       end
    30       local rendered = selector:add_where{ "format = 'html'" }
    31       :optional_object_mode()
    32       :exec()
    33     if rendered then
    34       if force_rendering then
    35         rendered:destroy()
    36       else
    37         return rendered
    38       end
    39     end
    40     -- create rendered_class record
    41     local rendered = rendered_class:new()
    42     if type(class.primary_key) == "table" then
    43       for i, key in ipairs(class.primary_key) do
    44         rendered[key] = self[key]
    45       end
    46     else
    47       rendered[class.table .. "_id"] = self.id
    48     end
    49     rendered.format = "html"
    50     rendered.content = format.wiki_text(self[content_field_name], self.formatting_engine)
    51     rendered:save()
    52     -- and return it
    53     return rendered
    54   end
    56   -- returns rendered version for specific format
    57   function class.object:get_content(format)
    58     -- Fetch rendered_class record for specified format
    59     local selector = rendered_class:new_selector()
    60     if type(class.primary_key) == "table" then
    61       for i, key in ipairs(class.primary_key) do
    62         selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self.id }
    63       end
    64     else
    65       selector:add_where{ class.table .. "_id = ?", self.id }
    66     end
    67     local rendered = selector:add_where{ "format = ?", format }
    68       :optional_object_mode()
    69       :exec()
    70     -- If this format isn't rendered yet, render it
    71     if not rendered then
    72       rendered = self:render_content()
    73     end
    74     -- return rendered content
    75     return rendered.content
    76   end
    78 end
