initial commit

This commit is contained in:
Chris Sewell
2012-11-28 03:55:08 -05:00
parent 7adb399b2e
commit cf140a2e97
3247 changed files with 492437 additions and 0 deletions

View File

@ -0,0 +1,457 @@
<?php
/*
* This file is part of the symfony package.
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
* (c) 2004-2006 Sean Kerr.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* sfAction executes all the logic for the current request.
*
* @package symfony
* @subpackage action
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
* @author Sean Kerr <skerr@mojavi.org>
* @version SVN: $Id: sfAction.class.php 3624 2007-03-17 10:57:03Z fabien $
*/
abstract class sfAction extends sfComponent
{
protected
$security = array();
/**
* Initializes this action.
*
* @param sfContext The current application context.
*
* @return bool true, if initialization completes successfully, otherwise false
*/
public function initialize($context)
{
parent::initialize($context);
// include security configuration
require(sfConfigCache::getInstance()->checkConfig(sfConfig::get('sf_app_module_dir_name').'/'.$this->getModuleName().'/'.sfConfig::get('sf_app_module_config_dir_name').'/security.yml', true));
return true;
}
/**
* Executes an application defined process prior to execution of this sfAction object.
*
* By default, this method is empty.
*/
public function preExecute()
{
}
/**
* Execute an application defined process immediately after execution of this sfAction object.
*
* By default, this method is empty.
*/
public function postExecute()
{
}
/**
* Forwards current action to the default 404 error action.
*
* @param string Message of the generated exception
*
* @throws sfError404Exception
*
*/
public function forward404($message = '')
{
throw new sfError404Exception($message);
}
/**
* Forwards current action to the default 404 error action unless the specified condition is true.
*
* @param bool A condition that evaluates to true or false
* @param string Message of the generated exception
*
* @throws sfError404Exception
*/
public function forward404Unless($condition, $message = '')
{
if (!$condition)
{
throw new sfError404Exception($message);
}
}
/**
* Forwards current action to the default 404 error action if the specified condition is true.
*
* @param bool A condition that evaluates to true or false
* @param string Message of the generated exception
*
* @throws sfError404Exception
*/
public function forward404If($condition, $message = '')
{
if ($condition)
{
throw new sfError404Exception($message);
}
}
/**
* Redirects current action to the default 404 error action (with browser redirection).
*
* This method stops the current code flow.
*
*/
public function redirect404()
{
return $this->redirect('/'.sfConfig::get('sf_error_404_module').'/'.sfConfig::get('sf_error_404_action'));
}
/**
* Forwards current action to a new one (without browser redirection).
*
* This method stops the action. So, no code is executed after a call to this method.
*
* @param string A module name
* @param string An action name
*
* @throws sfStopException
*/
public function forward($module, $action)
{
if (sfConfig::get('sf_logging_enabled'))
{
$this->getContext()->getLogger()->info('{sfAction} forward to action "'.$module.'/'.$action.'"');
}
$this->getController()->forward($module, $action);
throw new sfStopException();
}
/**
* If the condition is true, forwards current action to a new one (without browser redirection).
*
* This method stops the action. So, no code is executed after a call to this method.
*
* @param bool A condition that evaluates to true or false
* @param string A module name
* @param string An action name
*
* @throws sfStopException
*/
public function forwardIf($condition, $module, $action)
{
if ($condition)
{
$this->forward($module, $action);
}
}
/**
* Unless the condition is true, forwards current action to a new one (without browser redirection).
*
* This method stops the action. So, no code is executed after a call to this method.
*
* @param bool A condition that evaluates to true or false
* @param string A module name
* @param string An action name
*
* @throws sfStopException
*/
public function forwardUnless($condition, $module, $action)
{
if (!$condition)
{
$this->forward($module, $action);
}
}
/**
* Redirects current request to a new URL.
*
* 2 URL formats are accepted :
* - a full URL: http://www.google.com/
* - an internal URL (url_for() format): module/action
*
* This method stops the action. So, no code is executed after a call to this method.
*
* @param string Url
* @param string Status code (default to 302)
*
* @throws sfStopException
*/
public function redirect($url, $statusCode = 302)
{
$url = $this->getController()->genUrl($url, true);
if (sfConfig::get('sf_logging_enabled'))
{
$this->getContext()->getLogger()->info('{sfAction} redirect to "'.$url.'"');
}
$this->getController()->redirect($url, 0, $statusCode);
throw new sfStopException();
}
/**
* Redirects current request to a new URL, only if specified condition is true.
*
* This method stops the action. So, no code is executed after a call to this method.
*
* @param bool A condition that evaluates to true or false
* @param string url
*
* @throws sfStopException
*
* @see redirect
*/
public function redirectIf($condition, $url)
{
if ($condition)
{
$this->redirect($url);
}
}
/**
* Redirects current request to a new URL, unless specified condition is true.
*
* This method stops the action. So, no code is executed after a call to this method.
*
* @param bool A condition that evaluates to true or false
* @param string Url
*
* @throws sfStopException
*
* @see redirect
*/
public function redirectUnless($condition, $url)
{
if (!$condition)
{
$this->redirect($url);
}
}
/**
* Appends the given text to the response content and bypasses the built-in view system.
*
* This method must be called as with a return:
*
* <code>return $this->renderText('some text')</code>
*
* @param string Text to append to the response
*
* @return sfView::NONE
*/
public function renderText($text)
{
$this->getResponse()->setContent($this->getResponse()->getContent().$text);
return sfView::NONE;
}
/**
* Retrieves the default view to be executed when a given request is not served by this action.
*
* @return string A string containing the view name associated with this action
*/
public function getDefaultView()
{
return sfView::INPUT;
}
/**
* Retrieves the request methods on which this action will process validation and execution.
*
* @return int One of the following values:
*
* - sfRequest::GET
* - sfRequest::POST
* - sfRequest::PUT
* - sfRequest::DELETE
* - sfRequest::HEAD
* - sfRequest::NONE
*
* @see sfRequest
*/
public function getRequestMethods()
{
return sfRequest::GET
| sfRequest::POST
| sfRequest::PUT
| sfRequest::DELETE
| sfRequest::HEAD
| sfRequest::NONE;
}
/**
* Executes any post-validation error application logic.
*
* @return string A string containing the view name associated with this action
*/
public function handleError()
{
return sfView::ERROR;
}
/**
* Validates manually files and parameters.
*
* @return bool true, if validation completes successfully, otherwise false.
*/
public function validate()
{
return true;
}
/**
* Returns the security configuration for this module.
*
* @return string Current security configuration as an array
*/
public function getSecurityConfiguration()
{
return $this->security;
}
/**
* Overrides the current security configuration for this module.
*
* @param array The new security configuration
*/
public function setSecurityConfiguration($security)
{
$this->security = $security;
}
/**
* Indicates that this action requires security.
*
* @return bool true, if this action requires security, otherwise false.
*/
public function isSecure()
{
$actionName = strtolower($this->getActionName());
if (isset($this->security[$actionName]['is_secure']))
{
return $this->security[$actionName]['is_secure'];
}
if (isset($this->security['all']['is_secure']))
{
return $this->security['all']['is_secure'];
}
return false;
}
/**
* Gets credentials the user must have to access this action.
*
* @return mixed An array or a string describing the credentials the user must have to access this action
*/
public function getCredential()
{
$actionName = strtolower($this->getActionName());
if (isset($this->security[$actionName]['credentials']))
{
$credentials = $this->security[$actionName]['credentials'];
}
else if (isset($this->security['all']['credentials']))
{
$credentials = $this->security['all']['credentials'];
}
else
{
$credentials = null;
}
return $credentials;
}
/**
* Sets an alternate template for this sfAction.
*
* See 'Naming Conventions' in the 'Symfony View' documentation.
*
* @param string Template name
*/
public function setTemplate($name)
{
if (sfConfig::get('sf_logging_enabled'))
{
$this->getContext()->getLogger()->info('{sfAction} change template to "'.$name.'"');
}
$this->getResponse()->setParameter($this->getModuleName().'_'.$this->getActionName().'_template', $name, 'symfony/action/view');
}
/**
* Gets the name of the alternate template for this sfAction.
*
* WARNING: It only returns the template you set with the setTemplate() method,
* and does not return the template that you configured in your view.yml.
*
* See 'Naming Conventions' in the 'Symfony View' documentation.
*
* @return string Template name. Returns null if no template has been set within the action
*/
public function getTemplate()
{
return $this->getResponse()->getParameter($this->getModuleName().'_'.$this->getActionName().'_template', null, 'symfony/action/view');
}
/**
* Sets an alternate layout for this sfAction.
*
* To de-activate the layout, set the layout name to false.
*
* To revert the layout to the one configured in the view.yml, set the template name to null.
*
* @param mixed Layout name or false to de-activate the layout
*/
public function setLayout($name)
{
if (sfConfig::get('sf_logging_enabled'))
{
$this->getContext()->getLogger()->info('{sfAction} change layout to "'.$name.'"');
}
$this->getResponse()->setParameter($this->getModuleName().'_'.$this->getActionName().'_layout', $name, 'symfony/action/view');
}
/**
* Gets the name of the alternate layout for this sfAction.
*
* WARNING: It only returns the layout you set with the setLayout() method,
* and does not return the layout that you configured in your view.yml.
*
* @return mixed Layout name. Returns null if no layout has been set within the action
*/
public function getLayout()
{
return $this->getResponse()->getParameter($this->getModuleName().'_'.$this->getActionName().'_layout', null, 'symfony/action/view');
}
/**
* Changes the default view class used for rendering the template associated with the current action.
*
* @param string View class name
*/
public function setViewClass($class)
{
sfConfig::set('mod_'.strtolower($this->getModuleName()).'_view_class', $class);
}
}

View File

@ -0,0 +1,121 @@
<?php
/*
* This file is part of the symfony package.
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
* (c) 2004-2006 Sean Kerr.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* sfActionStack keeps a list of all requested actions and provides accessor
* methods for retrieving individual entries.
*
* @package symfony
* @subpackage action
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
* @author Sean Kerr <skerr@mojavi.org>
* @version SVN: $Id: sfActionStack.class.php 3198 2007-01-08 20:36:20Z fabien $
*/
class sfActionStack
{
protected
$stack = array();
/**
* Adds an entry to the action stack.
*
* @param string A module name
* @param string An action name
* @param sfAction An sfAction implementation instance
*
* @return sfActionStackEntry sfActionStackEntry instance
*/
public function addEntry($moduleName, $actionName, $actionInstance)
{
// create our action stack entry and add it to our stack
$actionEntry = new sfActionStackEntry($moduleName, $actionName, $actionInstance);
$this->stack[] = $actionEntry;
return $actionEntry;
}
/**
* Retrieves the entry at a specific index.
*
* @param int An entry index
*
* @return sfActionStackEntry An action stack entry implementation.
*/
public function getEntry($index)
{
$retval = null;
if ($index > -1 && $index < count($this->stack))
{
$retval = $this->stack[$index];
}
return $retval;
}
/**
* Removes the entry at a specific index.
*
* @param int An entry index
*
* @return sfActionStackEntry An action stack entry implementation.
*/
public function popEntry()
{
return array_pop($this->stack);
}
/**
* Retrieves the first entry.
*
* @return mixed An action stack entry implementation or null if there is no sfAction instance in the stack
*/
public function getFirstEntry()
{
$retval = null;
if (isset($this->stack[0]))
{
$retval = $this->stack[0];
}
return $retval;
}
/**
* Retrieves the last entry.
*
* @return mixed An action stack entry implementation or null if there is no sfAction instance in the stack
*/
public function getLastEntry()
{
$count = count($this->stack);
$retval = null;
if (isset($this->stack[0]))
{
$retval = $this->stack[$count - 1];
}
return $retval;
}
/**
* Retrieves the size of this stack.
*
* @return int The size of this stack.
*/
public function getSize()
{
return count($this->stack);
}
}

View File

@ -0,0 +1,115 @@
<?php
/*
* This file is part of the symfony package.
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
* (c) 2004-2006 Sean Kerr.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* sfActionStackEntry represents information relating to a single sfAction request during a single HTTP request.
*
* @package symfony
* @subpackage action
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
* @author Sean Kerr <skerr@mojavi.org>
* @version SVN: $Id: sfActionStackEntry.class.php 3198 2007-01-08 20:36:20Z fabien $
*/
class sfActionStackEntry
{
protected
$actionInstance = null,
$actionName = null,
$moduleName = null,
$presentation = null,
$viewInstance = null;
/**
* Class constructor.
*
* @param string A module name
* @param string An action name
* @param sfAction An sfAction implementation instance
*/
public function __construct($moduleName, $actionName, $actionInstance)
{
$this->actionName = $actionName;
$this->actionInstance = $actionInstance;
$this->moduleName = $moduleName;
}
/**
* Retrieves this entry's action name.
*
* @return string An action name
*/
public function getActionName()
{
return $this->actionName;
}
/**
* Retrieves this entry's action instance.
*
* @return sfAction An sfAction implementation instance
*/
public function getActionInstance()
{
return $this->actionInstance;
}
/**
* Retrieves this entry's view instance.
*
* @return sfView A sfView implementation instance.
*/
public function getViewInstance()
{
return $this->viewInstance;
}
/**
* Sets this entry's view instance.
*
* @param sfView A sfView implementation instance.
*/
public function setViewInstance($viewInstance)
{
$this->viewInstance = $viewInstance;
}
/**
* Retrieves this entry's module name.
*
* @return string A module name
*/
public function getModuleName()
{
return $this->moduleName;
}
/**
* Retrieves this entry's rendered view presentation.
*
* This will only exist if the view has processed and the render mode is set to sfView::RENDER_VAR.
*
* @return string Rendered view presentation
*/
public function & getPresentation()
{
return $this->presentation;
}
/**
* Sets the rendered presentation for this action.
*
* @param string A rendered presentation.
*/
public function setPresentation(&$presentation)
{
$this->presentation =& $presentation;
}
}

View File

@ -0,0 +1,57 @@
<?php
/*
* This file is part of the symfony package.
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
* (c) 2004-2006 Sean Kerr.
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* sfActions executes all the logic for the current request.
*
* @package symfony
* @subpackage action
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
* @author Sean Kerr <skerr@mojavi.org>
* @version SVN: $Id: sfActions.class.php 3198 2007-01-08 20:36:20Z fabien $
*/
abstract class sfActions extends sfAction
{
/**
* Dispatches to the action defined by the 'action' parameter of the sfRequest object.
*
* This method try to execute the executeXXX() method of the current object where XXX is the
* defined action name.
*
* @return string A string containing the view name associated with this action
*
* @throws sfInitializationException
*
* @see sfAction
*/
public function execute()
{
// dispatch action
$actionToRun = 'execute'.ucfirst($this->getActionName());
if (!is_callable(array($this, $actionToRun)))
{
// action not found
$error = 'sfAction initialization failed for module "%s", action "%s". You must create a "%s" method.';
$error = sprintf($error, $this->getModuleName(), $this->getActionName(), $actionToRun);
throw new sfInitializationException($error);
}
if (sfConfig::get('sf_logging_enabled'))
{
$this->getContext()->getLogger()->info('{sfAction} call "'.get_class($this).'->'.$actionToRun.'()'.'"');
}
// run action
$ret = $this->$actionToRun();
return $ret;
}
}

View File

@ -0,0 +1,427 @@
<?php
/*
* This file is part of the symfony package.
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* sfComponent.
*
* @package symfony
* @subpackage action
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
* @version SVN: $Id: sfComponent.class.php 5380 2007-10-05 13:46:22Z noel $
*/
abstract class sfComponent
{
protected
$context = null,
$request = null,
$response = null,
$varHolder = null,
$requestParameterHolder = null;
/**
* Execute any application/business logic for this component.
*
* In a typical database-driven application, execute() handles application
* logic itself and then proceeds to create a model instance. Once the model
* instance is initialized it handles all business logic for the action.
*
* A model should represent an entity in your application. This could be a
* user account, a shopping cart, or even a something as simple as a
* single product.
*
* @return mixed A string containing the view name associated with this action
*/
abstract function execute();
/**
* Gets the module name associated with this component.
*
* @return string A module name
*/
public function getModuleName()
{
return $this->getContext()->getModuleName();
}
/**
* Gets the action name associated with this component.
*
* @return string An action name
*/
public function getActionName()
{
return $this->getContext()->getActionName();
}
/**
* Initializes this component.
*
* @param sfContext The current application context
*
* @return boolean true, if initialization completes successfully, otherwise false
*/
public function initialize($context)
{
$this->context = $context;
$this->varHolder = new sfParameterHolder();
$this->request = $context->getRequest();
$this->response = $context->getResponse();
$this->requestParameterHolder = $this->request->getParameterHolder();
return true;
}
/**
* Retrieves the current application context.
*
* @return sfContext The current sfContext instance
*/
public final function getContext()
{
return $this->context;
}
/**
* Retrieves the current logger instance.
*
* @return sfLogger The current sfLogger instance
*/
public final function getLogger()
{
return $this->context->getLogger();
}
/**
* Logs a message using the sfLogger object.
*
* @param mixed String or object containing the message to log
* @param string The priority of the message
* (available priorities: emerg, alert, crit, err, warning, notice, info, debug)
*
* @see sfLogger
*/
public function logMessage($message, $priority = 'info')
{
if (sfConfig::get('sf_logging_enabled'))
{
$this->context->getLogger()->log($message, constant('SF_LOG_'.strtoupper($priority)));
}
}
/**
* Displays a message as a short message in the sfWebDebug toolbar.
*
* @param string The message text
*
* @see sfWebDebug
*/
public function debugMessage($message)
{
if (sfConfig::get('sf_web_debug'))
{
sfWebDebug::getInstance()->logShortMessage($message);
}
}
/**
* Returns the value of a request parameter.
*
* This is a proxy method equivalent to:
*
* <code>$this->getRequest()->getParameterHolder()->get($name)</code>
*
* @param string The parameter name
*
* @return string The request parameter value
*/
public function getRequestParameter($name, $default = null)
{
return $this->requestParameterHolder->get($name, $default);
}
/**
* Returns true if a request parameter exists.
*
* This is a proxy method equivalent to:
*
* <code>$this->getRequest()->getParameterHolder()->has($name)</code>
*
* @param string The parameter name
* @return boolean true if the request parameter exists, false otherwise
*/
public function hasRequestParameter($name)
{
return $this->requestParameterHolder->has($name);
}
/**
* Retrieves the current sfRequest object.
*
* This is a proxy method equivalent to:
*
* <code>$this->getContext()->getRequest()</code>
*
* @return sfRequest The current sfRequest implementation instance
*/
public function getRequest()
{
return $this->request;
}
/**
* Retrieves the current sfResponse object.
*
* This is a proxy method equivalent to:
*
* <code>$this->getContext()->getResponse()</code>
*
* @return sfResponse The current sfResponse implementation instance
*/
public function getResponse()
{
return $this->response;
}
/**
* Retrieves the current sfController object.
*
* This is a proxy method equivalent to:
*
* <code>$this->getContext()->getController()</code>
*
* @return sfController The current sfController implementation instance
*/
public function getController()
{
return $this->getContext()->getController();
}
/**
* Retrieves the current sfUser object.
*
* This is a proxy method equivalent to:
*
* <code>$this->getContext()->getUser()</code>
*
* @return sfUser The current sfUser implementation instance
*/
public function getUser()
{
return $this->getContext()->getUser();
}
/**
* Sets a variable for the template.
*
* @param string The variable name
* @param mixed The variable value
*/
public function setVar($name, $value)
{
$this->varHolder->set($name, $value);
}
/**
* Gets a variable set for the template.
*
* @param string The variable name
* @return mixed The variable value
*/
public function getVar($name)
{
return $this->varHolder->get($name);
}
/**
* Gets the sfParameterHolder object that stores the template variables.
*
* @return sfParameterHolder The variable holder.
*/
public function getVarHolder()
{
return $this->varHolder;
}
/**
* Sets a variable for the template.
*
* This is a shortcut for:
*
* <code>$this->setVar('name', 'value')</code>
*
* @param string The variable name
* @param string The variable value
*
* @return boolean always true
*
* @see setVar()
*/
public function __set($key, $value)
{
return $this->varHolder->setByRef($key, $value);
}
/**
* Gets a variable for the template.
*
* This is a shortcut for:
*
* <code>$this->getVar('name')</code>
*
* @param string The variable name
*
* @return mixed The variable value
*
* @see getVar()
*/
public function & __get($key)
{
return $this->varHolder->get($key);
}
/**
* Returns true if a variable for the template is set.
*
* This is a shortcut for:
*
* <code>$this->getVarHolder()->has('name')</code>
*
* @param string The variable name
*
* @return boolean true if the variable is set
*/
public function __isset($name)
{
return $this->varHolder->has($name);
}
/**
* Removes a variable for the template.
*
* This is just really a shortcut for:
*
* <code>$this->getVarHolder()->remove('name')</code>
*
* @param string The variable Name
*/
public function __unset($name)
{
$this->varHolder->remove($name);
}
/**
* Sets a flash variable that will be passed to the very next action.
*
* @param string The name of the flash variable
* @param string The value of the flash variable
* @param boolean true if the flash have to persist for the following request (true by default)
*/
public function setFlash($name, $value, $persist = true)
{
$this->getUser()->setAttribute($name, $value, 'symfony/flash');
if ($persist)
{
// clear removal flag
$this->getUser()->getAttributeHolder()->remove($name, 'symfony/flash/remove');
}
else
{
$this->getUser()->setAttribute($name, true, 'symfony/flash/remove');
}
}
/**
* Gets a flash variable.
*
* @param string The name of the flash variable
*
* @return mixed The value of the flash variable
*/
public function getFlash($name)
{
return $this->getUser()->getAttribute($name, null, 'symfony/flash');
}
/**
* Returns true if a flash variable of the specified name exists.
*
* @param string The name of the flash variable
*
* @return boolean true if the variable exists, false otherwise
*/
public function hasFlash($name)
{
return $this->getUser()->hasAttribute($name, 'symfony/flash');
}
/**
* Sends and email from the current action.
*
* This methods calls a module/action with the sfMailView class.
*
* This is a shortcut for
*
* <code>$this->getController()->sendEmail($module, $action)</code>
*
* @param string A module name
* @param string An action name
*
* @return string The generated mail content
*
* @see sfMailView, getPresentationFor(), sfController
*/
public function sendEmail($module, $action)
{
return $this->getController()->getPresentationFor($module, $action, 'sfMail');
}
/**
* Returns the rendered view presentation of a given module/action.
*
* This is a shortcut for
*
* <code>$this->getController()->getPresentationFor($module, $action, $viewName)</code>
*
* @param string A module name
* @param string An action name
* @param string A View class name
*
* @return string The generated content
*
* @see sfController
*/
public function getPresentationFor($module, $action, $viewName = null)
{
return $this->getController()->getPresentationFor($module, $action, $viewName);
}
/**
* Calls methods defined via the sfMixer class.
*
* @param string The method name
* @param array The method arguments
*
* @return mixed The returned value of the called method
*
* @see sfMixer
*/
public function __call($method, $arguments)
{
if (!$callable = sfMixer::getCallable('sfComponent:'.$method))
{
throw new sfException(sprintf('Call to undefined method sfComponent::%s', $method));
}
array_unshift($arguments, $this);
return call_user_func_array($callable, $arguments);
}
}

View File

@ -0,0 +1,25 @@
<?php
/*
* This file is part of the symfony package.
* (c) 2004-2006 Fabien Potencier <fabien.potencier@symfony-project.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
/**
* sfComponents.
*
* @package symfony
* @subpackage action
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
* @version SVN: $Id: sfComponents.class.php 1415 2006-06-11 08:33:51Z fabien $
*/
abstract class sfComponents extends sfComponent
{
public function execute()
{
throw new sfInitializationException('sfComponents initialization failed');
}
}