<?php
declare(strict_types = 1);
namespace AppBundle\Controller;
use AppBundle\Entity\Instance;
use AppBundle\Entity\InstanceUser;
use AppBundle\Entity\Language;
use AppBundle\Entity\User;
use CodersLab\Lms\SharedKernel\Application\Command\UpdateUserLanguage;
use CodersLab\Lms\SharedKernel\Application\SecurityContext;
use CodersLab\Lms\SharedKernel\Domain\Bus\CommandBus;
use CodersLab\Lms\SharedKernel\Domain\IdentityAccess\UserLanguage;
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class DefaultController extends AbstractController
{
protected ContainerBagInterface $params;
private CommandBus $commandBus;
private SecurityContext $securityContext;
public function __construct(ContainerBagInterface $params, CommandBus $commandBus, SecurityContext $securityContext)
{
$this->params = $params;
$this->commandBus = $commandBus;
$this->securityContext = $securityContext;
}
/**
* @Route("/admin", name="homepage")
* @param SessionInterface $session
* @return Response
*/
public function indexAction(): Response
{
$user = $this->getUser();
$showGitHubConnectionMessage = false;
if ($user instanceof User) {
$instance = null;
if ($instance instanceof Instance) {//jak dla mnie ten if siÄ™ nigdy nie wykona ;]
$language = $instance->getLanguage();
if ($language instanceof Language) {
return $this->redirectToRoute(
'language',
['id' => $language->getId(), 'instance' => $instance->getId()]
);
}
}
$userInstances = $user->getParticipations();
/** @var InstanceUser $instance */
foreach ($userInstances as $instance) {
$language = $instance->getInstance()->getLanguage();
if ($language->isGithubRequired()) {
$showGitHubConnectionMessage = true;
break;
}
}
}
return $this->render('default/index.html.twig', [
'showGitHubConnectionMessage' => $user->getGithub() === null && $showGitHubConnectionMessage,
]);
}
/**
* @Route("/set_lang/{lang}", name="set_lang")
* @param string $lang
*
* @return Response
*/
public function setLangAction(Request $request, string $lang)
{
if ($this->securityContext->isUserLogged()) {
$this->commandBus->dispatch(new UpdateUserLanguage(
(string)$this->securityContext->getLoggedUserId(),
new UserLanguage($lang)
));
}
$request->getSession()->set('_locale', $lang);
$request->setLocale($lang);
$redirectUrl = $request->headers->get('referer');
return $redirectUrl ? $this->redirect($request->headers->get('referer')) : new Response();
}
}