|
@@ -21,9 +21,11 @@ use Symfony\Component\HttpFoundation\SessionStorage\SessionStorageInterface;
|
|
|
class Session implements \Serializable
|
|
|
{
|
|
|
protected $storage;
|
|
|
+ protected $started;
|
|
|
protected $attributes;
|
|
|
+ protected $flashes;
|
|
|
protected $oldFlashes;
|
|
|
- protected $started;
|
|
|
+ protected $locale;
|
|
|
protected $defaultLocale;
|
|
|
|
|
|
/**
|
|
@@ -36,8 +38,11 @@ class Session implements \Serializable
|
|
|
{
|
|
|
$this->storage = $storage;
|
|
|
$this->defaultLocale = $defaultLocale;
|
|
|
- $this->attributes = array('_flash' => array(), '_locale' => $this->defaultLocale);
|
|
|
- \Locale::setDefault($this->attributes['_locale']);
|
|
|
+ $this->locale = $defaultLocale;
|
|
|
+ $this->flashes = array();
|
|
|
+ $this->oldFlashes = array();
|
|
|
+ $this->attributes = array();
|
|
|
+ $this->setPhpDefaultLocale($this->defaultLocale);
|
|
|
$this->started = false;
|
|
|
}
|
|
|
|
|
@@ -52,21 +57,18 @@ class Session implements \Serializable
|
|
|
|
|
|
$this->storage->start();
|
|
|
|
|
|
- $this->attributes = $this->storage->read('_symfony2');
|
|
|
+ $attributes = $this->storage->read('_symfony2');
|
|
|
|
|
|
- if (!isset($this->attributes['_flash'])) {
|
|
|
- $this->attributes['_flash'] = array();
|
|
|
- }
|
|
|
+ if (isset($attributes['attributes'])) {
|
|
|
+ $this->attributes = $attributes['attributes'];
|
|
|
+ $this->flashes = $attributes['flashes'];
|
|
|
+ $this->locale = $attributes['locale'];
|
|
|
+ $this->setPhpDefaultLocale($this->locale);
|
|
|
|
|
|
- if (!isset($this->attributes['_locale'])) {
|
|
|
- $this->attributes['_locale'] = $this->defaultLocale;
|
|
|
+ // flag current flash messages to be removed at shutdown
|
|
|
+ $this->oldFlashes = array_flip(array_keys($this->flashes));
|
|
|
}
|
|
|
|
|
|
- \Locale::setDefault($this->attributes['_locale']);
|
|
|
-
|
|
|
- // flag current flash messages to be removed at shutdown
|
|
|
- $this->oldFlashes = array_flip(array_keys($this->attributes['_flash']));
|
|
|
-
|
|
|
$this->started = true;
|
|
|
}
|
|
|
|
|
@@ -107,11 +109,7 @@ class Session implements \Serializable
|
|
|
$this->start();
|
|
|
}
|
|
|
|
|
|
- if ('_locale' === $name) {
|
|
|
- $this->setLocale($value);
|
|
|
- } else {
|
|
|
- $this->attributes[$name] = $value;
|
|
|
- }
|
|
|
+ $this->attributes[$name] = $value;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -135,10 +133,6 @@ class Session implements \Serializable
|
|
|
$this->start();
|
|
|
}
|
|
|
|
|
|
- if (isset($attributes['_locale'])) {
|
|
|
- $this->setLocale($attributes['_locale']);
|
|
|
- }
|
|
|
-
|
|
|
$this->attributes = $attributes;
|
|
|
}
|
|
|
|
|
@@ -168,6 +162,8 @@ class Session implements \Serializable
|
|
|
}
|
|
|
|
|
|
$this->attributes = array();
|
|
|
+ $this->flashes = array();
|
|
|
+ $this->setPhpDefaultLocale($this->locale = $this->defaultLocale);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -195,6 +191,10 @@ class Session implements \Serializable
|
|
|
*/
|
|
|
public function getId()
|
|
|
{
|
|
|
+ if (false === $this->started) {
|
|
|
+ $this->start();
|
|
|
+ }
|
|
|
+
|
|
|
return $this->storage->getId();
|
|
|
}
|
|
|
|
|
@@ -205,11 +205,7 @@ class Session implements \Serializable
|
|
|
*/
|
|
|
public function getLocale()
|
|
|
{
|
|
|
- if (!isset($this->attributes['_locale'])) {
|
|
|
- $this->attributes['_locale'] = $this->defaultLocale;
|
|
|
- }
|
|
|
-
|
|
|
- return $this->attributes['_locale'];
|
|
|
+ return $this->locale;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -223,7 +219,7 @@ class Session implements \Serializable
|
|
|
$this->start();
|
|
|
}
|
|
|
|
|
|
- \Locale::setDefault($this->attributes['_locale'] = $locale);
|
|
|
+ $this->setPhpDefaultLocale($this->locale = $locale);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -233,7 +229,7 @@ class Session implements \Serializable
|
|
|
*/
|
|
|
public function getFlashes()
|
|
|
{
|
|
|
- return isset($this->attributes['_flash']) ? $this->attributes['_flash'] : array();
|
|
|
+ return $this->flashes;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -247,7 +243,7 @@ class Session implements \Serializable
|
|
|
$this->start();
|
|
|
}
|
|
|
|
|
|
- $this->attributes['_flash'] = $values;
|
|
|
+ $this->flashes = $values;
|
|
|
$this->oldFlashes = array();
|
|
|
}
|
|
|
|
|
@@ -261,7 +257,7 @@ class Session implements \Serializable
|
|
|
*/
|
|
|
public function getFlash($name, $default = null)
|
|
|
{
|
|
|
- return array_key_exists($name, $this->getFlashes()) ? $this->attributes['_flash'][$name] : $default;
|
|
|
+ return array_key_exists($name, $this->flashes) ? $this->flashes[$name] : $default;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -276,7 +272,7 @@ class Session implements \Serializable
|
|
|
$this->start();
|
|
|
}
|
|
|
|
|
|
- $this->attributes['_flash'][$name] = $value;
|
|
|
+ $this->flashes[$name] = $value;
|
|
|
unset($this->oldFlashes[$name]);
|
|
|
}
|
|
|
|
|
@@ -293,7 +289,7 @@ class Session implements \Serializable
|
|
|
$this->start();
|
|
|
}
|
|
|
|
|
|
- return array_key_exists($name, $this->attributes['_flash']);
|
|
|
+ return array_key_exists($name, $this->flashes);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -307,7 +303,7 @@ class Session implements \Serializable
|
|
|
$this->start();
|
|
|
}
|
|
|
|
|
|
- unset($this->attributes['_flash'][$name]);
|
|
|
+ unset($this->flashes[$name]);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -319,7 +315,7 @@ class Session implements \Serializable
|
|
|
$this->start();
|
|
|
}
|
|
|
|
|
|
- $this->attributes['_flash'] = array();
|
|
|
+ $this->flashes = array();
|
|
|
$this->oldFlashes = array();
|
|
|
}
|
|
|
|
|
@@ -329,11 +325,13 @@ class Session implements \Serializable
|
|
|
$this->start();
|
|
|
}
|
|
|
|
|
|
- if (isset($this->attributes['_flash'])) {
|
|
|
- $this->attributes['_flash'] = array_diff_key($this->attributes['_flash'], $this->oldFlashes);
|
|
|
- }
|
|
|
+ $this->flashes = array_diff_key($this->flashes, $this->oldFlashes);
|
|
|
|
|
|
- $this->storage->write('_symfony2', $this->attributes);
|
|
|
+ $this->storage->write('_symfony2', array(
|
|
|
+ 'attributes' => $this->attributes,
|
|
|
+ 'flashes' => $this->flashes,
|
|
|
+ 'locale' => $this->locale,
|
|
|
+ ));
|
|
|
}
|
|
|
|
|
|
public function __destruct()
|
|
@@ -354,4 +352,13 @@ class Session implements \Serializable
|
|
|
$this->attributes = array();
|
|
|
$this->started = false;
|
|
|
}
|
|
|
+
|
|
|
+ private function setPhpDefaultLocale($locale)
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ \Locale::setDefault($this->locale);
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ // means that intl is not installed.
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|