diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index d6fd16a6e..2c334b7f0 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -103,6 +103,23 @@ module ApplicationHelper
link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision))
end
+ # Generates a link to a project if active
+ # Examples:
+ #
+ # link_to_project(project) # => link to the specified project overview
+ # link_to_project(project, :action=>'settings') # => link to project settings
+ # link_to_project(project, {:only_path => false}, :class => "project") # => 3rd arg adds html options
+ # link_to_project(project, {}, :class => "project") # => html options with default url (project overview)
+ #
+ def link_to_project(project, options={}, html_options = nil)
+ if project.active?
+ url = {:controller => 'projects', :action => 'show', :id => project}.merge(options)
+ link_to(h(project), url, html_options)
+ else
+ h(project)
+ end
+ end
+
def toggle_link(name, id, options={})
onclick = "Element.toggle('#{id}'); "
onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ")
@@ -368,12 +385,12 @@ module ApplicationHelper
ancestors = (@project.root? ? [] : @project.ancestors.visible)
if ancestors.any?
root = ancestors.shift
- b << link_to(h(root), {:controller => 'projects', :action => 'show', :id => root, :jump => current_menu_item}, :class => 'root')
+ b << link_to_project(root, {:jump => current_menu_item}, :class => 'root')
if ancestors.size > 2
b << '…'
ancestors = ancestors[-2, 2]
end
- b += ancestors.collect {|p| link_to(h(p), {:controller => 'projects', :action => 'show', :id => p, :jump => current_menu_item}, :class => 'ancestor') }
+ b += ancestors.collect {|p| link_to_project(p, {:jump => current_menu_item}, :class => 'ancestor') }
end
b << h(@project)
b.join(' » ')
@@ -605,8 +622,7 @@ module ApplicationHelper
end
when 'project'
if p = Project.visible.find_by_id(oid)
- link = link_to h(p.name), {:only_path => only_path, :controller => 'projects', :action => 'show', :id => p},
- :class => 'project'
+ link = link_to_project(p, {:only_path => only_path}, :class => 'project')
end
end
elsif sep == ':'
@@ -648,8 +664,7 @@ module ApplicationHelper
end
when 'project'
if p = Project.visible.find(:first, :conditions => ["identifier = :s OR LOWER(name) = :s", {:s => name.downcase}])
- link = link_to h(p.name), {:only_path => only_path, :controller => 'projects', :action => 'show', :id => p},
- :class => 'project'
+ link = link_to_project(p, {:only_path => only_path}, :class => 'project')
end
end
end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 044ccfb77..3b089c111 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -72,7 +72,7 @@ module ProjectsHelper
end
classes = (ancestors.empty? ? 'root' : 'child')
s << "
" +
- link_to(h(project), {:controller => 'projects', :action => 'show', :id => project}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}")
+ link_to_project(project, {}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}")
s << "
#{textilizable(project.short_description, :project => project)}
" unless project.description.blank?
s << "
\n"
ancestors << project
diff --git a/app/helpers/queries_helper.rb b/app/helpers/queries_helper.rb
index 594c8a79a..26be63693 100644
--- a/app/helpers/queries_helper.rb
+++ b/app/helpers/queries_helper.rb
@@ -50,7 +50,7 @@ module QueriesHelper
when 'User'
link_to_user value
when 'Project'
- link_to(h(value), :controller => 'projects', :action => 'show', :id => value)
+ link_to_project value
when 'Version'
link_to(h(value), :controller => 'versions', :action => 'show', :id => value)
when 'TrueClass'
diff --git a/app/views/admin/projects.rhtml b/app/views/admin/projects.rhtml
index dc7bb97ed..46b68e4cc 100644
--- a/app/views/admin/projects.rhtml
+++ b/app/views/admin/projects.rhtml
@@ -27,7 +27,7 @@
<% project_tree(@projects) do |project, level| %>
<%= css_project_classes(project) %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
- <%= project.active? ? link_to(h(project.name), :controller => 'projects', :action => 'settings', :id => project) : h(project.name) %> |
+ <%= link_to_project(project, :action => 'settings') %> |
<%= textilizable project.short_description, :project => project %> |
<%= checked_image project.is_public? %> |
<%= format_date(project.created_on) %> |
diff --git a/app/views/issues/_list_simple.rhtml b/app/views/issues/_list_simple.rhtml
index 38823765e..dd7f48946 100644
--- a/app/views/issues/_list_simple.rhtml
+++ b/app/views/issues/_list_simple.rhtml
@@ -14,7 +14,7 @@
<%= check_box_tag("ids[]", issue.id, false, :style => 'display:none;') %>
<%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %>
- <%= link_to(h(issue.project), :controller => 'projects', :action => 'show', :id => issue.project) %> |
+ <%= link_to_project(issue.project) %> |
<%=h issue.tracker %> |
<%= link_to h(truncate(issue.subject, :length => 60)), :controller => 'issues', :action => 'show', :id => issue %> (<%=h issue.status %>)
diff --git a/app/views/news/_news.rhtml b/app/views/news/_news.rhtml
index e95e8a557..8f481f09c 100644
--- a/app/views/news/_news.rhtml
+++ b/app/views/news/_news.rhtml
@@ -1,4 +1,4 @@
- <%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless @project %>
+ <%= link_to_project(news.project) + ': ' unless @project %>
<%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %>
<%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>
diff --git a/app/views/news/index.rhtml b/app/views/news/index.rhtml
index 11a39232c..8b7cc66e1 100644
--- a/app/views/news/index.rhtml
+++ b/app/views/news/index.rhtml
@@ -28,7 +28,7 @@
<%= l(:label_no_data) %>
<% else %>
<% @newss.each do |news| %>
- <%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless news.project == @project %>
+ <%= link_to_project(news.project) + ': ' unless news.project == @project %>
<%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %>
<%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>
<%= authoring news.created_on, news.author %>
diff --git a/app/views/users/_memberships.rhtml b/app/views/users/_memberships.rhtml
index 4c71f81ba..441294708 100644
--- a/app/views/users/_memberships.rhtml
+++ b/app/views/users/_memberships.rhtml
@@ -15,7 +15,7 @@
<% next if membership.new_record? %>
|
- <%= link_to h(membership.project), {:controller => 'projects', :action => 'show', :id => membership.project} %>
+ <%= link_to_project membership.project %>
|
<%=h membership.roles.sort.collect(&:to_s).join(', ') %>
diff --git a/app/views/users/show.rhtml b/app/views/users/show.rhtml
index 82634b010..df5aec825 100644
--- a/app/views/users/show.rhtml
+++ b/app/views/users/show.rhtml
@@ -24,7 +24,7 @@
<%=l(:label_project_plural)%>
<% for membership in @memberships %>
- - <%= link_to(h(membership.project.name), :controller => 'projects', :action => 'show', :id => membership.project) %>
+
- <%= link_to_project(membership.project) %>
(<%=h membership.roles.sort.collect(&:to_s).join(', ') %>, <%= format_date(membership.created_on) %>)
<% end %>
diff --git a/app/views/welcome/index.rhtml b/app/views/welcome/index.rhtml
index a0ada7cce..6ac09c153 100644
--- a/app/views/welcome/index.rhtml
+++ b/app/views/welcome/index.rhtml
@@ -20,7 +20,7 @@
<% for project in @projects %>
<% @project = project %>
- <%= link_to h(project.name), :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>)
+ <%= link_to_project project %> (<%= format_time(project.created_on) %>)
<%= textilizable project.short_description, :project => project %>
<% end %>
diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb
index 90d342898..6fd21fe37 100644
--- a/test/unit/helpers/application_helper_test.rb
+++ b/test/unit/helpers/application_helper_test.rb
@@ -597,4 +597,16 @@ EXPECTED
t = link_to_user(user)
assert_equal ::I18n.t(:label_user_anonymous), t
end
+
+ def test_link_to_project
+ project = Project.find(1)
+ assert_equal %(eCookbook),
+ link_to_project(project)
+ assert_equal %(eCookbook),
+ link_to_project(project, :action => 'settings')
+ assert_equal %(eCookbook),
+ link_to_project(project, {:only_path => false, :jump => 'blah'})
+ assert_equal %(eCookbook),
+ link_to_project(project, {:action => 'settings'}, :class => "project")
+ end
end
|