From 2f43c315f36a88ca0251ff9d6ab46fa63f84839c Mon Sep 17 00:00:00 2001 From: Go MAEDA Date: Wed, 25 Nov 2020 07:51:58 +0000 Subject: Create tracker by copy (#34258). Patch by Takenori TAKAKI. git-svn-id: http://svn.redmine.org/redmine/trunk@20492 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/trackers_controller.rb | 3 +++ app/models/tracker.rb | 10 ++++++++++ app/views/trackers/_form.html.erb | 2 +- app/views/trackers/index.html.erb | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) (limited to 'app') diff --git a/app/controllers/trackers_controller.rb b/app/controllers/trackers_controller.rb index fdb5f0e37..c69721f52 100644 --- a/app/controllers/trackers_controller.rb +++ b/app/controllers/trackers_controller.rb @@ -36,6 +36,9 @@ class TrackersController < ApplicationController def new @tracker ||= Tracker.new(:default_status => IssueStatus.sorted.first) @tracker.safe_attributes = params[:tracker] + if params[:copy].present? && @copy_from = Tracker.find_by_id(params[:copy]) + @tracker.copy_from(@copy_from) + end @trackers = Tracker.sorted.to_a @projects = Project.all end diff --git a/app/models/tracker.rb b/app/models/tracker.rb index 7bd5c9759..49c334af8 100644 --- a/app/models/tracker.rb +++ b/app/models/tracker.rb @@ -76,6 +76,16 @@ class Tracker < ActiveRecord::Base 'project_ids', 'description') + def copy_from(arg, options={}) + return if arg.blank? + + tracker = arg.is_a?(Tracker) ? arg : Tracker.find_by_id(arg.to_s) + self.attributes = tracker.attributes.dup.except("id", "name", "position") + self.custom_field_ids = tracker.custom_field_ids.dup + self.project_ids = tracker.project_ids.dup + self + end + def to_s; name end def <=>(tracker) diff --git a/app/views/trackers/_form.html.erb b/app/views/trackers/_form.html.erb index 27e086e56..2ccd225e6 100644 --- a/app/views/trackers/_form.html.erb +++ b/app/views/trackers/_form.html.erb @@ -39,7 +39,7 @@ <% if @tracker.new_record? && @trackers.any? %>

-<%= select_tag(:copy_workflow_from, content_tag("option") + options_from_collection_for_select(@trackers, :id, :name)) %>

+<%= select_tag(:copy_workflow_from, content_tag("option") + options_from_collection_for_select(@trackers, :id, :name, params[:copy_workflow_from] || @copy_from.try(:id))) %>

<% end %> diff --git a/app/views/trackers/index.html.erb b/app/views/trackers/index.html.erb index 20d09754d..85d3249fc 100644 --- a/app/views/trackers/index.html.erb +++ b/app/views/trackers/index.html.erb @@ -28,6 +28,7 @@ <%= reorder_handle(tracker) %> + <%= link_to l(:button_copy), new_tracker_path(:copy => tracker), :class => 'icon icon-copy' %> <%= delete_link tracker_path(tracker) %> -- cgit v1.2.3