liquid_feedback_frontend

annotate env/model/has_rendered_content.lua @ 908:74bc135a6618

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

Impressum / About Us