From 44981a54d8cee8836e73053e42a5f458185b5a98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karel=20Pi=C4=8Dman?= Date: Wed, 30 May 2018 13:44:41 +0200 Subject: [PATCH] Workflow notification missing #855 --- app/controllers/dmsf_workflows_controller.rb | 12 ++++----- app/models/dmsf_file.rb | 25 +++++++++++------- app/models/dmsf_mailer.rb | 23 ++++++++++++----- app/models/dmsf_workflow.rb | 2 +- test/unit/dmsf_file_test.rb | 27 ++++++++++++++++++-- 5 files changed, 64 insertions(+), 25 deletions(-) diff --git a/app/controllers/dmsf_workflows_controller.rb b/app/controllers/dmsf_workflows_controller.rb index 658e29e3..77918b62 100644 --- a/app/controllers/dmsf_workflows_controller.rb +++ b/app/controllers/dmsf_workflows_controller.rb @@ -72,7 +72,7 @@ class DmsfWorkflowsController < ApplicationController end if revision.workflow == DmsfWorkflow::STATE_APPROVED # Just approved - recipients = DmsfMailer.get_notify_users(@project, [revision.dmsf_file]) + recipients = DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true) recipients.each do |user| DmsfMailer.workflow_notification( user, @@ -94,7 +94,7 @@ class DmsfWorkflowsController < ApplicationController recipients = @dmsf_workflow.participiants recipients.push User.find_by_id revision.dmsf_workflow_assigned_by recipients.uniq! - recipients = recipients & DmsfMailer.get_notify_users(@project, [revision.dmsf_file]) + recipients = recipients & DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true) recipients.each do |user| DmsfMailer.workflow_notification( user, @@ -117,7 +117,7 @@ class DmsfWorkflowsController < ApplicationController if action.action == DmsfWorkflowStepAction::ACTION_DELEGATE # Delegation delegate = User.find_by_id params[:step_action].to_i / 10 - if DmsfMailer.get_notify_users(@project).include?(delegate) + if DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true).include?(delegate) DmsfMailer.workflow_notification( delegate, @dmsf_workflow, @@ -137,7 +137,7 @@ class DmsfWorkflowsController < ApplicationController if assignments.first.dmsf_workflow_step.step != action.dmsf_workflow_step_assignment.dmsf_workflow_step.step # Next step assignments.each do |assignment| - if assignment.user && DmsfMailer.get_notify_users(@project).include?(assignment.user) + if assignment.user && DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true).include?(assignment.user) DmsfMailer.workflow_notification( assignment.user, @dmsf_workflow, @@ -148,7 +148,7 @@ class DmsfWorkflowsController < ApplicationController end end to = User.find_by_id revision.dmsf_workflow_assigned_by - if to && DmsfMailer.get_notify_users(@project).include?(to) + if to && DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true).include?(to) DmsfMailer.workflow_notification( to, @dmsf_workflow, @@ -161,7 +161,7 @@ class DmsfWorkflowsController < ApplicationController recipients = assignments.collect{ |a| a.user } recipients << to if to recipients.uniq! - recipients = recipients & DmsfMailer.get_notify_users(@project) + recipients = recipients & DmsfMailer.get_notify_users(@project, [revision.dmsf_file], true) unless recipients.empty? to = recipients.collect{ |r| r.name }.first(DMSF_MAX_NOTIFICATION_RECEIVERS_INFO).join(', ') to << ((recipients.count > DMSF_MAX_NOTIFICATION_RECEIVERS_INFO) ? ',...' : '.') diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 1fffadb4..d0b8e2c3 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -275,12 +275,10 @@ class DmsfFile < ActiveRecord::Base new_revision.dmsf_workflow_assigned_at = nil new_revision.dmsf_workflow_started_by = nil new_revision.dmsf_workflow_started_at = nil - if self.last_revision.dmsf_workflow_id - wf = DmsfWorkflow.where(:id => self.last_revision.dmsf_workflow_id).first - if wf && (wf.project.nil? || (wf.project.id == project.id)) - new_revision.set_workflow(wf.id, nil) - new_revision.assign_workflow(wf.id) - end + wf = last_revision.dmsf_workflow + if wf && (wf.project.nil? || (wf.project.id == project.id)) + new_revision.set_workflow(wf.id, nil) + new_revision.assign_workflow(wf.id) end if File.exist? self.last_revision.disk_file FileUtils.cp self.last_revision.disk_file, new_revision.disk_file(false) @@ -486,16 +484,25 @@ class DmsfFile < ActiveRecord::Base end def owner?(user) - self.last_revision && (self.last_revision.user == user) + last_revision && (last_revision.user == user) end def involved?(user) - self.dmsf_file_revisions.each do |file_revision| + dmsf_file_revisions.each do |file_revision| return true if file_revision.user == user end false end + def assigned?(user) + if last_revision && last_revision.dmsf_workflow + last_revision.dmsf_workflow.next_assignments(last_revision.id).each do |assignment| + return true if assignment.user == user + end + end + false + end + def custom_value(custom_field) self.last_revision.custom_field_values.each do |cv| if cv.custom_field == custom_field @@ -510,7 +517,7 @@ class DmsfFile < ActiveRecord::Base end def extension - File.extname(self.last_revision.disk_filename).strip.downcase[1..-1] if self.last_revision + File.extname(last_revision.disk_filename).strip.downcase[1..-1] if last_revision end include ActionView::Helpers::NumberHelper diff --git a/app/models/dmsf_mailer.rb b/app/models/dmsf_mailer.rb index c9d3c88d..8f9b93ae 100644 --- a/app/models/dmsf_mailer.rb +++ b/app/models/dmsf_mailer.rb @@ -86,9 +86,9 @@ class DmsfMailer < Mailer end end - def self.get_notify_users(project, files = []) + def self.get_notify_users(project, files = [], force_notification = false) return [] unless project.active? - if files.present? + if !force_notification && files.present? notify_files = files.select { |file| file.notify? } return [] if notify_files.empty? end @@ -106,21 +106,30 @@ class DmsfMailer < Mailer when 'only_my_events' author = false files.each do |file| - if file.involved?(notify_user) + if file.involved?(notify_user) || file.assignee?(notify_user) author = true break end end author - when 'only_owner', 'only_assigned' - author = false + when 'only_owner' + owner = false files.each do |file| if file.owner?(notify_user) - author = true + owner = true break end end - author + owner + when 'only_assigned' + assignee = false + files.each do |file| + if file.assigned?(notify_user) + assignee = true + break + end + end + assignee else false end diff --git a/app/models/dmsf_workflow.rb b/app/models/dmsf_workflow.rb index ef341c26..114cad35 100644 --- a/app/models/dmsf_workflow.rb +++ b/app/models/dmsf_workflow.rb @@ -221,7 +221,7 @@ class DmsfWorkflow < ActiveRecord::Base assignments = self.next_assignments revision.id recipients = assignments.collect{ |a| a.user } recipients.uniq! - recipients = recipients & DmsfMailer.get_notify_users(project) + recipients = recipients & DmsfMailer.get_notify_users(project, [revision.dmsf_file], true) recipients.each do |user| DmsfMailer.workflow_notification( user, diff --git a/test/unit/dmsf_file_test.rb b/test/unit/dmsf_file_test.rb index 31fea8c6..dc8685ec 100644 --- a/test/unit/dmsf_file_test.rb +++ b/test/unit/dmsf_file_test.rb @@ -149,7 +149,7 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest assert_equal 0, @file4.referenced_links.count @file4.dmsf_folder.lock! end - + def test_copy_to_filename assert_no_difference '@file1.dmsf_file_revisions.count' do new_file = @file1.copy_to_filename(@file1.project, nil, 'new_file.txt') @@ -202,7 +202,7 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest assert_nil new_file.last_revision.dmsf_workflow_started_by assert_nil new_file.last_revision.dmsf_workflow_started_at end - + def test_copy_to assert_no_difference '@file1.dmsf_file_revisions.count' do new_file = @file1.copy_to(@file1.project, @folder1) @@ -285,4 +285,27 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest Setting.plugin_redmine_dmsf['dmsf_storage_directory'] = setting end + def test_owner + assert @file1.owner?(@file1.last_revision.user) + assert !@file1.owner?(@jsmith) + @file1.last_revision.user = @jsmith + assert @file1.owner?(@jsmith) + end + + def test_involved + assert @file1.involved?(@file1.last_revision.user) + assert !@file1.involved?(@jsmith) + @file1.dmsf_file_revisions[1].user = @jsmith + assert @file1.involved?(@jsmith) + end + + def test_assigned + assert !@file1.assigned?(@admin) + assert !@file1.assigned?(@jsmith) + @file1.last_revision.set_workflow(@wf1.id, nil) + @file1.last_revision.assign_workflow(@wf1.id) + assert @file1.assigned?(@admin) + assert @file1.assigned?(@jsmith) + end + end \ No newline at end of file