src/Trinity/SliderBundle/Controller/SliderController.php line 442

Open in your IDE?
  1. <?php
  2. namespace App\Trinity\SliderBundle\Controller;
  3. use App\CmsBundle\Controller\StorageController;
  4. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Form\Extension\Core\Type\TextType;
  10. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  11. /* Required for file upload */
  12. use Symfony\Component\HttpFoundation\File\UploadedFile;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use App\CmsBundle\Entity\Log;
  15. class SliderController extends StorageController
  16. {
  17.     /**
  18.      * @Route("/admin/slider", name="admin_mod_slider")
  19.      * @Template()
  20.      */
  21.     public function indexActionRequest $request$id null)
  22.     {
  23.         parent::init($request);
  24.         $this->breadcrumbs->addRouteItem($this->trans("Slider"'cms'), "admin_mod_slider");
  25.         $sliders $this->getDoctrine()->getRepository('TrinitySliderBundle:Slider')->findBy([
  26.             'language' => $this->language,
  27.             'settings' => $this->Settings,
  28.         ]);
  29.         $slider_used = [];
  30.         $blocks $this->getDoctrine()->getRepository('CmsBundle:PageBlock')->findByData('TrinitySliderBundle');
  31.         foreach($blocks as $Block){
  32.             $p $Block->getWrapper()->getPage();
  33.             if($p->getLanguage() == $this->language){
  34.                 $data $Block->getBundleData(true);
  35.                 if (isset($data['id'])) {
  36.                     $slider_used[] = $data['id'];
  37.                 }
  38.             }
  39.         }
  40.         return $this->attributes(array(
  41.             'slider_used' => $slider_used,
  42.             'sliders' => $sliders
  43.         ));
  44.     }
  45.     /**
  46.      * @Route("/admin/slider/edit/{id}/add", name="admin_mod_slider_edit_add")
  47.      * @Template()
  48.      */
  49.     public function addSlideActionRequest $request$id null)
  50.     {
  51.         parent::init($request);
  52.         
  53.         $Slider $this->getDoctrine()->getRepository('TrinitySliderBundle:Slider')->find($id);
  54.         $Entry = new \App\Trinity\SliderBundle\Entity\Entry();
  55.         $Entry->setSlider($Slider);
  56.         $file $_FILES['newSlideImage'];
  57.         $em $this->getDoctrine()->getManager();
  58.         $Parent $this->getDoctrine()->getRepository('CmsBundle:Mediadir')->findPathByName($em, (!empty($this->Settings->getHost()) ? $this->Settings->getHost() . '/' '') . 'Slider/' $Slider->getLabel(), $this->language);
  59.         // Create UploadedFile-object
  60.         $UploadedFile = new UploadedFile($file['tmp_name'], $file['name'], $file['type'], (int)$file['error'], true );
  61.         $Media = new \App\CmsBundle\Entity\Media();
  62.         $Media->setParent($Parent);
  63.         $Media->setLabel($file['name']);
  64.         $Media->setDateAdd();
  65.         $Media->setFile($UploadedFile); // Link UploadedFile to the media entity
  66.         $Media->preUpload(); // Prepare file and path
  67.         $Media->upload(); // Upload actual file
  68.         if($Entry->hasMedia()){
  69.             $PrevMedia $Entry->getMedia();
  70.             try{ $em->remove($PrevMedia); }catch(\Exception $e){}
  71.         }
  72.         $Entry->setMedia($Media);
  73.         $em->persist($Media);
  74.         $em->persist($Entry);
  75.         $em->flush();
  76.         // FIXME how to deal wit hold sliders?
  77.         $Slider->addEntry($Entry);
  78.         $em->persist($Slider);
  79.         $em->flush();
  80.         return new JsonResponse(array('success' => true'entryid' => $Entry->getId(), 'image' => '/' $Media->getWebPath()));
  81.     }
  82.     /**
  83.      * @Route("/admin/slider/edit/{id}", name="admin_mod_slider_edit")
  84.      * @Template()
  85.      */
  86.     public function editActionRequest $request$id null)
  87.     {
  88.         parent::init($request);
  89.         $em $this->getDoctrine()->getManager();
  90.         $this->breadcrumbs->addRouteItem($this->trans("Slider"'cms'), "admin_mod_slider");
  91.         $new false;
  92.         if( (int)$id ){
  93.             // Edit
  94.             $Slider $this->getDoctrine()->getRepository('TrinitySliderBundle:Slider')->find($id);
  95.             $this->breadcrumbs->addRouteItem($Slider->getLabel(), "admin_mod_slider_edit");
  96.         }else{
  97.             $new true;
  98.             // Add
  99.             $Slider = new \App\Trinity\SliderBundle\Entity\Slider();
  100.             $this->breadcrumbs->addRouteItem($this->trans("Toevoegen"'cms'), "admin_mod_slider_edit");
  101.             $Slider->setLanguage($this->language);
  102.             $Slider->setSettings($this->Settings);
  103.         }
  104.         $saved false;
  105.         $form $this->createFormBuilder($Slider)
  106.             ->add('label'TextType::class, array('label' => $this->trans('Slider titel''cms')));
  107.         if(!$request->isXmlHttpRequest() && $id 0){
  108.             $form $form->add('show_title'CheckboxType::class, array('label' => $this->trans('Titel tonen''cms'), 'required' => false))
  109.                 ->add('show_content'CheckboxType::class, array('label' => $this->trans('Sub titel tonen''cms'), 'required' => false))
  110.                 ->add('classes'TextType::class, array('label' => $this->trans('Classes''cms'), 'required' => false))
  111.                 ->add('arrows'CheckboxType::class, ['label' => $this->trans('Pijlen''cms'), 'required' => false])
  112.                 ->add('fade'CheckboxType::class, ['label' => $this->trans('Vervagen''cms'), 'required' => false])
  113.                 ->add('auto_play'CheckboxType::class, ['label' => $this->trans('Automatisch''cms'), 'required' => false])
  114.                 ->add('dots'CheckboxType::class, ['label' => $this->trans('Toon paginatie''cms'), 'required' => false])
  115.                 ->add('center_mode'CheckboxType::class, ['label' => $this->trans('Centreren''cms'), 'required' => false])
  116.                 ->add('infinite'CheckboxType::class, ['label' => $this->trans('Oneindig''cms'), 'required' => false])
  117.                 ->add('scroll_speed'TextType::class, ['label' => $this->trans('Slide snelheid (ms)''cms'), 'required' => false])
  118.                 ->add('auto_speed'TextType::class, ['label' => $this->trans('Automatisch sliden na ... (ms)''cms'), 'required' => false])
  119.             ;
  120.         }
  121.         $form $form->setMethod('post')
  122.             ->getForm();
  123.         $form->handleRequest($request);
  124.         if ($form->isSubmitted() && $form->isValid()) {
  125.             // Store in database
  126.             if($request->isXmlHttpRequest()){
  127.                 $Slider->setArrows(true);
  128.                 $Slider->setAutoPlay(true);
  129.                 $Slider->setDots(true);
  130.                 $Slider->setArrows(true);
  131.                 $Slider->setInfinite(true);
  132.             }
  133.             $em->persist($Slider);
  134.             if(isset($_POST['positions']) && trim($_POST['positions']) != ''){
  135.                 $sort = [];
  136.                 foreach(explode(','$_POST['positions']) as $k => $v){
  137.                     $sort[(int)$v] = $k;
  138.                 }
  139.                 // dump($sort);die();
  140.             }
  141.             // Delete entries
  142.             $existingEntries $Slider->getEntries();
  143.             foreach($existingEntries as $Entry){
  144.                 if(empty($_POST['slide']) || !array_key_exists($Entry->getId(), $_POST['slide'])){
  145.                     $em->remove($Entry);
  146.                 }
  147.             }
  148.             // Update entries
  149.             if(!empty($_POST['slide'])){
  150.                 foreach($_POST['slide'] as $slideid => $slideData){
  151.                     $SlideEntry $this->getDoctrine()->getRepository('TrinitySliderBundle:Entry')->find($slideid);
  152.                     if (empty($SlideEntry))
  153.                     {
  154.                         $SlideEntry = new \App\Trinity\SliderBundle\Entity\Entry();
  155.                         $SlideEntry->setSlider($Slider);
  156.                         $SlideEntry->setPosition($this->getDoctrine()->getRepository('TrinitySliderBundle:Entry')->getHighestPosition($Slider));
  157.                     }
  158.                     $SlideEntry->setLabel($slideData['title']);
  159.                     $SlideEntry->setContent($slideData['content']);
  160.                     if( substr($slideid01) == '_' ){
  161.                         // Temporary ID link
  162.                         $mid str_replace('_'''$slideid);
  163.                         if(!empty($mid)){
  164.                             $m $this->getDoctrine()->getRepository('CmsBundle:Media')->find($mid);
  165.                             if($m) {
  166.                                 // Add media to the entity
  167.                                 $SlideEntry->setMedia($m);
  168.                             }
  169.                         }
  170.                     }
  171.                     if(isset($_POST['block_config'][$slideid]['buttons']))
  172.                     {
  173.                         $buttons $_POST['block_config'][$slideid]['buttons'];
  174.                         $SlideEntry->setButtons($buttons);
  175.                     } else {
  176.                         $SlideEntry->setButtons(null);
  177.                     }
  178.                     // Find sort
  179. //                    if(isset($sort[$SlideEntry->getId()])){
  180. //                        $SlideEntry->setPosition($sort[$SlideEntry->getId()]);
  181. //                    }
  182.                     $em->persist($SlideEntry);
  183.                 }
  184.             }
  185.             $em->flush();
  186.             $Syslog = new Log();
  187.             $Syslog->setUser($this->getUser());
  188.             $Syslog->setUsername($this->getUser()->getUsername());
  189.             $Syslog->setBundle('slider');
  190.             $Syslog->setType('slide');
  191.             $Syslog->setStatus('info');
  192.             $Syslog->setObjectId($Slider->getId());
  193.             $Syslog->setSettings($this->Settings);
  194.             if($new){
  195.                 $Syslog->setAction('add');
  196.                 $Syslog->setMessage('Slider \'' $Slider->getLabel() . '\' toegevoegd.');
  197.             }else{
  198.                 $Syslog->setAction('update');
  199.                 $Syslog->setMessage('Slider \'' $Slider->getLabel() . '\' gewijzigd.');
  200.             }
  201.             $em->persist($Syslog);
  202.             $em->flush();
  203.             // if cache is enabled, find pages with blog and reset them.
  204.             $this->resetPageCacheThatContainedBundle('TrinitySliderBundle'$this->Settings);
  205.             if(!$request->isXmlHttpRequest()){
  206.                 if(empty($_POST['inline_save'])){
  207.                     return $this->redirect($this->generateUrl('admin_mod_slider'));
  208.                 }else{
  209.                     return $this->redirect($this->generateUrl('admin_mod_slider_edit', ['id' => $Slider->getId()]));
  210.                 }
  211.             }else{
  212.                 $saved true;
  213.             }
  214.         }
  215.         $maxFileSize 10;
  216.         try{
  217.             $maxFileSize = (int)ini_get('upload_max_filesize');
  218.         }catch(\Exception $e){
  219.             // Nothing going on here
  220.         }
  221.         $slider_options = [
  222.             'arrows'         => $Slider->getArrows(),
  223.             'fade'           => $Slider->getFade(),
  224.             'autoplay'       => false//$Slider->getAutoPlay(),
  225.             'dots'           => $Slider->getDots(),
  226.             'centerMode'     => $Slider->getCenterMode(),
  227.             'infinite'       => $Slider->getInfinite(),
  228.             'speed'          => $Slider->getScrollSpeed(),
  229.             'autoplaySpeed'  => $Slider->getAutoSpeed(),
  230.         ];
  231.         $slider_options json_encode($slider_options);
  232.         // Don't lookup a Mediadir if the Entry isn't saved yet. This prevents creation of empty media dirs.
  233.         if (empty($Slider->getId())) {
  234.             $HostRootId null;
  235.             $ParentId null;
  236.         } else {
  237.             $HostRootId $this->getDoctrine()->getRepository('CmsBundle:Mediadir')->findPathByName($em, (!empty($this->Settings->getHost()) ? $this->Settings->getHost() : ''), $this->language);
  238.             $ParentId $this->getDoctrine()->getRepository('CmsBundle:Mediadir')->findPathByName($em, (!empty($this->Settings->getHost()) ? $this->Settings->getHost() . '/' '') . 'Slider/' $Slider->getLabel(), $this->language);
  239.         }
  240.         return $this->attributes(array(
  241.             'form'        => $form->createView(),
  242.             'Slider'      => $Slider,
  243.             'maxFileSize' => $maxFileSize,
  244.             'slider_options' => $slider_options,
  245.             'saved'       => (bool)$saved,
  246.             'parentid'    => $ParentId,
  247.             'hostrootid'  => $HostRootId,
  248.         ));
  249.     }
  250.     /**
  251.      * @Route("/admin/slider/delete/{id}", name="admin_mod_slider_delete")
  252.      * @Template()
  253.      */
  254.     public function deleteAction(Request $request$id null)
  255.     {
  256.         parent::init($request);
  257.         $em $this->getDoctrine()->getManager();
  258.         $Slider $em->getRepository('TrinitySliderBundle:Slider')->find($id);
  259.         $parents = [];
  260.         if(!is_null($Slider))
  261.         {
  262.             $label $Slider->getLabel();
  263.             $entries $Slider->getEntries();
  264.             //$Mediadir = $em->getRepository('CmsBundle:Mediadir')->findPathByName($em, (!empty($this->Settings->getHost()) ? $this->Settings->getHost() . '/' : '') . 'Slider/' . $Slider->getLabel(), $this->language);
  265.             $Slider->setSettings(null);
  266.             foreach($entries as $entity)
  267.             {
  268.                 // DISABLE media removal because there is a conflict when two slide's use the same media file
  269.                 /*
  270.                 $media = $entity->getMedia();
  271.                 if (!empty($media) && !empty($Mediadir))
  272.                 {
  273.                     $parent = $media->getParent();
  274.                     if (!empty($parent) && $Mediadir->getId() == $parent->getId())
  275.                     {
  276.                         if($parent->countAll() == 0)
  277.                         {
  278.                             $parents[$parent->getId()] = $parent;
  279.                         }
  280.                         $media->removePhysicalFiles();
  281.                         $em->remove($media);
  282.                     }
  283.                 }
  284.                 $mobmedia = $entity->getMobilemedia();
  285.                 if (!empty($mobmedia) && !empty($Mediadir))
  286.                 {
  287.                     $parent = $mobmedia->getParent();
  288.                     if(!empty($parent) && $Mediadir->getId() == $parent->getId())
  289.                     {
  290.                         if($parent->countAll() == 0)
  291.                         {
  292.                             $parents[$parent->getId()] = $parent;
  293.                         }
  294.                         $mobmedia->removePhysicalFiles();
  295.                         $em->remove($mobmedia);
  296.                     }
  297.                 }*/
  298.                 $entity->setMedia(null);
  299.                 $entity->setMobileMedia(null);
  300.                 
  301.                 $em->remove($entity);
  302.             }
  303.             /*
  304.             // remove mediadir
  305.             foreach($parents as $p)
  306.             {
  307.                 $em->remove($p);
  308.             }
  309.             // Remove root mediadir
  310.             //$em->remove($Mediadir);
  311.              */
  312.             $em->remove($Slider);
  313.             $em->flush();
  314.             $Syslog = new Log();
  315.             $Syslog->setUser($this->getUser());
  316.             $Syslog->setUsername($this->getUser()->getUsername());
  317.             $Syslog->setBundle('slider');
  318.             $Syslog->setType('slide');
  319.             $Syslog->setStatus('info');
  320.             $Syslog->setObjectId($id);
  321.             $Syslog->setSettings($this->Settings);
  322.             $Syslog->setAction('delete');
  323.             $Syslog->setMessage('Slider \'' $label '\' verwijderd.');
  324.             $em->persist($Syslog);
  325.             $em->flush();
  326.             // if cache is enabled, find pages with blog and reset them.
  327.             $this->resetPageCacheThatContainedBundle('TrinitySliderBundle'$this->Settings);
  328.         }
  329.         return $this->redirect($this->generateUrl('admin_mod_slider'));
  330.     }
  331.     /**
  332.      * Show bundle content to front
  333.      *
  334.      * @param  array  $config Array with configuration options
  335.      * @param  array  $params Additional parameters
  336.      *
  337.      * @return string         HTML
  338.      */
  339.     public function showAction($config$params = array())
  340.     {
  341.         // View slider
  342.         $Slider $this->getDoctrine()->getRepository('TrinitySliderBundle:Slider')->findOneById($config['id']);
  343.         
  344.         if($Slider){
  345.             $slider_options = [
  346.                 'arrows'         => $Slider->getArrows(),
  347.                 'fade'           => $Slider->getFade(),
  348.                 'autoplay'       => $Slider->getAutoPlay(),
  349.                 'dots'           => $Slider->getDots(),
  350.                 'centerMode'     => $Slider->getCenterMode(),
  351.                 'infinite'       => $Slider->getInfinite(),
  352.                 'speed'          => $Slider->getScrollSpeed(),
  353.                 'autoplaySpeed'  => $Slider->getAutoSpeed(),
  354.                 'slidesToShow'   => (int)$Slider->getSlidesToShow(),
  355.                 'slidesToScroll' => (int)$Slider->getSlidesToScroll(),
  356.             ];
  357.             // dump($slider_options);die();
  358.             $slider_options json_encode($slider_options);
  359.             $entries $Slider->getEntries();
  360.             foreach($entries as $index => $Entry){
  361.                 if(!$Entry->getEnabled()){
  362.                     unset($entries[$index]);
  363.                     continue;
  364.                 }
  365.                 $buttonUrl $Entry->getButtonUrl();
  366.                 if(preg_match('/^page:(\d+):(.*?)$/'$buttonUrl$matches)){
  367.                     $Page $this->getDoctrine()->getRepository('CmsBundle:Page')->find($matches[1]);
  368.                     $buttonUrl $this->generateUrl($Page->getSlugKey());
  369.                     $entries[$index]->setButtonUrl($buttonUrl);
  370.                 }
  371.             }
  372.         }
  373.         return $this->renderView('@TrinitySlider/default/slider.html.twig', [
  374.             'Slider' => $Slider,
  375.             'entries' => (!empty($entries) ? $entries : []),
  376.             'slider_options' => (!empty($slider_options) ? $slider_options : [])
  377.         ]);
  378.     }
  379.     public static function resourcesHandler($Settings, array $bundledatastring $projectDir) : ?string
  380.     {
  381.         $resources null;
  382.         $layoutKey = !empty($Settings->getOverrideKey()) ? trim($Settings->getOverrideKey()) . '/' '';
  383.         $resource_file 'resources.json';
  384.         // check if file exists or build array in code and return that.
  385.         $file __DIR__ "/../Resources/views/default/" $resource_file;
  386.         $override $projectDir '/public/custom/' $layoutKey 'slider/' $resource_file;
  387.         if (file_exists($override)) {
  388.             $resources $override;
  389.         } else if (file_exists($file)) {
  390.             $resources $file;
  391.         }
  392.         return $resources;
  393.     }
  394.     /**
  395.      * Return link data when required within the link form
  396.      *
  397.      * @param  object  Doctrine object
  398.      *
  399.      * @return array   Array with config options
  400.      */
  401.     public function getLinkData($em$language$container$settings){
  402.         return array(
  403.             'sliders' => $em->getRepository('TrinitySliderBundle:Slider')->findBy([
  404.                 'language' => $language,
  405.                 'settings' => $settings,
  406.             ])
  407.         );
  408.     }
  409. }