diff --git a/app/views/settings/_default_assign.erb b/app/views/settings/_default_assign.erb
index 9b514b3..e7ab013 100644
--- a/app/views/settings/_default_assign.erb
+++ b/app/views/settings/_default_assign.erb
@@ -12,31 +12,42 @@
-%>
<% unless users.empty? %>
- <%=
- select_tag("settings[default_assignee_id]",
- content_tag(:option, '') +
- options_from_collection_for_select(users, :id, :name,
- unless selected.blank?
- Integer(selected)
- end
- ),
- :multiple => false,
- :size => 5)
- %>
- <% else %>
- <%= link_to(l(:default_assign_missing_users),
- :controller => 'users', :action => 'index') %>
- <% end %>
-
+ <%=
+ select_tag("settings[default_assignee_id]",
+ content_tag(:option, '') +
+ options_from_collection_for_select(users, :id, :name,
+ unless selected.blank?
+ Integer(selected)
+ end
+ ),
+ :multiple => false,
+ :size => 5)
+ %>
+ <% else %>
+ <%= link_to(l(:default_assign_missing_users),
+ :controller => 'users', :action => 'index') %>
+ <% end %>
+
- <%= l(:interactive_assignment_explanation) %>
-
- <%= label('settings[interactive_assignment]', l(:interactive_assignment)) %>
- <%-
- interactive_assignment = @settings['interactive_assignment'] || 'true'
- interactive_assignment = (interactive_assignment == 'true')
- -%>
- <%= hidden_field_tag('settings[interactive_assignment]', false) %>
- <%= check_box_tag('settings[interactive_assignment]', true, interactive_assignment) %>
-
+ <%= l(:interactive_assignment_explanation) %>
+
+ <%= label('settings[interactive_assignment]', l(:interactive_assignment)) %>
+ <%-
+ interactive_assignment = @settings['interactive_assignment'] || 'true'
+ interactive_assignment = (interactive_assignment == 'true')
+ -%>
+ <%= hidden_field_tag('settings[interactive_assignment]', false) %>
+ <%= check_box_tag('settings[interactive_assignment]', true, interactive_assignment) %>
+
+
+ <%= l(:self_assignment_explanation) %>
+
+ <%= label('settings[self_assignment]', l(:self_assignment)) %>
+ <%-
+ self_assignment = @settings['self_assignment'] || 'false'
+ self_assignment = (self_assignment == 'true')
+ -%>
+ <%= hidden_field_tag('settings[self_assignment]', false) %>
+ <%= check_box_tag('settings[self_assignment]', true, self_assignment) %>
+
diff --git a/config/locales/de.yml b/config/locales/de.yml
index b4a1513..c68a3b7 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -11,3 +11,9 @@ de:
interactive_assignment: "Zuständigen interaktiv setzen"
label_user: "Benutzer"
none_selected: ""
+ self_assignment: "Assign issue author"
+ self_assignment_explanation: >
+ When a new issue is created with no assignee, and the project has no default
+ assignee set, tick the box below to assign the issue to the user who just
+ created the issue, if possible. If the box is left unticked, there will be
+ no assignee, which is the default behaviour in Redmine.
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 8c6b96d..edc129c 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -12,3 +12,9 @@ en:
interactive_assignment: "Set Assignee Interactively"
label_user: "User"
none_selected: ""
+ self_assignment: "Assign issue author"
+ self_assignment_explanation: >
+ When a new issue is created with no assignee, and the project has no default
+ assignee set, tick the box below to assign the issue to the user who just
+ created the issue, if possible. If the box is left unticked, there will be
+ no assignee, which is the default behaviour in Redmine.
diff --git a/config/locales/es.yml b/config/locales/es.yml
index 3b26bb8..09847b4 100644
--- a/config/locales/es.yml
+++ b/config/locales/es.yml
@@ -12,3 +12,9 @@ es:
interactive_assignment: "Set Assignee Interactively"
label_user: "Usuario"
none_selected: ""
+ self_assignment: "Assign issue author"
+ self_assignment_explanation: >
+ When a new issue is created with no assignee, and the project has no default
+ assignee set, tick the box below to assign the issue to the user who just
+ created the issue, if possible. If the box is left unticked, there will be
+ no assignee, which is the default behaviour in Redmine.
diff --git a/config/locales/fr.yml b/config/locales/fr.yml
index e465f76..d3c07be 100644
--- a/config/locales/fr.yml
+++ b/config/locales/fr.yml
@@ -5,7 +5,7 @@ fr:
default_assign_settings_help: "Assignement par defaut pour les nouveaux projets"
interactive_assignment: "Assignement interactif"
interactive_assignment_explanation: >
- Quand vous créez une nouvel demande, le plugin peut peupler le champs
+ Quand vous créez une nouvelle demande, le plugin peut peupler le champs
"Assigné à" immédiatement avec le choix vous avez faite si dessus avant
que vous ayez créé la demande. Par contre, quand vous changiez certains
champs, le formulaire est rechargé et le champs "Assigné à" est calculé
@@ -13,3 +13,10 @@ fr:
vous pouvez faire le choix vous-même:
label_user: "Utilisateur"
none_selected: ""
+ self_assignment: "Assignement de l'auteur"
+ self_assignment_explanation: >
+ Quand on crée une nouvelle demande sans assignement, et il n'y a aucun
+ assignement par défaut spécifié pour le project, sélectionez la case
+ si-dessous pour tentir l'assignement de l'auteur de la demande. Sans
+ sélection, il n'y aura aucun assignement pour la demande, ce qui est le
+ comportement normal de Redmine.
diff --git a/config/locales/it.yml b/config/locales/it.yml
index d048bb7..328df76 100644
--- a/config/locales/it.yml
+++ b/config/locales/it.yml
@@ -13,3 +13,9 @@ it:
interactive_assignment: "Imposta l'assegnatario in maniera interattiva"
label_user: "Utente"
none_selected: ""
+ self_assignment: "Assign issue author"
+ self_assignment_explanation: >
+ When a new issue is created with no assignee, and the project has no default
+ assignee set, tick the box below to assign the issue to the user who just
+ created the issue, if possible. If the box is left unticked, there will be
+ no assignee, which is the default behaviour in Redmine.
diff --git a/config/locales/ja.yml b/config/locales/ja.yml
index 47ed345..9bb103f 100644
--- a/config/locales/ja.yml
+++ b/config/locales/ja.yml
@@ -12,3 +12,9 @@ ja:
interactive_assignment: "Set Assignee Interactively"
label_user: "ユーザー"
none_selected: ""
+ self_assignment: "Assign issue author"
+ self_assignment_explanation: >
+ When a new issue is created with no assignee, and the project has no default
+ assignee set, tick the box below to assign the issue to the user who just
+ created the issue, if possible. If the box is left unticked, there will be
+ no assignee, which is the default behaviour in Redmine.
diff --git a/config/locales/ru.yml b/config/locales/ru.yml
index aa13974..c455c22 100644
--- a/config/locales/ru.yml
+++ b/config/locales/ru.yml
@@ -9,6 +9,12 @@ ru:
Однако, при изменении некоторых полей, форма может быть перезагружена и
ответственный по умолчанию переназначается. Такое поведение может быть приемлимым,
либо нежелательным. Выбор за вами:
- interactive_assignment: "Выберать ответственного интерактивно"
+ interactive_assignment: "Выбирать ответственного интерактивно"
label_user: "Пользователь"
none_selected: "<Пусто>"
+ self_assignment: "Назначать задачу на автора"
+ self_assignment_explanation: >
+ Если этот пунт выбран - при создании новой задачи, если не выбрано на кого
+ назначить задачу и если в проекте не выбрано на кого назначать по умолчанию,
+ то задача будет назначена на автора задачи. Если этот пункт не выбран
+ задача не будет ни на кого назначена - как сделано в Redmine по умолчанию.
diff --git a/db/migrate/001_add_default_assignee_to_project.rb.old b/db/migrate/001_add_default_assignee_to_project.rb.old
new file mode 100644
index 0000000..9b6e44e
--- /dev/null
+++ b/db/migrate/001_add_default_assignee_to_project.rb.old
@@ -0,0 +1,17 @@
+class AddDefaultAssigneeToProject < ActiveRecord::Migration[4.2]
+ def self.up
+ # Work around migration name change (Github issue #27)
+ old_num = '20090508035844'
+ num_deleted =
+ ::ActiveRecord::Base.connection.delete(<<-SQL.squish)
+ delete from schema_migrations
+ where version = '#{old_num}-redmine_default_assign'
+ SQL
+ return if num_deleted > 0
+ add_column :projects, :default_assignee_id, :integer
+ end
+
+ def self.down
+ remove_column :projects, :default_assignee_id
+ end
+end
diff --git a/db/migrate/20090508035844_add_default_assignee_to_project.rb b/db/migrate/20090508035844_add_default_assignee_to_project.rb
index 10e26df..ef991ff 100644
--- a/db/migrate/20090508035844_add_default_assignee_to_project.rb
+++ b/db/migrate/20090508035844_add_default_assignee_to_project.rb
@@ -1,4 +1,4 @@
-class AddDefaultAssigneeToProject < ActiveRecord::Migration
+class AddDefaultAssigneeToProject < ActiveRecord::Migration[5.2]
def self.up
add_column :projects, :default_assignee_id, :integer
end
diff --git a/init.rb b/init.rb
index 228232f..afde2b0 100644
--- a/init.rb
+++ b/init.rb
@@ -9,7 +9,7 @@
require 'default_assign/hooks/default_assign_issues_hooks.rb'
if Rails::VERSION::MAJOR >= 3
- ActionDispatch::Callbacks.to_prepare do
+ ((Rails.version > "5")? ActiveSupport::Reloader : ActionDispatch::Callbacks).to_prepare do
require_dependency 'project'
require_dependency 'issue'
Project.send(:include, DefaultAssignProjectPatch)
@@ -27,10 +27,12 @@
Redmine::Plugin.register :redmine_default_assign do
name 'Default Assign plugin'
author 'Robert Chady / Paul Dann'
+ author_url 'https://github.com/giddie/redmine_default_assign'
description 'Plugin implementing Douglas Campos\' ticket-482 code as a plugin. It has since been extended to offer other features as well.'
- version '0.4'
+ version '0.6'
settings :default => {'default_assignee_id' => nil,
- 'interactive_assignment' => true},
+ 'interactive_assignment' => true,
+ 'self_assignment' => false},
:partial => 'settings/default_assign'
end
diff --git a/lib/default_assign/hooks/default_assign_issues_hooks.rb b/lib/default_assign/hooks/default_assign_issues_hooks.rb
index 3b0f3ab..9ef5283 100644
--- a/lib/default_assign/hooks/default_assign_issues_hooks.rb
+++ b/lib/default_assign/hooks/default_assign_issues_hooks.rb
@@ -9,13 +9,19 @@ def view_issues_form_details_top(context = {})
interactive_assignment = (interactive_assignment == 'true')
return if not interactive_assignment
- if not context[:project].default_assignee.blank?
- default_assignee = context[:project].default_assignee
- if context[:project].assignable_users.include?(default_assignee)
- context[:issue].assigned_to_id = default_assignee.id
- end
+ project = context[:project]
+ if project.try(:default_assignee).blank?
+ self_assignment =
+ Setting.plugin_redmine_default_assign['self_assignment'] || 'false'
+ self_assignment = (self_assignment == 'true')
+ default_assignee = User.current if self_assignment
+ else
+ default_assignee = project.default_assignee
+ end
+ if project && project.assignable_users.include?(default_assignee)
+ context[:issue].assigned_to_id = default_assignee.id
end
nil
- end
+ end
end
diff --git a/lib/default_assign_issue_patch.rb b/lib/default_assign_issue_patch.rb
index 741d75b..42d6fb1 100644
--- a/lib/default_assign_issue_patch.rb
+++ b/lib/default_assign_issue_patch.rb
@@ -6,9 +6,9 @@ def self.included(base) # :nodoc:
# Same as typing in the class
base.class_eval do
- unloadable # Send unloadable so it will not be unloaded in development
+ unloadable
- before_save :assign_default_assignee
+ before_create :assign_default_assignee
end
end
@@ -16,12 +16,21 @@ module InstanceMethods
# If the issue isn't assigned to someone and a default assignee
# is set, set it.
def assign_default_assignee
+ return if not self.assigned_to.nil?
default_assignee = self.project.default_assignee
- unless default_assignee.blank?
- if self.project.assignable_users.include?(default_assignee)
- self.assigned_to ||= self.project.default_assignee
+ if default_assignee.blank?
+ self_assignment =
+ Setting.plugin_redmine_default_assign['self_assignment'] || 'false'
+ self_assignment = (self_assignment == 'true')
+ if self_assignment
+ default_assignee = User.current
+ else
+ return
end
end
+ if self.project.assignable_users.include?(default_assignee)
+ self.assigned_to = default_assignee
+ end
end
end
end
diff --git a/lib/default_assign_project_patch.rb b/lib/default_assign_project_patch.rb
index 9fd2372..e5ecaeb 100644
--- a/lib/default_assign_project_patch.rb
+++ b/lib/default_assign_project_patch.rb
@@ -8,7 +8,7 @@ def self.included(base)
safe_attributes :default_assignee_id
belongs_to :default_assignee, :class_name => "Principal"
- before_save :set_default_assignee
+ before_create :set_default_assignee
end
end
@@ -16,11 +16,9 @@ def self.included(base)
#end
module InstanceMethods
- def set_default_assignee
- if not self.persisted?
- self.default_assignee_id ||=
- Setting.plugin_redmine_default_assign['default_assignee_id']
- end
+ def set_default_assignee
+ self.default_assignee_id ||=
+ Setting.plugin_redmine_default_assign['default_assignee_id']
end
end
end