liquid_feedback_frontend

annotate env/model/has_rendered_content.lua @ 1438:d55f506f032b

Order unit list in member admin page
author bsw
date Thu Oct 18 11:19:05 2018 +0200 (2018-10-18)
parents 32cc544d5a5b
children
rev   line source
bsw/jbe@1309 1 function model.has_rendered_content(class, rendered_class, content_field_name, primary_key)
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/jbe@1309 15 elseif class.primary_key then
bsw/jbe@1309 16 selector:add_where{ "$ = ?", { class.primary_key }, self[class.primary_key] }
bsw@879 17 else
bsw@879 18 selector:add_where{ "id = ?", self.id }
bsw@879 19 end
bsw@879 20
bsw@879 21 local lock = selector:single_object_mode():for_update():exec()
bsw@879 22
bsw@279 23 -- check if there is already a rendered content
bsw@879 24 local selector = rendered_class:new_selector()
bsw@879 25 if type(class.primary_key) == "table" then
bsw@879 26 for i, key in ipairs(class.primary_key) do
bsw@879 27 selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self[key] }
bsw@879 28 end
bsw/jbe@1309 29 elseif class.primary_key then
bsw/jbe@1309 30 selector:add_where{ "$." .. primary_key .. " = ?", { rendered_class.table }, self[class.primary_key] }
bsw@879 31 else
bsw@895 32 selector:add_where{ "$." .. class.table .. "_id = ?", { rendered_class.table }, self.id }
bsw@879 33 end
bsw@879 34 local rendered = selector:add_where{ "format = 'html'" }
bsw@279 35 :optional_object_mode()
bsw@279 36 :exec()
bsw@279 37 if rendered then
bsw@397 38 if force_rendering then
bsw@397 39 rendered:destroy()
bsw@397 40 else
bsw@397 41 return rendered
bsw@397 42 end
bsw@279 43 end
bsw@279 44 -- create rendered_class record
bsw@279 45 local rendered = rendered_class:new()
bsw@879 46 if type(class.primary_key) == "table" then
bsw@879 47 for i, key in ipairs(class.primary_key) do
bsw@879 48 rendered[key] = self[key]
bsw@879 49 end
bsw/jbe@1309 50 elseif class.primary_key then
bsw/jbe@1309 51 rendered[primary_key] = self[class.primary_key]
bsw@879 52 else
bsw@879 53 rendered[class.table .. "_id"] = self.id
bsw@879 54 end
bsw@279 55 rendered.format = "html"
bsw@1045 56 if self.formatting_engine then
bsw@1045 57 rendered.content = format.wiki_text(self[content_field_name], self.formatting_engine)
bsw@1045 58 else
bsw@1045 59 rendered.content = self[content_field_name]
bsw@1045 60 end
bsw@279 61 rendered:save()
bsw@279 62 -- and return it
bsw@279 63 return rendered
bsw@279 64 end
bsw@279 65
bsw@279 66 -- returns rendered version for specific format
bsw@279 67 function class.object:get_content(format)
bsw@279 68 -- Fetch rendered_class record for specified format
bsw@879 69 local selector = rendered_class:new_selector()
bsw@879 70 if type(class.primary_key) == "table" then
bsw@879 71 for i, key in ipairs(class.primary_key) do
bsw@879 72 selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self.id }
bsw@879 73 end
bsw/jbe@1309 74 elseif class.primary_key then
bsw/jbe@1309 75 selector:add_where{ primary_key .. " = ?", self[class.primary_key] }
bsw@879 76 else
bsw@879 77 selector:add_where{ class.table .. "_id = ?", self.id }
bsw@879 78 end
bsw@879 79 local rendered = selector:add_where{ "format = ?", format }
bsw@279 80 :optional_object_mode()
bsw@279 81 :exec()
bsw@279 82 -- If this format isn't rendered yet, render it
bsw@279 83 if not rendered then
bsw@279 84 rendered = self:render_content()
bsw@279 85 end
bsw@279 86 -- return rendered content
bsw@279 87 return rendered.content
bsw@279 88 end
bsw@279 89
bsw/jbe@1309 90 end

Impressum / About Us