liquid_feedback_frontend

view env/model/has_rendered_content.lua @ 1858:3d1f0464a3ea

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

Impressum / About Us