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

Impressum / About Us