point-tools/src/Skobkin/Bundle/PointToolsBundle/Controller/UserController.php

91 lines
2.9 KiB
PHP
Raw Normal View History

2015-05-30 06:50:44 +00:00
<?php
namespace Skobkin\Bundle\PointToolsBundle\Controller;
use Doctrine\ORM\QueryBuilder;
2015-05-30 06:50:44 +00:00
use Doctrine\ORM\EntityManager;
2015-05-31 02:48:12 +00:00
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Skobkin\Bundle\PointToolsBundle\Entity\TopUserDTO;
2015-05-31 02:48:12 +00:00
use Skobkin\Bundle\PointToolsBundle\Entity\User;
use Skobkin\Bundle\PointToolsBundle\Service\UserApi;
2015-05-30 06:50:44 +00:00
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
2015-05-31 07:02:00 +00:00
use Symfony\Component\HttpFoundation\Request;
2015-05-30 06:50:44 +00:00
class UserController extends Controller
{
2015-05-31 02:48:12 +00:00
/**
* @param User $user
2015-05-31 02:48:12 +00:00
* @ParamConverter("user", class="SkobkinPointToolsBundle:User", options={"login" = "login"})
*/
public function showAction(User $user)
2015-05-30 06:50:44 +00:00
{
2015-05-31 02:48:12 +00:00
$userApi = $this->container->get('skobkin_point_tools.api_user');
/** @var QueryBuilder $qb */
$qb = $this->getDoctrine()->getManager()->getRepository('SkobkinPointToolsBundle:User')->createQueryBuilder('u');
$subscribers = $qb
->select('u')
->innerJoin('u.subscriptions', 's')
->where('s.author = :author')
2015-05-31 07:43:24 +00:00
->orderBy('u.login', 'asc')
->setParameter('author', $user->getId())
->getQuery()->getResult()
;
2015-05-31 02:48:12 +00:00
$qb = $this->getDoctrine()->getManager()->getRepository('SkobkinPointToolsBundle:SubscriptionEvent')->createQueryBuilder('se');
$subscriptionsEvents = $qb
->select()
->where('se.author = :author')
->orderBy('se.date', 'desc')
->setMaxResults(10)
2015-05-31 02:48:12 +00:00
->setParameter('author', $user)
->getQuery()->getResult()
;
return $this->render('SkobkinPointToolsBundle:User:show.html.twig', [
'user' => $user,
'subscribers' => $subscribers,
2015-05-31 02:48:12 +00:00
'log' => $subscriptionsEvents,
'avatar_url' => $userApi->getAvatarUrl($user, UserApi::AVATAR_SIZE_LARGE),
]);
2015-05-30 06:50:44 +00:00
}
public function topAction()
{
/** @var EntityManager $em */
$em = $this->getDoctrine()->getManager();
/** @var QueryBuilder $qb */
$qb = $em->getRepository('SkobkinPointToolsBundle:Subscription')->createQueryBuilder('s');
2015-05-30 06:50:44 +00:00
/** @var TopUserDTO[] $topUsers */
$topUsers = $qb
->select(['COUNT(s.subscriber) as cnt', 'NEW SkobkinPointToolsBundle:TopUserDTO(a.login, COUNT(s.subscriber))'])
->innerJoin('s.author', 'a')
->orderBy('cnt', 'desc')
->groupBy('a.id')
->setMaxResults(30)
->getQuery()->getResult()
;
2015-05-30 06:50:44 +00:00
return $this->render('@SkobkinPointTools/User/top.html.twig', [
'top_users' => $topUsers
]);
2015-05-30 06:50:44 +00:00
}
2015-05-31 07:02:00 +00:00
/**
* @param Request $request
*/
public function searchUserAction(Request $request)
{
$login = $request->request->get('login');
if (!$login) {
return $this->redirectToRoute('index');
2015-05-31 07:02:00 +00:00
}
return $this->redirectToRoute('user_show', ['login' => $login]);
}
2015-05-30 06:50:44 +00:00
}