Feature #22608 » enable_to_filtering_versions_on_project_setting_versions_trunk_r15336.patch
| app/controllers/projects_controller.rb | ||
|---|---|---|
| 160 | 160 |
@issue_custom_fields = IssueCustomField.sorted.to_a |
| 161 | 161 |
@issue_category ||= IssueCategory.new |
| 162 | 162 |
@member ||= @project.members.new |
| 163 |
@versions ||= @project.shared_versions(params[:version]) |
|
| 164 |
@version_status = params[:version] && params[:version][:status] |
|
| 165 |
@version_name = params[:version] && params[:version][:name] |
|
| 163 | 166 |
@trackers = Tracker.sorted.to_a |
| 164 | 167 |
@wiki ||= @project.wiki || Wiki.new(:project => @project) |
| 165 | 168 |
end |
| app/helpers/projects_helper.rb | ||
|---|---|---|
| 100 | 100 |
l("label_version_sharing_#{sharing}")
|
| 101 | 101 |
end |
| 102 | 102 | |
| 103 |
def version_status_check_group(checked_status) |
|
| 104 |
checked_status ||= Version::VERSION_STATUSES |
|
| 105 |
content = "<label for='version[status]'>#{l(:field_status)}:</label>"
|
|
| 106 |
Version::VERSION_STATUSES.each do |s| |
|
| 107 |
content += check_box_tag('version[status][]', s, checked_status.include?(s), :id => "version_status_#{s}", :onchange => "this.form.submit(); return false;")
|
|
| 108 |
content += content_tag('label', l("version_status_#{s}"), :for => "version_status_#{s}")
|
|
| 109 |
end |
|
| 110 |
content.html_safe |
|
| 111 |
end |
|
| 112 | ||
| 103 | 113 |
def render_api_includes(project, api) |
| 104 | 114 |
api.array :trackers do |
| 105 | 115 |
project.trackers.each do |tracker| |
| app/models/project.rb | ||
|---|---|---|
| 453 | 453 |
end |
| 454 | 454 | |
| 455 | 455 |
# Returns a scope of the Versions used by the project |
| 456 |
def shared_versions |
|
| 456 |
def shared_versions(conditions = nil)
|
|
| 457 | 457 |
if new_record? |
| 458 | 458 |
Version. |
| 459 | 459 |
joins(:project). |
| ... | ... | |
| 473 | 473 |
" OR (#{Project.table_name}.lft > #{lft} AND #{Project.table_name}.rgt < #{rgt} AND #{Version.table_name}.sharing = 'hierarchy')" +
|
| 474 | 474 |
"))") |
| 475 | 475 |
end |
| 476 |
if conditions.is_a?(Hash) && conditions.any? |
|
| 477 |
@shared_versions = @shared_versions.where("#{Version.table_name}.status IN (?)", conditions[:status]) if conditions[:status].is_a?(Array)
|
|
| 478 |
@shared_versions = @shared_versions.where("#{Version.table_name}.name LIKE ?", "%#{conditions[:name]}%") if conditions[:name].present?
|
|
| 479 |
end |
|
| 480 |
@shared_versions |
|
| 476 | 481 |
end |
| 477 | 482 |
end |
| 478 | 483 | |
| app/views/projects/settings/_versions.html.erb | ||
|---|---|---|
| 1 |
<% if @project.shared_versions.any? %> |
|
| 1 |
<%= form_tag(settings_project_path(:tab => 'versions'), :method => :get) do %> |
|
| 2 |
<fieldset><legend><%= l(:label_filter_plural) %></legend> |
|
| 3 |
<%= version_status_check_group(@version_status) %> |
|
| 4 |
<label for='version[name]'><%= l(:label_version) %>:</label> |
|
| 5 |
<%= text_field_tag 'version[name]', @version_name, :size => 30 %> |
|
| 6 |
<%= submit_tag l(:button_apply), :class => "small", :name => nil %> |
|
| 7 |
<%= link_to l(:button_clear), users_path, :class => 'icon icon-reload' %> |
|
| 8 |
</fieldset> |
|
| 9 |
<% end %> |
|
| 10 |
|
|
| 11 | ||
| 12 |
<% if @versions && @versions.any? %> |
|
| 2 | 13 |
<table class="list versions"> |
| 3 | 14 |
<thead><tr> |
| 4 | 15 |
<th><%= l(:label_version) %></th> |
| ... | ... | |
| 10 | 21 |
<th style="width:15%"></th> |
| 11 | 22 |
</tr></thead> |
| 12 | 23 |
<tbody> |
| 13 |
<% for version in @project.shared_versions.sort %>
|
|
| 24 |
<% for version in @versions.sort %> |
|
| 14 | 25 |
<tr class="version <%= cycle 'odd', 'even' %> <%=h version.status %> <%= 'shared' if version.project != @project %>"> |
| 15 | 26 |
<td class="name"><%= link_to_version version %></td> |
| 16 | 27 |
<td class="date"><%= format_date(version.effective_date) %></td> |
| test/functional/projects_controller_test.rb | ||
|---|---|---|
| 423 | 423 |
assert_template 'settings' |
| 424 | 424 |
end |
| 425 | 425 | |
| 426 |
def test_settings_with_version_parameters_should_assigns_matched_versions |
|
| 427 |
@request.session[:user_id] = 2 # manager |
|
| 428 |
version_parameters = {:status => ['open']}
|
|
| 429 |
get :settings, :id => 1, :version => version_parameters |
|
| 430 |
assert_response :success |
|
| 431 |
assert_template 'settings' |
|
| 432 |
assert assigns(:versions) |
|
| 433 |
assert_equal Project.find(1).shared_versions(version_parameters), assigns(:versions) |
|
| 434 |
end |
|
| 435 | ||
| 426 | 436 |
def test_settings_of_subproject |
| 427 | 437 |
@request.session[:user_id] = 2 |
| 428 | 438 |
get :settings, :id => 'private-child' |
| test/unit/project_test.rb | ||
|---|---|---|
| 633 | 633 |
assert_include v, Project.new.shared_versions |
| 634 | 634 |
end |
| 635 | 635 | |
| 636 |
def test_shared_versions_with_status_conditions_should_returns_filterd_versions |
|
| 637 |
p = Project.find(5) |
|
| 638 |
Version.update_all(:status => 'closed') |
|
| 639 |
open_version = Version.create!(:name => 'open version', :project => p, :status => 'open') |
|
| 640 |
locked_version = Version.create!(:name => 'locked version', :project => p, :status => 'locked') |
|
| 641 | ||
| 642 |
versions = p.shared_versions(:status => ['open', 'locked']) |
|
| 643 |
assert_equal 2, versions.size |
|
| 644 |
assert_include open_version, versions |
|
| 645 |
assert_include locked_version, versions |
|
| 646 |
end |
|
| 647 | ||
| 648 |
def test_shared_versions_with_name_conditions_should_returns_filterd_versions |
|
| 649 |
p = Project.find(5) |
|
| 650 |
Version.update_all(:name => 'unmatch versoin') |
|
| 651 |
open_version = Version.create!(:name => 'version first open', :project => p, :status => 'open') |
|
| 652 |
locked_version = Version.create!(:name => 'second version locked', :project => p, :status => 'locked') |
|
| 653 |
closed_version = Version.create!(:name => 'last closed version', :project => p, :status => 'closed') |
|
| 654 | ||
| 655 |
versions = p.shared_versions(:name => 'version') |
|
| 656 |
assert_equal 3, versions.size |
|
| 657 |
assert_include open_version, versions |
|
| 658 |
assert_include locked_version, versions |
|
| 659 |
assert_include locked_version, versions |
|
| 660 |
end |
|
| 661 | ||
| 636 | 662 |
def test_next_identifier |
| 637 | 663 |
ProjectCustomField.delete_all |
| 638 | 664 |
Project.create!(:name => 'last', :identifier => 'p2008040') |