From 732cef4317e5a4fd1c08c04aad7f6243b1f4d9f8 Mon Sep 17 00:00:00 2001 From: Karel Picman Date: Thu, 25 Aug 2016 15:54:48 +0200 Subject: [PATCH] Deletion of a user #558 --- lib/redmine_dmsf.rb | 1 + lib/redmine_dmsf/patches/user_patch.rb | 66 ++++++++++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 lib/redmine_dmsf/patches/user_patch.rb diff --git a/lib/redmine_dmsf.rb b/lib/redmine_dmsf.rb index 5b9718b2..99dcf62c 100644 --- a/lib/redmine_dmsf.rb +++ b/lib/redmine_dmsf.rb @@ -30,6 +30,7 @@ require 'redmine_dmsf/patches/acts_as_customizable' require 'redmine_dmsf/patches/project_patch' require 'redmine_dmsf/patches/project_tabs_extended' require 'redmine_dmsf/patches/user_preference_patch' +require 'redmine_dmsf/patches/user_patch' # Load up classes that make up our WebDAV solution ontop of DAV4Rack require 'redmine_dmsf/webdav/base_resource' diff --git a/lib/redmine_dmsf/patches/user_patch.rb b/lib/redmine_dmsf/patches/user_patch.rb new file mode 100644 index 00000000..5bfd971a --- /dev/null +++ b/lib/redmine_dmsf/patches/user_patch.rb @@ -0,0 +1,66 @@ +# encoding: utf-8 +# +# Redmine plugin for Document Management System "Features" +# +# Copyright (C) 2011-16 Karel Pičman +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +require_dependency 'user' + +module RedmineDmsf + module Patches + module UserPatch + + def self.included(base) # :nodoc: + base.send(:include, InstanceMethods) + base.class_eval do + unloadable + + before_destroy :remove_references + end + end + + module InstanceMethods + + def remove_references + return if self.id.nil? + substitute = User.anonymous + DmsfFileRevisionAccess.where(:user_id => id).update_all(:user_id => substitute.id) + DmsfFileRevision.where(:user_id => id).update_all(:user_id => substitute.id) + DmsfFile.where(:deleted_by_user_id => id).update_all(:deleted_by_user_id => substitute.id) + DmsfFolder.where(:user_id => id).update_all(:user_id => substitute.id) + DmsfFolder.where(:deleted_by_user_id => id).update_all(:deleted_by_user_id => substitute.id) + DmsfLink.where(:user_id => id).update_all(:user_id => substitute.id) + DmsfLink.where(:deleted_by_user_id => id).update_all(:deleted_by_user_id => substitute.id) + DmsfLock.delete_all(:user_id => id) + DmsfWorkflowStepAction.where(:author_id => id).update_all(:author_id => substitute.id) + DmsfWorkflowStepAssignment.where(:user_id => id).update_all(:user_id => substitute.id) + DmsfWorkflowStep.where(:user_id => id).update_all(:user_id => substitute.id) + DmsfWorkflow.where(:author_id => id).update_all(:author_id => substitute.id) + end + + end + + end + end +end + +# Apply patch +Rails.configuration.to_prepare do + unless Project.included_modules.include?(RedmineDmsf::Patches::UserPatch) + User.send(:include, RedmineDmsf::Patches::UserPatch) + end +end