liquid_feedback_frontend
diff model/draft.lua @ 81:134fce4bede3
Cache for rendered wiki texts; Accountless API keys; Reverse id order for initiative API
- Support for caching html version of drafts
- Using pre-rendered html versions of help messages
- Added Support for api keys not connected to an account
- Added order option "id_desc" to initiative API
- Support for caching html version of drafts
- Using pre-rendered html versions of help messages
- Added Support for api keys not connected to an account
- Added order option "id_desc" to initiative API
author | bsw |
---|---|
date | Sat Jul 24 17:22:05 2010 +0200 (2010-07-24) |
parents | 3bfb2fcf7ab9 |
children | 23c98752e697 |
line diff
1.1 --- a/model/draft.lua Thu Jul 15 18:28:24 2010 +0200 1.2 +++ b/model/draft.lua Sat Jul 24 17:22:05 2010 +0200 1.3 @@ -1,6 +1,7 @@ 1.4 Draft = mondelefant.new_class() 1.5 Draft.table = 'draft' 1.6 1.7 +-- Many drafts belonging to an initiative 1.8 Draft:add_reference{ 1.9 mode = 'm1', 1.10 to = "Initiative", 1.11 @@ -9,6 +10,7 @@ 1.12 ref = 'initiative', 1.13 } 1.14 1.15 +-- Many drafts are authored by a member 1.16 Draft:add_reference{ 1.17 mode = 'm1', 1.18 to = "Member", 1.19 @@ -17,8 +19,49 @@ 1.20 ref = 'author', 1.21 } 1.22 1.23 --- reference to supporter probably not needed 1.24 - 1.25 function Draft.object_get:author_name() 1.26 return self.author and self.author.name or _"Unknown author" 1.27 end 1.28 + 1.29 +-- render draft to html, save it as rendered_draft and return it 1.30 +function Draft.object:render_content() 1.31 + -- local draft for update 1.32 + local draft_lock = Draft:new_selector() 1.33 + :add_where{ "id = ?", self.id } 1.34 + :single_object_mode() 1.35 + :for_update() 1.36 + :exec() 1.37 + -- check if there is already a rendered draft 1.38 + local rendered_draft = RenderedDraft:new_selector() 1.39 + :add_where{ "draft_id = ?", self.id } 1.40 + :add_where{ "format = 'html'" } 1.41 + :optional_object_mode() 1.42 + :exec() 1.43 + if rendered_draft then 1.44 + return rendered_draft 1.45 + end 1.46 + -- create rendered_draft record 1.47 + local rendered_draft = RenderedDraft:new() 1.48 + rendered_draft.draft_id = self.id 1.49 + rendered_draft.format = "html" 1.50 + rendered_draft.content = format.wiki_text(self.content, self.formatting_engine) 1.51 + rendered_draft:save() 1.52 + -- and return it 1.53 + return rendered_draft 1.54 +end 1.55 + 1.56 +-- returns rendered version of draft for specific format 1.57 +function Draft.object:get_content(format) 1.58 + -- Fetch rendered_draft record for specified format 1.59 + local rendered_draft = RenderedDraft:new_selector() 1.60 + :add_where{ "draft_id = ?", self.id } 1.61 + :add_where{ "format = ?", format } 1.62 + :optional_object_mode() 1.63 + :exec() 1.64 + -- If this format isn't rendered yet, render it 1.65 + if not rendered_draft then 1.66 + rendered_draft = self:render_content() 1.67 + end 1.68 + -- return rendered content 1.69 + return rendered_draft.content 1.70 +end 1.71 \ No newline at end of file