Files
Phraseanet/lib/Alchemy/Phrasea/Controller/Admin/Dashboard.php
Romain Neutron e233e5afa6 Merge branch '3.8'
Conflicts:
	lib/Alchemy/Phrasea/Command/Developer/JavascriptBuilder.php
	lib/Alchemy/Phrasea/Controller/Prod/Basket.php
	lib/Alchemy/Phrasea/Core/Provider/TaskManagerServiceProvider.php
	lib/classes/Exception/Feed/ItemNotFound.php
	lib/classes/Exception/Feed/PublisherNotFound.php
	lib/classes/Feed/Abstract.php
	lib/classes/Feed/Adapter.php
	lib/classes/Feed/Aggregate.php
	lib/classes/Feed/Collection.php
	lib/classes/Feed/CollectionInterface.php
	lib/classes/Feed/Entry/Adapter.php
	lib/classes/Feed/Entry/Collection.php
	lib/classes/Feed/Entry/Interface.php
	lib/classes/Feed/Entry/Item.php
	lib/classes/Feed/Entry/ItemInterface.php
	lib/classes/Feed/Interface.php
	lib/classes/Feed/Link.php
	lib/classes/Feed/LinkInterface.php
	lib/classes/Feed/Publisher/Adapter.php
	lib/classes/Feed/Publisher/Interface.php
	lib/classes/Feed/Token.php
	lib/classes/Feed/TokenAggregate.php
	lib/classes/Feed/XML/Abstract.php
	lib/classes/Feed/XML/Atom.php
	lib/classes/Feed/XML/Cooliris.php
	lib/classes/Feed/XML/Interface.php
	lib/classes/Feed/XML/RSS.php
	lib/classes/Feed/XML/RSS/ImageInterface.php
	lib/classes/http/request.php
	lib/classes/module/console/schedulerStart.php
	lib/classes/module/console/schedulerState.php
	lib/classes/module/console/schedulerStop.php
	lib/classes/module/console/taskState.php
	lib/classes/module/console/tasklist.php
	lib/classes/module/console/taskrun.php
	lib/classes/registry.php
	lib/classes/registryInterface.php
	lib/classes/set/order.php
	lib/classes/system/url.php
	lib/classes/task/Scheduler.php
	lib/classes/task/appboxAbstract.php
	lib/classes/task/databoxAbstract.php
	lib/classes/task/manager.php
	lib/classes/task/period/RecordMover.php
	lib/classes/task/period/apibridge.php
	lib/classes/task/period/archive.php
	lib/classes/task/period/cindexer.php
	lib/classes/task/period/emptyColl.php
	lib/classes/task/period/ftp.php
	lib/classes/task/period/ftpPull.php
	lib/classes/task/period/subdef.php
	lib/classes/task/period/test.php
	lib/classes/task/period/writemeta.php
	lib/conf.d/PhraseaFixture/AbstractWZ.php
	lib/conf.d/PhraseaFixture/Basket/LoadFiveBaskets.php
	lib/conf.d/PhraseaFixture/Basket/LoadOneBasket.php
	lib/conf.d/PhraseaFixture/Basket/LoadOneBasketEnv.php
	lib/conf.d/PhraseaFixture/Lazaret/LoadOneFile.php
	lib/conf.d/PhraseaFixture/Story/LoadOneStory.php
	lib/conf.d/PhraseaFixture/UsrLists/ListAbstract.php
	lib/conf.d/PhraseaFixture/UsrLists/UsrList.php
	lib/conf.d/PhraseaFixture/UsrLists/UsrListEntry.php
	lib/conf.d/PhraseaFixture/UsrLists/UsrListOwner.php
	lib/conf.d/PhraseaFixture/ValidationParticipant/LoadOneParticipant.php
	lib/conf.d/PhraseaFixture/ValidationParticipant/LoadParticipantWithSession.php
	lib/conf.d/PhraseaFixture/ValidationSession/LoadOneValidationSession.php
2014-01-06 15:38:14 +01:00

168 lines
5.3 KiB
PHP

<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2014 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\Phrasea\Notification\Receiver;
use Alchemy\Phrasea\Notification\Mail\MailTest;
use Alchemy\Phrasea\Exception\InvalidArgumentException;
use Silex\Application;
use Silex\ControllerProviderInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class Dashboard implements ControllerProviderInterface
{
public function connect(Application $app)
{
$app['controller.admin.dashboard'] = $this;
$controllers = $app['controllers_factory'];
$controllers->before(function (Request $request) use ($app) {
$app['firewall']->requireAdmin();
});
$controllers->get('/', 'controller.admin.dashboard:slash')
->bind('admin_dashbord');
$controllers->post('/flush-cache/', 'controller.admin.dashboard:flush')
->bind('admin_dashboard_flush_cache');
$controllers->post('/send-mail-test/', 'controller.admin.dashboard:sendMail')
->bind('admin_dashboard_test_mail');
$controllers->post('/reset-admin-rights/', 'controller.admin.dashboard:resetAdminRights')
->bind('admin_dashboard_reset_admin_rights');
$controllers->post('/add-admins/', 'controller.admin.dashboard:addAdmins')
->bind('admin_dashboard_add_admins');
return $controllers;
}
/**
* Display admin dashboard page
*
* @param Application $app
* @param Request $request
* @return Response
*/
public function slash(Application $app, Request $request)
{
switch ($emailStatus = $request->query->get('email')) {
case 'sent';
$emailStatus = $app->trans('Mail sent');
break;
case 'error':
$emailStatus = $app->trans('Could not send email');
break;
}
$parameters = [
'cache_flushed' => $request->query->get('flush_cache') === 'ok',
'admins' => \User_Adapter::get_sys_admins($app),
'email_status' => $emailStatus,
];
return $app['twig']->render('admin/dashboard.html.twig', $parameters);
}
/**
* Flush all cash services
*
* @param Application $app
* @param Request $request
* @return RedirectResponse
*/
public function flush(Application $app, Request $request)
{
if ($app['phraseanet.cache-service']->flushAll()) {
return $app->redirectPath('admin_dashbord', ['flush_cache' => 'ok']);
}
return $app->redirectPath('admin_dashbord', ['flush_cache' => 'ko']);
}
/**
* Test a mail address
*
* @param Application $app
* @param Request $request
* @return RedirectResponse
*/
public function sendMail(Application $app, Request $request)
{
if (null === $mail = $request->request->get('email')) {
$app->abort(400, 'Bad request missing email parameter');
};
if (!\Swift_Validate::email($request->request->get('email'))) {
$app->abort(400, 'Bad request missing email parameter');
};
try {
$receiver = new Receiver(null, $mail);
} catch (InvalidArgumentException $e) {
return $app->redirectPath('admin_dashbord', ['email' => 'not-sent']);
}
$mail = MailTest::create($app, $receiver);
$app['notification.deliverer']->deliver($mail);
$app['swiftmailer.spooltransport']->getSpool()->flushQueue($app['swiftmailer.transport']);
return $app->redirectPath('admin_dashbord', ['email' => 'sent']);
}
/**
* Reset admin rights
*
* @param Application $app
* @param Request $request
* @return RedirectResponse
*/
public function resetAdminRights(Application $app, Request $request)
{
$app['manipulator.acl']->resetAdminRights(array_map(function ($id) use ($app) {
return \User_Adapter::getInstance($id, $app);
}, array_keys(\User_Adapter::get_sys_admins($app))));
return $app->redirectPath('admin_dashbord');
}
/**
* Grant to an user admin rights
*
* @param Application $app
* @param Request $request
* @return RedirectResponse
*/
public function addAdmins(Application $app, Request $request)
{
if (count($admins = $request->request->get('admins', [])) > 0) {
if (!in_array($app['authentication']->getUser()->get_id(), $admins)) {
$admins[] = $app['authentication']->getUser()->get_id();
}
if ($admins > 0) {
\User_Adapter::set_sys_admins($app, array_filter($admins));
$app['manipulator.acl']->resetAdminRights(array_map(function ($id) use ($app) {
return \User_Adapter::getInstance($id, $app);
}, array_keys(\User_Adapter::get_sys_admins($app))));
}
}
return $app->redirectPath('admin_dashbord');
}
}