src/Controller/PageController.php line 260

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\ColsByRow;
  4. use App\Entity\ContentBySection;
  5. use App\Entity\ContentElementsByColumns;
  6. use App\Entity\ContentElementsByMeta;
  7. use App\Entity\Page;
  8. use App\Entity\ResourcesByPage;
  9. use App\Entity\RowsBySection;
  10. use App\Entity\SectionsByPage;
  11. use App\Entity\SectionStyles;
  12. use App\Entity\Services;
  13. use App\Entity\Sliders;
  14. use App\Entity\Team;
  15. use App\Form\PageType;
  16. use App\Repository\PageRepository;
  17. use Doctrine\ORM\EntityManagerInterface;
  18. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\HttpFoundation\JsonResponse;
  22. use Symfony\Component\Routing\Annotation\Route;
  23. use Symfony\Component\Serializer\SerializerInterface;
  24. /**
  25.  * @Route("/admin/page")
  26.  */
  27. class PageController extends AbstractController
  28. {
  29.     /**
  30.      * @var EntityManagerInterface
  31.      */
  32.     private $em;
  33.     private $serializer;
  34.     /**
  35.      * @param EntityManagerInterface   $entityManager
  36.      */
  37.     public function __construct(EntityManagerInterface $entityManager,
  38.                                 SerializerInterface $serializer){
  39.         $this->em $entityManager;
  40.         $this->serializer $serializer;
  41.     }
  42.     /**
  43.      * @Route("/create-section", name="section_create", methods={"POST"})
  44.      */
  45.     public function sectionCreate(Request $request): Response
  46.     {
  47.         $resp = array(
  48.             'success'   => false,
  49.             'error'     => false,
  50.             'msg'       => "Something went wrong"
  51.         );
  52.         $all $request->request->all();
  53.         //dd($all);
  54.         try{
  55.             $style $this->em->getRepository(SectionStyles::class)->findOneBy( array( 'code'   => 'Row' ) );
  56.             $page $this->em->getRepository(Page::class)->findOneBy( array( 'id'   => $all['idPage'] ) );
  57.             $sections $this->em->getRepository(SectionsByPage::class)->findBy( array( 'pageId'    =>  $page->getId() ) );
  58.             $section = new SectionsByPage();
  59.             $section->setActivetrue );
  60.             $section->setCreatedAt( new \DateTime() );
  61.             $section->setTitlestrtolower(str_replace(' ''-'$all['name'])) );
  62.             $section->setPageId$page );
  63.             $section->setStyleId($style);
  64.             $section->setIndexerCOUNT($sections) + );
  65.             $this->em->persist($section);
  66.             $row = new RowsBySection();
  67.             $row->setNumberCols(0);
  68.             $row->setCssClass('row');
  69.             $row->setSectionId($section);
  70.             $row->setName('row-' $section->getTitle());
  71.             $row->setIndexer(1);
  72.             $this->em->persist($row);
  73.             $columns $this->em->getRepository(ColsByRow::class)->findBy( array( 'rowId'    =>  $row->getId() ) );
  74.             switch ($all['size']){
  75.                 case 'one':
  76.                     $col = new ColsByRow();
  77.                     $col->setRowId($row);
  78.                     $col->setName('column');
  79.                     $col->setCssClass'col-md-12 large-12 small-12 columns' );
  80.                     $col->setType'html' );
  81.                     $col->setIndexer(1);
  82.                     $col->setNumberColumns(1);
  83.                     $this->em->persist($col);
  84.                     break;
  85.                 case 'one-margin':
  86.                     $col = new ColsByRow();
  87.                     $col->setRowId($row);
  88.                     $col->setName('column');
  89.                     $col->setCssClass'col-md-2 large-2 small-2 columns' );
  90.                     $col->setIndexer(1);
  91.                     $col->setNumberColumns(2);
  92.                     $this->em->persist($col);
  93.                     $col = new ColsByRow();
  94.                     $col->setRowId($row);
  95.                     $col->setName('column');
  96.                     $col->setCssClass'col-md-8 large-8 small-8 columns' );
  97.                     $col->setType'html' );
  98.                     $col->setIndexer(1);
  99.                     $col->setNumberColumns(8);
  100.                     $this->em->persist($col);
  101.                     $col = new ColsByRow();
  102.                     $col->setRowId($row);
  103.                     $col->setName('column');
  104.                     $col->setCssClass'col-md-2 large-2 small-2 columns' );
  105.                     $col->setIndexer(1);
  106.                     $col->setNumberColumns(2);
  107.                     $this->em->persist($col);
  108.                     break;
  109.                 case 'two':
  110.                     $col = new ColsByRow();
  111.                     $col->setRowId($row);
  112.                     $col->setName('column');
  113.                     $col->setCssClass'col-md-6 large-6 small-12 columns' );
  114.                     $col->setType'html' );
  115.                     $col->setIndexer(1);
  116.                     $col->setNumberColumns(6);
  117.                     $this->em->persist($col);
  118.                     $col = new ColsByRow();
  119.                     $col->setRowId($row);
  120.                     $col->setName('column');
  121.                     $col->setCssClass'col-md-6 large-6 small-12 columns' );
  122.                     $col->setType'html' );
  123.                     $col->setIndexer(1);
  124.                     $col->setNumberColumns(6);
  125.                     $this->em->persist($col);
  126.                     break;
  127.                 case 'two-left':
  128.                     $col = new ColsByRow();
  129.                     $col->setRowId($row);
  130.                     $col->setName('column');
  131.                     $col->setCssClass'col-md-3 large-3 small-12 columns' );
  132.                     $col->setType'html' );
  133.                     $col->setIndexer(1);
  134.                     $col->setNumberColumns(3);
  135.                     $this->em->persist($col);
  136.                     $col = new ColsByRow();
  137.                     $col->setRowId($row);
  138.                     $col->setName('column');
  139.                     $col->setCssClass'col-md-9 large-9 small-12 columns' );
  140.                     $col->setType'html' );
  141.                     $col->setIndexer(1);
  142.                     $col->setNumberColumns(9);
  143.                     $this->em->persist($col);
  144.                     break;
  145.                 case 'two-right':
  146.                     $col = new ColsByRow();
  147.                     $col->setRowId($row);
  148.                     $col->setName('column');
  149.                     $col->setCssClass'col-md-9 large-9 small-12 columns' );
  150.                     $col->setType'html' );
  151.                     $col->setIndexer(1);
  152.                     $col->setNumberColumns(9);
  153.                     $this->em->persist($col);
  154.                     $col = new ColsByRow();
  155.                     $col->setRowId($row);
  156.                     $col->setName('column');
  157.                     $col->setCssClass'col-md-3 large-3 small-12 columns' );
  158.                     $col->setType'html' );
  159.                     $col->setNumberColumns(3);
  160.                     $col->setIndexer(1);
  161.                     $this->em->persist($col);
  162.                     break;
  163.                 case 'three':
  164.                     $col = new ColsByRow();
  165.                     $col->setRowId($row);
  166.                     $col->setName('column');
  167.                     $col->setCssClass'col-md-4 large-4 small-12 columns' );
  168.                     $col->setType'html' );
  169.                     $col->setIndexer(1);
  170.                     $col->setNumberColumns(4);
  171.                     $this->em->persist($col);
  172.                     $col = new ColsByRow();
  173.                     $col->setRowId($row);
  174.                     $col->setName('column');
  175.                     $col->setCssClass'col-md-4 large-4 small-12 columns' );
  176.                     $col->setType'html' );
  177.                     $col->setIndexer(1);
  178.                     $col->setNumberColumns(4);
  179.                     $this->em->persist($col);
  180.                     $col = new ColsByRow();
  181.                     $col->setRowId($row);
  182.                     $col->setName('column');
  183.                     $col->setCssClass'col-md-4 large-4 small-12 columns' );
  184.                     $col->setType'html' );
  185.                     $col->setIndexer(1);
  186.                     $col->setNumberColumns(4);
  187.                     $this->em->persist($col);
  188.                     break;
  189.             }
  190.             $this->em->flush();
  191.             $resp = array(
  192.                 'success'   => true,
  193.                 'error'     => false,
  194.                 'sectionId' => $section->getId(),
  195.                 'columns'   => $all['size'],
  196.                 'sectionName'   => $section->getTitle(),
  197.                 'msg'       => 'The section was created'
  198.             );
  199.         } catch (\Exception $e){
  200.             $resp = array(
  201.                 'success'   => false,
  202.                 'error'     => true,
  203.                 'msg'       => $e->getMessage()
  204.             );
  205.         }
  206.         return new JsonResponse($resp);
  207.     }
  208.     /**
  209.      * @Route("/", name="page_index", methods={"GET"})
  210.      */
  211.     public function index(PageRepository $pageRepository): Response
  212.     {
  213.         return $this->render('admin/page/index.html.twig', [
  214.             'pages' => $pageRepository->findAll(),
  215.         ]);
  216.     }
  217.     /**
  218.      * @Route("/html-builder/{id}", name="page_new", methods={"GET","POST"})
  219.      */
  220.     public function pageBuilder($id nullRequest $request): Response
  221.     {
  222.         $page $sections $rows $cols $content = array();
  223.         if( $id !== null ){
  224.             $page $this->em->getRepository(Page::class)->findOneBy(array( 'id' => $id ));
  225.             if(!is_object($page)){
  226.                 return $this->redirectToRoute('page_index');
  227.             }
  228.             $sections $this->em->getRepository(SectionsByPage::class)->findBy( array( 'pageId' => $page->getId() ), array( 'indexer' => 'ASC' ));
  229.             if(is_object($sections)){
  230.                 $rows $this->em->getRepository(RowsBySection::class)->findOneBy( array(
  231.                     'sectionId' => $sections[0]->getId()
  232.                 ));
  233.             }
  234.         }
  235.         $styles $this->em->getRepository(SectionStyles::class)->findAll();
  236.         return $this->render('admin/page/new.html.twig', array(
  237.             'styles'    => $styles,
  238.             'page'      => $page,
  239.             'sections'  => $sections,
  240.             'rows'      => $rows
  241.         ));
  242.     }
  243.     /**
  244.      * @Route("/create", name="page_create", methods={"POST"})
  245.      */
  246.     public function create(Request $request): Response
  247.     {
  248.         $resp = array(
  249.             'success'   => false,
  250.             'error'     => false,
  251.             'msg'       => "Something went wrong"
  252.         );
  253.         $all $request->request->all();
  254.         try{
  255.             $url "/" . ( $all['url'] !== '' strtolower(str_replace(' ''-'$all['url'])) : strtolower(str_replace(' ''-'$all['name'])) );
  256.             $page $this->em->getRepository(Page::class)->validatePageExist$url$all["name"]);
  257.             if(is_object($page)){
  258.                 $resp = array(
  259.                     'success'   => false,
  260.                     'error'     => false,
  261.                     'msg'       => 'The page already exist'
  262.                 );
  263.             } else {
  264.                 $page = new Page();
  265.                 $page->setName($all["name"]);
  266.                 $page->setUrl($all["name"]);
  267.                 $page->setCreatedAt(new \DateTime());
  268.                 $page->setVisible(1);
  269.                 $this->em->persist($page);
  270.                 $this->em->flush();
  271.                 $resp = array(
  272.                     'success'   => true,
  273.                     'error'     => false,
  274.                     'pageId'    => $page->getId(),
  275.                     'msg'       => 'The page was created'
  276.                 );
  277.             }
  278.         } catch (\Exception $e){
  279.             $resp = array(
  280.                 'success'   => false,
  281.                 'error'     => true,
  282.                 'msg'       => $e->getMessage()
  283.             );
  284.         }
  285.         return new JsonResponse($resp);
  286.     }
  287.     /**
  288.      * @Route("/create-element", name="element_create", methods={"POST"})
  289.      */
  290.     public function createElement(Request $req){
  291.         $all $req->request->all();
  292.         $column $this->em->getRepository(ColsByRow::class)->findOneBy( array(
  293.             'id'    => $all["column"]
  294.         ));
  295.         if(is_object($column)){
  296.             $content $this->em->getRepository(ContentElementsByColumns::class)->findBy( array(
  297.                 'columnId'  => $column->getId()
  298.             ));
  299.             switch ($all["action"]){
  300.                 case 'add':
  301.                     switch ( $all["option"] ){
  302.                         case 'text':
  303.                             $hash uniqid();
  304.                             $element = new ContentElementsByColumns();
  305.                             $element->setColumnId($column);
  306.                             $element->setInitHtml('<p>');
  307.                             $element->setEndHtml('</p>');
  308.                             $element->setType('p');
  309.                             $element->setKeyname('text');
  310.                             $element->setConfig('text');
  311.                             $element->setValue('demo');
  312.                             $element->setIndexer(COUNT($content) + );
  313.                             $element->setActive(0);
  314.                             $element->setCreatedAt(new \DateTime());
  315.                             $element->setAutoload(1);
  316.                             $element->setSlug('text-'.$hash);
  317.                             $element->setName('text-'.$hash);
  318.                             $this->em->persist($element);
  319.                             $this->em->flush();
  320.                             return $this->render('admin/page/components/element-render.html.twig', array(
  321.                                 'type'      => $all["option"],
  322.                                 'element'   => $element
  323.                             ) );
  324.                             break;
  325.                     }
  326.                     break;
  327.             }
  328.         }
  329.         return new Response(true);
  330.     }
  331.     /**
  332.      * @Route("/get-sections-by-index", name="get_sections_by_index", methods={"POST"})
  333.      */
  334.     public function getSectionsByIndex(Request $request){
  335.         $idPage $request->get('idPage'null);
  336.         $sections $this->em->getRepository(SectionsByPage::class)->findBy(array( 'pageId' => $idPage ),array('indexer' => 'ASC'));
  337.         return $this->render('admin/page/components/section-list.html.twig',array(
  338.             'sections'  => $sections
  339.         ));
  340.     }
  341.     /**
  342.      * @Route("/new-meta-item", name="new_meta_item", methods={"POST"})
  343.      */
  344.     public function newMetaItem(Request $req){
  345.         $resp = array(
  346.             'success'   => false,
  347.             'error'     => false,
  348.             'msg'       => 'No se pudo crear el item'
  349.         );
  350.         if($req->isXmlHttpRequest()){
  351.             $all $req->request->all();
  352.             $element $this->em->getRepository(ContentElementsByColumns::class)->findOneBy(array('id' => $all["id"]));
  353.             switch ($all["element"]){
  354.                 case 'list-item':
  355.                     $item $this->em->getRepository(ContentElementsByMeta::class)->findOneBy(array('type' => 'list-item'));
  356.                     if(is_object($item)){
  357.                         $newItem = clone $item;
  358.                         $newItem->setValue($all["title"]);
  359.                         $newItem->setContainerValue($all["text"]);
  360.                         $newItem->setContentElementId((int)$element->getId());
  361.                         $this->em->persist($newItem);
  362.                         $this->em->flush();
  363.                         $resp = array(
  364.                             'success'   => true,
  365.                             'error'     => false,
  366.                             'msg'       => 'Se creo el item'
  367.                         );
  368.                     }
  369.                     break;
  370.             }
  371.             return new JsonResponse($resp);
  372.         }
  373.         return $this->redirectToRoute('page_index');
  374.     }
  375.     /**
  376.      * @Route("/get-content-section", name="get_content_by_section", methods={"POST"})
  377.      */
  378.     public function getContentBySection(Request $request){
  379.         $sectionId $request->get('sectionId',null);
  380.         $section $this->em->getRepository(SectionsByPage::class)->findOneBy(array( 'id' => $sectionId ));
  381.         if(is_object($section)){
  382.             $rows $this->em->getRepository(RowsBySection::class)->findBy( array(
  383.                 'sectionId' => $section->getId()
  384.             ), array( 'indexer' => 'ASC' ));
  385.             //render grid with $rows
  386.             //call cols and content from twig
  387.             return $this->render('admin/page/components/grid-render-with-content.html.twig', array(
  388.                 'rows'    => $rows
  389.             ));
  390.         }
  391.         return new Response('');
  392.     }
  393.     /**
  394.      * @Route("/get-component", name="get_component_html", methods={"POST"})
  395.      */
  396.     public function getComponentHTMLByParam(Request $request){
  397.         $all $request->request->all();
  398.         $section $this->em->getRepository(SectionsByPage::class)->findOneBy( array( 'id' => $all['sectionId'] ) );
  399.         $row $this->em->getRepository(RowsBySection::class)->findOneBy( array( 'sectionId' => (int)$section->getId() ));
  400.         switch ( $all["columns"] ){
  401.             case 'one':
  402.                 $col $this->em->getRepository(ColsByRow::class)->findOneBy( array( 'rowId' => (int)$row->getId() ));
  403.                 return $this->render('admin/page/components/single-column.html.twig', array(
  404.                     'column'    => $col
  405.                 ));
  406.                 break;
  407.             default:
  408.                 $cols $this->em->getRepository(ColsByRow::class)->findBy( array( 'rowId' => (int)$row->getId() ));
  409.                 return $this->render('admin/page/components/grid-render.html.twig', array(
  410.                     'columns'    => $cols
  411.                 ));
  412.                 break;
  413.         }
  414.     }
  415.     /**
  416.      * @Route("/get-config-modal", name="get_config_to_modal_edit_element", methods={"POST"})
  417.      */
  418.     public function getConfigToModalEditElement(Request $request){
  419.         $all $request->request->all();
  420.         switch ( $all["element"] ){
  421.             case 'Section':
  422.                 $section $this->em->getRepository(SectionsByPage::class)->findOneBy( array( 'id' => $all['id'] ) );
  423.                 return $this->render('admin/page/html-builder/modal-change-section.html.twig', array(
  424.                     'section'    => $section
  425.                 ));
  426.                 break;
  427.             case 'Slider':
  428.                 $section $this->em->getRepository(SectionsByPage::class)->findOneBy( array( 'id' => $all['id'] ) );
  429.                 $reference $this->em->getRepository(ResourcesByPage::class)->findOneBy( array( 'id' => $section->getResourceId() ) );
  430.                 $slider $this->em->getRepository(Sliders::class)->findOneBy( array( 'id' => $reference->getIdItem() ) );
  431.                 $sliders $this->em->getRepository(Sliders::class)->findBy( array( 'visible' => true ) );
  432.                 return $this->render('admin/page/html-builder/modal-change-slider.html.twig', array(
  433.                     'slider'     => $slider,
  434.                     'section'    => $section,
  435.                     'sliders'    => $sliders
  436.                 ));
  437.                 break;
  438.             case 'Column':
  439.                 $column $this->em->getRepository(ColsByRow::class)->findOneBy( array( 'id' => $all['id'] ) );
  440.                 return $this->render('admin/page/html-builder/modal-edit-column.html.twig', array(
  441.                     'column'    => $column
  442.                 ));
  443.                 break;
  444.             case 'Element':
  445.                 $element $this->em->getRepository(ContentElementsByColumns::class)->findOneBy( array( 'id' => $all['id'] ) );
  446.                 switch ($all["argument"]){
  447.                     case 'text':
  448.                         return $this->render('admin/page/html-builder/modal-change-text.html.twig', array(
  449.                             'element'    => $element
  450.                         ));
  451.                         break;
  452.                     case 'image':
  453.                         return $this->render('admin/page/html-builder/modal-change-image.html.twig', array(
  454.                             'element'    => $element
  455.                         ));
  456.                         break;
  457.                     case 'separator':
  458.                         return $this->render('admin/page/html-builder/modal-change-separator.html.twig', array(
  459.                             'element'    => $element
  460.                         ));
  461.                         break;
  462.                     case 'list':
  463.                         if(array_key_exists('meta',$all)){
  464.                             $meta $this->em->getRepository(ContentElementsByMeta::class)->findOneBy( array( 'id' => $all["id"] ) );
  465.                             return $this->render('admin/page/html-builder/modal-meta-list.html.twig', array(
  466.                                 'element'    => $element,
  467.                                 'meta'      => $meta
  468.                             ));
  469.                         } else {
  470.                             $items $this->em->getRepository(ContentElementsByMeta::class)->findBy( array( 'contentElementId' => $element->getId() ) );
  471.                             return $this->render('admin/page/html-builder/modal-change-list.html.twig', array(
  472.                                 'element'    => $element,
  473.                                 'items'      => $items
  474.                             ));
  475.                         }
  476.                         break;
  477.                 }
  478.             case 'Reorder':
  479.                 switch ($all["argument"]){
  480.                     case 'section-reorder':
  481.                         $sections $this->em->getRepository(SectionsByPage::class)->findBy( array( 'pageId' => $all['id'] ), array( 'indexer'  => 'ASC' ) );
  482.                         return $this->render('admin/page/html-builder/modal-reorder-sections.html.twig', array(
  483.                             'sections'          => $sections,
  484.                             'sectionClicked'    => (int)$all['aux']
  485.                         ));
  486.                         break;
  487.                     case 'element-reorder':
  488.                         $element $this->em->getRepository(ContentElementsByColumns::class)->findOneBy(array( 'id' => $all["id"] ));
  489.                         $elements $this->em->getRepository(ContentElementsByColumns::class)->findBy(array( 'columnId'  => $element->getColumnId()), array('indexer' => 'ASC'));
  490.                         return $this->render('admin/page/html-builder/modal-reorder-elements.html.twig', array(
  491.                             'element'    => $element,
  492.                             'elements'   => $elements
  493.                         ));
  494.                         break;
  495.                     case 'separator':
  496.                         return $this->render('admin/page/html-builder/modal-change-separator.html.twig', array(
  497.                             'element'    => $element
  498.                         ));
  499.                         break;
  500.                 }
  501.                 break;
  502.             default:
  503.                 break;
  504.         }
  505.         return new Response('');
  506.     }
  507.     /**
  508.      * @Route("/save-changes-element", name="save_changes_element", methods={"POST"})
  509.      */
  510.     public function saveChangesElement(Request $request){
  511.         $all $request->request->all();
  512.         $files $request->files->all();
  513.         $resp = array(
  514.             'success'   => false,
  515.             'error'     => false,
  516.             'msg'       => null
  517.         );
  518.         //dd($all, $files);
  519.         error_log($all["element"]);
  520.         try{
  521.             switch ( $all["element"] ){
  522.                 case 'background':
  523.                     $section $this->em->getRepository(SectionsByPage::class)->findOneBy( array( 'id' => $all['id'] ) );
  524.                     $section->setHasContainer( ( array_key_exists('fullwidth'$all) ? false true) );
  525.                     if($files["image"] !== null){
  526.                         $img $files["image"];
  527.                         $fileName md5 uniqid () ) . '.' $img->guessExtension();
  528.                         $original_name $img->getClientOriginalName();
  529.                         $img->move $this->getParameter'images_folder' ), $fileName );
  530.                         $path '/' $this->getParameter'images_folder' ) . $fileName;
  531.                         $section->setBackground($path);
  532.                     }
  533.                     $this->em->persist($section);
  534.                     $this->em->flush();
  535.                     $resp = array(
  536.                         'success'   => true,
  537.                         'error'     => false,
  538.                         'url'       => $section->getBackground(),
  539.                         'element'   => $all["element"],
  540.                         'msg'       => 'Success'
  541.                     );
  542.                     break;
  543.                 case 'text':
  544.                 case 'title':
  545.                 case 'subtitle':
  546.                     $content $this->em->getRepository(ContentElementsByColumns::class)->findOneBy(array(
  547.                         'id'    => $all['id']
  548.                     ));
  549.                     if(is_object($content)){
  550.                         $content->setColor($all["colorText"]);
  551.                         $content->setAlign($all["align"]);
  552.                         $content->setValue($all["text"]);
  553.                         if( $all["type"] == 'h2' ){
  554.                             $content->setInitHtml('<h2 style="margin:0;font-family:;font-weight:400;">');
  555.                             $content->setEndHtml('</h2>');
  556.                             $content->setType('h2');
  557.                             $content->setKeyname('title');
  558.                         } elseif ($all["type"] == 'h4'){
  559.                             $content->setInitHtml('<h4 style="font-family:;font-weight:400;">');
  560.                             $content->setEndHtml('</h4>');
  561.                             $content->setType('h4');
  562.                             $content->setKeyname('subtitle');
  563.                         } else {
  564.                             $content->setInitHtml('<p>');
  565.                             $content->setEndHtml('</p>');
  566.                             $content->setType('p');
  567.                             $content->setKeyname('text');
  568.                         }
  569.                         $this->em->persist($content);
  570.                         $this->em->flush();
  571.                         $resp = array(
  572.                             'success'   => true,
  573.                             'error'     => false,
  574.                             'element'   => $all["element"],
  575.                             'msg'       => 'Success'
  576.                         );
  577.                     }
  578.                     break;
  579.                 case 'column':
  580.                     $column $this->em->getRepository(ColsByRow::class)->findOneBy( array( 'id' => $all['id'] ) );
  581.                     if(is_object($column)){
  582.                         if($files["image"] !== null){
  583.                             $img $files["image"];
  584.                             $fileName md5 uniqid () ) . '.' $img->guessExtension();
  585.                             $original_name $img->getClientOriginalName();
  586.                             $img->move $this->getParameter'images_folder' ), $fileName );
  587.                             $path '/' $this->getParameter'images_folder' ) . $fileName;
  588.                             $column->setBackgroundImage($path);
  589.                         }
  590.                         $column->setBackgroundColor( ( $all["colorText"] !== "" $all["colorText"] : null ) );
  591.                         $column->setName( ( $all["name"] !== "" $all["name"] : null ) );
  592.                         $column->setAlign( ( $all["align"] !== "" $all["align"] : null ) );
  593.                         $column->setMargin( ( $all["margin"] !== "" $all["margin"] : null ) );
  594.                         $column->setPadding( ( $all["padding"] !== "" $all["padding"] : null ) );
  595.                         $column->setCssClass( ( $all["class-css"] !== "" $all["class-css"] : null ) );
  596.                         $column->setJsId( ( $all["js-id"] !== "" $all["js-id"] : null ) );
  597.                         $column->setStylesInline( ( $all["styles-css"] !== "" $all["styles-css"] : null ) );
  598.                         $this->em->persist($column);
  599.                         $this->em->flush();
  600.                         $resp = array(
  601.                             'success'   => true,
  602.                             'error'     => false,
  603.                             'element'   => $all["element"],
  604.                             'msg'       => 'Success'
  605.                         );
  606.                     }
  607.                     break;
  608.                 case 'section':
  609.                     $section $this->em->getRepository(SectionsByPage::class)->findOneBy( array( 'id' => $all['id'] ) );
  610.                     if(is_object($section)){
  611.                         if($files["image"] !== null){
  612.                             $img $files["image"];
  613.                             $fileName md5 uniqid () ) . '.' $img->guessExtension();
  614.                             $original_name $img->getClientOriginalName();
  615.                             $img->move $this->getParameter'images_folder' ), $fileName );
  616.                             $path '/' $this->getParameter'images_folder' ) . $fileName;
  617.                             $section->setBackground($path);
  618.                         }
  619.                         $section->setBackgroundColor( ( $all["colorText"] !== "" $all["colorText"] : null ) );
  620.                         $section->setTitle( ( $all["title"] !== "" $all["title"] : null ) );
  621.                         $section->setMargin( ( $all["margin"] !== "" $all["margin"] : null ) );
  622.                         $section->setPadding( ( $all["padding"] !== "" $all["padding"] : null ) );
  623.                         $section->setCssClass( ( $all["class-css"] !== "" $all["class-css"] : null ) );
  624.                         $section->setJsId( ( $all["js-id"] !== "" $all["js-id"] : null ) );
  625.                         $section->setStylesInline( ( $all["styles-css"] !== "" $all["styles-css"] : null ) );
  626.                         $this->em->persist($section);
  627.                         $this->em->flush();
  628.                         $resp = array(
  629.                             'success'   => true,
  630.                             'error'     => false,
  631.                             'element'   => $all["element"],
  632.                             'msg'       => 'Success'
  633.                         );
  634.                     }
  635.                     break;
  636.                 case 'list-item':
  637.                     $item $this->em->getRepository(ContentElementsByMeta::class)->findOneBy(array(
  638.                         'id'    => $all["id"]
  639.                     ));
  640.                     if(is_object($item)){
  641.                         $item->setValue($all["title"]);
  642.                         $item->setContainerValue($all["text"]);
  643.                         $this->em->persist($item);
  644.                         $this->em->flush();
  645.                         $resp = array(
  646.                             'success'   => true,
  647.                             'error'     => false,
  648.                             'element'   => $all["element"],
  649.                             'msg'       => 'Success'
  650.                         );
  651.                     }
  652.                     break;
  653.                 default:
  654.                     // do anything
  655.                     break;
  656.             }
  657.         } catch ( \Exception $e ){
  658.             $resp = array(
  659.                 'success'   => false,
  660.                 'error'     => true,
  661.                 'msg'       => $e->getMessage()
  662.             );
  663.         }
  664.         return new JsonResponse($resp);
  665.     }
  666.     /**
  667.      * @Route("/update-index-elements", name="update_index_elements", methods={"POST"})
  668.      */
  669.     public function updateIndexElements(Request $request){
  670.         if( $request->isXmlHttpRequest() ){
  671.             $resp = array(
  672.                 'success'   => false,
  673.                 'error'     => false,
  674.                 'msg'       => null
  675.             );
  676.             $all $request->request->all();
  677.             switch ( $all["element"] ){
  678.                 case 'section':
  679.                     $section $this->em->getRepository(SectionsByPage::class)->findOneBy( array( 'id' => $all["id"] ) );
  680.                     if(is_object($section)){
  681.                         try{
  682.                             //update index records in left or right direction
  683.                             if( (int)$all["index"] < $section->getIndexer() ){
  684.                                 $this->em->getRepository(SectionsByPage::class)->updateIndexerSectionRigth$section->getPageId()->getId(), (int)$all["index"] , $section->getIndexer() );
  685.                             } else {
  686.                                 $this->em->getRepository(SectionsByPage::class)->updateIndexerSectionLeft$section->getPageId()->getId(), (int)$all["index"] + $section->getIndexer() );
  687.                             }
  688.                             $section->setIndexer((int)$all["index"]);
  689.                             $this->em->persist($section);
  690.                             $this->em->flush();
  691.                             $resp = array(
  692.                                 'success'   => true,
  693.                                 'error'     => false,
  694.                                 'msg'       => 'The item position was updated'
  695.                             );
  696.                         } catch (\Exception $e){
  697.                             $resp = array(
  698.                                 'success'   => false,
  699.                                 'error'     => true,
  700.                                 'msg'       => $e->getMessage()
  701.                             );
  702.                         }
  703.                     }
  704.                     break;
  705.                 case 'element':
  706.                     $element $this->em->getRepository(ContentElementsByColumns::class)->findOneBy( array('id' => $all["id"]) );
  707.                     if(is_object($element)){
  708.                         try{
  709.                             //update index records in left or right direction
  710.                             if( (int)$all["index"] < $element->getIndexer() ){
  711.                                 $this->em->getRepository(ContentElementsByColumns::class)->updateIndexerSectionRigth$element->getColumnId()->getId(), (int)$all["index"] , $element->getIndexer() );
  712.                             } else {
  713.                                 $this->em->getRepository(ContentElementsByColumns::class)->updateIndexerSectionLeft$element->getColumnId()->getId(), (int)$all["index"] + $element->getIndexer() );
  714.                             }
  715.                             $element->setIndexer((int)$all["index"]);
  716.                             $this->em->persist($element);
  717.                             $this->em->flush();
  718.                             $resp = array(
  719.                                 'success'   => true,
  720.                                 'error'     => false,
  721.                                 'msg'       => 'The item position was updated'
  722.                             );
  723.                         } catch (\Exception $e){
  724.                             $resp = array(
  725.                                 'success'   => false,
  726.                                 'error'     => true,
  727.                                 'msg'       => $e->getMessage()
  728.                             );
  729.                         }
  730.                     }
  731.                     break;
  732.                 case 'team':
  733.                     $single $this->em->getRepository(Team::class)->findOneBy( array('id' => $all["id"]) );
  734.                     if(is_object($single)){
  735.                         try{
  736.                             //update index records in left or right direction
  737.                             if( (int)$all["index"] < $single->getIndexer() ){
  738.                                 error_log('El nuevo indice es menor al que tenia antes el elemento');
  739.                                 $this->em->getRepository(Team::class)->updateIndexerSectionRigth( (int)$all["index"] , $single->getIndexer() );
  740.                             } else {
  741.                                 error_log('El nuevo indice es MAYOR al que tenia antes el elemento');
  742.                                 $this->em->getRepository(Team::class)->updateIndexerSectionLeft((int)$all["index"] + $single->getIndexer() );
  743.                             }
  744.                             error_log('Nuevo Index: ' . ((int)$all["index"]));
  745.                             error_log($single->getIndexer());
  746.                             $single->setIndexer((int)$all["index"]);
  747.                             $this->em->persist($single);
  748.                             $this->em->flush();
  749.                             $resp = array(
  750.                                 'success'   => true,
  751.                                 'error'     => false,
  752.                                 'reload'    => true,
  753.                                 'msg'       => 'The item position was updated'
  754.                             );
  755.                         } catch (\Exception $e){
  756.                             $resp = array(
  757.                                 'success'   => false,
  758.                                 'error'     => true,
  759.                                 'msg'       => $e->getMessage()
  760.                             );
  761.                         }
  762.                     }
  763.                     break;
  764.                 case 'services':
  765.                     $single $this->em->getRepository(Services::class)->findOneBy( array('id' => $all["id"]) );
  766.                     if(is_object($single)){
  767.                         try{
  768.                             //update index records in left or right direction
  769.                             if( (int)$all["index"] < $single->getIndexer() ){
  770.                                 error_log('El nuevo indice es menor al que tenia antes el elemento');
  771.                                 $this->em->getRepository(Services::class)->updateIndexerSectionRigth( (int)$all["index"] , $single->getIndexer() );
  772.                             } else {
  773.                                 error_log('El nuevo indice es MAYOR al que tenia antes el elemento');
  774.                                 $this->em->getRepository(Services::class)->updateIndexerSectionLeft((int)$all["index"] + $single->getIndexer() );
  775.                             }
  776.                             error_log('Nuevo Index: ' . ((int)$all["index"]));
  777.                             error_log($single->getIndexer());
  778.                             $single->setIndexer((int)$all["index"]);
  779.                             $this->em->persist($single);
  780.                             $this->em->flush();
  781.                             $resp = array(
  782.                                 'success'   => true,
  783.                                 'error'     => false,
  784.                                 'reload'    => true,
  785.                                 'msg'       => 'The item position was updated'
  786.                             );
  787.                         } catch (\Exception $e){
  788.                             $resp = array(
  789.                                 'success'   => false,
  790.                                 'error'     => true,
  791.                                 'msg'       => $e->getMessage()
  792.                             );
  793.                         }
  794.                     }
  795.                     break;
  796.             }
  797.             return new JsonResponse($resp);
  798.         }
  799.         return $this->redirectToRoute('page_index');
  800.     }
  801.     /**
  802.      * @Route("/delete-element", name="delete_element", methods={"POST"})
  803.      */
  804.     public function deleteElement(Request $request){
  805.         if($request->isXmlHttpRequest()){
  806.             $all $request->request->all();
  807.             $resp = array(
  808.                 'success'   => false,
  809.                 'error'     => false,
  810.                 'msg'       => null
  811.             );
  812.             switch ( $all["element"] ){
  813.                 case 'section':
  814.                     $section $this->em->getRepository(SectionsByPage::class)->findOneBy( array( 'id' => $all["id"] ) );
  815.                     if(is_object($section)){
  816.                         //delete all rows, cols and content
  817.                         $this->em->remove($section);
  818.                         $this->em->flush();
  819.                         $resp = array(
  820.                             'success'   => true,
  821.                             'error'     => false,
  822.                             'msg'       => null,
  823.                             'element'   => $all["element"]
  824.                         );
  825.                     }
  826.                     break;
  827.             }
  828.             return new JsonResponse($resp);
  829.         }
  830.         return $this->redirectToRoute('page_index');
  831.     }
  832.     /**
  833.      * @Route("/delete-meta-element", name="delete_meta_element", methods={"POST"})
  834.      */
  835.     public function deleteMetaElement(Request $request){
  836.         if($request->isXmlHttpRequest()){
  837.             $all $request->request->all();
  838.             $resp = array(
  839.                 'success'   => false,
  840.                 'error'     => false,
  841.                 'msg'       => null
  842.             );
  843.             $meta $this->em->getRepository(ContentElementsByMeta::class)->findOneBy( array( 'id' => $all["meta"] ) );
  844.             if(is_object($meta)){
  845.                 //delete all rows, cols and content
  846.                 $this->em->remove($meta);
  847.                 $this->em->flush();
  848.                 $resp = array(
  849.                     'success'   => true,
  850.                     'error'     => false,
  851.                     'msg'       => null
  852.                 );
  853.             }
  854.             return new JsonResponse($resp);
  855.         }
  856.         return $this->redirectToRoute('page_index');
  857.     }
  858.     public function getContentElements$arg$sectionId$rows null$cols null ){
  859.         $section $this->em->getRepository(SectionsByPage::class)->findOneBy( array( 'id'  => $sectionId ) );
  860.         switch ( $section->getStyleId()->getCode() ){
  861.             case 'Slider':
  862.             case 'Background':
  863.                 return $this->render('admin/page/components/single-column-with-content.html.twig', array(
  864.                     'section'    => $section,
  865.                     'argument'   => $arg
  866.                 ));
  867.                 break;
  868.             default:
  869.                 return new Response(" ");
  870.                 break;
  871.         }
  872.     }
  873.     public function getGridWithContent$arg$elementId$cols null ){
  874.         if($cols != null){
  875.         } else {
  876.             switch ( $arg ){
  877.                 case 'column':
  878.                     $cols $this->em->getRepository(ColsByRow::class)->findBy( array( 'rowId'  => $elementId ) );
  879.                     return $this->render('admin/page/components/grid-render-cols-by-row.html.twig', array(
  880.                         'columns'    => $cols
  881.                     ));
  882.                     break;
  883.                 case 'content':
  884.                     $contents $this->em->getRepository(ContentElementsByColumns::class)->findBy( array( 'columnId'  => $elementId ), array('indexer' => 'ASC') );
  885.                     return $this->render('admin/page/components/grid-element-render.html.twig', array(
  886.                         'contents'    => $contents
  887.                     ));
  888.                     break;
  889.             }
  890.         }
  891.         return new Response('');
  892.     }
  893. }