diff -r 000000000000 -r 7f95f8617b0b vendor/symfony/src/Symfony/Component/HttpFoundation/Session.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vendor/symfony/src/Symfony/Component/HttpFoundation/Session.php Sat Sep 24 15:40:41 2011 +0200 @@ -0,0 +1,395 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\HttpFoundation; + +use Symfony\Component\HttpFoundation\SessionStorage\SessionStorageInterface; + +/** + * Session. + * + * @author Fabien Potencier + * + * @api + */ +class Session implements \Serializable +{ + protected $storage; + protected $started; + protected $attributes; + protected $flashes; + protected $oldFlashes; + protected $locale; + protected $defaultLocale; + protected $saved; + + /** + * Constructor. + * + * @param SessionStorageInterface $storage A SessionStorageInterface instance + * @param string $defaultLocale The default locale + */ + public function __construct(SessionStorageInterface $storage, $defaultLocale = 'en') + { + $this->storage = $storage; + $this->defaultLocale = $defaultLocale; + $this->locale = $defaultLocale; + $this->flashes = array(); + $this->oldFlashes = array(); + $this->attributes = array(); + $this->setPhpDefaultLocale($this->defaultLocale); + $this->started = false; + $this->saved = false; + } + + /** + * Starts the session storage. + * + * @api + */ + public function start() + { + if (true === $this->started) { + return; + } + + $this->storage->start(); + + $attributes = $this->storage->read('_symfony2'); + + if (isset($attributes['attributes'])) { + $this->attributes = $attributes['attributes']; + $this->flashes = $attributes['flashes']; + $this->locale = $attributes['locale']; + $this->setPhpDefaultLocale($this->locale); + + // flag current flash messages to be removed at shutdown + $this->oldFlashes = $this->flashes; + } + + $this->started = true; + } + + /** + * Checks if an attribute is defined. + * + * @param string $name The attribute name + * + * @return Boolean true if the attribute is defined, false otherwise + * + * @api + */ + public function has($name) + { + return array_key_exists($name, $this->attributes); + } + + /** + * Returns an attribute. + * + * @param string $name The attribute name + * @param mixed $default The default value + * + * @return mixed + * + * @api + */ + public function get($name, $default = null) + { + return array_key_exists($name, $this->attributes) ? $this->attributes[$name] : $default; + } + + /** + * Sets an attribute. + * + * @param string $name + * @param mixed $value + * + * @api + */ + public function set($name, $value) + { + if (false === $this->started) { + $this->start(); + } + + $this->attributes[$name] = $value; + } + + /** + * Returns attributes. + * + * @return array Attributes + * + * @api + */ + public function all() + { + return $this->attributes; + } + + /** + * Sets attributes. + * + * @param array $attributes Attributes + * + * @api + */ + public function replace(array $attributes) + { + if (false === $this->started) { + $this->start(); + } + + $this->attributes = $attributes; + } + + /** + * Removes an attribute. + * + * @param string $name + * + * @api + */ + public function remove($name) + { + if (false === $this->started) { + $this->start(); + } + + if (array_key_exists($name, $this->attributes)) { + unset($this->attributes[$name]); + } + } + + /** + * Clears all attributes. + * + * @api + */ + public function clear() + { + if (false === $this->started) { + $this->start(); + } + + $this->attributes = array(); + $this->flashes = array(); + $this->setPhpDefaultLocale($this->locale = $this->defaultLocale); + } + + /** + * Invalidates the current session. + * + * @api + */ + public function invalidate() + { + $this->clear(); + $this->storage->regenerate(); + } + + /** + * Migrates the current session to a new session id while maintaining all + * session attributes. + * + * @api + */ + public function migrate() + { + $this->storage->regenerate(); + } + + /** + * Returns the session ID + * + * @return mixed The session ID + * + * @api + */ + public function getId() + { + if (false === $this->started) { + $this->start(); + } + + return $this->storage->getId(); + } + + /** + * Returns the locale + * + * @return string + */ + public function getLocale() + { + return $this->locale; + } + + /** + * Sets the locale. + * + * @param string $locale + */ + public function setLocale($locale) + { + if (false === $this->started) { + $this->start(); + } + + $this->setPhpDefaultLocale($this->locale = $locale); + } + + /** + * Gets the flash messages. + * + * @return array + */ + public function getFlashes() + { + return $this->flashes; + } + + /** + * Sets the flash messages. + * + * @param array $values + */ + public function setFlashes($values) + { + if (false === $this->started) { + $this->start(); + } + + $this->flashes = $values; + $this->oldFlashes = array(); + } + + /** + * Gets a flash message. + * + * @param string $name + * @param string|null $default + * + * @return string + */ + public function getFlash($name, $default = null) + { + return array_key_exists($name, $this->flashes) ? $this->flashes[$name] : $default; + } + + /** + * Sets a flash message. + * + * @param string $name + * @param string $value + */ + public function setFlash($name, $value) + { + if (false === $this->started) { + $this->start(); + } + + $this->flashes[$name] = $value; + unset($this->oldFlashes[$name]); + } + + /** + * Checks whether a flash message exists. + * + * @param string $name + * + * @return Boolean + */ + public function hasFlash($name) + { + if (false === $this->started) { + $this->start(); + } + + return array_key_exists($name, $this->flashes); + } + + /** + * Removes a flash message. + * + * @param string $name + */ + public function removeFlash($name) + { + if (false === $this->started) { + $this->start(); + } + + unset($this->flashes[$name]); + } + + /** + * Removes the flash messages. + */ + public function clearFlashes() + { + if (false === $this->started) { + $this->start(); + } + + $this->flashes = array(); + $this->oldFlashes = array(); + } + + public function save() + { + if (false === $this->started) { + $this->start(); + } + + $this->flashes = array_diff_key($this->flashes, $this->oldFlashes); + + $this->storage->write('_symfony2', array( + 'attributes' => $this->attributes, + 'flashes' => $this->flashes, + 'locale' => $this->locale, + )); + $this->saved = true; + } + + public function __destruct() + { + if (true === $this->started && !$this->saved) { + $this->save(); + } + } + + public function serialize() + { + return serialize(array($this->storage, $this->defaultLocale)); + } + + public function unserialize($serialized) + { + list($this->storage, $this->defaultLocale) = unserialize($serialized); + $this->attributes = array(); + $this->started = false; + } + + private function setPhpDefaultLocale($locale) + { + // if either the class Locale doesn't exist, or an exception is thrown when + // setting the default locale, the intl module is not installed, and + // the call can be ignored: + try { + if (class_exists('Locale', false)) { + \Locale::setDefault($locale); + } + } catch (\Exception $e) { + } + } +}