calendar_subscriptions.rb 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. # Copyright (C) 2012-2013 Zammad Foundation, http://zammad-foundation.org/
  2. class CalendarSubscriptions
  3. def initialize(user)
  4. @user = user
  5. @preferences = {}
  6. default_preferences = Setting.where( area: 'Defaults::CalendarSubscriptions' )
  7. default_preferences.each { |calendar_subscription|
  8. next if calendar_subscription.name !~ /\Adefaults_calendar_subscriptions_(.*)\z/
  9. object_name = $1
  10. @preferences[ object_name ] = calendar_subscription.state[:value]
  11. }
  12. return if !@user.preferences[:calendar_subscriptions]
  13. return if @user.preferences[:calendar_subscriptions].empty?
  14. @preferences = @preferences.merge( @user.preferences[:calendar_subscriptions] )
  15. end
  16. def all
  17. events_data = []
  18. @preferences.each { |object_name, _sub_structure|
  19. result = generic_call( object_name )
  20. events_data = events_data + result
  21. }
  22. to_ical( events_data )
  23. end
  24. def generic(object_name, method_name = 'all')
  25. events_data = generic_call( object_name, method_name )
  26. to_ical( events_data )
  27. end
  28. def generic_call(object_name, method_name = 'all')
  29. method_name ||= 'all'
  30. events_data = []
  31. if @preferences[ object_name ] && !@preferences[ object_name ].empty?
  32. sub_class_name = object_name.to_s.capitalize
  33. object = Object.const_get("CalendarSubscriptions::#{sub_class_name}")
  34. instance = object.new( @user, @preferences[ object_name ] )
  35. method = instance.method( method_name )
  36. events_data += method.call
  37. end
  38. events_data
  39. end
  40. def to_ical(events_data)
  41. cal = Icalendar::Calendar.new
  42. events_data.each do |event_data|
  43. cal.event do |e|
  44. e.dtstart = event_data[:dtstart]
  45. e.dtend = event_data[:dtend]
  46. e.summary = event_data[:summary]
  47. e.description = event_data[:description]
  48. e.ip_class = 'PRIVATE'
  49. end
  50. end
  51. cal.to_ical
  52. end
  53. end