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