liquid_feedback_frontend

annotate env/model/has_rendered_content.lua @ 1045:701a5cf6b067

Imported LiquidFeedback Frontend 3.0 branch
author bsw
date Thu Jul 10 01:19:48 2014 +0200 (2014-07-10)
parents 403e8c211592
children 32cc544d5a5b
rev   line source
bsw@279 1 function model.has_rendered_content(class, rendered_class, content_field_name)
bsw@279 2
bsw@279 3 local content_field_name = content_field_name or 'content'
bsw@279 4
bsw@279 5 -- render content to html, save it as rendered_class and return it
bsw@397 6 function class.object:render_content(force_rendering)
bsw@279 7 -- local draft for update
bsw@879 8
bsw@879 9 local selector = class:new_selector()
bsw@879 10
bsw@895 11 if type(class.primary_key) == "table" then
bsw@879 12 for i, key in ipairs(class.primary_key) do
bsw@879 13 selector:add_where{ "$ = ?", { key }, self[key] }
bsw@879 14 end
bsw@879 15 else
bsw@879 16 selector:add_where{ "id = ?", self.id }
bsw@879 17 end
bsw@879 18
bsw@879 19 local lock = selector:single_object_mode():for_update():exec()
bsw@879 20
bsw@279 21 -- check if there is already a rendered content
bsw@879 22 local selector = rendered_class:new_selector()
bsw@879 23 if type(class.primary_key) == "table" then
bsw@879 24 for i, key in ipairs(class.primary_key) do
bsw@879 25 selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self[key] }
bsw@879 26 end
bsw@879 27 else
bsw@895 28 selector:add_where{ "$." .. class.table .. "_id = ?", { rendered_class.table }, self.id }
bsw@879 29 end
bsw@879 30 local rendered = selector:add_where{ "format = 'html'" }
bsw@279 31 :optional_object_mode()
bsw@279 32 :exec()
bsw@279 33 if rendered then
bsw@397 34 if force_rendering then
bsw@397 35 rendered:destroy()
bsw@397 36 else
bsw@397 37 return rendered
bsw@397 38 end
bsw@279 39 end
bsw@279 40 -- create rendered_class record
bsw@279 41 local rendered = rendered_class:new()
bsw@879 42 if type(class.primary_key) == "table" then
bsw@879 43 for i, key in ipairs(class.primary_key) do
bsw@879 44 rendered[key] = self[key]
bsw@879 45 end
bsw@879 46 else
bsw@879 47 rendered[class.table .. "_id"] = self.id
bsw@879 48 end
bsw@279 49 rendered.format = "html"
bsw@1045 50 if self.formatting_engine then
bsw@1045 51 rendered.content = format.wiki_text(self[content_field_name], self.formatting_engine)
bsw@1045 52 else
bsw@1045 53 rendered.content = self[content_field_name]
bsw@1045 54 end
bsw@279 55 rendered:save()
bsw@279 56 -- and return it
bsw@279 57 return rendered
bsw@279 58 end
bsw@279 59
bsw@279 60 -- returns rendered version for specific format
bsw@279 61 function class.object:get_content(format)
bsw@279 62 -- Fetch rendered_class record for specified format
bsw@879 63 local selector = rendered_class:new_selector()
bsw@879 64 if type(class.primary_key) == "table" then
bsw@879 65 for i, key in ipairs(class.primary_key) do
bsw@879 66 selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self.id }
bsw@879 67 end
bsw@879 68 else
bsw@879 69 selector:add_where{ class.table .. "_id = ?", self.id }
bsw@879 70 end
bsw@879 71 local rendered = selector:add_where{ "format = ?", format }
bsw@279 72 :optional_object_mode()
bsw@279 73 :exec()
bsw@279 74 -- If this format isn't rendered yet, render it
bsw@279 75 if not rendered then
bsw@279 76 rendered = self:render_content()
bsw@279 77 end
bsw@279 78 -- return rendered content
bsw@279 79 return rendered.content
bsw@279 80 end
bsw@279 81
bsw@279 82 end

Impressum / About Us