diff --git a/app/controllers/versions_controller.rb b/app/controllers/versions_controller.rb index d2beef2534..cdec397a8e 100644 --- a/app/controllers/versions_controller.rb +++ b/app/controllers/versions_controller.rb @@ -27,6 +27,7 @@ class VersionsController < ApplicationController accept_api_auth :index, :show, :create, :update, :destroy + include VersionsHelper helper :custom_fields helper :projects @@ -73,6 +74,9 @@ class VersionsController < ApplicationController to_a end format.api + format.text do + send_data(version_to_text(@version), type: 'text/plain', filename: "#{@version.name}.txt") + end end end diff --git a/app/helpers/versions_helper.rb b/app/helpers/versions_helper.rb index d613f6d2aa..54f553d48d 100644 --- a/app/helpers/versions_helper.rb +++ b/app/helpers/versions_helper.rb @@ -18,6 +18,7 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. module VersionsHelper + include Redmine::Export::Text::VersionsTextHelper def version_anchor(version) if @project == version.project diff --git a/app/views/versions/show.html.erb b/app/views/versions/show.html.erb index 0527eae9cc..e175710758 100644 --- a/app/views/versions/show.html.erb +++ b/app/views/versions/show.html.erb @@ -56,6 +56,10 @@ <% end %> +<% other_formats_links do |f| %> + <%= f.link_to_with_query_parameters 'TXT' %> +<% end %> + <%= call_hook :view_versions_show_bottom, :version => @version %> <% html_title @version.name %> diff --git a/lib/redmine/export/text/versions_text_helper.rb b/lib/redmine/export/text/versions_text_helper.rb new file mode 100644 index 0000000000..a460c4cda6 --- /dev/null +++ b/lib/redmine/export/text/versions_text_helper.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +# Redmine - project management software +# Copyright (C) 2006-2023 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +module Redmine + module Export + module Text + module VersionsTextHelper + def version_to_text(version) + [ + "# #{version.name}", + format_date(version.effective_date), + version.description, + version.fixed_issues.visible.map do |issue| + "* #{issue.tracker.name} ##{issue.id}: #{issue.subject}\n" + end.join + ].compact.join("\n\n") + end + end + end + end +end diff --git a/test/functional/versions_controller_test.rb b/test/functional/versions_controller_test.rb index b997a04a4c..5b72f4c481 100644 --- a/test/functional/versions_controller_test.rb +++ b/test/functional/versions_controller_test.rb @@ -20,6 +20,7 @@ require_relative '../test_helper' class VersionsControllerTest < Redmine::ControllerTest + include Redmine::I18n fixtures :projects, :enabled_modules, :trackers, :projects_trackers, :versions, :issue_statuses, :issue_categories, :enumerations, @@ -220,6 +221,18 @@ class VersionsControllerTest < Redmine::ControllerTest assert_select 'a.icon.icon-add', :text => 'New issue' end + def test_show_with_text_format + version = Version.find(2) + get :show, params: {id: version.id, format: :text} + assert_response :success + assert_equal 'text/plain', response.media_type + + result = response.body.split("\n\n") + assert_equal "# #{version.name}", result[0] + assert_equal format_date(version.effective_date), result[1] + assert_equal version.description, result[2] + end + def test_new @request.session[:user_id] = 2 get :new, :params => {:project_id => '1'} diff --git a/test/unit/lib/redmine/export/text/versions_text_helper_test.rb b/test/unit/lib/redmine/export/text/versions_text_helper_test.rb new file mode 100644 index 0000000000..92d62a5313 --- /dev/null +++ b/test/unit/lib/redmine/export/text/versions_text_helper_test.rb @@ -0,0 +1,41 @@ +# frozen_string_literal: true + +# Redmine - project management software +# Copyright (C) 2006-2023 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +require_relative '../../../../../test_helper' + +class VersionsTextHelperTest < ActiveSupport::TestCase + fixtures :users, :projects, :roles, :members, :member_roles, + :enabled_modules, :issues, :trackers, :enumerations, :versions + + include Redmine::I18n + include Redmine::Export::Text::VersionsTextHelper + + def test_version_to_text + expected = <<~EXPECTED + # 0.1 + + 07/01/2006 + + Beta + + * Bug #11: Closed issue on a closed version + EXPECTED + assert_equal expected, version_to_text(Version.find(1)) + end +end