123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- require 'channel/driver/facebook'
- class Observer::Ticket::Article::CommunicateFacebook < ActiveRecord::Observer
- observe 'ticket::_article'
- def after_create(record)
-
- return if Setting.get('import_mode')
-
- sender = Ticket::Article::Sender.lookup(id: record.sender_id)
- return 1 if sender.nil?
- return 1 if sender['name'] == 'Customer'
-
- type = Ticket::Article::Type.lookup(id: record.type_id)
- return if type['name'] !~ /\Afacebook/
- ticket = Ticket.lookup(id: record.ticket_id)
- raise "Can't find ticket.preferences for Ticket.find(#{record.ticket_id})" if !ticket.preferences
- raise "Can't find ticket.preferences['channel_id'] for Ticket.find(#{record.ticket_id})" if !ticket.preferences['channel_id']
- channel = Channel.lookup(id: ticket.preferences['channel_id'])
- raise "Channel.find(#{channel.id}) isn't a twitter channel!" if channel.options[:adapter] !~ /\Afacebook/i
-
- ticket = record.ticket
- if !ticket.preferences['channel_fb_object_id']
- raise "fb object id is missing in ticket.preferences['channel_fb_object_id'] for Ticket.find(#{ticket.id})"
- end
-
- if !record.in_reply_to || record.in_reply_to.empty?
- record.in_reply_to = ticket.articles.first.message_id
- end
- facebook = Channel::Driver::Facebook.new
- post = facebook.send(
- channel.options,
- ticket.preferences[:channel_fb_object_id],
- {
- type: type['name'],
- to: record.to,
- body: record.body,
- in_reply_to: record.in_reply_to,
- }
- )
- record.from = post['from']['name']
- record.message_id = post['id']
- record.save
- end
- end
|