liquid_feedback_frontend

diff env/model/has_rendered_content.lua @ 879:ea3d3757ddc3

Added support for voting comments
author bsw
date Mon Aug 20 01:00:09 2012 +0200 (2012-08-20)
parents 6cfdb2e5d3d4
children 773e0750709e
line diff
     1.1 --- a/env/model/has_rendered_content.lua	Sat Aug 18 23:22:20 2012 +0200
     1.2 +++ b/env/model/has_rendered_content.lua	Mon Aug 20 01:00:09 2012 +0200
     1.3 @@ -5,15 +5,30 @@
     1.4    -- render content to html, save it as rendered_class and return it
     1.5    function class.object:render_content(force_rendering)
     1.6      -- local draft for update
     1.7 -    local lock = class:new_selector()
     1.8 -      :add_where{ "id = ?", self.id }
     1.9 -      :single_object_mode()
    1.10 -      :for_update()
    1.11 -      :exec()
    1.12 +
    1.13 +    local selector = class:new_selector()
    1.14 +
    1.15 +    if class.primary_key then
    1.16 +      for i, key in ipairs(class.primary_key) do
    1.17 +        selector:add_where{ "$ = ?", { key }, self[key] }
    1.18 +        trace.debug(key, self[key], self.id)
    1.19 +      end
    1.20 +    else
    1.21 +      selector:add_where{ "id = ?", self.id }
    1.22 +    end
    1.23 +    
    1.24 +    local lock = selector:single_object_mode():for_update():exec()
    1.25 +      
    1.26      -- check if there is already a rendered content
    1.27 -    local rendered = rendered_class:new_selector()
    1.28 -      :add_where{ class.table .. "_id = ?", self.id }
    1.29 -      :add_where{ "format = 'html'" }
    1.30 +    local selector = rendered_class:new_selector()
    1.31 +      if type(class.primary_key) == "table" then
    1.32 +        for i, key in ipairs(class.primary_key) do
    1.33 +          selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self[key] }
    1.34 +        end
    1.35 +      else
    1.36 +        selector:add_where{ "$.id = ?", { rendered_class.table }, self.id }
    1.37 +      end
    1.38 +      local rendered = selector:add_where{ "format = 'html'" }
    1.39        :optional_object_mode()
    1.40        :exec()
    1.41      if rendered then
    1.42 @@ -25,7 +40,13 @@
    1.43      end
    1.44      -- create rendered_class record
    1.45      local rendered = rendered_class:new()
    1.46 -    rendered[class.table .. "_id"] = self.id
    1.47 +    if type(class.primary_key) == "table" then
    1.48 +      for i, key in ipairs(class.primary_key) do
    1.49 +        rendered[key] = self[key]
    1.50 +      end
    1.51 +    else
    1.52 +      rendered[class.table .. "_id"] = self.id
    1.53 +    end
    1.54      rendered.format = "html"
    1.55      rendered.content = format.wiki_text(self[content_field_name], self.formatting_engine)
    1.56      rendered:save()
    1.57 @@ -36,9 +57,15 @@
    1.58    -- returns rendered version for specific format
    1.59    function class.object:get_content(format)
    1.60      -- Fetch rendered_class record for specified format
    1.61 -    local rendered = rendered_class:new_selector()
    1.62 -      :add_where{ class.table .. "_id = ?", self.id }
    1.63 -      :add_where{ "format = ?", format }
    1.64 +    local selector = rendered_class:new_selector()
    1.65 +    if type(class.primary_key) == "table" then
    1.66 +      for i, key in ipairs(class.primary_key) do
    1.67 +        selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self.id }
    1.68 +      end
    1.69 +    else
    1.70 +      selector:add_where{ class.table .. "_id = ?", self.id }
    1.71 +    end
    1.72 +    local rendered = selector:add_where{ "format = ?", format }
    1.73        :optional_object_mode()
    1.74        :exec()
    1.75      -- If this format isn't rendered yet, render it

Impressum / About Us