liquid_feedback_frontend
changeset 279:23c98752e697
Added wiki support for suggestions and member statements
author | bsw |
---|---|
date | Thu Feb 16 14:08:43 2012 +0100 (2012-02-16) |
parents | fecd4c13054a |
children | 808269b7f41c |
files | app/main/member/_profile.lua app/main/suggestion/_action/add.lua app/main/suggestion/_suggestion.lua app/main/suggestion/new.lua env/model/has_rendered_content.lua model/draft.lua model/member.lua model/rendered_member_statement.lua model/suggestion.lua |
line diff
1.1 --- a/app/main/member/_profile.lua Mon Feb 13 01:53:41 2012 +0100 1.2 +++ b/app/main/member/_profile.lua Thu Feb 16 14:08:43 2012 +0100 1.3 @@ -135,7 +135,7 @@ 1.4 ui.container{ 1.5 attr = { class = "member_statement wiki" }, 1.6 content = function() 1.7 - slot.put(format.wiki_text(member.statement)) 1.8 + slot.put(member:get_content("html")) 1.9 end 1.10 } 1.11 end
2.1 --- a/app/main/suggestion/_action/add.lua Mon Feb 13 01:53:41 2012 +0100 2.2 +++ b/app/main/suggestion/_action/add.lua Thu Feb 16 14:08:43 2012 +0100 2.3 @@ -12,11 +12,28 @@ 2.4 return false 2.5 end 2.6 2.7 +local formatting_engine = param.get("formatting_engine") 2.8 + 2.9 +local formatting_engine_valid = false 2.10 +for fe, dummy in pairs(config.formatting_engine_executeables) do 2.11 + if formatting_engine == fe then 2.12 + formatting_engine_valid = true 2.13 + end 2.14 +end 2.15 +if not formatting_engine_valid then 2.16 + error("invalid formatting engine!") 2.17 +end 2.18 + 2.19 +if param.get("preview") then 2.20 + return 2.21 +end 2.22 + 2.23 local suggestion = Suggestion:new() 2.24 2.25 suggestion.author_id = app.session.member.id 2.26 suggestion.name = name 2.27 -param.update(suggestion, "description", "initiative_id") 2.28 +suggestion.formatting_engine = formatting_engine 2.29 +param.update(suggestion, "content", "initiative_id") 2.30 suggestion:save() 2.31 2.32 -- TODO important m1 selectors returning result _SET_!
3.1 --- a/app/main/suggestion/_suggestion.lua Mon Feb 13 01:53:41 2012 +0100 3.2 +++ b/app/main/suggestion/_suggestion.lua Thu Feb 16 14:08:43 2012 +0100 3.3 @@ -12,7 +12,7 @@ 3.4 ui.container{ 3.5 attr = { class = "suggestion_content wiki" }, 3.6 content = function() 3.7 - slot.put(encode.html_newlines(encode.html(suggestion.description))) 3.8 + slot.put(suggestion:get_content("html")) 3.9 end 3.10 } 3.11 end
4.1 --- a/app/main/suggestion/new.lua Mon Feb 13 01:53:41 2012 +0100 4.2 +++ b/app/main/suggestion/new.lua Thu Feb 16 14:08:43 2012 +0100 4.3 @@ -37,8 +37,6 @@ 4.4 value = _"You are currently not supporting this initiative directly. By adding suggestions to this initiative you will automatically become a potential supporter." 4.5 } 4.6 end 4.7 - ui.field.text{ label = _"Title (80 chars max)", name = "name" } 4.8 - ui.field.text{ label = _"Description", name = "description", multiline = true, attr={id="suggestion_description"}} 4.9 ui.field.select{ 4.10 label = _"Degree", 4.11 name = "degree", 4.12 @@ -49,6 +47,57 @@ 4.13 foreign_id = "id", 4.14 foreign_name = "name" 4.15 } 4.16 + ui.field.text{ label = _"Title (80 chars max)", name = "name" } 4.17 + ui.field.select{ 4.18 + label = _"Wiki engine", 4.19 + name = "formatting_engine", 4.20 + foreign_records = { 4.21 + { id = "rocketwiki", name = "RocketWiki" }, 4.22 + { id = "compat", name = _"Traditional wiki syntax" } 4.23 + }, 4.24 + attr = {id = "formatting_engine"}, 4.25 + foreign_id = "id", 4.26 + foreign_name = "name", 4.27 + value = param.get("formatting_engine") 4.28 + } 4.29 + ui.tag{ 4.30 + tag = "div", 4.31 + content = function() 4.32 + ui.tag{ 4.33 + tag = "label", 4.34 + attr = { class = "ui_field_label" }, 4.35 + content = function() slot.put(" ") end, 4.36 + } 4.37 + ui.tag{ 4.38 + content = function() 4.39 + ui.link{ 4.40 + text = _"Syntax help", 4.41 + module = "help", 4.42 + view = "show", 4.43 + id = "wikisyntax", 4.44 + attr = {onClick="this.href=this.href.replace(/wikisyntax[^.]*/g, 'wikisyntax_'+getElementById('formatting_engine').value)"} 4.45 + } 4.46 + slot.put(" ") 4.47 + ui.link{ 4.48 + text = _"(new window)", 4.49 + module = "help", 4.50 + view = "show", 4.51 + id = "wikisyntax", 4.52 + attr = {target = "_blank", onClick="this.href=this.href.replace(/wikisyntax[^.]*/g, 'wikisyntax_'+getElementById('formatting_engine').value)"} 4.53 + } 4.54 + end 4.55 + } 4.56 + end 4.57 + } 4.58 + ui.field.text{ 4.59 + label = _"Description", 4.60 + name = "content", 4.61 + multiline = true, 4.62 + attr = { style = "height: 50ex;" }, 4.63 + value = param.get("content") 4.64 + } 4.65 + 4.66 + 4.67 ui.submit{ text = _"Commit suggestion" } 4.68 end 4.69 }
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 5.2 +++ b/env/model/has_rendered_content.lua Thu Feb 16 14:08:43 2012 +0100 5.3 @@ -0,0 +1,48 @@ 5.4 +function model.has_rendered_content(class, rendered_class, content_field_name) 5.5 + 5.6 + local content_field_name = content_field_name or 'content' 5.7 + 5.8 + -- render content to html, save it as rendered_class and return it 5.9 + function class.object:render_content() 5.10 + -- local draft for update 5.11 + local lock = class:new_selector() 5.12 + :add_where{ "id = ?", self.id } 5.13 + :single_object_mode() 5.14 + :for_update() 5.15 + :exec() 5.16 + -- check if there is already a rendered content 5.17 + local rendered = rendered_class:new_selector() 5.18 + :add_where{ class.table .. "_id = ?", self.id } 5.19 + :add_where{ "format = 'html'" } 5.20 + :optional_object_mode() 5.21 + :exec() 5.22 + if rendered then 5.23 + return rendered 5.24 + end 5.25 + -- create rendered_class record 5.26 + local rendered = rendered_class:new() 5.27 + rendered[class.table .. "_id"] = self.id 5.28 + rendered.format = "html" 5.29 + rendered.content = format.wiki_text(self[content_field_name], self.formatting_engine) 5.30 + rendered:save() 5.31 + -- and return it 5.32 + return rendered 5.33 + end 5.34 + 5.35 + -- returns rendered version for specific format 5.36 + function class.object:get_content(format) 5.37 + -- Fetch rendered_class record for specified format 5.38 + local rendered = rendered_class:new_selector() 5.39 + :add_where{ class.table .. "_id = ?", self.id } 5.40 + :add_where{ "format = ?", format } 5.41 + :optional_object_mode() 5.42 + :exec() 5.43 + -- If this format isn't rendered yet, render it 5.44 + if not rendered then 5.45 + rendered = self:render_content() 5.46 + end 5.47 + -- return rendered content 5.48 + return rendered.content 5.49 + end 5.50 + 5.51 +end 5.52 \ No newline at end of file
6.1 --- a/model/draft.lua Mon Feb 13 01:53:41 2012 +0100 6.2 +++ b/model/draft.lua Thu Feb 16 14:08:43 2012 +0100 6.3 @@ -23,45 +23,4 @@ 6.4 return self.author and self.author.name or _"Unknown author" 6.5 end 6.6 6.7 --- render draft to html, save it as rendered_draft and return it 6.8 -function Draft.object:render_content() 6.9 - -- local draft for update 6.10 - local draft_lock = Draft:new_selector() 6.11 - :add_where{ "id = ?", self.id } 6.12 - :single_object_mode() 6.13 - :for_update() 6.14 - :exec() 6.15 - -- check if there is already a rendered draft 6.16 - local rendered_draft = RenderedDraft:new_selector() 6.17 - :add_where{ "draft_id = ?", self.id } 6.18 - :add_where{ "format = 'html'" } 6.19 - :optional_object_mode() 6.20 - :exec() 6.21 - if rendered_draft then 6.22 - return rendered_draft 6.23 - end 6.24 - -- create rendered_draft record 6.25 - local rendered_draft = RenderedDraft:new() 6.26 - rendered_draft.draft_id = self.id 6.27 - rendered_draft.format = "html" 6.28 - rendered_draft.content = format.wiki_text(self.content, self.formatting_engine) 6.29 - rendered_draft:save() 6.30 - -- and return it 6.31 - return rendered_draft 6.32 -end 6.33 - 6.34 --- returns rendered version of draft for specific format 6.35 -function Draft.object:get_content(format) 6.36 - -- Fetch rendered_draft record for specified format 6.37 - local rendered_draft = RenderedDraft:new_selector() 6.38 - :add_where{ "draft_id = ?", self.id } 6.39 - :add_where{ "format = ?", format } 6.40 - :optional_object_mode() 6.41 - :exec() 6.42 - -- If this format isn't rendered yet, render it 6.43 - if not rendered_draft then 6.44 - rendered_draft = self:render_content() 6.45 - end 6.46 - -- return rendered content 6.47 - return rendered_draft.content 6.48 -end 6.49 \ No newline at end of file 6.50 +model.has_rendered_content(Draft, RenderedDraft)
7.1 --- a/model/member.lua Mon Feb 13 01:53:41 2012 +0100 7.2 +++ b/model/member.lua Thu Feb 16 14:08:43 2012 +0100 7.3 @@ -223,6 +223,8 @@ 7.4 ref = 'supported_initiatives' 7.5 } 7.6 7.7 +model.has_rendered_content(Member, RenderedMemberStatement, "statement") 7.8 + 7.9 Member:new_selector() 7.10 :add_order_by("member.name") 7.11 :exec()
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 8.2 +++ b/model/rendered_member_statement.lua Thu Feb 16 14:08:43 2012 +0100 8.3 @@ -0,0 +1,11 @@ 8.4 +RenderedMemberStatement = mondelefant.new_class() 8.5 +RenderedMemberStatement.table = 'rendered_member_statement' 8.6 +RenderedMemberStatement.primary_key = { "member_id", "format" } 8.7 + 8.8 +RenderedMemberStatement:add_reference{ 8.9 + mode = 'm1', 8.10 + to = "Member", 8.11 + this_key = 'member_id', 8.12 + that_key = 'id', 8.13 + ref = 'member', 8.14 +}