Adds a "depth" option to the child_pages macro (#10789).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10401 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -73,15 +73,20 @@ module ActiveRecord
|
||||
# Returns list of descendants.
|
||||
#
|
||||
# root.descendants # => [child1, subchild1, subchild2]
|
||||
def descendants
|
||||
children + children.collect(&:descendants).flatten
|
||||
def descendants(depth=nil)
|
||||
depth ||= 0
|
||||
result = children.dup
|
||||
unless depth == 1
|
||||
result += children.collect {|child| child.descendants(depth-1)}.flatten
|
||||
end
|
||||
result
|
||||
end
|
||||
|
||||
# Returns list of descendants and a reference to the current node.
|
||||
#
|
||||
# root.self_and_descendants # => [root, child1, subchild1, subchild2]
|
||||
def self_and_descendants
|
||||
[self] + descendants
|
||||
def self_and_descendants(depth=nil)
|
||||
[self] + descendants(depth)
|
||||
end
|
||||
|
||||
# Returns the root node of the tree.
|
||||
|
||||
@@ -183,7 +183,9 @@ module Redmine
|
||||
" !{{child_pages(Foo)}} -- lists all children of page Foo\n" +
|
||||
" !{{child_pages(Foo, parent=1)}} -- same as above with a link to page Foo"
|
||||
macro :child_pages do |obj, args|
|
||||
args, options = extract_macro_options(args, :parent)
|
||||
args, options = extract_macro_options(args, :parent, :depth)
|
||||
options[:depth] = options[:depth].to_i if options[:depth].present?
|
||||
|
||||
page = nil
|
||||
if args.size > 0
|
||||
page = Wiki.find_page(args.first.to_s, :project => @project)
|
||||
@@ -193,7 +195,7 @@ module Redmine
|
||||
raise 'With no argument, this macro can be called from wiki pages only.'
|
||||
end
|
||||
raise 'Page not found' if page.nil? || !User.current.allowed_to?(:view_wiki_pages, page.wiki.project)
|
||||
pages = ([page] + page.descendants).group_by(&:parent_id)
|
||||
pages = page.self_and_descendants(options[:depth]).group_by(&:parent_id)
|
||||
render_page_hierarchy(pages, options[:parent] ? page.parent_id : page.id)
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user