mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-10 19:43:16 +00:00
129 lines
4.4 KiB
PHP
129 lines
4.4 KiB
PHP
<?php
|
|
/*
|
|
* This file is part of Phraseanet
|
|
*
|
|
* (c) 2005-2016 Alchemy
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Alchemy\Phrasea\Controller\Admin;
|
|
|
|
use Alchemy\Geonames\Exception\ExceptionInterface;
|
|
use Alchemy\Geonames\Geoname;
|
|
use Alchemy\Phrasea\Application;
|
|
use Alchemy\Phrasea\Controller\Controller;
|
|
use Alchemy\Phrasea\Model\Entities\Session;
|
|
use Doctrine\ORM\EntityManager;
|
|
use Psr\Log\LoggerInterface;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\Translation\TranslatorInterface;
|
|
|
|
class ConnectedUsersController extends Controller
|
|
{
|
|
/** @var TranslatorInterface */
|
|
private $translator;
|
|
protected $moduleNames;
|
|
/** @var LoggerInterface */
|
|
protected $logger;
|
|
|
|
public function __construct(Application $app)
|
|
{
|
|
parent::__construct($app);
|
|
$this->translator = $app['translator'];
|
|
$this->logger = $app['monolog'];
|
|
}
|
|
|
|
public function listConnectedUsers(Request $request)
|
|
{
|
|
$dql = 'SELECT s FROM Phraseanet:Session s WHERE s.updated > :date ORDER BY s.updated DESC';
|
|
$date = new \DateTime('-2 hours');
|
|
|
|
/** @var EntityManager $manager */
|
|
$manager = $this->app['orm.em'];
|
|
|
|
$query = $manager->createQuery($dql);
|
|
$query->setParameter('date', $date->format('Y-m-d h:i:s'));
|
|
/** @var Session[] $sessions */
|
|
$sessions = $query->getResult();
|
|
|
|
$result = [];
|
|
|
|
foreach ($sessions as $session) {
|
|
$info = '';
|
|
try {
|
|
/** @var Geoname $geoname */
|
|
$geoname = $this->app['geonames.connector']->ip($session->getIpAddress());
|
|
$country = $geoname->get('country');
|
|
$city = $geoname->get('city');
|
|
$region = $geoname->get('region');
|
|
|
|
$countryName = isset($country['name']) ? $country['name'] : null;
|
|
$regionName = isset($region['name']) ? $region['name'] : null;
|
|
|
|
if (null !== $city) {
|
|
$info = $city . ($countryName ? ' (' . $countryName . ')' : null);
|
|
} elseif (null !== $regionName) {
|
|
$info = $regionName . ($countryName ? ' (' . $countryName . ')' : null);
|
|
} elseif (null !== $countryName) {
|
|
$info = $countryName;
|
|
} else {
|
|
$info = '';
|
|
}
|
|
} catch (ExceptionInterface $e) {
|
|
$this->logger->error(
|
|
sprintf("Unable to get IP information for %s", $session->getIpAddress()),
|
|
['exception' => $e]
|
|
);
|
|
}
|
|
|
|
$result[] = [
|
|
'session' => $session,
|
|
'info' => $info,
|
|
];
|
|
}
|
|
|
|
$ret = [
|
|
'sessions' => $result,
|
|
'applications' => array_fill(0, 9, 0),
|
|
];
|
|
|
|
foreach ($result as $session) {
|
|
foreach ($session['session']->getModules() as $module) {
|
|
if (isset($ret['applications'][$module->getModuleId()])) {
|
|
$ret['applications'][$module->getModuleId()]++;
|
|
}
|
|
}
|
|
}
|
|
|
|
return $this->app['twig']->render('admin/connected-users.html.twig', ['data' => $ret]);
|
|
}
|
|
|
|
/**
|
|
* Return module name according to its ID
|
|
*
|
|
* @param integer $appId
|
|
* @return string
|
|
*/
|
|
public function getModuleNameFromId($appId)
|
|
{
|
|
if (null === $this->moduleNames) {
|
|
$translator = $this->translator;
|
|
$this->moduleNames = [
|
|
'0' => $translator->trans('admin::monitor: module inconnu'),
|
|
'1' => $translator->trans('admin::monitor: module production'),
|
|
'2' => $translator->trans('admin::monitor: module client'),
|
|
'3' => $translator->trans('admin::monitor: module admin'),
|
|
'4' => $translator->trans('admin::monitor: module report'),
|
|
'5' => $translator->trans('admin::monitor: module thesaurus'),
|
|
'6' => $translator->trans('admin::monitor: module comparateur'),
|
|
'7' => $translator->trans('admin::monitor: module validation'),
|
|
'8' => $translator->trans('admin::monitor: module upload'),
|
|
];
|
|
}
|
|
|
|
return isset($this->moduleNames[$appId]) ? $this->moduleNames[$appId] : null;
|
|
}
|
|
}
|