liquid_feedback_frontend

view env/model/has_rendered_content.lua @ 895:773e0750709e

Fixed error in has_rendered_content helper
author bsw
date Mon Aug 20 03:52:50 2012 +0200 (2012-08-20)
parents ea3d3757ddc3
children 403e8c211592
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 trace.debug(key, self[key], self.id)
15 end
16 else
17 selector:add_where{ "id = ?", self.id }
18 end
20 local lock = selector:single_object_mode():for_update():exec()
22 -- check if there is already a rendered content
23 local selector = rendered_class:new_selector()
24 if type(class.primary_key) == "table" then
25 for i, key in ipairs(class.primary_key) do
26 selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self[key] }
27 end
28 else
29 selector:add_where{ "$." .. class.table .. "_id = ?", { rendered_class.table }, self.id }
30 end
31 local rendered = selector:add_where{ "format = 'html'" }
32 :optional_object_mode()
33 :exec()
34 if rendered then
35 if force_rendering then
36 rendered:destroy()
37 else
38 return rendered
39 end
40 end
41 -- create rendered_class record
42 local rendered = rendered_class:new()
43 if type(class.primary_key) == "table" then
44 for i, key in ipairs(class.primary_key) do
45 rendered[key] = self[key]
46 end
47 else
48 rendered[class.table .. "_id"] = self.id
49 end
50 rendered.format = "html"
51 rendered.content = format.wiki_text(self[content_field_name], self.formatting_engine)
52 rendered:save()
53 -- and return it
54 return rendered
55 end
57 -- returns rendered version for specific format
58 function class.object:get_content(format)
59 -- Fetch rendered_class record for specified format
60 local selector = rendered_class:new_selector()
61 if type(class.primary_key) == "table" then
62 for i, key in ipairs(class.primary_key) do
63 selector:add_where{ "$.$ = ?", { rendered_class.table }, { key }, self.id }
64 end
65 else
66 selector:add_where{ class.table .. "_id = ?", self.id }
67 end
68 local rendered = selector:add_where{ "format = ?", format }
69 :optional_object_mode()
70 :exec()
71 -- If this format isn't rendered yet, render it
72 if not rendered then
73 rendered = self:render_content()
74 end
75 -- return rendered content
76 return rendered.content
77 end
79 end

Impressum / About Us