]> source.dussan.org Git - redmine.git/commitdiff
Include macro can include a page of another project wiki using !{{include(projectname...
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 13 Apr 2008 16:22:55 +0000 (16:22 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sun, 13 Apr 2008 16:22:55 +0000 (16:22 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1350 e93f8b46-1217-0410-a6f0-8f06a7374b81

lib/redmine/wiki_formatting/macros.rb
test/unit/helpers/application_helper_test.rb

index f27ea98b9ff8f29466e1c446b13dee3d6d0e98a6..0848aee4e1eb696d716ec7960f9f7a23166a0700 100644 (file)
@@ -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
index f0de341c6cd0663e720467d5e0e09da9630bd08e..7ae6be4f3277c891e2d97a0d660f5cbbd872ff5f 100644 (file)
@@ -168,6 +168,24 @@ class ApplicationHelperTest < HelperTestCase
     assert_equal '<p>{{hello_world}}</p>', 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 = ''