src/Controller/DefaultController.php line 340
<?php
namespace App\Controller;
use App\Entity\PlayerSessionhist;
use App\Entity\Scenario;
use App\Entity\TextContentPage;
use App\Entity\Users;
use App\Manager\RestrictedAccessManager;
use App\Manager\StopStudyManager;
use App\Service\Formatting;
use App\Entity\Media;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Persistence\ManagerRegistry;
use HWI\Bundle\OAuthBundle\Security\Http\ResourceOwnerMapLocator;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\RouterInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\OptimisticLockException;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Contracts\Translation\TranslatorInterface;
class DefaultController extends AbstractController
{
const ITEMS_PER_PAGE = 10;
protected ResourceOwnerMapLocator $resourceOwnerMapLocator;
protected array $firewallNames;
public TranslatorInterface $translator;
public function __construct(ResourceOwnerMapLocator $resourceOwnerMapLocator, array $firewallNames, AuthenticationUtils $authenticationUtils, TranslatorInterface $translator, private ManagerRegistry $managerRegistry) {
$this->authenticationUtils = $authenticationUtils;
$this->resourceOwnerMapLocator = $resourceOwnerMapLocator;
$this->firewallNames = $firewallNames;
$this->translator = $translator;
}
/**
* Methods enable translation of error|notice flash messages.
*
* @param $key
* @param array $params
* @param null $domain
* @return mixed
*/
public function trans($key, array $params = [], $domain = null)
{
return $this->translator->trans($key, $params, $domain);
}
public function addFlashMessage($type, $key, array $params = [], $domain = null)
{
$this->addFlash($type, $this->trans($key, $params, $domain));
}
/**
* To test purpose
* @param Request $request
* @return Response
*/
#[Route(path: '/login-google', name: 'login_google', methods: ['GET'])]
public function loginGoogleAction(Request $request): Response
{
$error = $this->authenticationUtils->getLastAuthenticationError();
$key = time();
$session = $request->hasSession() ? $request->getSession() : $this->container->get('request_stack')->getSession();
if ($session) {
if (!$session->isStarted()) {
$session->start();
}
$session->set('_hwi_oauth.registration_error.'.$key, $error);
}
return $this->render('frontend/login_google.html.twig', [
'error' => $error
]);
}
/**
* To test purpose
* @param Request $request
* @return Response
*/
#[Route(path: '/login-linkedin', name: 'login_linkedin', methods: ['GET'])]
public function loginLinkedinAction(Request $request): Response
{
$error = $this->authenticationUtils->getLastAuthenticationError();
$key = time();
$session = $request->hasSession() ? $request->getSession() : $this->container->get('request_stack')->getSession();
if ($session) {
if (!$session->isStarted()) {
$session->start();
}
$session->set('_hwi_oauth.registration_error.'.$key, $error);
}
return $this->render('frontend/login_linkedin.html.twig', [
'error' => $error
]);
}
/**
* @param Request $request
* @return Response
*/
#[Route(path: '/login/check-google', name: 'check_google', methods: ['GET'])]
public function checkGoogleAction(Request $request): RedirectResponse
{
$resourceOwner = $this->getResourceOwnerByName('google');
$accessToken = $resourceOwner->getAccessToken(
$request,
$this->oauthUtils->getServiceAuthUrl($request, $resourceOwner)
);
return $this->redirectToRoute('homepage');
}
/**
* @param Request $request
* @return Response
*/
#[Route(path: '/login/check-linkedin', name: 'check_linkedin', methods: ['GET'])]
public function checkLinkedinAction(Request $request): RedirectResponse
{
$resourceOwner = $this->getResourceOwnerByName('linkedin');
$accessToken = $resourceOwner->getAccessToken(
$request,
$this->oauthUtils->getServiceAuthUrl($request, $resourceOwner)
);
return $this->redirectToRoute('homepage');
}
/**
* @param Request $request
* @return Response
*/
#[Route(path: '/confirm-social-login', name: 'confirm_social_login', methods: ['GET'])]
public function confirmSocialLoginAction(Request $request, RouterInterface $router): Response
{
$session = $request->getSession();
$socialOfferConnection = $session->get('socialOfferConnection', 0);
$socialConnectionService = $session->get('socialConnectionService', '');
$socialId = $session->get('socialId', '');
$socialData = $session->get('socialData', []);
$userUsername = $session->get('userUsername', '');
$session->remove('socialOfferConnection');
$session->remove('socialConnectionService');
$session->remove('socialId');
$session->remove('socialData');
// na porpojeni, po klinuti, ze to dovoluje
$session->set('connectLoginToSocial', 1);
$session->set('connectAsSocialService', $socialConnectionService);
$session->set('connectSocialId', $socialId);
$session->set('connectByUsername', $userUsername);
// after login do not return to confirm page
$session->set('_security.main.target_path', $router->generate('homepage'));
return $this->render('frontend/login_connect_to_social.html.twig', [
'socialId' => $socialId,
'socialService' => $socialConnectionService,
'socialUserName' => $socialData['name'],
'socialUserEmail' => $socialData['email'],
'socialUserPicture' => $socialData['picture'],
'userUsername' => $userUsername,
]);
}
public function getResourceOwnerByName(string $name)
{
foreach ($this->firewallNames as $firewall) {
if (!$this->resourceOwnerMapLocator->has($firewall)) {
continue;
}
$ownerMap = $this->resourceOwnerMapLocator->get($firewall);
if ($resourceOwner = $ownerMap->getResourceOwnerByName($name)) {
return $resourceOwner;
}
}
throw new NotFoundHttpException(sprintf("No resource owner with name '%s'.", $name));
}
/**
* @param Request $request
* @return RedirectResponse
*/
#[Route(path: '/', name: 'default', methods: ['GET'])]
public function indexAction(): RedirectResponse
{
// var_dump('hhnbbbbhhh');exit;
// $translated = $this->get('translator')->trans("Hello");
// var_dump($translated);
// POZOR vede na homepage backoffice
/* return $this->render('default/index.html.twig', [
'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR,
]);*/
return $this->redirectToRoute('homepage');
}
/**
* @param Request $request
* @return Response
*/
#[Route(path: '/contacts', name: 'kontakty', methods: ['GET'])]
public function showContactAction(): Response
{
// * todo opravit routu { "en": "/contacts", "cs": "/kontakty"}
$hp = $this->managerRegistry->getRepository(TextContentPage::class)->findOneBy(array('alias'=>'contacts'));
$repository = $this->managerRegistry->getRepository(TextContentPage::class);
$qb = $repository->createQueryBuilder('t')
->select('t.alias', 't.content', 't.display')
->where('t.display = TRUE')
;
$query = $qb->getQuery();
$activeRoutes = $query->getResult();
if ($hp) {
$body = $hp->getContent();
return $this->render('frontend/kontakty.html.twig', [
'title' => $hp->getTitle(),
'content' => $body,
'activeRoutes' => $activeRoutes
]);
} else {
throw $this->createNotFoundException('Page not found');
}
}
/**
*
* @param Request $request
* @return Response|null
*/
#[Route(path: '/about', name: 'o-projektu', methods: ['GET'])]
public function showProjectAction(): Response
{
// * todo opravit routu { "en": "/about", "cs": "/o-projektu"}
$hp = $this->managerRegistry->getRepository(TextContentPage::class)->findOneBy(array('alias'=>'about'));
$repository = $this->managerRegistry->getRepository(TextContentPage::class);
$qb = $repository->createQueryBuilder('t')
->select('t.alias', 't.content', 't.display')
->where('t.display = TRUE')
;
$query = $qb->getQuery();
$activeRoutes = $query->getResult();
if ($hp) {
$body = $hp->getContent();
return $this->render('frontend/o_projektu.html.twig', [
'title' => $hp->getTitle(),
'content' => $body,
'activeRoutes' => $activeRoutes
]);
} else {
throw $this->createNotFoundException('Page not found');
}
}
// /**
// * @Route("/{page}", name="page" )
// * @param Request $request
// * @param string $page
// * @return Response
// */
// public function showPageAction(Request $request, $page = "")
// {
//
// /* $user = $this->getDoctrine()->getRepository(Users::class)->findOneBy(array('id' => 7));
// $token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
// $this->get('security.token_storage')->setToken($token);
// $this->get('session')->set('_security_main', serialize($token));
// dump( $this->get('session') );
// dump( $user );
// */
//
// $texts = $this->getDoctrine()->getRepository(TextContentPage::class)->findAll();
//
// foreach($texts as $text){
// if (!empty($page) && $page == "kontakty" && $text->getTitle() == "Kontakty"){
// $title = "Kontakty";
// $body = $text->getContent();
// } elseif (!empty($page) && $page == "o-projektu" && $text->getTitle() == "O projektu"){
// $title = "O projektu";
// $body = $text->getContent();
// } else {
// continue;
//// $title = "Nadpis";
//// $body = '';
// }
// return $this->render('frontend/page.html.twig', [
// 'title' => $title,
// 'content' => $body,
// ]);
// }
// }
//
// /**
// * @Route("/microsite/", name="microsite" )
// * @Method ({"GET"})
// * @param Request $request
// * @return Response
// */
// public function microSiteAction(Request $request)
// {
// return $this->render('frontend/staticPages/microsite.html.twig');
// }
/**
* @param Request $request
* @param RestrictedAccessManager $restrictedAccessManager
* @param Formatting $formatting
* @return Response
*/
#[Route(path: '/home', name: 'homepage', methods: ['GET'])]
public function showAction(Request $request, RestrictedAccessManager $restrictedAccessManager, Formatting $formatting): Response
{
$em = $this->managerRegistry->getManager();
// TODO pridat / zmenit na NejhranÄ›jÅ¡Ã a Virtuálnà pacient mÄ›sÃce
// napojit media pomoci subquery dle https://stackoverflow.com/questions/34768821/join-subquery-with-doctrine-2-dbal
$repository = $this->managerRegistry->getRepository(Scenario::class);
$qb = $repository->createQueryBuilder('s')
// ->select( array('s', 'm') )
// ->leftJoin(Media::class, 'm', 'WITH', 'm.scenarioId = s.id')->where('m.isDeleted=0')->andWhere('m.active=1')
;
$qb = $qb->where(
$qb->expr()->eq('s.isDeleted', ':isDeleted'),
$qb->expr()->eq('s.state', ':state')
)
->setParameter('isDeleted', 0)
->setParameter('state', 1)
->setMaxResults(3)// TODO docasne, nez budou k dispozici NejhranÄ›jÅ¡Ã a Virtuálnà pacient mÄ›sÃce
// ->setFirstResult(10)
->orderBy('s.createdAt', 'DESC');
// example4: retrieve the DQL string of what was defined in QueryBuilder - dump q
// $q = $qb->getDql();
// example5: retrieve the associated Query object with the processed DQL
// $qb->setParameters(array(1 => 'a', 2 => 'admin'));
if (($user = $this->getUser()) && (($user->getRoles() == ['ROLE_ADMIN']))) {
// to admin show restricted
} else {
$repository = $this->managerRegistry->getRepository(Scenario::class);
$existsRestricted = $repository->findBy(['restricted' => true], null, 1);
// if exists restricted add condition
if (count($existsRestricted)) {
try {
$ip = $restrictedAccessManager->getIpAddress($request);
$isAllowedToRestricted = $restrictedAccessManager->allowedCountry($ip);
if (!$isAllowedToRestricted) {
$qb = $qb->andWhere('s.restricted=false');
}
} catch (\Exception $e) {
$this->addFlashMessage('error', 'user_location_check_error', [], 'controller');
$qb = $qb->andWhere('s.restricted=false'); // user not checked do not show
}
}
}
// $qb instanceof QueryBuilder
$query = $qb->getQuery();
// Set additional Query options
// $query->setQueryHint('foo', 'bar');
// $query->useResultCache('my_cache_id');
// Execute Query
// $result = $query->getResult();
// $single = $query->getSingleResult();
// $array = $query->getArrayResult();
// $scalar = $query->getScalarResult();
// $singleScalar = $query->getSingleScalarResult();
// dump($array);
//$activeScenarios = $query->getResult();
//$scenarios = [];
// user s pravami na in progress
if (($user = $this->getUser()) && (($user->getRoles() == ['ROLE_ADMIN']) || ($user->getRoles() == ['ROLE_REVIEWER']))) {
$qb = $qb->where(
$qb->expr()->eq('s.isDeleted', ':isDeleted'),
$qb->expr()->neq('s.state', ':state')
)
->setParameter('isDeleted', 0)
->setParameter('state', 0)
->setMaxResults(3)// TODO docasne, nez budou k dispozici NejhranÄ›jÅ¡Ã a Virtuálnà pacient mÄ›sÃce
// ->setFirstResult(10)
->orderBy('s.createdAt', 'DESC');
$query = $qb->getQuery();
//$scenarios = $query->getResult();
}
/*foreach ($activeScenarios as $activeScenario) {
array_push($scenarios, $activeScenario);
}*/
$scenarios = $query->getResult();
$ids = array(0); // 0 .. pro praznou IN podminku
foreach ($scenarios as $item) {
$ids[] = $item->getId(); // idcka jen nalezenych scenarios
// $item->setAnnotationImg( $item->getId() . ' foo.jpg' );
}
// dump($scenarios);
// media - vsechny aktivni
$repository = $this->managerRegistry->getRepository(Media::class);
$qb = $repository->createQueryBuilder('m');
$qb = $qb->where($qb->expr()->in('m.scenarioId', $ids), $qb->expr()->isNotNull('m.filename'), $qb->expr()->eq('m.category', ':category'), $qb->expr()->eq('m.isDeleted', ':isDeleted'), $qb->expr()->eq('m.active', ':active'))
->setParameter('category', 1)// vybereme jen obrazky
->setParameter('isDeleted', 0)
->setParameter('active', 1);
$query = $qb->getQuery();
$media_scenario = $query->getResult();
/* $media_scenario = array();
foreach ($media as $item) {
if (empty($media_scenario) && !empty($item->getScenario())) $media_scenario = $item; // jen 1. nalezeny
}*/
//dump($media_scenario);
foreach ($media_scenario as $item) {
if (!empty($item->getScenario())) { // && !empty($item->getScenario()->getId()->getAnnotationImg())
// $scenarios->findBy( "id", $item->getScenario()->getId() )->setAnnotationImg( $item->getFilename() );
// dump( $scenarios->findBy( "id", 1 ) );
foreach ($scenarios as $scenario) {
if ($item->getScenario()->getId() == $scenario->getId() && $item->getMediaFlag() == Media::MEDIA_FLAG_SCENARIO_INTRO ) {
$scenario->setAnnotationImg($item->getFilename());
$scenario->setAnnotationImgName($item->getMediaName());
break; // jen jeden
}
}
}
}
// dump($scenarios);
//dump($media_scenario);
// tabulka se seznamem nejhranejsich Pozice PÅ™ezdÃvka Absolvovaných her Celkové skóre
$repository = $this->managerRegistry->getRepository(PlayerSessionhist::class); //->getRepository(PlayerSessionhist::class)
$qb = $repository->createQueryBuilder('p')//
->select(array('u.id', 'u.username', 'COUNT(p.scenario) scenario_count', 'SUM(p.score) score_sum'))// 'p', 'u', ... nesmi kvuli group by
->innerJoin('p.users', 'u')//, 'WITH', 'u.id = :1', 'u.id'
->where('p.isEnded = 1 AND u.isDeleted = FALSE')
->setMaxResults(5)
->groupBy('u.id')
->orderBy('score_sum', 'DESC')
// ->addOrderBy('scenario_count') // sekundarne - podle toho kdo dosahl skore s nejmensim poctem her
;
$query = $qb->getQuery();
$player = $query->getResult();
//dump($player);
// zÃskánà textu pro homepage + render
$hp = $this->managerRegistry->getRepository(TextContentPage::class)->findOneBy(array('alias'=>'home'));
$session = $request->getSession();
$repository = $this->managerRegistry->getRepository(TextContentPage::class);
$qb = $repository->createQueryBuilder('t')
->select('t.alias', 't.display')
->where('t.display = TRUE')
->orderBy('t.id', 'ASC')
;
$query = $qb->getQuery();
$activeRoutes = $query->getResult();
$session->set('activeRoutes', $activeRoutes);
$userAuth = null;
if ($this->getUser()){
$isLogged = $em->getRepository(Users::class)->findOneBy(array('username' => $this->getUser()->getUserIdentifier()));
$repository = $this->managerRegistry->getRepository(PlayerSessionhist::class); //->getRepository(PlayerSessionhist::class)
$qb = $repository->createQueryBuilder('p')//
->select(array('u.id', 'u.username', 'COUNT(p.scenario) scenario_count', 'SUM(p.score) score_sum'))// 'p', 'u', ... nesmi kvuli group by
->innerJoin('p.users', 'u')//, 'WITH', 'u.id = :1', 'u.id'
->where('p.isEnded = 1 AND u.isDeleted = FALSE AND u.id ='.$isLogged->getId())
->groupBy('u.id')
;
$query = $qb->getQuery();
$userAuth = $query->getResult();
}
if ($hp) {
$body = $hp->getContent();
return $this->render('frontend/index.html.twig', [
// 'body_text' => "Hello world",
'scenarios' => $scenarios,
'media_scenario' => $media_scenario,
'player' => $player,
'content' => $body,
'userAuth' => $userAuth,
'activeRoutes' => $activeRoutes
]);
} else {
throw $this->createNotFoundException('Page not found');
}
}
/**
* @param Request $request
* @param RestrictedAccessManager $restrictedAccessManager
* @param Formatting $formatting
* @return Response
*/
#[Route(path: '/vp', name: 'virtual-patients', methods: ['GET', 'POST'])]
public function showAllAction(Request $request, RestrictedAccessManager $restrictedAccessManager, Formatting $formatting): Response
{
$em = $this->managerRegistry->getManager();
$selectedPage = (int)$request->get('p', 1);
if ($selectedPage <= 0) $selectedPage = 1;
$repository = $this->managerRegistry->getRepository(Scenario::class);
$qb = $repository->createQueryBuilder('s');
$qb = $qb->where(
$qb->expr()->eq('s.isDeleted', ':isDeleted'),
$qb->expr()->eq('s.state', ':state')
);
$qb->setParameter('isDeleted', 0);
$qb->setParameter('state', 1);
if (($user = $this->getUser()) && (($user->getRoles() == ['ROLE_ADMIN']))) {
} else {
$repository = $this->managerRegistry->getRepository(Scenario::class);
$existsRestricted = $repository->findBy(['restricted' => true], null, 1);
// if exists restricted add condition
if (count($existsRestricted)) {
try {
$ip = $restrictedAccessManager->getIpAddress($request);
$isAllowedToRestricted = $restrictedAccessManager->allowedCountry($ip);
if (!$isAllowedToRestricted) {
$qb = $qb->andWhere('s.restricted=false');
}
} catch (\Exception $e) {
$this->addFlashMessage('error', 'user_location_check_error', [], 'controller');
$qb = $qb->andWhere('s.restricted=false'); // user not checked do not show
}
}
}
// user s pravami na in progress
if (($user = $this->getUser()) && (($user->getRoles() == ['ROLE_ADMIN']) || ($user->getRoles() == ['ROLE_REVIEWER']))) {
$qb = $qb->where(
$qb->expr()->eq('s.isDeleted', ':isDeleted'),
$qb->expr()->neq('s.state', ':state')
)
->setParameter('isDeleted', 0)
->setParameter('state', 0)
//->setMaxResults(30)// TODO docasne, nez budou k dispozici NejhranÄ›jÅ¡Ã a Virtuálnà pacient mÄ›sÃce
;
//$scenarios = $query->getResult();
}
$qb->select('count(s.id)');
$totalCount = $qb->getQuery()->getSingleScalarResult();
$qb->select('s');
$qb->setFirstResult(self::ITEMS_PER_PAGE*($selectedPage-1));
$qb->setMaxResults(self::ITEMS_PER_PAGE);
$qb->orderBy('s.createdAt', 'DESC');
$query = $qb->getQuery();
$scenarios = $query->getResult();
$ids = array(0); // 0 .. pro praznou IN podminku
foreach ($scenarios as $item) {
$ids[] = $item->getId(); // idcka jen nalezenych scenarios
}
// media - vsechny aktivni
$repository = $this->managerRegistry->getRepository(Media::class);
$qb = $repository->createQueryBuilder('m');
$qb = $qb->where($qb->expr()->in('m.scenarioId', $ids), $qb->expr()->isNotNull('m.filename'),
$qb->expr()->eq('m.category', ':category'),
$qb->expr()->eq('m.isDeleted', ':isDeleted'),
$qb->expr()->eq('m.active', ':active'),
$qb->expr()->eq('m.mediaFlag', ':mediaFlag'))
->setParameter('category', 1)// vybereme jen obrazky
->setParameter('isDeleted', 0)
->setParameter('active', 1)
->setParameter('mediaFlag', Media::MEDIA_FLAG_SCENARIO_INTRO);
$query = $qb->getQuery();
$media_scenario = $query->getResult();
foreach ($media_scenario as $item) {
if (!empty($item->getScenario())) { // && !empty($item->getScenario()->getId()->getAnnotationImg())
// $scenarios->findBy( "id", $item->getScenario()->getId() )->setAnnotationImg( $item->getFilename() );
// dump( $scenarios->findBy( "id", 1 ) );
foreach ($scenarios as $scenario) {
if ($item->getScenario()->getId() == $scenario->getId()) {
$scenario->setAnnotationImg($item->getFilename());
$scenario->setAnnotationImgName($item->getMediaName());
break; // jen jeden
}
}
}
}
return $this->render('frontend/scenario_vypis.html.twig', [
'scenarios' => $scenarios,
'totalCount' => $totalCount,
'totalPages' => ceil($totalCount/self::ITEMS_PER_PAGE),
'currentPage' => $selectedPage,
'searched' => false
]);
}
/**
* @param Request $request
* @return Response
*/
#[Route(path: '/vp/search', name: 'virtual-patients-search', methods: ['GET', 'POST'])]
public function searchScenariosAction(Request $request): Response
{
$session = $request->getSession();
$searchingString = $request->request->get('searchingString');
if ($searchingString === "") {
$selectedPage = $request->get('p', 1);
$repository = $this->managerRegistry->getRepository(Scenario::class);
$qb = $repository->createQueryBuilder('s');
$qb = $qb->where(
$qb->expr()->eq('s.isDeleted', ':isDeleted'),
$qb->expr()->eq('s.state', ':state')
);
$qb->setParameter('isDeleted', 0);
$qb->setParameter('state', 1);
$qb->select('count(s.id)');
$totalCount = $qb->getQuery()->getSingleScalarResult();
$qb->select('s');
$qb->setFirstResult(self::ITEMS_PER_PAGE*($selectedPage-1));
$qb->setMaxResults(self::ITEMS_PER_PAGE);
$qb->orderBy('s.createdAt', 'DESC');
$query = $qb->getQuery();
$scenarios = $query->getResult();
} elseif ($searchingString != null) {
$findWithString = $searchingString;
$session->set('searchingString', $searchingString);
} else {
$findWithString = $session->get('searchingString');
}
if (empty($scenarios)) {
$selectedPage = $request->get('p', 1);
$repository = $this->managerRegistry->getRepository(Scenario::class);
$qb = $repository->createQueryBuilder('s');
$qb = $qb->where(
$qb->expr()->eq('s.isDeleted', ':isDeleted'),
$qb->expr()->eq('s.state', ':state'),
$qb->expr()->like('LOWER(s.title)', ':findWithString')
);
$qb->setParameter('isDeleted', 0);
$qb->setParameter('state', 1);
$qb->setParameter('findWithString', '%' . strtolower($findWithString) . '%');
$qb->select('count(s.id)');
$totalCount = $qb->getQuery()->getSingleScalarResult();
$qb->select('s');
$qb->setFirstResult(self::ITEMS_PER_PAGE * ($selectedPage - 1));
$qb->setMaxResults(self::ITEMS_PER_PAGE);
$qb->orderBy('s.createdAt', 'DESC');
$query = $qb->getQuery();
$scenarios = $query->getResult();
}
if (empty($scenarios)) {
$session->set('searchingString', "");
$this->addFlashMessage('error', 'scenario_search_not_found', array('%string%' => $searchingString), 'controller');
}
if (empty($scenarios) && isset($searchingString)) {
$em = $this->managerRegistry->getManager();
$selectedPage = $request->get('p', 1);
$repository = $this->managerRegistry->getRepository(Scenario::class);
$qb = $repository->createQueryBuilder('s');
$qb = $qb->where(
$qb->expr()->eq('s.isDeleted', ':isDeleted'),
$qb->expr()->eq('s.state', ':state')
);
$qb->setParameter('isDeleted', 0);
$qb->setParameter('state', 1);
$qb->select('count(s.id)');
$totalCount = $qb->getQuery()->getSingleScalarResult();
$qb->select('s');
$qb->setFirstResult(self::ITEMS_PER_PAGE*($selectedPage-1));
$qb->setMaxResults(self::ITEMS_PER_PAGE);
$qb->orderBy('s.createdAt', 'DESC');
$query = $qb->getQuery();
$scenarios = $query->getResult();
}
$ids = array(0); // 0 .. pro praznou IN podminku
foreach ($scenarios as $item) {
$ids[] = $item->getId(); // idcka jen nalezenych scenarios
}
// media - vsechny aktivni
$repository = $this->managerRegistry->getRepository(Media::class);
$qb = $repository->createQueryBuilder('m');
$qb = $qb->where($qb->expr()->in('m.scenarioId', $ids), $qb->expr()->isNotNull('m.filename'),
$qb->expr()->eq('m.category', ':category'),
$qb->expr()->eq('m.isDeleted', ':isDeleted'),
$qb->expr()->eq('m.active', ':active'),
$qb->expr()->eq('m.mediaFlag', ':mediaFlag'))
->setParameter('category', 1)// vybereme jen obrazky
->setParameter('isDeleted', 0)
->setParameter('active', 1)
->setParameter('mediaFlag', Media::MEDIA_FLAG_SCENARIO_INTRO);
$query = $qb->getQuery();
$media_scenario = $query->getResult();
foreach ($media_scenario as $item) {
if (!empty($item->getScenario())) { // && !empty($item->getScenario()->getId()->getAnnotationImg())
// $scenarios->findBy( "id", $item->getScenario()->getId() )->setAnnotationImg( $item->getFilename() );
// dump( $scenarios->findBy( "id", 1 ) );
foreach ($scenarios as $scenario) {
if ($item->getScenario()->getId() == $scenario->getId()) {
$scenario->setAnnotationImg($item->getFilename());
$scenario->setAnnotationImgName($item->getMediaName());
break; // jen jeden
}
}
}
}
return $this->render('frontend/scenario_vypis.html.twig', [
'scenarios' => $scenarios,
'totalCount' => $totalCount,
'totalPages' => ceil($totalCount / self::ITEMS_PER_PAGE),
'currentPage' => $selectedPage,
'searched' => true
]);
}
}