mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 15:33:15 +00:00
Move init session to session manager subscriber
This commit is contained in:
@@ -399,7 +399,6 @@ class Application extends SilexApplication
|
|||||||
|
|
||||||
$this['dispatcher'] = $this->share(
|
$this['dispatcher'] = $this->share(
|
||||||
$this->extend('dispatcher', function ($dispatcher, Application $app) {
|
$this->extend('dispatcher', function ($dispatcher, Application $app) {
|
||||||
$dispatcher->addListener(KernelEvents::REQUEST, array($app, 'initSession'), 254);
|
|
||||||
$dispatcher->addListener(KernelEvents::RESPONSE, array($app, 'addUTF8Charset'), -128);
|
$dispatcher->addListener(KernelEvents::RESPONSE, array($app, 'addUTF8Charset'), -128);
|
||||||
$dispatcher->addSubscriber($app['phraseanet.logout-subscriber']);
|
$dispatcher->addSubscriber($app['phraseanet.logout-subscriber']);
|
||||||
$dispatcher->addSubscriber($app['phraseanet.locale-subscriber']);
|
$dispatcher->addSubscriber($app['phraseanet.locale-subscriber']);
|
||||||
@@ -511,25 +510,6 @@ class Application extends SilexApplication
|
|||||||
return $this->redirect($this->url($route, $parameters));
|
return $this->redirect($this->url($route, $parameters));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function initSession(GetResponseEvent $event)
|
|
||||||
{
|
|
||||||
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false !== stripos($event->getRequest()->server->get('HTTP_USER_AGENT'), 'flash')
|
|
||||||
&& $event->getRequest()->getRequestUri() === '/prod/upload/') {
|
|
||||||
|
|
||||||
if (null !== $sessionId = $event->getRequest()->request->get('php_session_id')) {
|
|
||||||
|
|
||||||
$request = $event->getRequest();
|
|
||||||
$request->cookies->set($this['session']->getName(), $sessionId);
|
|
||||||
|
|
||||||
return $request;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addUTF8Charset(FilterResponseEvent $event)
|
public function addUTF8Charset(FilterResponseEvent $event)
|
||||||
{
|
{
|
||||||
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
|
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
|
||||||
|
@@ -13,13 +13,14 @@ namespace Alchemy\Phrasea\Core\Event\Subscriber;
|
|||||||
|
|
||||||
use Alchemy\Phrasea\Application;
|
use Alchemy\Phrasea\Application;
|
||||||
use Entities\SessionModule;
|
use Entities\SessionModule;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Symfony\Component\HttpKernel\HttpKernelInterface;
|
||||||
use Symfony\Component\HttpKernel\KernelEvents;
|
use Symfony\Component\HttpKernel\KernelEvents;
|
||||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
||||||
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
||||||
|
|
||||||
/**log real human activity on application, to keep session alive*/
|
|
||||||
class SessionManagerSubscriber implements EventSubscriberInterface
|
class SessionManagerSubscriber implements EventSubscriberInterface
|
||||||
{
|
{
|
||||||
private $app;
|
private $app;
|
||||||
@@ -32,10 +33,31 @@ class SessionManagerSubscriber implements EventSubscriberInterface
|
|||||||
public static function getSubscribedEvents()
|
public static function getSubscribedEvents()
|
||||||
{
|
{
|
||||||
return array(
|
return array(
|
||||||
KernelEvents::REQUEST => array('checkSessionActivity', -112),
|
KernelEvents::REQUEST => array(
|
||||||
|
array('initSession', Application::EARLY_EVENT),
|
||||||
|
array('checkSessionActivity', Application::LATE_EVENT)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function initSession(GetResponseEvent $event)
|
||||||
|
{
|
||||||
|
if (HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->isFlashUploadRequest($event->getRequest())) {
|
||||||
|
if (null !== $sessionId = $event->getRequest()->request->get('php_session_id')) {
|
||||||
|
|
||||||
|
$request = $event->getRequest();
|
||||||
|
$request->cookies->set($this->app['session']->getName(), $sessionId);
|
||||||
|
|
||||||
|
return $request;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**log real human activity on application, to keep session alive*/
|
||||||
public function checkSessionActivity(GetResponseEvent $event)
|
public function checkSessionActivity(GetResponseEvent $event)
|
||||||
{
|
{
|
||||||
$modulesIds = array(
|
$modulesIds = array(
|
||||||
@@ -49,25 +71,25 @@ class SessionManagerSubscriber implements EventSubscriberInterface
|
|||||||
|
|
||||||
$pathInfo = array_filter(explode('/', $event->getRequest()->getPathInfo()));
|
$pathInfo = array_filter(explode('/', $event->getRequest()->getPathInfo()));
|
||||||
|
|
||||||
if(count($pathInfo) < 1) {
|
if (count($pathInfo) < 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$moduleName = strtolower($pathInfo[1]);
|
$moduleName = strtolower($pathInfo[1]);
|
||||||
if (!array_key_exists($moduleName, $modulesIds) ) {
|
if (!array_key_exists($moduleName, $modulesIds) ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// this route is polled by js in admin/databox to refresh infos (progress bar...)
|
// this route is polled by js in admin/databox to refresh infos (progress bar...)
|
||||||
if (preg_match("#^/admin/databox/[0-9]+/informations/documents/#", $event->getRequest()->getPathInfo()) == 1) {
|
if (preg_match("#^/admin/databox/[0-9]+/informations/documents/#", $event->getRequest()->getPathInfo()) == 1) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// this route is polled by js in admin/tasks to refresh tasks status
|
// this route is polled by js in admin/tasks to refresh tasks status
|
||||||
if ($event->getRequest()->getPathInfo() == "/admin/task-manager/tasks/" && $event->getRequest()->getContentType() == 'json') {
|
if ($event->getRequest()->getPathInfo() == "/admin/task-manager/tasks/" && $event->getRequest()->getContentType() == 'json') {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($this->isFlashUploadRequest($event->getRequest())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
// if we are already disconnected (ex. from another window), quit immediatly
|
// if we are already disconnected (ex. from another window), quit immediatly
|
||||||
if (!($this->app['authentication']->isAuthenticated())) {
|
if (!($this->app['authentication']->isAuthenticated())) {
|
||||||
if ($event->getRequest()->isXmlHttpRequest()) {
|
if ($event->getRequest()->isXmlHttpRequest()) {
|
||||||
@@ -81,7 +103,6 @@ class SessionManagerSubscriber implements EventSubscriberInterface
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$session = $this->app['EM']->find('Entities\Session', $this->app['session']->get('session_id'));
|
$session = $this->app['EM']->find('Entities\Session', $this->app['session']->get('session_id'));
|
||||||
|
|
||||||
$idle = 0;
|
$idle = 0;
|
||||||
@@ -104,7 +125,6 @@ class SessionManagerSubscriber implements EventSubscriberInterface
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$moduleId = $modulesIds[$moduleName];
|
$moduleId = $modulesIds[$moduleName];
|
||||||
|
|
||||||
$session->setUpdated(new \DateTime());
|
$session->setUpdated(new \DateTime());
|
||||||
@@ -119,8 +139,13 @@ class SessionManagerSubscriber implements EventSubscriberInterface
|
|||||||
} else {
|
} else {
|
||||||
$this->app['EM']->persist($session->getModuleById($moduleId)->setUpdated(new \DateTime()));
|
$this->app['EM']->persist($session->getModuleById($moduleId)->setUpdated(new \DateTime()));
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->app['EM']->persist($session);
|
$this->app['EM']->persist($session);
|
||||||
$this->app['EM']->flush();
|
$this->app['EM']->flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function isFlashUploadRequest(Request $request)
|
||||||
|
{
|
||||||
|
return false !== stripos($request->server->get('HTTP_USER_AGENT'), 'flash')
|
||||||
|
&& $request->getRequestUri() === '/prod/upload/';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user