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 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