rev |
line source |
bsw/jbe@0
|
1 Draft = mondelefant.new_class()
|
bsw/jbe@0
|
2 Draft.table = 'draft'
|
bsw/jbe@0
|
3
|
bsw@81
|
4 -- Many drafts belonging to an initiative
|
bsw/jbe@0
|
5 Draft:add_reference{
|
bsw/jbe@0
|
6 mode = 'm1',
|
bsw/jbe@0
|
7 to = "Initiative",
|
bsw/jbe@0
|
8 this_key = 'initiative_id',
|
bsw/jbe@0
|
9 that_key = 'id',
|
bsw/jbe@0
|
10 ref = 'initiative',
|
bsw/jbe@0
|
11 }
|
bsw/jbe@0
|
12
|
bsw@81
|
13 -- Many drafts are authored by a member
|
bsw/jbe@0
|
14 Draft:add_reference{
|
bsw/jbe@0
|
15 mode = 'm1',
|
bsw/jbe@0
|
16 to = "Member",
|
bsw/jbe@0
|
17 this_key = 'author_id',
|
bsw/jbe@0
|
18 that_key = 'id',
|
bsw/jbe@0
|
19 ref = 'author',
|
bsw/jbe@0
|
20 }
|
bsw/jbe@0
|
21
|
bsw/jbe@0
|
22 function Draft.object_get:author_name()
|
bsw/jbe@0
|
23 return self.author and self.author.name or _"Unknown author"
|
bsw/jbe@0
|
24 end
|
bsw@81
|
25
|
bsw@81
|
26 -- render draft to html, save it as rendered_draft and return it
|
bsw@81
|
27 function Draft.object:render_content()
|
bsw@81
|
28 -- local draft for update
|
bsw@81
|
29 local draft_lock = Draft:new_selector()
|
bsw@81
|
30 :add_where{ "id = ?", self.id }
|
bsw@81
|
31 :single_object_mode()
|
bsw@81
|
32 :for_update()
|
bsw@81
|
33 :exec()
|
bsw@81
|
34 -- check if there is already a rendered draft
|
bsw@81
|
35 local rendered_draft = RenderedDraft:new_selector()
|
bsw@81
|
36 :add_where{ "draft_id = ?", self.id }
|
bsw@81
|
37 :add_where{ "format = 'html'" }
|
bsw@81
|
38 :optional_object_mode()
|
bsw@81
|
39 :exec()
|
bsw@81
|
40 if rendered_draft then
|
bsw@81
|
41 return rendered_draft
|
bsw@81
|
42 end
|
bsw@81
|
43 -- create rendered_draft record
|
bsw@81
|
44 local rendered_draft = RenderedDraft:new()
|
bsw@81
|
45 rendered_draft.draft_id = self.id
|
bsw@81
|
46 rendered_draft.format = "html"
|
bsw@81
|
47 rendered_draft.content = format.wiki_text(self.content, self.formatting_engine)
|
bsw@81
|
48 rendered_draft:save()
|
bsw@81
|
49 -- and return it
|
bsw@81
|
50 return rendered_draft
|
bsw@81
|
51 end
|
bsw@81
|
52
|
bsw@81
|
53 -- returns rendered version of draft for specific format
|
bsw@81
|
54 function Draft.object:get_content(format)
|
bsw@81
|
55 -- Fetch rendered_draft record for specified format
|
bsw@81
|
56 local rendered_draft = RenderedDraft:new_selector()
|
bsw@81
|
57 :add_where{ "draft_id = ?", self.id }
|
bsw@81
|
58 :add_where{ "format = ?", format }
|
bsw@81
|
59 :optional_object_mode()
|
bsw@81
|
60 :exec()
|
bsw@81
|
61 -- If this format isn't rendered yet, render it
|
bsw@81
|
62 if not rendered_draft then
|
bsw@81
|
63 rendered_draft = self:render_content()
|
bsw@81
|
64 end
|
bsw@81
|
65 -- return rendered content
|
bsw@81
|
66 return rendered_draft.content
|
bsw@81
|
67 end |