liquid_feedback_frontend

view env/model/has_rendered_content.lua @ 1245:9578cef4018a

More readable phase duration in issue sidebar
author bsw
date Wed Jan 27 11:16:26 2016 +0100 (2016-01-27)
parents 701a5cf6b067
children 32cc544d5a5b
line source
1 function model.has_rendered_content(class, rendered_class, content_field_name)
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 else
16 selector:add_where{ "id = ?", self.id }
17 end
19 local lock = selector:single_object_mode():for_update():exec()
21 -- check if there is already a rendered content
22 local selector = rendered_class:new_selector()
23 if type(class.primary_key) == "table" then
24 for i, key in ipairs(class.primary_key) do
25 selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self[key] }
26 end
27 else
28 selector:add_where{ "$." .. class.table .. "_id = ?", { rendered_class.table }, self.id }
29 end
30 local rendered = selector:add_where{ "format = 'html'" }
31 :optional_object_mode()
32 :exec()
33 if rendered then
34 if force_rendering then
35 rendered:destroy()
36 else
37 return rendered
38 end
39 end
40 -- create rendered_class record
41 local rendered = rendered_class:new()
42 if type(class.primary_key) == "table" then
43 for i, key in ipairs(class.primary_key) do
44 rendered[key] = self[key]
45 end
46 else
47 rendered[class.table .. "_id"] = self.id
48 end
49 rendered.format = "html"
50 if self.formatting_engine then
51 rendered.content = format.wiki_text(self[content_field_name], self.formatting_engine)
52 else
53 rendered.content = self[content_field_name]
54 end
55 rendered:save()
56 -- and return it
57 return rendered
58 end
60 -- returns rendered version for specific format
61 function class.object:get_content(format)
62 -- Fetch rendered_class record for specified format
63 local selector = rendered_class:new_selector()
64 if type(class.primary_key) == "table" then
65 for i, key in ipairs(class.primary_key) do
66 selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self.id }
67 end
68 else
69 selector:add_where{ class.table .. "_id = ?", self.id }
70 end
71 local rendered = selector:add_where{ "format = ?", format }
72 :optional_object_mode()
73 :exec()
74 -- If this format isn't rendered yet, render it
75 if not rendered then
76 rendered = self:render_content()
77 end
78 -- return rendered content
79 return rendered.content
80 end
82 end

Impressum / About Us