summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorGo MAEDA <maeda@farend.jp>2020-11-25 07:51:58 +0000
committerGo MAEDA <maeda@farend.jp>2020-11-25 07:51:58 +0000
commit2f43c315f36a88ca0251ff9d6ab46fa63f84839c (patch)
treeae824edc5d581391ead2eae068d51784a4820500 /app
parent00c751a1a6ad5ae67d93b7687b4b1ff9a8c7307e (diff)
downloadredmine-2f43c315f36a88ca0251ff9d6ab46fa63f84839c.tar.gz
redmine-2f43c315f36a88ca0251ff9d6ab46fa63f84839c.zip
Create tracker by copy (#34258).
Patch by Takenori TAKAKI. git-svn-id: http://svn.redmine.org/redmine/trunk@20492 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r--app/controllers/trackers_controller.rb3
-rw-r--r--app/models/tracker.rb10
-rw-r--r--app/views/trackers/_form.html.erb2
-rw-r--r--app/views/trackers/index.html.erb1
4 files changed, 15 insertions, 1 deletions
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? %>
<p><label for="copy_workflow_from"><%= l(:label_copy_workflow_from) %></label>
-<%= select_tag(:copy_workflow_from, content_tag("option") + options_from_collection_for_select(@trackers, :id, :name)) %></p>
+<%= select_tag(:copy_workflow_from, content_tag("option") + options_from_collection_for_select(@trackers, :id, :name, params[:copy_workflow_from] || @copy_from.try(:id))) %></p>
<% end %>
<!--[eoform:tracker]-->
</div>
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 @@
</td>
<td class="buttons">
<%= reorder_handle(tracker) %>
+ <%= link_to l(:button_copy), new_tracker_path(:copy => tracker), :class => 'icon icon-copy' %>
<%= delete_link tracker_path(tracker) %>
</td>
</tr>