vendor/symfony/src/Symfony/Component/HttpFoundation/Session.php
changeset 0 7f95f8617b0b
--- /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 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * 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 <fabien@symfony.com>
+ *
+ * @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) {
+        }
+    }
+}