point-tools/src/Controller/MainController.php

73 lines
2.4 KiB
PHP
Raw Normal View History

2015-05-30 06:22:06 +00:00
<?php
2023-04-01 17:27:40 +00:00
declare(strict_types=1);
2015-05-30 06:22:06 +00:00
2023-04-01 17:27:40 +00:00
namespace App\Controller;
2015-05-30 06:22:06 +00:00
2023-04-01 17:27:40 +00:00
use App\Form\UserSearchType;
use App\Repository\{SubscriptionEventRepository, SubscriptionRepository, UserRepository};
2017-11-05 02:03:26 +00:00
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\{JsonResponse, Request, Response};
2015-05-30 06:22:06 +00:00
2017-11-05 02:03:26 +00:00
class MainController extends AbstractController
2015-05-30 06:22:06 +00:00
{
2023-04-01 17:27:40 +00:00
private const AJAX_AUTOCOMPLETE_SIZE = 10;
2016-12-11 00:54:01 +00:00
2023-04-01 17:27:40 +00:00
public function __construct(
private readonly int $appUserId,
private readonly string $appUserLogin,
) {
2017-11-05 02:03:26 +00:00
}
public function indexAction(
Request $request,
UserRepository $userRepository,
SubscriptionRepository $subscriptionRepository,
SubscriptionEventRepository $subscriptionEventRepository
): Response {
$form = $this->createForm(
UserSearchType::class,
null,
[
'action' => $this->generateUrl('index'),
]
);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$login = $form->get('login')->getData();
if (null !== $user = $userRepository->findOneBy(['login' => $login])) {
return $this->redirectToRoute('user_show', ['login' => $login]);
}
$form->get('login')->addError(new FormError('Login not found'));
}
2015-05-30 06:22:06 +00:00
return $this->render('SkobkinPointToolsBundle:Main:index.html.twig', [
'form' => $form->createView(),
2016-12-11 00:54:01 +00:00
'autocomplete_size' => self::AJAX_AUTOCOMPLETE_SIZE,
'users_count' => $userRepository->getUsersCount(),
2017-11-05 02:03:26 +00:00
'subscribers_count' => $subscriptionRepository->getUserSubscribersCountById($this->appUserId),
'events_count' => $subscriptionEventRepository->getLastDayEventsCount(),
2017-11-05 02:03:26 +00:00
'service_login' => $this->appUserLogin,
2015-05-30 06:22:06 +00:00
]);
}
2023-04-01 17:27:40 +00:00
/** Returns user search autocomplete data in JSON */
public function searchUserAjaxAction(string $login, UserRepository $userRepository): JsonResponse
{
$result = [];
foreach ($userRepository->findUsersLikeLogin($login, self::AJAX_AUTOCOMPLETE_SIZE) as $user) {
$result[] = [
'login' => $user->getLogin(),
'name' => $user->getName(),
];
}
return $this->json($result);
}
2015-05-30 06:22:06 +00:00
}