class Block < ActiveRecord::Base
# to be able to generate HTML
include ActionView::Helpers::UrlHelper
include ActionView::Helpers::TagHelper
# Block-specific stuff
include BlockHelper
acts_as_list :scope => :box
belongs_to :box
acts_as_having_settings
settings_items :visible, :type => :boolean, :default => true
named_scope :enabled, :conditions => { :enabled => true }
def visible?
visible
end
# returns the description of the block, used when the user sees a list of
# blocks to choose one to include in the design.
#
# Must be redefined in subclasses to match the description of each block
# type.
def self.description
'(dummy)'
end
# Returns the content to be used for this block.
#
# This method can return several types of objects:
#
# * String: if the string starts with http:// or https://, then it is assumed to be address of an IFRAME. Otherwise it's is used as regular HTML.
# * Hash: the hash is used to build an URL that is used as the address for a IFRAME.
# * Proc: the Proc is evaluated in the scope of BoxesHelper. The
# block can then use render, link_to, etc.
#
# The method can also return nil, which means "no content".
#
# See BoxesHelper#extract_block_content for implementation details.
def content
"This is block number %d" % self.id
end
# A footer to be appended to the end of the block. Returns nil.
#
# Override in your subclasses. You can return the same types supported by
# #content.
def footer
nil
end
# Is this block editable? (Default to false)
def editable?
true
end
# must always return false, except on MainBlock clas.
def main?
false
end
def owner
box ? box.owner : nil
end
def css_class_name
self.class.name.underscore.gsub('_', '-')
end
def css_classes
classes = css_class_name
classes += ' invisible-block' unless visible?
classes
end
def default_title
''
end
def title
if self[:title].blank?
self.default_title
else
self[:title]
end
end
def view_title
title
end
def cacheable?
true
end
def cache_keys
"block-id-#{id}"
end
def timeout
4.hours
end
end