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