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