getDoctrine()->getManager(); /** @var User $user */ $user = $em->getRepository('SkobkinPointToolsBundle:User')->findUserByLogin($login); if (!$user) { throw $this->createNotFoundException('User ' . $login . ' not found.'); } $userApi = $this->container->get('skobkin_point_tools.api_user'); return $this->render('SkobkinPointToolsBundle:User:show.html.twig', [ 'user' => $user, 'subscribers' => $em->getRepository('SkobkinPointToolsBundle:User')->findUserSubscribersById($user->getId()), 'log' => $em->getRepository('SkobkinPointToolsBundle:SubscriptionEvent')->getUserLastSubscriptionEventsById($user, 10), 'avatar_url' => $userApi->getAvatarUrl($user, UserApi::AVATAR_SIZE_LARGE), ]); } public function topAction() { $topUsers = $this->getDoctrine()->getManager()->getRepository('SkobkinPointToolsBundle:User')->getTopUsers(); $topChart = $this->createTopUsersGraph($topUsers); return $this->render('@SkobkinPointTools/User/top.html.twig', [ 'top_users' => $topUsers, 'top_chart' => $topChart, ]); } /** * @param Request $request */ public function searchUserAction(Request $request) { $login = $request->request->get('login'); if (!$login) { return $this->redirectToRoute('index'); } return $this->redirectToRoute('user_show', ['login' => $login]); } /** * @param TopUserDTO[] $topUsers * @return Highchart */ private function createTopUsersGraph(array $topUsers = []) { $translator = $this->container->get('translator'); $chartData = [ 'titles' => [], 'subscribers' => [], ]; // Preparing chart data foreach ($topUsers as $user) { $chartData['titles'][] = $user->login; $chartData['subscribers'][] = $user->subscribersCount; } // Chart $series = [[ 'name' => $translator->trans('Subscribers'), 'data' => $chartData['subscribers'], ]]; // Initializing chart $ob = new Highchart(); $ob->chart->renderTo('top-chart'); $ob->chart->type('bar'); $ob->title->text($translator->trans('Top users')); $ob->xAxis->title(['text' => null]); $ob->xAxis->categories($chartData['titles']); $ob->yAxis->title(['text' => $translator->trans('amount')]); $ob->plotOptions->bar([ 'dataLabels' => [ 'enabled' => true ] ]); $ob->series($series); return $ob; } }