ref_object_touch.rb 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # Copyright (C) 2012-2016 Zammad Foundation, http://zammad-foundation.org/
  2. class Observer::User::RefObjectTouch < ActiveRecord::Observer
  3. observe 'user'
  4. def after_create(record)
  5. ref_object_touch(record)
  6. end
  7. def after_update(record)
  8. ref_object_touch(record)
  9. end
  10. def after_destroy(record)
  11. ref_object_touch(record)
  12. end
  13. def ref_object_touch(record)
  14. # return if we run import mode
  15. return true if Setting.get('import_mode')
  16. # touch old organization if changed
  17. member_ids = []
  18. organization_id_changed = record.saved_changes['organization_id']
  19. if organization_id_changed && organization_id_changed[0] != organization_id_changed[1]
  20. if organization_id_changed[0]
  21. # featrue used for different propose, do not touch references
  22. if User.where(organization_id: organization_id_changed[0]).count < 100
  23. organization = Organization.find(organization_id_changed[0])
  24. organization.touch
  25. member_ids = organization.member_ids
  26. end
  27. end
  28. end
  29. # touch new/current organization
  30. if record.organization
  31. # featrue used for different propose, do not touch references
  32. if User.where(organization_id: record.organization_id).count < 100
  33. record.organization.touch
  34. member_ids += record.organization.member_ids
  35. end
  36. end
  37. # touch old/current customer
  38. member_ids.uniq.each do |user_id|
  39. next if user_id == record.id
  40. User.find(user_id).touch
  41. end
  42. true
  43. end
  44. end