src/AppBundle/Controller/DefaultController.php line 24

Open in your IDE?
  1. <?php
  2. namespace AppBundle\Controller;
  3. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  4. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  5. use Doctrine\Common\Persistence\ManagerRegistry;
  6. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  7. use Symfony\Component\HttpFoundation\JsonResponse;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Nelmio\ApiDocBundle\Annotation\ApiDoc;
  10. class DefaultController extends Controller
  11. {
  12.     /**
  13.      * Match all /app* URL and serve them to ReactJS frontend app.
  14.      *
  15.      * @Route("/app/")
  16.      * @Route("/app/{routing}", name="app_frontend", requirements={"routing"=".+"})
  17.      * @param int $routing
  18.      * @return \Symfony\Component\HttpFoundation\Response
  19.      */
  20.     public function appAction($routing 1)
  21.     {
  22.         return $this->render('default/index.html.twig');
  23.     }
  24.     /**
  25.      * Default homepage (index)
  26.      * @Route("/", name="index")
  27.      * @param int $id
  28.      * @return \Symfony\Component\HttpFoundation\RedirectResponse
  29.      */
  30.     public function indexAction($id 1)
  31.     {
  32.       // yay! Use this to see if the user is logged in
  33.         if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY')) {
  34.             return $this->redirectToRoute('app_frontend');
  35.         } else {
  36.             return $this->redirect('/app/login');
  37.         }
  38.     }
  39.     /**
  40.      * Get statistics data for selected year.
  41.      * This data are displayed in BClam Dashboard.
  42.      * #### Output ####
  43.      * ```
  44.      * {
  45.      *   "subjects": 32,
  46.      *   "schools": 28,
  47.      *   "courses" : 669,
  48.      *   "courseVariants" : 687
  49.      * }
  50.      * ```
  51.      *
  52.      * @ApiDoc(
  53.      *  description="Get statistics for selected year",
  54.      *  section="Statistics",
  55.      *  requirements={
  56.      *      {
  57.      *          "name"="year",
  58.      *          "dataType"="integer",
  59.      *          "requirement"="\d+",
  60.      *          "description"="year ID to get stats for"
  61.      *      }
  62.      *  },
  63.      *  statusCodes={
  64.      *         200="data returned",
  65.      *     }
  66.      * )
  67.      * @Route("/api/stats", name="stats")
  68.      * @Method({"GET"})
  69.      * @param Request $request
  70.      * @param ManagerRegistry $doctrine
  71.      * @return JsonResponse
  72.      */
  73.     public function getStats(Request $requestManagerRegistry $doctrine)
  74.     {
  75.       // get query data from http://localhost:8000/api/stats?year=
  76.         $year_id $request->query->get('year') ?: 0;
  77.         $belaEm $doctrine->getManager('bela');
  78.         $prequelEm $doctrine->getManager('prequel');
  79.         $querySubject $belaEm->createQuery('SELECT COUNT(s.subjectId) FROM BMD\BeLABundle\Entity\Subjects s WHERE s.validFlag=1');
  80.         $data['subjects'] = (int) $querySubject->getSingleScalarResult();
  81.         $querySchool $prequelEm->createQuery('SELECT COUNT(s.id) FROM AppBundle\Entity\SchoolsSettings ss JOIN ss.school s WHERE ss.year=:year_id AND ss.validFlag=1');
  82.         $querySchool->setParameter('year_id'$year_id);
  83.         $data['schools'] = (int) $querySchool->getSingleScalarResult();
  84.         $queryCourses $prequelEm->createQuery('SELECT COUNT(c.id) FROM AppBundle\Entity\Course c WHERE c.yearDefinitionId=:year_id');
  85.         $queryCourses->setParameter('year_id'$year_id);
  86.         $data['courses'] = (int) $queryCourses->getSingleScalarResult();
  87.         $queryCVC $prequelEm->createQuery('SELECT COUNT(cv.id) FROM AppBundle\Entity\CourseVariants cv JOIN cv.course c WHERE c.yearDefinitionId=:year_id');
  88.         $queryCVC->setParameter('year_id'$year_id);
  89.         $data['courseVariants'] = (int) $queryCVC->getSingleScalarResult();
  90.         return new JsonResponse($data200);
  91.     }
  92.   
  93.   /**
  94.    * Get url of your BeLA, this URL is used for example for password reset
  95.    * link or for Home Groups links in School Catalog view.
  96.    * #### Output ####
  97.    * ```
  98.    * {
  99.    *   "url": "https://www.belasm.com"
  100.    * }
  101.    * ```
  102.    *
  103.    * @ApiDoc(
  104.    *  description="Get url of your BeLA",
  105.    *  section="BeLA",
  106.    *  statusCodes={
  107.    *         200="data returned",
  108.    *     }
  109.    * )
  110.    * @Route("/api/belaurl", name="get_bela_url")
  111.    * @Method({"GET"})
  112.    */
  113.     public function getBeLAUrl()
  114.     {
  115.         return $this->json(['url' => $this->getParameter('bela_url')]);
  116.     }
  117. }