<?php
/**
 * Interface that is implemented by any classes that want to expose a method that can be called in any 
 * scope in a template.
 *
 * Director::AbsoluteBaseURL is an example of this.
 *
 * @package framework
 * @subpackage core
 */
interface TemplateGlobalProvider {

	/**
	 * Called by SSViewer to get a list of global variables to expose to the template, the static method to call on
	 * this class to get the value for those variables, and the class to use for casting the returned value for use
	 * in a template
	 *
	 * If the method to call is not included for a particular template variable, a method named the same as the
	 * template variable will be called
	 *
	 * If the casting class is not specified for a particular template variable, ViewableData::$default_cast is used
	 *
	 * The first letter of the template variable is case-insensitive. However the method name is always case sensitive.
	 *
	 * @abstract
	 * @return array Returns an array of items. Each key => value pair is one of three forms:
	 *  - template name (no key)
	 *  - template name => method name
	 *  - template name => array(), where the array can contain these key => value pairs
	 *     - "method" => method name
	 *     - "casting" => casting class to use (i.e., Varchar, HTMLText, etc)
	 */
	public static function get_template_global_variables();
}