123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- module NotificationFactory
- =begin
- result_string = NotificationFactory.build(
- :string => 'Hi #{recipient.firstname},',
- :objects => {
- :ticket => ticket,
- :recipient => User.find(2),
- },
- :locale => 'en',
- )
- =end
- def self.build(data)
- data[:string].gsub!( / \#\{ \s* ( .+? ) \s* \} /xm ) { |placeholder|
- # store possible callback to work with
- # and check if it's valid for execution
- original_string = $&
- callback = $1
- object_name = nil
- object_method = nil
- if callback =~ /\A ( [\w]+ )\.( [\w\.]+ ) \z/x
- object_name = $1
- object_method = $2
- end
- # do validaton, ignore some methodes
- if callback =~ /(`|\.(|\s*)(save|destroy|delete|remove|drop|update\(|update_att|create\(|new|all|where|find))/i
- placeholder = "#{original_string} (not allowed)"
- # get value based on object_name and object_method
- elsif object_name && object_method
- # use config params
- if object_name == 'config'
- placeholder = Setting.get(object_method)
- # if object_name dosn't exist
- elsif !data[:objects][object_name.to_sym]
- placeholder = "\#{#{object_name} / no such object}"
- else
- value = nil
- object_refs = data[:objects][object_name.to_sym]
- object_methods = object_method.split('.')
- object_methods_s = ''
- object_methods.each {|method|
- if object_methods_s != ''
- object_methods_s += '.'
- end
- object_methods_s += method
- # if method exists
- if !object_refs.respond_to?( method.to_sym )
- value = "\#{#{object_name}.#{object_methods_s} / no such method}"
- break
- end
- object_refs = object_refs.send( method.to_sym )
- # add body quote
- if object_name == 'article' && method == 'body'
- if data[:objects][:article].content_type == 'text/html'
- object_refs = object_refs.html2text.chomp
- end
- end
- }
- if !value
- placeholder = object_refs
- else
- placeholder = value
- end
- end
- end
- placeholder
- }
- # translate
- data[:string].gsub!( /i18n\((.+?)\)/ ) { |placeholder|
- string = $1
- locale = data[:locale] || 'en'
- placeholder = Translation.translate( locale, string )
- }
- data[:string]
- end
- =begin
- success = NotificationFactory.send(
- :to => 'somebody@example.com',
- :subject => 'sime subject',
- :body => 'some body'
- )
- =end
- def self.send(data)
- sender = Setting.get('notification_sender')
- Rails.logger.info "NOTICE: SEND NOTIFICATION TO: #{data[:recipient][:email]} (from #{sender})"
- Channel::EmailSend.send(
- {
- # :in_reply_to => self.in_reply_to,
- :from => sender,
- :to => data[:recipient][:email],
- :subject => data[:subject],
- :body => data[:body],
- :content_type => 'text/html',
- },
- true
- )
- end
- end
|