Compare commits

...
2 Commits
Author SHA1 Message Date
ricky 31ca01d6cf 2026.8.1 2026-08-26 21:18:39 -04:00
ricky 7772526c8d Add support for registering custom fields in Subtask Field Copier 2026-08-26 21:18:29 -04:00
4 changed files with 32 additions and 10 deletions

No files matched your search

+21
View File
@@ -44,6 +44,27 @@ Once installed and the server is restarted, there is no configuration needed. Si
---
### Developer API: Registering Custom Fields
If you have built your own Redmine plugins that add custom columns to the issues database table, you can register those fields to be automatically copied when a subtask is created.
In your custom plugin's init.rb, append your field names (as symbols) to the SubtaskFieldCopier.registered_fields array.
It is best practice to wrap this in a Rails.configuration.to_prepare block and check if the module is defined, ensuring your plugin won't crash if the Subtask Field Copier is uninstalled:
```Ruby
Rails.configuration.to_prepare do
if defined?(SubtaskFieldCopier)
# Register your custom issue fields here
SubtaskFieldCopier.registered_fields << :vehicle
SubtaskFieldCopier.registered_fields << :customer
# Ensure there are no duplicates (useful for development hot-reloading)
SubtaskFieldCopier.registered_fields.uniq!
end
end
```
---
## License
> The MIT License (MIT)
+1 -1
View File
@@ -11,7 +11,7 @@ Redmine::Plugin.register :subtask_field_copier do
name 'Redmine subtask field copier'
author 'Rick Barrette'
description 'Copies Issue attributes to subtasks'
version '2026.8.0'
version '2026.8.1'
url 'https://github.com/rickbarrette/subtask_field_copier'
author_url 'https://github.com/rickbarrette'
+3
View File
@@ -10,6 +10,9 @@
module SubtaskFieldCopier
mattr_accessor :registered_fields
self.registered_fields = []
def self.setup
unless IssuesController.ancestors.include?(SubtaskFieldCopier::Patches::IssuesControllerPatch)
IssuesController.prepend SubtaskFieldCopier::Patches::IssuesControllerPatch
@@ -28,17 +28,15 @@ module SubtaskFieldCopier
end
@issue.custom_field_values = cf_values
# --- COPY CUSTOMER, VEHICLE & ESTIMATE---
if @issue.respond_to?(:customer=) && parent_issue.respond_to?(:customer)
@issue.customer = parent_issue.customer
end
# --- COPY REGISTERED FIELDS ---
# Iterate over any fields registered by other plugins
SubtaskFieldCopier.registered_fields.each do |field|
setter = "#{field}="
if @issue.respond_to?(:vehicle=) && parent_issue.respond_to?(:vehicle)
@issue.vehicle = parent_issue.vehicle
# Use metaprogramming to check if the setter/getter exists, then apply
if @issue.respond_to?(setter) && parent_issue.respond_to?(field)
@issue.send(setter, parent_issue.send(field))
end
if @issue.respond_to?(:estimate=) && parent_issue.respond_to?(:estimate)
@issue.estimate = parent_issue.estimate
end
end
end