src/AppBundle/Controller/OnlineController.php line 14

Open in your IDE?
  1. <?php
  2. namespace AppBundle\Controller;
  3. use AppBundle\Common\ArrayToolkit;
  4. use AppBundle\Common\Paginator;
  5. use AppBundle\Component\Track\UserOnlineTrack;
  6. use Symfony\Component\HttpFoundation\Cookie;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. class OnlineController extends BaseController
  10. {
  11.     public function sampleAction(Request $requestUserOnlineTrack $userOnlineTrack)
  12.     {
  13.         $sessionId $request->getSession()->getId();
  14.         $cookieName 'online-uuid';
  15.         $uuid $request->cookies->get($cookieName$this->generateGuid());
  16.         if (!empty($sessionId)) {
  17.             $userOnlineTrack->track($uuid);
  18.         }
  19.         $response = new Response('true');
  20.         $response->headers->setCookie(new Cookie($cookieName$uuid));
  21.         return $response;
  22.     }
  23.     protected function generateGuid()
  24.     {
  25.         if (function_exists('com_create_guid')) {
  26.             return com_create_guid();
  27.         } else {
  28.             mt_srand((int) ((float) microtime() * 10000));
  29.             $charid strtoupper(md5(uniqid(rand(), true)));
  30.             $hyphen chr(45);
  31.             $uuid substr($charid08).$hyphen
  32.                 .substr($charid84).$hyphen
  33.                 .substr($charid124).$hyphen
  34.                 .substr($charid164).$hyphen
  35.                 .substr($charid2012);
  36.             return $uuid;
  37.         }
  38.     }
  39.     public function indexAction(Request $request)
  40.     {
  41.         $conditions = [
  42.             'active_time_GT' => time() - 15 60,
  43.         ];
  44.         if ($request->query->get('name''')) {
  45.             $user $this->getUserService()->getUserByNickname($request->query->get('name'''));
  46.             if (empty($user)) {
  47.                 return $this->render('admin/online/index.html.twig', [
  48.                     'onlines' => [],
  49.                     'paginator' => new Paginator(
  50.                         $request,
  51.                         0,
  52.                         20
  53.                     ),
  54.                     'users' => [],
  55.                 ]);
  56.             } else {
  57.                 $conditions['user_id'] = $user['id'];
  58.             }
  59.         }
  60.         $conditions['is_login'] = 1;
  61.         $count $this->getOnlineService()->countOnlines($conditions);
  62.         $paginator = new Paginator(
  63.             $request,
  64.             $count,
  65.             20
  66.         );
  67.         $onlines = [];
  68.         if ($count 0) {
  69.             $onlines $this->getOnlineService()->searchOnlines(
  70.                 $conditions, ['active_time' => 'DESC'], $paginator->getOffsetCount(), $paginator->getPerPageCount()
  71.             );
  72.         }
  73.         $users = [];
  74.         if (!empty($onlines)) {
  75.             $userIds ArrayToolkit::column($onlines'user_id');
  76.             $users $this->getUserService()->findUsersByIds($userIds);
  77.             $users ArrayToolkit::index($users'id');
  78.         }
  79.         return $this->render('admin/online/index.html.twig', [
  80.             'onlines' => $onlines,
  81.             'paginator' => $paginator,
  82.             'users' => $users,
  83.         ]);
  84.     }
  85.     /**
  86.      * @return \Codeages\Biz\Framework\Session\Service\OnlineService
  87.      */
  88.     protected function getOnlineService()
  89.     {
  90.         return $this->createService('Session:OnlineService');
  91.     }
  92.     /**
  93.      * @return \Biz\User\Service\UserService
  94.      */
  95.     protected function getUserService()
  96.     {
  97.         return $this->createService('User:UserService');
  98.     }
  99. }