diff --git a/nested_projects/app/helpers/application_helper.rb b/nested_projects/app/helpers/application_helper.rb
index c93e16eed..66ddef9c3 100644
--- a/nested_projects/app/helpers/application_helper.rb
+++ b/nested_projects/app/helpers/application_helper.rb
@@ -156,15 +156,25 @@ module ApplicationHelper
s = ''
s
end
end
+ def project_tree_options_for_select(projects, options = {})
+ s = ''
+ project_tree(projects) do |project, level|
+ name_prefix = (level > 0 ? (' ' * 2 * level + '» ') : '')
+ tag_options = {:value => project.id, :selected => ((project == options[:selected]) ? 'selected' : nil)}
+ tag_options.merge!(yield(project)) if block_given?
+ s << content_tag('option', name_prefix + h(project), tag_options)
+ end
+ s
+ end
+
# Yields the given block for each project with its level in the tree
def project_tree(projects, &block)
ancestors = []
diff --git a/nested_projects/app/helpers/projects_helper.rb b/nested_projects/app/helpers/projects_helper.rb
index 2cf4cb750..912450c1c 100644
--- a/nested_projects/app/helpers/projects_helper.rb
+++ b/nested_projects/app/helpers/projects_helper.rb
@@ -35,11 +35,7 @@ module ProjectsHelper
end
def parent_project_select_tag(project)
- options = ''
- project_tree(project.possible_parents) do |p, i|
- selected = (project.parent == p)
- options << ""
- end
+ options = '' + project_tree_options_for_select(project.possible_parents, :selected => project.parent)
content_tag('select', options, :name => 'project[parent_id]')
end
diff --git a/nested_projects/app/helpers/users_helper.rb b/nested_projects/app/helpers/users_helper.rb
index 5b113e880..18a80ef20 100644
--- a/nested_projects/app/helpers/users_helper.rb
+++ b/nested_projects/app/helpers/users_helper.rb
@@ -27,14 +27,7 @@ module UsersHelper
# Options for the new membership projects combo-box
def projects_options_for_select(projects)
options = content_tag('option', "--- #{l(:actionview_instancetag_blank_option)} ---")
- projects_by_root = projects.group_by(&:root)
- projects_by_root.keys.sort.each do |root|
- options << content_tag('option', h(root.name), :value => root.id, :disabled => (!projects.include?(root)))
- projects_by_root[root].sort.each do |project|
- next if project == root
- options << content_tag('option', '» ' + h(project.name), :value => project.id)
- end
- end
+ options << project_tree_options_for_select(projects)
options
end