summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2008-11-11 18:10:21 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2008-11-11 18:10:21 +0000
commitd7718470785c67aaede689a3651dfe2b2fd53bfb (patch)
treeb90d7f07bee68e78f257d2963c13214bc26cf4f5
parent3f4defe48215c460933343fffdb6888603e62492 (diff)
downloadredmine-d7718470785c67aaede689a3651dfe2b2fd53bfb.tar.gz
redmine-d7718470785c67aaede689a3651dfe2b2fd53bfb.zip
Pluggable admin menu (patch #2031 by Yuki Sonoda with slight changes).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2022 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r--app/views/admin/index.rhtml6
-rw-r--r--lib/redmine.rb4
-rw-r--r--lib/redmine/menu_manager.rb18
3 files changed, 25 insertions, 3 deletions
diff --git a/app/views/admin/index.rhtml b/app/views/admin/index.rhtml
index 438f72a30..e2d160730 100644
--- a/app/views/admin/index.rhtml
+++ b/app/views/admin/index.rhtml
@@ -34,6 +34,12 @@
<%= link_to l(:label_settings), :controller => 'settings' %>
</p>
+<% menu_items_for(:admin_menu) do |item, caption, url, selected| -%>
+ <%= content_tag 'p',
+ link_to(h(caption), item.url, item.html_options),
+ :class => ["icon22", "icon22-#{item.name}"].join(' ') %>
+<% end -%>
+
<p class="icon22 icon22-info">
<%= link_to l(:label_information_plural), :controller => 'admin', :action => 'info' %>
</p>
diff --git a/lib/redmine.rb b/lib/redmine.rb
index 19f0854e2..45cfcbddf 100644
--- a/lib/redmine.rb
+++ b/lib/redmine.rb
@@ -124,6 +124,10 @@ Redmine::MenuManager.map :application_menu do |menu|
# Empty
end
+Redmine::MenuManager.map :admin_menu do |menu|
+ # Empty
+end
+
Redmine::MenuManager.map :project_menu do |menu|
menu.push :overview, { :controller => 'projects', :action => 'show' }
menu.push :activity, { :controller => 'projects', :action => 'activity' }
diff --git a/lib/redmine/menu_manager.rb b/lib/redmine/menu_manager.rb
index 730097d74..b09e5150a 100644
--- a/lib/redmine/menu_manager.rb
+++ b/lib/redmine/menu_manager.rb
@@ -70,6 +70,15 @@ module Redmine
def render_menu(menu, project=nil)
links = []
+ menu_items_for(menu, project) do |item, caption, url, selected|
+ links << content_tag('li',
+ link_to(h(caption), url, (selected ? item.html_options.merge(:class => 'selected') : item.html_options)))
+ end
+ links.empty? ? nil : content_tag('ul', links.join("\n"))
+ end
+
+ def menu_items_for(menu, project=nil)
+ items = []
Redmine::MenuManager.allowed_items(menu, User.current, project).each do |item|
unless item.condition && !item.condition.call(project)
url = case item.url
@@ -82,11 +91,14 @@ module Redmine
end
caption = item.caption(project)
caption = l(caption) if caption.is_a?(Symbol)
- links << content_tag('li',
- link_to(h(caption), url, (current_menu_item == item.name ? item.html_options.merge(:class => 'selected') : item.html_options)))
+ if block_given?
+ yield item, caption, url, (current_menu_item == item.name)
+ else
+ items << [item, caption, url, (current_menu_item == item.name)]
+ end
end
end
- links.empty? ? nil : content_tag('ul', links.join("\n"))
+ return block_given? ? nil : items
end
end