From 84f322b2af0e2a781a1fcc3ae4dd1e6845b22b66 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Fri, 15 Mar 2019 10:38:56 +0000 Subject: [PATCH] Add a description for trackers (#442). Patch by Marius BALTEANU. git-svn-id: http://svn.redmine.org/redmine/trunk@17970 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/projects_controller.rb | 1 + app/helpers/issues_helper.rb | 7 ++- app/helpers/trackers_helper.rb | 6 +++ app/models/tracker.rb | 4 +- app/views/issues/_form.html.erb | 9 +++- .../issues/_trackers_description.html.erb | 13 ++++++ app/views/projects/settings/_issues.html.erb | 2 +- app/views/projects/show.html.erb | 2 +- app/views/trackers/_form.html.erb | 1 + app/views/trackers/index.api.rsb | 1 + app/views/trackers/index.html.erb | 2 + config/locales/en.yml | 2 + ...20190315102101_add_trackers_description.rb | 5 +++ public/stylesheets/application.css | 5 +++ public/stylesheets/responsive.css | 4 ++ test/fixtures/trackers.yml | 2 + test/functional/issues_controller_test.rb | 43 +++++++++++++++++++ test/integration/api_test/trackers_test.rb | 1 + test/unit/tracker_test.rb | 6 +++ 19 files changed, 110 insertions(+), 6 deletions(-) create mode 100644 app/views/issues/_trackers_description.html.erb create mode 100644 db/migrate/20190315102101_add_trackers_description.rb diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 09cc0f713..ca9959bac 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -35,6 +35,7 @@ class ProjectsController < ApplicationController helper :queries helper :repositories helper :members + helper :trackers # Lists visible projects def index diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb index 00bf5092b..ec340cd82 100644 --- a/app/helpers/issues_helper.rb +++ b/app/helpers/issues_helper.rb @@ -188,13 +188,18 @@ module IssuesHelper end def trackers_options_for_select(issue) + trackers = trackers_for_select(issue) + trackers.collect {|t| [t.name, t.id]} + end + + def trackers_for_select(issue) trackers = issue.allowed_target_trackers if issue.new_record? && issue.parent_issue_id.present? trackers = trackers.reject do |tracker| issue.tracker_id != tracker.id && tracker.disabled_core_fields.include?('parent_issue_id') end end - trackers.collect {|t| [t.name, t.id]} + trackers end class IssueFieldsRows diff --git a/app/helpers/trackers_helper.rb b/app/helpers/trackers_helper.rb index dd305c91e..468fe610f 100644 --- a/app/helpers/trackers_helper.rb +++ b/app/helpers/trackers_helper.rb @@ -20,4 +20,10 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. module TrackersHelper + + def tracker_name_tag(tracker) + title = tracker.description.presence + css = title ? "field-description" : nil + content_tag 'span', tracker.name, :class => css, :title => title + end end diff --git a/app/models/tracker.rb b/app/models/tracker.rb index 81fea01ba..3565294a3 100644 --- a/app/models/tracker.rb +++ b/app/models/tracker.rb @@ -38,6 +38,7 @@ class Tracker < ActiveRecord::Base validates_presence_of :name validates_uniqueness_of :name validates_length_of :name, :maximum => 30 + validates_length_of :description, :maximum => 255 scope :sorted, lambda { order(:position) } scope :named, lambda {|arg| where("LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip)} @@ -71,7 +72,8 @@ class Tracker < ActiveRecord::Base 'core_fields', 'position', 'custom_field_ids', - 'project_ids' + 'project_ids', + 'description' def to_s; name end diff --git a/app/views/issues/_form.html.erb b/app/views/issues/_form.html.erb index c99927d8a..5bc98ebbd 100644 --- a/app/views/issues/_form.html.erb +++ b/app/views/issues/_form.html.erb @@ -16,8 +16,13 @@ <% end %> <% if @issue.safe_attribute?('tracker_id') || (@issue.persisted? && @issue.tracker_id_changed?) %> -

<%= f.select :tracker_id, trackers_options_for_select(@issue), {:required => true}, - :onchange => "updateIssueFrom('#{escape_javascript update_issue_form_path(@project, @issue)}', this)" %>

+

+ <%= f.select :tracker_id, trackers_options_for_select(@issue), {:required => true}, + :onchange => "updateIssueFrom('#{escape_javascript update_issue_form_path(@project, @issue)}', this)", + :title => @issue.tracker.description %> + <%= content_tag 'a', l(:label_open_trackers_description), :class => 'icon-only icon-help', :title => l(:label_open_trackers_description), :onclick => "showModal('trackers_description', '500px'); return false;", :href => '#' if trackers_for_select(@issue).any? {|t| t.description.present? } %> +

+ <%= render partial: 'issues/trackers_description', locals: {trackers: trackers_for_select(@issue)} %> <% end %> <% if @issue.safe_attribute? 'subject' %> diff --git a/app/views/issues/_trackers_description.html.erb b/app/views/issues/_trackers_description.html.erb new file mode 100644 index 000000000..63c361983 --- /dev/null +++ b/app/views/issues/_trackers_description.html.erb @@ -0,0 +1,13 @@ +<% if trackers.any? {|t| t.description.present? } %> + +<% end %> diff --git a/app/views/projects/settings/_issues.html.erb b/app/views/projects/settings/_issues.html.erb index dc5265d8e..13c3ebc34 100644 --- a/app/views/projects/settings/_issues.html.erb +++ b/app/views/projects/settings/_issues.html.erb @@ -6,7 +6,7 @@ <% @trackers.each do |tracker| %> <% end %> <%= hidden_field_tag 'project[tracker_ids][]', '' %> diff --git a/app/views/projects/show.html.erb b/app/views/projects/show.html.erb index 14fd0817f..9c2d47524 100644 --- a/app/views/projects/show.html.erb +++ b/app/views/projects/show.html.erb @@ -52,7 +52,7 @@ <% @trackers.each do |tracker| %> - <%= link_to tracker.name, project_issues_path(@project, :set_filter => 1, :tracker_id => tracker.id) %> + <%= link_to tracker.name, project_issues_path(@project, :set_filter => 1, :tracker_id => tracker.id), :title => tracker.description %> <%= link_to @open_issues_by_tracker[tracker].to_i, project_issues_path(@project, :set_filter => 1, :tracker_id => tracker.id) %> diff --git a/app/views/trackers/_form.html.erb b/app/views/trackers/_form.html.erb index 9697adb07..27e086e56 100644 --- a/app/views/trackers/_form.html.erb +++ b/app/views/trackers/_form.html.erb @@ -11,6 +11,7 @@ :required => true %>

<%= f.check_box :is_in_roadmap %>

+

<%= f.text_area :description, :rows => 4 %>

<% Tracker::CORE_FIELDS.each do |field| %> diff --git a/app/views/trackers/index.api.rsb b/app/views/trackers/index.api.rsb index de8579124..59affd7ae 100644 --- a/app/views/trackers/index.api.rsb +++ b/app/views/trackers/index.api.rsb @@ -4,6 +4,7 @@ api.array :trackers do api.id tracker.id api.name tracker.name api.default_status(:id => tracker.default_status.id, :name => tracker.default_status.name) unless tracker.default_status.nil? + api.description tracker.description end end end diff --git a/app/views/trackers/index.html.erb b/app/views/trackers/index.html.erb index 633edbcdb..20d09754d 100644 --- a/app/views/trackers/index.html.erb +++ b/app/views/trackers/index.html.erb @@ -9,6 +9,7 @@ <%=l(:label_tracker)%> <%=l(:field_default_status)%> + <%=l(:field_description)%> @@ -17,6 +18,7 @@ <%= link_to tracker.name, edit_tracker_path(tracker) %> <%= tracker.default_status.name %> + <%= tracker.description %> <% unless tracker.workflow_rules.exists? %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 63e33cfab..332d5e206 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1043,6 +1043,8 @@ en: label_nothing_to_preview: Nothing to preview label_inherited_from_parent_project: "Inherited from parent project" label_inherited_from_group: "Inherited from group %{name}" + label_trackers_description: Trackers description + label_open_trackers_description: View all trackers description button_login: Login button_submit: Submit diff --git a/db/migrate/20190315102101_add_trackers_description.rb b/db/migrate/20190315102101_add_trackers_description.rb new file mode 100644 index 000000000..b2ece45f4 --- /dev/null +++ b/db/migrate/20190315102101_add_trackers_description.rb @@ -0,0 +1,5 @@ +class AddTrackersDescription < ActiveRecord::Migration[5.2] + def change + add_column :trackers, :description, :string, :after => :name + end +end diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 147c8d4a0..4afcb70d7 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -489,6 +489,10 @@ div.issue.overdue .due-date .value { color: #c22; } #issue_tree td.checkbox, #relations td.checkbox {display:none;} #relations td.buttons, #issue_tree td.buttons {padding:0;} +#trackers_description {display:none;} +#trackers_description dt {font-weight: bold; text-decoration: underline;} +#trackers_description dd {margin: 0; padding: 0 0 1em 0;} + fieldset.collapsible {border-width: 1px 0 0 0;} fieldset.collapsible>legend { padding-left: 18px; background: url(../images/arrow_down.png) no-repeat 4px 40%; cursor:pointer; } fieldset.collapsible.collapsed>legend { background-image: url(../images/arrow_right.png); } @@ -1545,6 +1549,7 @@ img.filecontent.image {background-image: url(../images/transparent.png);} overflow:hidden; } + img { image-orientation: from-image; } diff --git a/public/stylesheets/responsive.css b/public/stylesheets/responsive.css index aa85d3091..a2193864c 100644 --- a/public/stylesheets/responsive.css +++ b/public/stylesheets/responsive.css @@ -755,6 +755,10 @@ float: none !important; } + #all_attributes #issue_tracker_id { + width: 90%; + } + #issue_is_private_label { display: inline; } diff --git a/test/fixtures/trackers.yml b/test/fixtures/trackers.yml index c969549f6..41602a78f 100644 --- a/test/fixtures/trackers.yml +++ b/test/fixtures/trackers.yml @@ -5,12 +5,14 @@ trackers_001: is_in_chlog: true default_status_id: 1 position: 1 + description: Description for Bug tracker trackers_002: name: Feature request id: 2 is_in_chlog: true default_status_id: 1 position: 2 + description: Description for Feature request tracker trackers_003: name: Support request id: 3 diff --git a/test/functional/issues_controller_test.rb b/test/functional/issues_controller_test.rb index 30ecd3073..e1637d83d 100644 --- a/test/functional/issues_controller_test.rb +++ b/test/functional/issues_controller_test.rb @@ -2969,6 +2969,49 @@ class IssuesControllerTest < Redmine::ControllerTest assert_select 'option', text: /#{t.name}/, count: 0 end + def test_get_new_should_show_trackers_description + @request.session[:user_id] = 2 + get :new, :params => { + :project_id => 1, + :issue => { + :tracker_id => 1 + } + } + assert_response :success + + assert_select 'form#issue-form' do + assert_select 'a[title=?]', 'View all trackers description', :text => 'View all trackers description' + assert_select 'select[name=?][title=?]', 'issue[tracker_id]', 'Description for Bug tracker' + end + + assert_select 'div#trackers_description' do + assert_select 'h3', 1, :text => 'Trackers description' + # only Bug and Feature have descriptions + assert_select 'dt', 2, :text => 'Bug' + assert_select 'dd', 2, :text => 'Description for Bug tracker' + end + end + + def test_get_new_should_not_show_trackers_description_for_trackers_without_description + Tracker.update_all(:description => '') + + @request.session[:user_id] = 2 + get :new, :params => { + :project_id => 1, + :issue => { + :tracker_id => 1 + } + } + assert_response :success + + assert_select 'form#issue-form' do + assert_select 'a[title=?]', 'View all trackers description', 0 + assert_select 'select[name=?][title=?]', 'issue[tracker_id]', '' + end + + assert_select 'div#trackers_description', 0 + end + def test_update_form_for_new_issue @request.session[:user_id] = 2 post :new, :params => { diff --git a/test/integration/api_test/trackers_test.rb b/test/integration/api_test/trackers_test.rb index d29f288c4..3e89aeec3 100644 --- a/test/integration/api_test/trackers_test.rb +++ b/test/integration/api_test/trackers_test.rb @@ -30,6 +30,7 @@ class Redmine::ApiTest::TrackersTest < Redmine::ApiTest::Base assert_select 'trackers[type=array] tracker id', :text => '2' do assert_select '~ name', :text => 'Feature request' + assert_select '~ description', :text => 'Description for Feature request tracker' end end end diff --git a/test/unit/tracker_test.rb b/test/unit/tracker_test.rb index f5cacd986..9f471ee87 100644 --- a/test/unit/tracker_test.rb +++ b/test/unit/tracker_test.rb @@ -134,4 +134,10 @@ class TrackerTest < ActiveSupport::TestCase end end end + + def test_tracker_should_have_description + tracker = Tracker.find(1) + assert tracker.respond_to?(:description) + assert_equal tracker.description, "Description for Bug tracker" + end end -- 2.39.5