OSDN Git Service

Refactor: added link_to_project helper to handle links to projects
authorJean-Baptiste Barth <jeanbaptiste.barth@gmail.com>
Sun, 8 Aug 2010 07:07:20 +0000 (07:07 +0000)
committerJean-Baptiste Barth <jeanbaptiste.barth@gmail.com>
Sun, 8 Aug 2010 07:07:20 +0000 (07:07 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3924 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/application_helper.rb
app/helpers/projects_helper.rb
app/helpers/queries_helper.rb
app/views/admin/projects.rhtml
app/views/issues/_list_simple.rhtml
app/views/news/_news.rhtml
app/views/news/index.rhtml
app/views/users/_memberships.rhtml
app/views/users/show.rhtml
app/views/welcome/index.rhtml
test/unit/helpers/application_helper_test.rb

index d6fd16a..2c334b7 100644 (file)
@@ -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 << '&#8230;'
           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(' &#187; ')
@@ -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
index 044ccfb..3b089c1 100644 (file)
@@ -72,7 +72,7 @@ module ProjectsHelper
         end
         classes = (ancestors.empty? ? 'root' : 'child')
         s << "<li class='#{classes}'><div class='#{classes}'>" +
-               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 << "<div class='wiki description'>#{textilizable(project.short_description, :project => project)}</div>" unless project.description.blank?
         s << "</div>\n"
         ancestors << project
index 594c8a7..26be636 100644 (file)
@@ -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'
index dc7bb97..46b68e4 100644 (file)
@@ -27,7 +27,7 @@
   <tbody>
 <% project_tree(@projects) do |project, level| %>
   <tr class="<%= cycle("odd", "even") %> <%= css_project_classes(project) %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>">
-       <td class="name"><%= project.active? ? link_to(h(project.name), :controller => 'projects', :action => 'settings', :id => project) : h(project.name) %></td>
+       <td class="name"><%= link_to_project(project, :action => 'settings') %></td>
        <td><%= textilizable project.short_description, :project => project %></td>
        <td align="center"><%= checked_image project.is_public? %></td>
        <td align="center"><%= format_date(project.created_on) %></td>
index 3882376..dd7f489 100644 (file)
@@ -14,7 +14,7 @@
                          <%= check_box_tag("ids[]", issue.id, false, :style => 'display:none;') %>
                                <%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %>
                        </td>
-                       <td class="project"><%= link_to(h(issue.project), :controller => 'projects', :action => 'show', :id => issue.project) %></td>
+                       <td class="project"><%= link_to_project(issue.project) %></td>
                        <td class="tracker"><%=h issue.tracker %></td>
                        <td class="subject">
         <%= link_to h(truncate(issue.subject, :length => 60)), :controller => 'issues', :action => 'show', :id => issue %> (<%=h issue.status %>)
index e95e8a5..8f481f0 100644 (file)
@@ -1,4 +1,4 @@
-<p><%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless @project %>
+<p><%= 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 %>
 <br />
index 11a3923..8b7cc66 100644 (file)
@@ -28,7 +28,7 @@
 <p class="nodata"><%= l(:label_no_data) %></p>
 <% else %>
 <% @newss.each do |news| %>
-    <h3><%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless news.project == @project %>
+    <h3><%= 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 %></h3>
     <p class="author"><%= authoring news.created_on, news.author %></p>
index 4c71f81..4412947 100644 (file)
@@ -15,7 +15,7 @@
        <% next if membership.new_record? %>
        <tr id="member-<%= membership.id %>" class="<%= cycle 'odd', 'even' %> class">
   <td class="project">
-    <%= link_to h(membership.project), {:controller => 'projects', :action => 'show', :id => membership.project} %>
+    <%= link_to_project membership.project %>
   </td>
   <td class="roles">
     <span id="member-<%= membership.id %>-roles"><%=h membership.roles.sort.collect(&:to_s).join(', ') %></span>
index 82634b0..df5aec8 100644 (file)
@@ -24,7 +24,7 @@
 <h3><%=l(:label_project_plural)%></h3>
 <ul>
 <% for membership in @memberships %>
-       <li><%= link_to(h(membership.project.name), :controller => 'projects', :action => 'show', :id => membership.project) %>
+       <li><%= link_to_project(membership.project) %>
     (<%=h membership.roles.sort.collect(&:to_s).join(', ') %>, <%= format_date(membership.created_on) %>)</li>
 <% end %>
 </ul>
index a0ada7c..6ac09c1 100644 (file)
@@ -20,7 +20,7 @@
                <% for project in @projects %>
                  <% @project = project %>
                        <li>
-                       <%= 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 %>
                        </li>
                <% end %>
index 90d3428..6fd21fe 100644 (file)
@@ -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 %(<a href="/projects/ecookbook">eCookbook</a>),
+                 link_to_project(project)
+    assert_equal %(<a href="/projects/ecookbook/settings">eCookbook</a>),
+                 link_to_project(project, :action => 'settings')
+    assert_equal %(<a href="http://test.host/projects/ecookbook?jump=blah">eCookbook</a>),
+                 link_to_project(project, {:only_path => false, :jump => 'blah'})
+    assert_equal %(<a href="/projects/ecookbook/settings" class="project">eCookbook</a>),
+                 link_to_project(project, {:action => 'settings'}, :class => "project")
+  end
 end