2015-05-30 06:50:44 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Skobkin\Bundle\PointToolsBundle\Controller;
|
|
|
|
|
2015-05-31 06:16:10 +00:00
|
|
|
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;
|
2015-05-31 06:16:10 +00:00
|
|
|
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
|
|
|
/**
|
2015-05-31 06:16:10 +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 */
|
2015-05-31 06:16:10 +00:00
|
|
|
$qb = $this->getDoctrine()->getManager()->getRepository('SkobkinPointToolsBundle:User')->createQueryBuilder('u');
|
|
|
|
|
|
|
|
$subscribers = $qb
|
|
|
|
->select('u')
|
|
|
|
->innerJoin('u.subscriptions', 's')
|
|
|
|
->where('s.author = :author')
|
|
|
|
->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')
|
2015-05-31 06:16:10 +00:00
|
|
|
->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,
|
2015-05-31 06:16:10 +00:00
|
|
|
'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 */
|
2015-05-31 06:16:10 +00:00
|
|
|
$qb = $em->getRepository('SkobkinPointToolsBundle:Subscription')->createQueryBuilder('s');
|
2015-05-30 06:50:44 +00:00
|
|
|
|
2015-05-31 06:16:10 +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
|
|
|
|
2015-05-31 06:16:10 +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) {
|
2015-05-31 07:05:08 +00:00
|
|
|
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
|
|
|
}
|