src/Controller/CursoController.php line 76

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Service\CursoService;
  4. use Doctrine\ORM\EntityManagerInterface;
  5. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  6. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  7. use Symfony\Component\HttpFoundation\File\Exception\FileException;
  8. use Symfony\Component\String\Slugger\SluggerInterface;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  13. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  14. use App\Entity\User;
  15. use App\Entity\Curso;
  16. use App\Entity\Clase;
  17. use App\Entity\Venta;
  18. use App\Entity\Estadoventa;
  19. use App\Entity\Imagen;
  20. use App\Entity\Video;
  21. use App\Entity\Archivo;
  22. use App\Entity\Categoria;
  23. use App\Entity\Parametro;
  24. use App\Entity\TipoVenta;
  25. use App\Form\CursoType;
  26. use App\Form\CursoCategoriaType;
  27. use App\Form\ClaseType;
  28. use App\Form\ClaseEditarType;
  29. class CursoController extends AbstractController
  30. {
  31.     private $entityManager;
  32.     private $cursoService;
  33.     private $cursoRepository;
  34.     private $archivoRepository;
  35.     private $imagenRepository;
  36.     private $categoriaRepository;
  37.     private $parametroRepository;
  38.     private $userRepository;
  39.     private $ventaRepository;
  40.     private $estadoVentaRepository;
  41.     private $urlImagenesPublicaciones;
  42.     private $urlArchivosPublicaciones;
  43.     private $urlImagenesCurso;
  44.     private $urlArchivosCurso;
  45.     private $tipoVentaRepository;
  46.     public function __construct(EntityManagerInterface $entityManagerParameterBagInterface $parameterBag,CursoService $cursoService)
  47.     {
  48.         //Doctrine
  49.         $this->entityManager $entityManager;
  50.         $this->cursoService $cursoService;
  51.         $this->cursoRepository $this->entityManager->getRepository(Curso::class);
  52.         $this->archivoRepository $this->entityManager->getRepository(Archivo::class);
  53.         $this->imagenRepository $this->entityManager->getRepository(Imagen::class);
  54.         $this->categoriaRepository $this->entityManager->getRepository(Categoria::class);
  55.         $this->parametroRepository $this->entityManager->getRepository(Parametro::class);
  56.         $this->userRepository $this->entityManager->getRepository(User::class);
  57.         $this->ventaRepository $this->entityManager->getRepository(Venta::class);
  58.         $this->estadoVentaRepository $this->entityManager->getRepository(Estadoventa::class);
  59.         $this->tipoVentaRepository $this->entityManager->getRepository(TipoVenta::class);
  60.         //Parametros
  61.         $this->urlImagenesPublicaciones $parameterBag->get('imagenes_publicaciones');
  62.         $this->urlArchivosPublicaciones $parameterBag->get('archivos_publicaciones_directory');
  63.         $this->urlImagenesCurso $parameterBag->get('imagenes_curso_directory');
  64.         $this->urlArchivosCurso $parameterBag->get('archivos_cursos_directory');
  65.     }
  66.     /**
  67.      * @Route("/curso", name="cursos")
  68.      */
  69.     public function index(): Response
  70.     {
  71.         //Obtengo todas las entidades
  72.         $cursos $this->cursoRepository->findByCursosPagos();
  73.         //Obtengo todas las categorias existentes
  74.         $categorias $this->categoriaRepository->findByCategoriasCursos();
  75.         //Retorno la vista
  76.         return $this->render(
  77.             'Curso/index.html.twig',
  78.             [
  79.                 'cursos' => $cursos,
  80.                 'categorias' => $categorias,
  81.             ]
  82.         );
  83.     }
  84.     /**
  85.      * Require ROLE_ADMIN for only this controller method.
  86.      *
  87.      * @Route("/app/cursos/", name="curso_abm")
  88.      *
  89.      * @IsGranted("ROLE_ADMIN")
  90.      */
  91.     public function indexABM(): Response
  92.     {
  93.         //Obtengo todas las entidades
  94.         $cursos $this->cursoRepository->findBy([], ['id' => 'DESC']);
  95.         //Retorno la vista
  96.         return $this->render(
  97.             'Curso/indexAbm.html.twig',
  98.             [
  99.                 'cursos' => $cursos,
  100.             ]
  101.         );
  102.     }
  103.     /**
  104.      * @Route("/cursos/ver/{idCurso}", name="curso_ver")
  105.      */
  106.     //Funcion para visualizar 
  107.     public function verCurso($idCurso): Response
  108.     {
  109.         //Obtengo la entidad
  110.         $curso $this->cursoRepository->find($idCurso);
  111.         //Obtengo la configuracion de ventas
  112.         $flagVentas $this->parametroRepository->find(1);
  113.         //Retorno a la vista
  114.         return $this->render(
  115.             'Curso/ver.html.twig',
  116.             [
  117.                 'curso' => $curso,
  118.                 'flagVentas' => $flagVentas,
  119.             ]
  120.         );
  121.     }
  122.     /**
  123.      * Require ROLE_ADMIN for only this controller method.
  124.      *
  125.      * @Route("/app/cursos/nuevo", name="curso_nuevo")
  126.      *
  127.      * @IsGranted("ROLE_ADMIN")
  128.      */
  129.     //Funcion para crear 
  130.     public function nuevoCurso(Request $requestSluggerInterface $slugger): Response
  131.     {
  132.         //Creo  
  133.         $curso = new Curso();
  134.         //Defino el Formulario
  135.         $form $this->createForm(CursoType::class, $curso);
  136.         //Si se envia el formulario , existe un request
  137.         $form->handleRequest($request);
  138.         //Si se disparo el formulario y es valido
  139.         if ($form->isSubmitted() && $form->isValid()) {
  140.             //Obtengo del formulario
  141.             $curso $form->getData();
  142.             //Le doy persistencia a
  143.             $this->entityManager->persist($curso);
  144.             //Asiento los cambios en la base de datos
  145.             $this->entityManager->flush();
  146.             //Obtengo los archivos que subi
  147.             $archivosSubidos $form->get('archivos')->getData();
  148.             //Obtengo las imagenes que subi 
  149.             $imagenesSubidas $form->get('imagen')->getData();
  150.             //Cargo las Imagenes
  151.             foreach ($imagenesSubidas as $imagenSubida) {
  152.                 $this->cursoService->CursoAdjuntarImagen($curso$imagenSubida$slugger);
  153.             }
  154.             //Cargo los archivos
  155.             foreach ($archivosSubidos as $archivoSubido) {
  156.                 $this->cursoService->CursoAdjuntarArchivo($curso$archivoSubido$slugger);
  157.             }
  158.             //Le doy persistencia 
  159.             $this->entityManager->persist($curso);
  160.             //Asiento los cambios en la base de datos
  161.             $this->entityManager->flush();
  162.             //Aviso
  163.             $this->addFlash('exito''El curso se creo correctamente');
  164.             //Redirecciono        
  165.             return $this->redirectToRoute('curso_ver', array('idCurso' => $curso->getId()));
  166.         }
  167.         //Retorno la vista
  168.         return $this->render(
  169.             'Curso/nuevo.html.twig',
  170.             [
  171.                 'form' => $form->createView(),
  172.             ]
  173.         );
  174.     }
  175.     /**
  176.      * Require ROLE_ADMIN for only this controller method.
  177.      * 
  178.      * @Route("/app/cursos/editar/{idCurso}", name="curso_editar", methods={"GET","HEAD","POST"})
  179.      * 
  180.      * @IsGranted("ROLE_ADMIN")
  181.      */
  182.     //Funcion para editar una publicacion
  183.     public function editarCurso($idCursoRequest $requestSluggerInterface $slugger): Response
  184.     {
  185.         //Obtengo la entidad
  186.         $curso $this->cursoRepository->find($idCurso);
  187.         //Defino el Formulario
  188.         $form $this->createForm(CursoType::class, $curso);
  189.         //Si se envia el formulario , existe un request
  190.         $form->handleRequest($request);
  191.         //Si se disparo el formulario y es valido
  192.         if ($form->isSubmitted() && $form->isValid()) {
  193.             //Obtengo la entidad del formulario
  194.             $curso $form->getData();
  195.             //Obtengo los archivos que subi
  196.             $archivosSubidos $form->get('archivos')->getData();
  197.             //Obtengo las imagenes que subi 
  198.             $imagenesSubidas $form->get('imagen')->getData();
  199.             //Cargo las Imagenes
  200.             foreach ($imagenesSubidas as $imagenSubida) {
  201.                 $this->cursoService->CursoAdjuntarImagen($curso$imagenSubida$slugger);
  202.             }
  203.             //Cargo los archivos
  204.             foreach ($archivosSubidos as $archivoSubido) {
  205.                 $this->cursoService->CursoAdjuntarArchivo($curso$archivoSubido$slugger);
  206.             }
  207.             //Le doy persistencia 
  208.             $this->entityManager->persist($curso);
  209.             //Asiento los cambios en la base de datos
  210.             $this->entityManager->flush();
  211.             //Aviso
  212.             $this->addFlash('exito''El Curso se edito exitosamente');
  213.             //Redirecciono    
  214.             return $this->redirectToRoute('curso_ver', array('idCurso' => $curso->getId()));
  215.         }
  216.         //Retorno la vista
  217.         return $this->render(
  218.             'Curso/editar.html.twig',
  219.             [
  220.                 'form' => $form->createView(),
  221.                 'curso' => $curso,
  222.             ]
  223.         );
  224.     }
  225.     /**
  226.      * @Route("/cursos/categoria/{idCategoria}", name="cursos_de_categoria")
  227.      */
  228.     public function listarProductosCategorias($idCategoria): Response
  229.     {
  230.         //Obtengo la categoria del producto
  231.         $categoria $this->categoriaRepository->find($idCategoria);
  232.         //Obtengo todos los productos de una categoria
  233.         $cursos $categoria->getCursos();
  234.         //Obtengo todas las categorias existentes
  235.         $categorias $this->categoriaRepository->findByCategoriasCursos();
  236.         //Retorno a la vista
  237.         return $this->render(
  238.             'Curso/index.html.twig',
  239.             [
  240.                 'cursos' => $cursos,
  241.                 'categorias' => $categorias,
  242.             ]
  243.         );
  244.     }
  245.     /**
  246.      * Require ROLE_ADMIN for only this controller method.
  247.      * 
  248.      * @Route("/app/cursos/categorizar/{idCurso}", name="curso_categoria", methods={"GET","HEAD","POST"})
  249.      * 
  250.      * @IsGranted("ROLE_ADMIN")
  251.      */
  252.     //Funcion para editar categorias
  253.     public function categorizarCurso($idCursoRequest $requestSluggerInterface $slugger): Response
  254.     {
  255.         //Obtengo el elemento
  256.         $curso $this->cursoRepository->find($idCurso);
  257.         //Obtengo las categorias
  258.         $categorias $this->categoriaRepository->findAll();
  259.         //Defino el Formulario
  260.         $form $this->createForm(CursoCategoriaType::class, $curso);
  261.         //Si se envia el formulario , existe un request
  262.         $form->handleRequest($request);
  263.         //Si se disparo el formulario y es valido
  264.         if ($form->isSubmitted() && $form->isValid()) {
  265.             //Obtengo el elemento
  266.             $curso $form->getData();
  267.             //Le doy persistencia 
  268.             $this->entityManager->persist($curso);
  269.             //Asiento los cambios en la base de datos
  270.             $this->entityManager->flush();
  271.             //Aviso
  272.             $this->addFlash('aviso''Se actualizaron las categorias del Curso ' $curso->getNombre());
  273.             //Redirecciono 
  274.             return $this->redirectToRoute('curso_ver', array('idCurso' => $curso->getId()));
  275.         }
  276.         //Redirecciono a la vista      
  277.         return $this->render(
  278.             'Curso/categorizar.html.twig',
  279.             [
  280.                 'form' => $form->createView(),
  281.                 'curso' => $curso,
  282.             ]
  283.         );
  284.     }
  285.     /**
  286.      * Require ROLE_ADMIN for only this controller method.
  287.      * 
  288.      * @Route("/app/cursos/eliminar/{idCurso}", name="curso_eliminar", methods={"GET","HEAD","POST"})
  289.      * 
  290.      * @IsGranted("ROLE_ADMIN")
  291.      */
  292.     //Funcion para editar una publicacion
  293.     public function eliminarCurso($idCursoRequest $requestSluggerInterface $slugger): Response
  294.     {
  295.         //Obtengo la entidad
  296.         $curso $this->cursoRepository->find($idCurso);
  297.         //Elimino las imagenes
  298.         $this->cursoService->eliminarImagenesCurso($curso);
  299.         //Elimino los archivos
  300.         $this->cursoService->eliminarArchivosCurso($curso);
  301.         //Elimino las clases
  302.         $this->cursoService->eliminarClasesCurso($curso);
  303.         //Le doy persistencia 
  304.         $this->entityManager->remove($curso);
  305.         //Asiento los cambios en la base de datos
  306.         $this->entityManager->flush();
  307.         //Aviso
  308.         $this->addFlash('exito''El Curso se elimino exitosamente');
  309.         //Redirecciono        
  310.         return $this->redirectToRoute('curso_abm');
  311.     }
  312.     /**
  313.      * Require ROLE_ADMIN for only this controller method.
  314.      * 
  315.      * @Route("/cursos/eliminarImagen/{idImagen}", name="curso_imagen_eliminar", methods={"GET","HEAD","POST"})
  316.      * 
  317.      * @IsGranted("ROLE_ADMIN")
  318.      */
  319.     //Funcion para eliminar una imagen de una publicacion
  320.     public function eliminarImagenCurso($idImagen)
  321.     {
  322.         //Obtengo la entidad
  323.         $imagen $this->imagenRepository->find($idImagen);
  324.         //Obtengo 
  325.         $curso $imagen->getCurso();
  326.         //Elimino fisicamente el archivo
  327.         $urlImagen $imagen->getUrl();
  328.         //Elimino la imagen Fisicamente en el FileSistem
  329.         unlink($urlImagen);
  330.         //Elimino logicamente la imagen de la entidad
  331.         $curso->removeImagen($imagen);
  332.         //Le doy persistencia 
  333.         $this->entityManager->remove($imagen);
  334.         $this->entityManager->persist($curso);
  335.         //Asiento los cambios en la base de datos
  336.         $this->entityManager->flush();
  337.         //Aviso
  338.         $this->addFlash('exito''Se elimino la imagen del Curso');
  339.         //Redirecciono        
  340.         return $this->redirectToRoute('curso_ver', array('idCurso' => $curso->getId()));
  341.     }
  342.     /**
  343.      * Require ROLE_ADMIN for only this controller method.
  344.      * 
  345.      * @Route("app/curso/eliminarArchivo/{idArchivo}", name="app_curso_archivo_eliminar", methods={"GET","HEAD","POST"})
  346.      * 
  347.      * @IsGranted("ROLE_ADMIN")
  348.      */
  349.     //Funcion para eliminar un archivo de un curso
  350.     public function eliminarArchivoCurso($idArchivo)
  351.     {
  352.         //Obtengo la entidad
  353.         $archivo $this->archivoRepository->find($idArchivo);
  354.         //Obtengo 
  355.         $curso $archivo->getCurso();
  356.         //Elimino fisicamente el archivo
  357.         $urlArchivo $archivo->getUrl();
  358.         //Elimino Fisicamente en el FileSistem
  359.         unlink($urlArchivo);
  360.         //Elimino logicamente 
  361.         $curso->removeArchivo($archivo);
  362.         //Le doy persistencia 
  363.         $this->entityManager->remove($archivo);
  364.         $this->entityManager->persist($curso);
  365.         //Asiento los cambios en la base de datos
  366.         $this->entityManager->flush();
  367.         //Aviso
  368.         $this->addFlash('exito''Se elimino el archivo del curso');
  369.         //Redirecciono        
  370.         return $this->redirectToRoute('curso_ver', array('idCurso' => $curso->getId()));
  371.     }
  372.     /**
  373.      * Require ROLE_ADMIN for only this controller method.
  374.      * 
  375.      * @Route("app/curso/comprar/{idCurso}/", name="curso_comprar", methods={"GET","HEAD","POST"})
  376.      * 
  377.      * @IsGranted("ROLE_USER")
  378.      */
  379.     public function comprarCurso($idCurso)
  380.     {
  381.         //Obtengo la entidad
  382.         $curso $this->cursoRepository->find($idCurso);
  383.         //Obtengo el usuario logueado
  384.         $usuarioLogueado $this->get('security.token_storage')->getToken()->getUser();
  385.         //Obtengo mi usuario de la BD
  386.         $usuario $this->userRepository->find($usuarioLogueado->getId());
  387.         //Debo crear una venta para asociarla al curso....
  388.         $nuevaVenta = new Venta();
  389.         $nuevaVenta->setUsuario($usuarioLogueado);
  390.         $nuevaVenta->setFecha(new \DateTime());
  391.         //Seteo la venta como una venta aula virtual
  392.         $tipoVenta$this->tipoVentaRepository->find(1);
  393.         $nuevaVenta->setTipoVenta($tipoVenta);
  394.         //Obtengo el estado Inicial de la Venta
  395.         $estadoInicial $this->estadoVentaRepository->find(1);
  396.         $nuevaVenta->setEstado($estadoInicial);
  397.         $estadoInicial->addVenta($nuevaVenta);
  398.         //Agrego el curso a la venta
  399.         $nuevaVenta->setArticulos($curso);
  400.         $nuevaVenta->setPrecio($curso->getPrecio());
  401.         $nuevaVenta->setPrecioUsd($curso->getPrecioUsd());
  402.         //Le doy persistencia 
  403.         $this->entityManager->persist($nuevaVenta);
  404.         //Asiento los cambios en la base de datos
  405.         $this->entityManager->flush();
  406.         //Aviso
  407.         $this->addFlash('exito''Se agrego el Curso como Compra');
  408.         //Retorno la vista
  409.         return $this->render(
  410.             'Curso/comprarCurso.html.twig',
  411.             [
  412.                 'curso' => $curso,
  413.                 'venta' => $nuevaVenta
  414.             ]
  415.         );
  416.     }
  417. }