require 'parsedate'
class Fb
def self.user_id(fb)
fb.session_user_id unless fb.blank?
end
def self.get_fql_query(fb, query)
fb.fql_query( :query => query )
end
def self.friends_get(fb)
fb.friends_get.uid_list
end
def self.is_page_admin?(fb, page)
result = fb.pages_isAdmin( :page_id => page )
result.at("pages_isAdmin_response").inner_html.to_i
end
def self.is_page_app_added?(fb, page)
result = fb.pages_isAppAdded( :page_id => page )
result.at("pages_isAppAdded_response").inner_html.to_i
end
def self.get_friends_without_app(fb)
user = user_id(fb)
q = <<-QUERY
SELECT uid FROM user
WHERE has_added_app=1 and uid IN
(SELECT uid2 FROM friend WHERE uid1 = #{user})
QUERY
res = get_fql_query(fb, q)
users = res.search("//uid").map{|xmlnode| xmlnode.inner_html}
users
end
def self.get_user_data(fbsession, page_id = nil)
raise if fbsession.blank?
fbid = user_id(fbsession)
# this must be a page
if !page_id.nil? && is_page_admin?( fbsession, page_id )
user = User.find_or_initialize_by_fbid( page_id )
if user.new_record?
user.is_page = 1
user.save!
end
# this must be a user
else
user = User.find_or_initialize_by_fbid( fbid )
end
user.stream_type = "bbc" if user.stream_type.blank?
user
end
def self.set_fbml_using(fb, markup, user)
fb.profile_setFbml( :uid => [user.fbid], :markup => markup )
end
def self.set_publish_action_of_user_using(fb, changes, user)
return if user.is_page
if body = build_change_list(changes)
title = %( has updated settings)
publish_data_to_feed(fb, title, body)
end
end
private
def self.build_change_list(changes)
return unless changes[:new].kind_of?(Array)
return unless changes[:old].kind_of?(Array)
result = []
added = changes[:new].collect {|n| "#{n}"}.join(', ')
remov = changes[:old].collect {|o| "#{o}"}.join(', ')
result << "Adding " + added unless added.blank?
result << "Removing " + remov unless remov.blank?
result.join(' and ')
end
def self.publish_data_to_feed(fb, title, body)
fb.feed_publishActionOfUser( :title => title, :body => body )
end
end