cirandas.net

ref: master

plugins/fb_app/models/fb_app_plugin/page_tab.rb


  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
class FbAppPlugin::PageTab < ApplicationRecord

  # FIXME: rename table to match model
  self.table_name = :fb_app_plugin_page_tab_configs

  attr_accessible :owner_profile, :profile_id, :page_id,
    :config_type, :profile_ids, :query,
    :title, :subtitle

  belongs_to :owner_profile, foreign_key: :profile_id, class_name: 'Profile'

  extend ActsAsHavingSettings::ClassMethods
  acts_as_having_settings field: :config

  ConfigTypes = [:profile, :profiles, :query]
  EnterpriseConfigTypes = [:own_profile] + ConfigTypes

  validates_presence_of :page_id
  validates_uniqueness_of :page_id
  validates_inclusion_of :config_type, in: ConfigTypes + EnterpriseConfigTypes

  def self.page_ids_from_tabs_added tabs_added
    tabs_added.map{ |id, value| id }
  end

  def self.create_from_page_ids page_ids, attrs = {}
    attrs.delete :page_id
    page_ids.map do |page_id|
      page_tab = FbAppPlugin::PageTab.where(page_id: page_id).first
      page_tab ||= FbAppPlugin::PageTab.new page_id: page_id
      page_tab.update! attrs
      page_tab
    end
  end
  def self.create_from_tabs_added tabs_added, attrs = {}
    page_ids = self.page_ids_from_tabs_added tabs_added
    self.create_from_page_ids page_ids, attrs
  end

  def self.facebook_url page_id
    "https://facebook.com/#{page_id}?sk=app_#{FbAppPlugin.page_tab_app_credentials[:id]}"
  end

  def facebook_url
    self.class.facebook_url self.page_id
  end

  def types
    if self.owner_profile.present? and self.owner_profile.enterprise? then EnterpriseConfigTypes else ConfigTypes end
  end

  def config_type
    self.config[:type] || (self.owner_profile ? :own_profile : :profile)
  end
  def config_type= value
    self.config[:type] = value.to_sym
  end

  def value
    case self.config_type
    when :profiles
      self.profiles.map(&:identifier).join(' OR ')
    else
      self.send self.config_type
    end
  end
  def blank?
    self.value.blank? rescue true
  end

  def own_profile
    self.owner_profile
  end
  def profiles
    Profile.where(id: self.config[:profile_ids])
  end
  def profile
    self.profiles.first
  end
  def profile_ids
    self.profiles.map(&:id)
  end
  def query
    self.config[:query]
  end

  def title
    self.config[:title]
  end
  def title= value
    self.config[:title] = value
  end

  def subtitle
    self.config[:subtitle]
  end
  def subtitle= value
    self.config[:subtitle] = value
  end

  def profile_ids= ids
    ids = ids.to_s.split(',')
    self.config[:type] = if ids.size == 1 then :profile else :profiles end
    self.config[:profile_ids] = ids
  end

  def query= value
    self.config[:type] = :query
    self.config[:query] = value
  end

end