liquid_feedback_frontend
view env/model/has_rendered_content.lua @ 892:cf3fb80b5f05
Updated translation files for new strings
| author | bsw | 
|---|---|
| date | Mon Aug 20 03:06:19 2012 +0200 (2012-08-20) | 
| parents | ea3d3757ddc3 | 
| children | 773e0750709e | 
 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 class.primary_key then
    12       for i, key in ipairs(class.primary_key) do
    13         selector:add_where{ "$ = ?", { key }, self[key] }
    14         trace.debug(key, self[key], self.id)
    15       end
    16     else
    17       selector:add_where{ "id = ?", self.id }
    18     end
    20     local lock = selector:single_object_mode():for_update():exec()
    22     -- check if there is already a rendered content
    23     local selector = rendered_class:new_selector()
    24       if type(class.primary_key) == "table" then
    25         for i, key in ipairs(class.primary_key) do
    26           selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self[key] }
    27         end
    28       else
    29         selector:add_where{ "$.id = ?", { rendered_class.table }, self.id }
    30       end
    31       local rendered = selector:add_where{ "format = 'html'" }
    32       :optional_object_mode()
    33       :exec()
    34     if rendered then
    35       if force_rendering then
    36         rendered:destroy()
    37       else
    38         return rendered
    39       end
    40     end
    41     -- create rendered_class record
    42     local rendered = rendered_class:new()
    43     if type(class.primary_key) == "table" then
    44       for i, key in ipairs(class.primary_key) do
    45         rendered[key] = self[key]
    46       end
    47     else
    48       rendered[class.table .. "_id"] = self.id
    49     end
    50     rendered.format = "html"
    51     rendered.content = format.wiki_text(self[content_field_name], self.formatting_engine)
    52     rendered:save()
    53     -- and return it
    54     return rendered
    55   end
    57   -- returns rendered version for specific format
    58   function class.object:get_content(format)
    59     -- Fetch rendered_class record for specified format
    60     local selector = rendered_class:new_selector()
    61     if type(class.primary_key) == "table" then
    62       for i, key in ipairs(class.primary_key) do
    63         selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self.id }
    64       end
    65     else
    66       selector:add_where{ class.table .. "_id = ?", self.id }
    67     end
    68     local rendered = selector:add_where{ "format = ?", format }
    69       :optional_object_mode()
    70       :exec()
    71     -- If this format isn't rendered yet, render it
    72     if not rendered then
    73       rendered = self:render_content()
    74     end
    75     -- return rendered content
    76     return rendered.content
    77   end
    79 end
