Files
portal-legacy/lib/symfony/util/sfContext.class.php

332 lines
7.6 KiB
PHP
Raw Normal View History

2012-11-28 03:55:08 -05:00
<?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.
*/
/**
* sfContext provides information about the current application context, such as
* the module and action names and the module directory. References to the
* current controller, request, and user implementation instances are also
* provided.
*
* @package symfony
* @subpackage util
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
* @author Sean Kerr <skerr@mojavi.org>
* @version SVN: $Id: sfContext.class.php 3493 2007-02-18 09:23:10Z fabien $
*/
class sfContext
{
protected
$actionStack = null,
$controller = null,
$databaseManager = null,
$request = null,
$response = null,
$storage = null,
$viewCacheManager = null,
$i18n = null,
$logger = null,
$user = null;
protected static
$instance = null;
/**
* Removes current sfContext instance
*
* This method only exists for testing purpose. Don't use it in your application code.
*/
public static function removeInstance()
{
self::$instance = null;
}
protected function initialize()
{
$this->logger = sfLogger::getInstance();
if (sfConfig::get('sf_logging_enabled'))
{
$this->logger->info('{sfContext} initialization');
}
if (sfConfig::get('sf_use_database'))
{
// setup our database connections
$this->databaseManager = new sfDatabaseManager();
$this->databaseManager->initialize();
}
// create a new action stack
$this->actionStack = new sfActionStack();
// include the factories configuration
require(sfConfigCache::getInstance()->checkConfig(sfConfig::get('sf_app_config_dir_name').'/factories.yml'));
// register our shutdown function
register_shutdown_function(array($this, 'shutdown'));
}
/**
* Retrieve the singleton instance of this class.
*
* @return sfContext A sfContext implementation instance.
*/
public static function getInstance()
{
if (!isset(self::$instance))
{
$class = __CLASS__;
self::$instance = new $class();
self::$instance->initialize();
}
return self::$instance;
}
public static function hasInstance()
{
return isset(self::$instance);
}
/**
* Retrieve the action name for this context.
*
* @return string The currently executing action name, if one is set,
* otherwise null.
*/
public function getActionName()
{
// get the last action stack entry
if ($this->actionStack && $lastEntry = $this->actionStack->getLastEntry())
{
return $lastEntry->getActionName();
}
}
/**
* Retrieve the ActionStack.
*
* @return sfActionStack the sfActionStack instance
*/
public function getActionStack()
{
return $this->actionStack;
}
/**
* Retrieve the controller.
*
* @return sfController The current sfController implementation instance.
*/
public function getController()
{
return $this->controller;
}
public function getLogger()
{
return $this->logger;
}
/**
* Retrieve a database connection from the database manager.
*
* This is a shortcut to manually getting a connection from an existing
* database implementation instance.
*
* If the [sf_use_database] setting is off, this will return null.
*
* @param name A database name.
*
* @return mixed A Database instance.
*
* @throws <b>sfDatabaseException</b> If the requested database name does not exist.
*/
public function getDatabaseConnection($name = 'default')
{
if ($this->databaseManager != null)
{
return $this->databaseManager->getDatabase($name)->getConnection();
}
return null;
}
public function retrieveObjects($class, $peerMethod)
{
$retrievingClass = 'sf'.ucfirst(sfConfig::get('sf_orm', 'propel')).'DataRetriever';
return call_user_func(array($retrievingClass, 'retrieveObjects'), $class, $peerMethod);
}
/**
* Retrieve the database manager.
*
* @return sfDatabaseManager The current sfDatabaseManager instance.
*/
public function getDatabaseManager()
{
return $this->databaseManager;
}
/**
* Retrieve the module directory for this context.
*
* @return string An absolute filesystem path to the directory of the
* currently executing module, if one is set, otherwise null.
*/
public function getModuleDirectory()
{
// get the last action stack entry
if ($this->actionStack && $lastEntry = $this->actionStack->getLastEntry())
{
return sfConfig::get('sf_app_module_dir').'/'.$lastEntry->getModuleName();
}
}
/**
* Retrieve the module name for this context.
*
* @return string The currently executing module name, if one is set,
* otherwise null.
*/
public function getModuleName()
{
// get the last action stack entry
if ($this->actionStack && $lastEntry = $this->actionStack->getLastEntry())
{
return $lastEntry->getModuleName();
}
}
/**
* Retrieve the curretn view instance for this context.
*
* @return sfView The currently view instance, if one is set,
* otherwise null.
*/
public function getCurrentViewInstance()
{
// get the last action stack entry
if ($this->actionStack && $lastEntry = $this->actionStack->getLastEntry())
{
return $lastEntry->getViewInstance();
}
}
/**
* Retrieve the request.
*
* @return sfRequest The current sfRequest implementation instance.
*/
public function getRequest()
{
return $this->request;
}
/**
* Retrieve the response.
*
* @return sfResponse The current sfResponse implementation instance.
*/
public function getResponse()
{
return $this->response;
}
/**
* Set the response object.
*
* @param sfResponse A sfResponse instance.
*
* @return void.
*/
public function setResponse($response)
{
$this->response = $response;
}
/**
* Retrieve the storage.
*
* @return sfStorage The current sfStorage implementation instance.
*/
public function getStorage()
{
return $this->storage;
}
/**
* Retrieve the view cache manager
*
* @return sfViewCacheManager The current sfViewCacheManager implementation instance.
*/
public function getViewCacheManager()
{
return $this->viewCacheManager;
}
/**
* Retrieve the i18n instance
*
* @return sfI18N The current sfI18N implementation instance.
*/
public function getI18N()
{
if (!$this->i18n && sfConfig::get('sf_i18n'))
{
$this->i18n = sfI18N::getInstance();
$this->i18n->initialize($this);
}
return $this->i18n;
}
/**
* Retrieve the user.
*
* @return sfUser The current sfUser implementation instance.
*/
public function getUser()
{
return $this->user;
}
/**
* Execute the shutdown procedure.
*
* @return void
*/
public function shutdown()
{
// shutdown all factories
$this->getUser()->shutdown();
$this->getStorage()->shutdown();
$this->getRequest()->shutdown();
$this->getResponse()->shutdown();
if (sfConfig::get('sf_logging_enabled'))
{
$this->getLogger()->shutdown();
}
if (sfConfig::get('sf_use_database'))
{
$this->getDatabaseManager()->shutdown();
}
if (sfConfig::get('sf_cache'))
{
$this->getViewCacheManager()->shutdown();
}
}
}