# HG changeset patch # User bsw # Date 1329397723 -3600 # Node ID 23c98752e6970e42c1e03951180c370df11d10bc # Parent fecd4c13054a6273521ccc986470891efc00bdd9 Added wiki support for suggestions and member statements diff -r fecd4c13054a -r 23c98752e697 app/main/member/_profile.lua --- a/app/main/member/_profile.lua Mon Feb 13 01:53:41 2012 +0100 +++ b/app/main/member/_profile.lua Thu Feb 16 14:08:43 2012 +0100 @@ -135,7 +135,7 @@ ui.container{ attr = { class = "member_statement wiki" }, content = function() - slot.put(format.wiki_text(member.statement)) + slot.put(member:get_content("html")) end } end diff -r fecd4c13054a -r 23c98752e697 app/main/suggestion/_action/add.lua --- a/app/main/suggestion/_action/add.lua Mon Feb 13 01:53:41 2012 +0100 +++ b/app/main/suggestion/_action/add.lua Thu Feb 16 14:08:43 2012 +0100 @@ -12,11 +12,28 @@ return false end +local formatting_engine = param.get("formatting_engine") + +local formatting_engine_valid = false +for fe, dummy in pairs(config.formatting_engine_executeables) do + if formatting_engine == fe then + formatting_engine_valid = true + end +end +if not formatting_engine_valid then + error("invalid formatting engine!") +end + +if param.get("preview") then + return +end + local suggestion = Suggestion:new() suggestion.author_id = app.session.member.id suggestion.name = name -param.update(suggestion, "description", "initiative_id") +suggestion.formatting_engine = formatting_engine +param.update(suggestion, "content", "initiative_id") suggestion:save() -- TODO important m1 selectors returning result _SET_! diff -r fecd4c13054a -r 23c98752e697 app/main/suggestion/_suggestion.lua --- a/app/main/suggestion/_suggestion.lua Mon Feb 13 01:53:41 2012 +0100 +++ b/app/main/suggestion/_suggestion.lua Thu Feb 16 14:08:43 2012 +0100 @@ -12,7 +12,7 @@ ui.container{ attr = { class = "suggestion_content wiki" }, content = function() - slot.put(encode.html_newlines(encode.html(suggestion.description))) + slot.put(suggestion:get_content("html")) end } end diff -r fecd4c13054a -r 23c98752e697 app/main/suggestion/new.lua --- a/app/main/suggestion/new.lua Mon Feb 13 01:53:41 2012 +0100 +++ b/app/main/suggestion/new.lua Thu Feb 16 14:08:43 2012 +0100 @@ -37,8 +37,6 @@ value = _"You are currently not supporting this initiative directly. By adding suggestions to this initiative you will automatically become a potential supporter." } end - ui.field.text{ label = _"Title (80 chars max)", name = "name" } - ui.field.text{ label = _"Description", name = "description", multiline = true, attr={id="suggestion_description"}} ui.field.select{ label = _"Degree", name = "degree", @@ -49,6 +47,57 @@ foreign_id = "id", foreign_name = "name" } + ui.field.text{ label = _"Title (80 chars max)", name = "name" } + ui.field.select{ + label = _"Wiki engine", + name = "formatting_engine", + foreign_records = { + { id = "rocketwiki", name = "RocketWiki" }, + { id = "compat", name = _"Traditional wiki syntax" } + }, + attr = {id = "formatting_engine"}, + foreign_id = "id", + foreign_name = "name", + value = param.get("formatting_engine") + } + ui.tag{ + tag = "div", + content = function() + ui.tag{ + tag = "label", + attr = { class = "ui_field_label" }, + content = function() slot.put(" ") end, + } + ui.tag{ + content = function() + ui.link{ + text = _"Syntax help", + module = "help", + view = "show", + id = "wikisyntax", + attr = {onClick="this.href=this.href.replace(/wikisyntax[^.]*/g, 'wikisyntax_'+getElementById('formatting_engine').value)"} + } + slot.put(" ") + ui.link{ + text = _"(new window)", + module = "help", + view = "show", + id = "wikisyntax", + attr = {target = "_blank", onClick="this.href=this.href.replace(/wikisyntax[^.]*/g, 'wikisyntax_'+getElementById('formatting_engine').value)"} + } + end + } + end + } + ui.field.text{ + label = _"Description", + name = "content", + multiline = true, + attr = { style = "height: 50ex;" }, + value = param.get("content") + } + + ui.submit{ text = _"Commit suggestion" } end } diff -r fecd4c13054a -r 23c98752e697 env/model/has_rendered_content.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/model/has_rendered_content.lua Thu Feb 16 14:08:43 2012 +0100 @@ -0,0 +1,48 @@ +function model.has_rendered_content(class, rendered_class, content_field_name) + + local content_field_name = content_field_name or 'content' + + -- render content to html, save it as rendered_class and return it + function class.object:render_content() + -- local draft for update + local lock = class:new_selector() + :add_where{ "id = ?", self.id } + :single_object_mode() + :for_update() + :exec() + -- check if there is already a rendered content + local rendered = rendered_class:new_selector() + :add_where{ class.table .. "_id = ?", self.id } + :add_where{ "format = 'html'" } + :optional_object_mode() + :exec() + if rendered then + return rendered + end + -- create rendered_class record + local rendered = rendered_class:new() + rendered[class.table .. "_id"] = self.id + rendered.format = "html" + rendered.content = format.wiki_text(self[content_field_name], self.formatting_engine) + rendered:save() + -- and return it + return rendered + end + + -- returns rendered version for specific format + function class.object:get_content(format) + -- Fetch rendered_class record for specified format + local rendered = rendered_class:new_selector() + :add_where{ class.table .. "_id = ?", self.id } + :add_where{ "format = ?", format } + :optional_object_mode() + :exec() + -- If this format isn't rendered yet, render it + if not rendered then + rendered = self:render_content() + end + -- return rendered content + return rendered.content + end + +end \ No newline at end of file diff -r fecd4c13054a -r 23c98752e697 model/draft.lua --- a/model/draft.lua Mon Feb 13 01:53:41 2012 +0100 +++ b/model/draft.lua Thu Feb 16 14:08:43 2012 +0100 @@ -23,45 +23,4 @@ return self.author and self.author.name or _"Unknown author" end --- render draft to html, save it as rendered_draft and return it -function Draft.object:render_content() - -- local draft for update - local draft_lock = Draft:new_selector() - :add_where{ "id = ?", self.id } - :single_object_mode() - :for_update() - :exec() - -- check if there is already a rendered draft - local rendered_draft = RenderedDraft:new_selector() - :add_where{ "draft_id = ?", self.id } - :add_where{ "format = 'html'" } - :optional_object_mode() - :exec() - if rendered_draft then - return rendered_draft - end - -- create rendered_draft record - local rendered_draft = RenderedDraft:new() - rendered_draft.draft_id = self.id - rendered_draft.format = "html" - rendered_draft.content = format.wiki_text(self.content, self.formatting_engine) - rendered_draft:save() - -- and return it - return rendered_draft -end - --- returns rendered version of draft for specific format -function Draft.object:get_content(format) - -- Fetch rendered_draft record for specified format - local rendered_draft = RenderedDraft:new_selector() - :add_where{ "draft_id = ?", self.id } - :add_where{ "format = ?", format } - :optional_object_mode() - :exec() - -- If this format isn't rendered yet, render it - if not rendered_draft then - rendered_draft = self:render_content() - end - -- return rendered content - return rendered_draft.content -end \ No newline at end of file +model.has_rendered_content(Draft, RenderedDraft) diff -r fecd4c13054a -r 23c98752e697 model/member.lua --- a/model/member.lua Mon Feb 13 01:53:41 2012 +0100 +++ b/model/member.lua Thu Feb 16 14:08:43 2012 +0100 @@ -223,6 +223,8 @@ ref = 'supported_initiatives' } +model.has_rendered_content(Member, RenderedMemberStatement, "statement") + Member:new_selector() :add_order_by("member.name") :exec() diff -r fecd4c13054a -r 23c98752e697 model/rendered_member_statement.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/model/rendered_member_statement.lua Thu Feb 16 14:08:43 2012 +0100 @@ -0,0 +1,11 @@ +RenderedMemberStatement = mondelefant.new_class() +RenderedMemberStatement.table = 'rendered_member_statement' +RenderedMemberStatement.primary_key = { "member_id", "format" } + +RenderedMemberStatement:add_reference{ + mode = 'm1', + to = "Member", + this_key = 'member_id', + that_key = 'id', + ref = 'member', +} diff -r fecd4c13054a -r 23c98752e697 model/suggestion.lua --- a/model/suggestion.lua Mon Feb 13 01:53:41 2012 +0100 +++ b/model/suggestion.lua Thu Feb 16 14:08:43 2012 +0100 @@ -26,3 +26,5 @@ back_ref = 'issue', default_order = '"id"' } + +model.has_rendered_content(Suggestion, RenderedSuggestion)