From 2c090bcf7746116eec62b1ba762219b174f7dbee Mon Sep 17 00:00:00 2001 From: Karel Picman Date: Mon, 12 Jun 2017 12:49:36 +0200 Subject: [PATCH] refs #136585 user notifications --- app/controllers/dmsf_workflows_controller.rb | 21 +-------------- app/helpers/dmsf_upload_helper.rb | 1 + app/models/dmsf_file.rb | 11 +++++--- app/models/dmsf_link.rb | 26 ++++++++++++++++--- app/models/dmsf_workflow.rb | 23 ++++++++++++++++ .../controllers/issues_controller_hooks.rb | 1 + 6 files changed, 55 insertions(+), 28 deletions(-) diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb index 614e4186..4d4b5242 100644 --- a/app/controllers/dmsf_workflows_controller.rb +++ b/app/controllers/dmsf_workflows_controller.rb @@ -394,26 +394,7 @@ class DmsfWorkflowsController < ApplicationController if revision revision.set_workflow(@dmsf_workflow.id, params[:action]) if revision.save - assignments = @dmsf_workflow.next_assignments revision.id - recipients = assignments.collect{ |a| a.user } - recipients.uniq! - recipients = recipients & DmsfMailer.get_notify_users(@project) - recipients.each do |user| - DmsfMailer.workflow_notification( - user, - @dmsf_workflow, - revision, - :text_email_subject_started, - :text_email_started, - :text_email_to_proceed).deliver - end - if Setting.plugin_redmine_dmsf[:dmsf_display_notified_recipients] == '1' - unless recipients.blank? - to = recipients.collect{ |r| r.name }.first(DMSF_MAX_NOTIFICATION_RECEIVERS_INFO).join(', ') - to << ((recipients.count > DMSF_MAX_NOTIFICATION_RECEIVERS_INFO) ? ',...' : '.') - flash[:warning] = l(:warning_email_notifications, :to => to) - end - end + @dmsf_workflow.notify_users(@project, revision, self) flash[:notice] = l(:notice_workflow_started) else flash[:error] = l(:notice_cannot_start_workflow) diff --git a/app/helpers/dmsf_upload_helper.rb b/app/helpers/dmsf_upload_helper.rb index 5dc6bfa1..a595d93d 100644 --- a/app/helpers/dmsf_upload_helper.rb +++ b/app/helpers/dmsf_upload_helper.rb @@ -121,6 +121,7 @@ module DmsfUploadHelper # Start the workflow new_revision.set_workflow(wf.id, 'start') if new_revision.save + wf.notify_users(project, new_revision, controller) begin file.lock! rescue DmsfLockError => e diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 077a87c2..113b058f 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -385,7 +385,7 @@ class DmsfFile < ActiveRecord::Base if dmsf_file if user.allowed_to?(:view_dmsf_files, dmsf_file.project) && - (project_ids.blank? || (project_ids.include?(dmsf_file.project.id))) + (project_ids.blank? || (project_ids.include?(dmsf_file.project_id))) Redmine::Search.cache_store.write("DmsfFile-#{dmsf_file.id}", dochash['sample'].force_encoding('UTF-8')) if dochash['sample'] break if(!options[:limit].blank? && results.count >= options[:limit]) @@ -407,7 +407,7 @@ class DmsfFile < ActiveRecord::Base end def display_name - member = Member.where(:user_id => User.current.id, :project_id => self.project.id).first + member = Member.where(:user_id => User.current.id, :project_id => self.project_id).first if member && !member.title_format.nil? && !member.title_format.empty? title_format = member.title_format else @@ -635,9 +635,12 @@ class DmsfFile < ActiveRecord::Base end def container - if self.dmsf_folder && self.dmsf_folder.system - Issue.where(:id => self.dmsf_folder.title.to_i).first + unless @container + if self.dmsf_folder && self.dmsf_folder.system + @container = Issue.where(:id => self.dmsf_folder.title.to_i).first + end end + @container end end diff --git a/app/models/dmsf_link.rb b/app/models/dmsf_link.rb index 08285c18..33e3a1db 100644 --- a/app/models/dmsf_link.rb +++ b/app/models/dmsf_link.rb @@ -62,7 +62,12 @@ class DmsfLink < ActiveRecord::Base end def target_folder - DmsfFolder.find_by_id self.target_folder_id if self.target_folder_id + unless @target_folder + if self.target_folder_id + @target_folder = DmsfFolder.find_by_id self.target_folder_id + end + end + @target_folder end def target_file_id @@ -70,15 +75,28 @@ class DmsfLink < ActiveRecord::Base end def target_file - DmsfFile.find_by_id self.target_file_id if self.target_file_id + unless @target_file + if self.target_file_id + DmsfFile.find_by_id self.target_file_id + end + end + @target_file end def target_project - Project.find_by_id self.target_project_id + unless @target_project + Project.find_by_id self.target_project_id + end + @target_project end def folder - DmsfFolder.find_by_id self.dmsf_folder_id + unless @folder + if self.dmsf_folder_id + @folder = DmsfFolder.find_by_id self.dmsf_folder_id + end + end + @folder end def title diff --git a/app/models/dmsf_workflow.rb b/app/models/dmsf_workflow.rb index 580e0de0..8b1fa960 100644 --- a/app/models/dmsf_workflow.rb +++ b/app/models/dmsf_workflow.rb @@ -217,4 +217,27 @@ class DmsfWorkflow < ActiveRecord::Base self.status == STATUS_ACTIVE end + def notify_users(project, revision, controller) + assignments = self.next_assignments revision.id + recipients = assignments.collect{ |a| a.user } + recipients.uniq! + recipients = recipients & DmsfMailer.get_notify_users(project) + recipients.each do |user| + DmsfMailer.workflow_notification( + user, + self, + revision, + :text_email_subject_started, + :text_email_started, + :text_email_to_proceed).deliver + end + if Setting.plugin_redmine_dmsf[:dmsf_display_notified_recipients] == '1' + unless recipients.blank? + to = recipients.collect{ |r| r.name }.first(DMSF_MAX_NOTIFICATION_RECEIVERS_INFO).join(', ') + to << ((recipients.count > DMSF_MAX_NOTIFICATION_RECEIVERS_INFO) ? ',...' : '.') + controller.flash[:warning] = l(:warning_email_notifications, :to => to) + end + end + end + end diff --git a/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb b/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb index 7f4c54ae..6da09d72 100644 --- a/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb +++ b/lib/redmine_dmsf/hooks/controllers/issues_controller_hooks.rb @@ -110,6 +110,7 @@ module RedmineDmsf # Start the workflow revision.set_workflow(wf.id, 'start') if revision.save + wf.notify_users(issue.project, revision, context[:controller]) begin file.lock! rescue DmsfLockError => e