src/Controller/PostController.php line 155

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\HttpFoundation\Request;
  6. use Symfony\Component\Routing\Annotation\Route;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use \Exception;
  9. use App\Form\QuickSearchType;
  10. use App\Entity\Post;
  11. use App\Form\EnqueueType;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  13. use App\Services\Crawlers\CrawlerSelect;
  14. use App\Queue\VideoProcess\Producer as VideoProcessProducer;
  15. use App\Form\ManagerType;
  16. use App\Helpers\FileSystem;
  17. use Symfony\Component\HttpKernel\KernelInterface;
  18. use Cake\Filesystem\File;
  19. use \Datetime;
  20. use \DateInterval;
  21. /**
  22.  * Route("/post", host="www.factoriax.com")
  23.  * @Route(host="www.factoriax.com")
  24.  */
  25. class PostController extends AbstractController
  26. {
  27.     /**
  28.      * @Route("/post/enqueue", name="post_enqueue_form", options={"expose"=true})
  29.      * @IsGranted("IS_AUTHENTICATED_FULLY")
  30.      */
  31.     public function enqueueForm(Request $requestEntityManagerInterface $emCrawlerSelect $crawlerSelectVideoProcessProducer $producer)
  32.     {
  33.         $post = new Post();
  34.         $form $this->createForm(EnqueueType::class, $post);
  35.         $form->handleRequest($request);
  36.         if($form->isSubmitted() && $form->isValid())
  37.         {
  38.             try {
  39.                 $crawler $crawlerSelect->getCrawler($post->getUrl());
  40.                 if($crawler)
  41.                 {
  42.                     $existing_post $em->getRepository(Post::class)->findOneBy(['url' => $post->getUrl()]);
  43.                     if(!$existing_post)
  44.                     {
  45.                         $post->setStatus(Post::STATUS_CREATING);
  46.                         $em->persist($post);
  47.                         $em->flush();
  48.                         $producer->process([
  49.                             'post_id' => $post->getId()
  50.                         ]);
  51.                         $this->addFlash('success_toast''URL successfully added.');
  52.                     } else {
  53.                         $this->addFlash('error''This URL already exists.');
  54.                     }
  55.                 } else {
  56.                     $this->addFlash('error''Unexisting crawler.');
  57.                 }
  58.             } catch(Exception $e) {
  59.                 $this->addFlash('error'$e->getMessage());
  60.             }
  61.             return $this->redirectToRoute('post_enqueue_form');
  62.         }
  63.         return $this->render('admin/post/enqueue_form.html.twig', [
  64.             'form' => $form->createView()
  65.         ]);
  66.     }
  67.     /**
  68.      * @Route("/post/manager_form", name="post_manager_form", options={"expose"=true})
  69.      * @IsGranted("IS_AUTHENTICATED_FULLY")
  70.      */
  71.     public function managerForm(Request $requestKernelInterface $kernelEntityManagerInterface $emCrawlerSelect $crawlerSelectVideoProcessProducer $producer)
  72.     {
  73.         $post $em->getRepository(Post::class)->findOneBy([
  74.             'status' => Post::STATUS_WAITING
  75.         ], ['createdAt' => 'ASC']);
  76.         $post = !$post ? new Post() : $post;
  77.         $form $this->createForm(ManagerType::class, $post);
  78.         $form->handleRequest($request);
  79.         if($form->isSubmitted() && $form->isValid())
  80.         {
  81.             // Move cover to final destination
  82.             $public_folder $kernel->getProjectDir().'/public/';
  83.             $post_folder $public_folder.$this->getParameter('APP_MEDIA_DIR');
  84.             //FileSystem::createFolder($post_folder, 0777);
  85.             $t = new File($public_folder.$post->getCover(), false);
  86.             $new_filename $post_folder.$post->getUuid().'.jpg';
  87.             $t->copy($new_filenametrue) && $t->delete();
  88.             @chmod($new_filename0777);
  89.             $post->setCover(str_replace($public_folder''$new_filename));
  90.             $post->setThumbnails(null);
  91.             $post->setStatus(Post::STATUS_READY);
  92.             $post->setPublishDate(new Datetime());
  93.             $em->persist($post);
  94.             $em->flush();
  95.             FileSystem::deleteFolder($public_folder.$this->getParameter('APP_TMP_DIR').$post->getUuid());
  96.             return $this->redirectToRoute('post_manager_form');
  97.         }
  98.         return $this->render('admin/post/manager_form.html.twig', [
  99.             'form' => $form->createView(),
  100.             'post' => $post
  101.         ]);
  102.     }
  103.     /**
  104.      * @Route("/post/leave_for_later/{post_id}", name="post_leave_for_later", options={"expose"=true})
  105.      * @IsGranted("IS_AUTHENTICATED_FULLY")
  106.      */
  107.     public function leaveForLater(Request $requestKernelInterface $kernelEntityManagerInterface $em$post_id)
  108.     {
  109.         $qb $em->createQueryBuilder();
  110.         $lastCreatedAt $qb
  111.             ->select('MAX(p.createdAt)')
  112.             ->from(Post::class, 'p')
  113.             ->getQuery()
  114.             ->getSingleScalarResult()
  115.         ;
  116.         $lastCreatedAt $lastCreatedAt ? (new DateTime($lastCreatedAt))->add(new DateInterval('P1D')) : (new DateTime());
  117.         $post $em->getRepository(Post::class)->find($post_id);
  118.         if($post)
  119.         {
  120.             $post->setCreatedAt($lastCreatedAt);
  121.             $em->persist($post);
  122.             $em->flush();
  123.         }
  124.         return $this->redirectToRoute('post_manager_form');
  125.     }
  126.     /**
  127.      * @Route("/post/delete/{post_id}", name="post_delete", options={"expose"=true})
  128.      * @IsGranted("IS_AUTHENTICATED_FULLY")
  129.      */
  130.     public function delete(Request $requestKernelInterface $kernelEntityManagerInterface $em$post_id)
  131.     {
  132.         $post $em->getRepository(Post::class)->find($post_id);
  133.         if($post)
  134.         {
  135.             $em->remove($post);
  136.             $em->flush();
  137.         }
  138.         $referer $request->headers->get('referer');
  139.         return $this->redirect($referer ?? $this->generateUrl('post_manager_form'));
  140.         //return $this->redirectToRoute('post_manager_form');
  141.     }
  142.     /**
  143.      * @Route("/view/{slug}", name="post_details", options={"expose"=true})
  144.      */
  145.     public function details(Request $requestKernelInterface $kernelEntityManagerInterface $em$slug)
  146.     {
  147.         $post $em->getRepository(Post::class)->findOneBy(['slug' => $slug]);
  148.         return $this->render('post_details.html.twig', [
  149.             'post' => $post
  150.         ]);
  151.     }
  152. }