mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-12 04:23:19 +00:00
Fix setting cookie
This commit is contained in:
@@ -14,7 +14,9 @@ namespace Alchemy\Phrasea\Core\Event\Subscriber;
|
|||||||
use Silex\Application;
|
use Silex\Application;
|
||||||
use Symfony\Component\HttpKernel\KernelEvents;
|
use Symfony\Component\HttpKernel\KernelEvents;
|
||||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
|
use Symfony\Component\HttpFoundation\Cookie;
|
||||||
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
||||||
|
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
|
||||||
|
|
||||||
class PhraseaLocaleSubscriber implements EventSubscriberInterface
|
class PhraseaLocaleSubscriber implements EventSubscriberInterface
|
||||||
{
|
{
|
||||||
@@ -34,18 +36,13 @@ class PhraseaLocaleSubscriber implements EventSubscriberInterface
|
|||||||
// symfony locale is set on 16 priority, let's override it
|
// symfony locale is set on 16 priority, let's override it
|
||||||
array('addLocale', 17),
|
array('addLocale', 17),
|
||||||
array('addLocale', 15),
|
array('addLocale', 15),
|
||||||
array('removePhraseanetLocale', 14),
|
|
||||||
),
|
),
|
||||||
|
KernelEvents::RESPONSE => array(
|
||||||
|
array('addLocaleCookie', 8)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function removePhraseanetLocale(GetResponseEvent $event)
|
|
||||||
{
|
|
||||||
if (isset($this->locale)) {
|
|
||||||
unset($this->locale);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addLocale(GetResponseEvent $event)
|
public function addLocale(GetResponseEvent $event)
|
||||||
{
|
{
|
||||||
if (isset($this->locale)) {
|
if (isset($this->locale)) {
|
||||||
@@ -66,7 +63,7 @@ class PhraseaLocaleSubscriber implements EventSubscriberInterface
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->app['locale'] = $this->locale = $this->app->share(function(Application $app) use ($event) {
|
$this->app['locale'] = $this->app->share(function(Application $app) use ($event) {
|
||||||
if (isset($app['phraseanet.registry'])) {
|
if (isset($app['phraseanet.registry'])) {
|
||||||
$event->getRequest()->setDefaultLocale(
|
$event->getRequest()->setDefaultLocale(
|
||||||
$app['phraseanet.registry']->get('GV_default_lng', 'en_GB')
|
$app['phraseanet.registry']->get('GV_default_lng', 'en_GB')
|
||||||
@@ -102,8 +99,16 @@ class PhraseaLocaleSubscriber implements EventSubscriberInterface
|
|||||||
return $event->getRequest()->getLocale();
|
return $event->getRequest()->getLocale();
|
||||||
});
|
});
|
||||||
|
|
||||||
\phrasea::use_i18n($this->app['locale']);
|
$this->locale = $this->app['locale'];
|
||||||
|
\phrasea::use_i18n($this->locale);
|
||||||
|
}
|
||||||
|
|
||||||
$event->getResponse()->headers->setCookie(new Cookie('locale', $this->app['locale'], 0, '/', null, false, false));
|
public function addLocaleCookie(FilterResponseEvent $event)
|
||||||
|
{
|
||||||
|
$cookies = $event->getRequest()->cookies;
|
||||||
|
|
||||||
|
if (isset($this->locale) && (false === $cookies->has('locale') || $cookies->get('locale') !== $this->locale)) {
|
||||||
|
$event->getResponse()->headers->setCookie(new Cookie('locale', $this->locale, 0, '/', null, false, false));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -57,6 +57,23 @@ class PhraseaLocaleSubscriberTest extends \PhraseanetPHPUnitAbstract
|
|||||||
$this->assertEquals('fr_FR', $client->getResponse()->getContent());
|
$this->assertEquals('fr_FR', $client->getResponse()->getContent());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testCookieIsSet()
|
||||||
|
{
|
||||||
|
$client = new Client(self::$DI['app']);
|
||||||
|
$client->request('GET', '/', array(), array(), array('HTTP_ACCEPT_LANGUAGE' => 'fr-FR,fr;q=0.9'));
|
||||||
|
|
||||||
|
$settedCookie = null;
|
||||||
|
foreach($client->getResponse()->headers->getCookies() as $cookie) {
|
||||||
|
if($cookie->getName() === 'locale') {
|
||||||
|
$settedCookie = $cookie;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->assertNotNull($settedCookie);
|
||||||
|
$this->assertEquals('fr_FR', $settedCookie->getValue());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @covers Alchemy\Phrasea\Application
|
* @covers Alchemy\Phrasea\Application
|
||||||
*/
|
*/
|
||||||
|
@@ -31,7 +31,9 @@ define([
|
|||||||
$leftBlock : $(".left-block", this.$bottom),
|
$leftBlock : $(".left-block", this.$bottom),
|
||||||
$rightBlock : $(".right-block", this.$bottom),
|
$rightBlock : $(".right-block", this.$bottom),
|
||||||
fieldsToDelete : [],
|
fieldsToDelete : [],
|
||||||
lng : window.p4.lng || "en",
|
lng : function() {
|
||||||
|
return typeof p4 === "undefined" ? "en" : (p4.lng || "en");
|
||||||
|
},
|
||||||
resizeListBlock: function () {
|
resizeListBlock: function () {
|
||||||
var listBlock = $(".list-block", AdminFieldApp.$leftBlock);
|
var listBlock = $(".list-block", AdminFieldApp.$leftBlock);
|
||||||
listBlock.height(AdminFieldApp.$window.height() - listBlock.offset().top - 10);
|
listBlock.height(AdminFieldApp.$window.height() - listBlock.offset().top - 10);
|
||||||
|
@@ -35,7 +35,7 @@ define([
|
|||||||
render: function() {
|
render: function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
var template = _.template($("#edit_template").html(), {
|
var template = _.template($("#edit_template").html(), {
|
||||||
lng: AdminFieldApp.lng,
|
lng: AdminFieldApp.lng(),
|
||||||
field: this.model.toJSON(),
|
field: this.model.toJSON(),
|
||||||
vocabularyTypes: AdminFieldApp.vocabularyCollection.toJSON(),
|
vocabularyTypes: AdminFieldApp.vocabularyCollection.toJSON(),
|
||||||
modelErrors: AdminFieldApp.errorManager.getModelError(this.model),
|
modelErrors: AdminFieldApp.errorManager.getModelError(this.model),
|
||||||
|
Reference in New Issue
Block a user