From 0329094f015bcc2036fc1a2545253b8e187ee794 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Sun, 13 Apr 2008 16:22:55 +0000 Subject: [PATCH] Include macro can include a page of another project wiki using !{{include(projectname:Foo)}} (#1052). git-svn-id: http://redmine.rubyforge.org/svn/trunk@1350 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- lib/redmine/wiki_formatting/macros.rb | 29 +++++++++++--------- test/unit/helpers/application_helper_test.rb | 18 ++++++++++++ 2 files changed, 34 insertions(+), 13 deletions(-) diff --git a/lib/redmine/wiki_formatting/macros.rb b/lib/redmine/wiki_formatting/macros.rb index f27ea98b9..0848aee4e 100644 --- a/lib/redmine/wiki_formatting/macros.rb +++ b/lib/redmine/wiki_formatting/macros.rb @@ -77,21 +77,24 @@ module Redmine content_tag('dl', out) end - desc "Include a wiki page. Example:\n\n !{{include(Foo)}}" + desc "Include a wiki page. Example:\n\n !{{include(Foo)}}\n\nor to include a page of a specific project wiki:\n\n !{{include(projectname:Foo)}}" macro :include do |obj, args| - if @project && !@project.wiki.nil? - page = @project.wiki.find_page(args.first) - if page && page.content - @included_wiki_pages ||= [] - raise 'Circular inclusion detected' if @included_wiki_pages.include?(page.title) - @included_wiki_pages << page.title - out = textilizable(page.content, :text, :attachments => page.attachments) - @included_wiki_pages.pop - out - else - raise "Page #{args.first} doesn't exist" - end + project = @project + title = args.first.to_s + if title =~ %r{^([^\:]+)\:(.*)$} + project_identifier, title = $1, $2 + project = Project.find_by_identifier(project_identifier) || Project.find_by_name(project_identifier) end + raise 'Unknow project' unless project && User.current.allowed_to?(:view_wiki_pages, project) + raise 'No wiki for this project' unless !project.wiki.nil? + page = project.wiki.find_page(title) + raise "Page #{args.first} doesn't exist" unless page && page.content + @included_wiki_pages ||= [] + raise 'Circular inclusion detected' if @included_wiki_pages.include?(page.title) + @included_wiki_pages << page.title + out = textilizable(page.content, :text, :attachments => page.attachments) + @included_wiki_pages.pop + out end end end diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb index f0de341c6..7ae6be4f3 100644 --- a/test/unit/helpers/application_helper_test.rb +++ b/test/unit/helpers/application_helper_test.rb @@ -168,6 +168,24 @@ class ApplicationHelperTest < HelperTestCase assert_equal '

{{hello_world}}

', textilizable(text) end + def test_macro_include + @project = Project.find(1) + # include a page of the current project wiki + text = "{{include(Another page)}}" + assert textilizable(text).match(/This is a link to a ticket/) + + @project = nil + # include a page of a specific project wiki + text = "{{include(ecookbook:Another page)}}" + assert textilizable(text).match(/This is a link to a ticket/) + + text = "{{include(ecookbook:)}}" + assert textilizable(text).match(/CookBook documentation/) + + text = "{{include(unknowidentifier:somepage)}}" + assert textilizable(text).match(/Unknow project/) + end + def test_date_format_default today = Date.today Setting.date_format = ''