135 lines
3.2 KiB
Ruby
135 lines
3.2 KiB
Ruby
|
# == Schema Information
|
||
|
#
|
||
|
# Table name: plugins
|
||
|
#
|
||
|
# id :integer not null, primary key
|
||
|
# name :string(255)
|
||
|
# user_id :integer
|
||
|
# html :text
|
||
|
# css :text
|
||
|
# js :text
|
||
|
# created_at :datetime
|
||
|
# updated_at :datetime
|
||
|
# private_flag :boolean default(TRUE)
|
||
|
#
|
||
|
|
||
|
class Plugin < ActiveRecord::Base
|
||
|
belongs_to :user
|
||
|
has_many :plugin_window_details
|
||
|
has_many :windows, :through => :plugin_window_details, :source => :plugin_window
|
||
|
before_destroy { |record| record.windows.each { |window| window.delete } }
|
||
|
|
||
|
def destroy_window
|
||
|
window_id = PluginWindowDetail.find_by_plugin_id(self.id).plugin_window_id
|
||
|
Window.delete(window_id)
|
||
|
end
|
||
|
|
||
|
def private?
|
||
|
private_flag
|
||
|
end
|
||
|
|
||
|
def public?
|
||
|
!private_flag
|
||
|
end
|
||
|
|
||
|
def has_private_windows(channel_id)
|
||
|
has_private_windows = false
|
||
|
windows.each do |window|
|
||
|
|
||
|
if window.private? && window.channel_id == channel_id
|
||
|
has_private_windows = true
|
||
|
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
return has_private_windows
|
||
|
end
|
||
|
|
||
|
def has_public_windows(channel_id)
|
||
|
has_public_windows = false
|
||
|
windows.each do |window|
|
||
|
has_public_windows = true if !window.private? && window.channel_id == channel_id
|
||
|
end
|
||
|
return has_public_windows
|
||
|
end
|
||
|
|
||
|
#private_dashboard_visibility
|
||
|
def private_dashboard_windows(channel_id)
|
||
|
dashboard_windows channel_id, true
|
||
|
end
|
||
|
|
||
|
def public_dashboard_windows(channel_id)
|
||
|
dashboard_windows channel_id, false
|
||
|
end
|
||
|
def dashboard_windows(channel_id, privacy)
|
||
|
dashboard_windows = []
|
||
|
windows.each do |window|
|
||
|
if window.private_flag == privacy && !window.show_flag && channel_id == window.channel_id
|
||
|
dashboard_windows << window
|
||
|
end
|
||
|
end
|
||
|
dashboard_windows
|
||
|
end
|
||
|
|
||
|
#public_dashboard_visibility
|
||
|
def public_window
|
||
|
public_window = nil
|
||
|
windows.each do |window|
|
||
|
if !window.private_flag # && !window.show_flag
|
||
|
public_window = window
|
||
|
end
|
||
|
end
|
||
|
unless public_window.nil?
|
||
|
public_window
|
||
|
else
|
||
|
nil
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def make_windows(channel_id, api_domain)
|
||
|
pluginWindows = []
|
||
|
#create all the windows as appropriate
|
||
|
#Private plugins have one window..
|
||
|
#Public plugins have a private/private windows, private/public window and a public window
|
||
|
if !has_public_windows(channel_id) && self.public?
|
||
|
windows << PluginWindow.new_from(self, channel_id, :public, api_domain)
|
||
|
else
|
||
|
update_windows(channel_id)
|
||
|
end
|
||
|
|
||
|
if !has_private_windows(channel_id)
|
||
|
windows << Window.new_from(self, channel_id, :private, api_domain)
|
||
|
end
|
||
|
save
|
||
|
end
|
||
|
|
||
|
def update_windows(channel_id)
|
||
|
|
||
|
windows.each do |window|
|
||
|
window.name = self.name
|
||
|
window.save
|
||
|
end
|
||
|
|
||
|
if has_public_windows(channel_id) && self.private?
|
||
|
windows.delete(public_window.destroy) unless public_window.nil?
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
def update_all_windows
|
||
|
channel_ids = Set.new
|
||
|
windows.each do |window|
|
||
|
window.name = self.name
|
||
|
channel_ids.add( window.channel_id)
|
||
|
window.save
|
||
|
end
|
||
|
channel_ids.each do |id|
|
||
|
if has_public_windows(id) && self.private?
|
||
|
windows.delete(public_window.destroy) unless public_window.nil?
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|