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 |