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;
|
2016-12-10 22:48:51 +00:00
|
|
|
use Symfony\Component\Form\FormError;
|
2017-11-05 01:42:08 +00:00
|
|
|
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(
|
2023-04-09 21:30:51 +00:00
|
|
|
private readonly int $pointAppUserId,
|
|
|
|
private readonly string $pointAppUserLogin,
|
2023-04-01 17:27:40 +00:00
|
|
|
) {
|
2017-11-05 02:03:26 +00:00
|
|
|
}
|
|
|
|
|
2023-08-16 22:39:06 +00:00
|
|
|
public function index(
|
2017-11-05 01:42:08 +00:00
|
|
|
Request $request,
|
|
|
|
UserRepository $userRepository,
|
|
|
|
SubscriptionRepository $subscriptionRepository,
|
|
|
|
SubscriptionEventRepository $subscriptionEventRepository
|
|
|
|
): Response {
|
2016-12-10 22:48:51 +00:00
|
|
|
$form = $this->createForm(
|
2017-01-08 19:57:52 +00:00
|
|
|
UserSearchType::class,
|
2016-12-10 22:48:51 +00:00
|
|
|
null,
|
|
|
|
[
|
|
|
|
'action' => $this->generateUrl('index'),
|
|
|
|
]
|
|
|
|
);
|
|
|
|
|
|
|
|
$form->handleRequest($request);
|
|
|
|
|
|
|
|
if ($form->isSubmitted() && $form->isValid()) {
|
|
|
|
$login = $form->get('login')->getData();
|
|
|
|
|
2017-11-05 01:42:08 +00:00
|
|
|
if (null !== $user = $userRepository->findOneBy(['login' => $login])) {
|
2016-12-10 22:48:51 +00:00
|
|
|
return $this->redirectToRoute('user_show', ['login' => $login]);
|
|
|
|
}
|
|
|
|
|
|
|
|
$form->get('login')->addError(new FormError('Login not found'));
|
|
|
|
}
|
|
|
|
|
2023-04-09 21:35:58 +00:00
|
|
|
return $this->render('Web/index.html.twig', [
|
2016-12-10 22:48:51 +00:00
|
|
|
'form' => $form->createView(),
|
2016-12-11 00:54:01 +00:00
|
|
|
'autocomplete_size' => self::AJAX_AUTOCOMPLETE_SIZE,
|
2017-11-05 01:42:08 +00:00
|
|
|
'users_count' => $userRepository->getUsersCount(),
|
2023-04-09 21:30:51 +00:00
|
|
|
'subscribers_count' => $subscriptionRepository->getUserSubscribersCountById($this->pointAppUserId),
|
2017-11-05 01:42:08 +00:00
|
|
|
'events_count' => $subscriptionEventRepository->getLastDayEventsCount(),
|
2023-04-09 21:30:51 +00:00
|
|
|
'service_login' => $this->pointAppUserLogin,
|
2015-05-30 06:22:06 +00:00
|
|
|
]);
|
|
|
|
}
|
2016-12-10 22:48:51 +00:00
|
|
|
|
2023-04-01 17:27:40 +00:00
|
|
|
/** Returns user search autocomplete data in JSON */
|
2023-08-16 22:39:06 +00:00
|
|
|
public function searchUserAjax(string $login, UserRepository $userRepository): JsonResponse
|
2016-12-10 22:48:51 +00:00
|
|
|
{
|
|
|
|
$result = [];
|
|
|
|
|
2017-11-05 01:42:08 +00:00
|
|
|
foreach ($userRepository->findUsersLikeLogin($login, self::AJAX_AUTOCOMPLETE_SIZE) as $user) {
|
2016-12-10 22:48:51 +00:00
|
|
|
$result[] = [
|
|
|
|
'login' => $user->getLogin(),
|
|
|
|
'name' => $user->getName(),
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
2017-01-09 00:33:29 +00:00
|
|
|
return $this->json($result);
|
2016-12-10 22:48:51 +00:00
|
|
|
}
|
2015-05-30 06:22:06 +00:00
|
|
|
}
|