liquid_feedback_frontend
annotate 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 |
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 |