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
|