src/CopywritelyBundle/EventListener/FormatNewCopywritelyTask.php line 139

Open in your IDE?
  1. <?php
  2. namespace CopywritelyBundle\EventListener;
  3. use ApiBundle\Event\ProcessCreatedTaskEvent;
  4. use CopywritelyBundle\Entity\CopywritelyTask;
  5. use CopywritelyBundle\Event\EditedTaskEvent;
  6. use CopywritelyBundle\Model\TaskDataExtractor;
  7. use CopywritelyBundle\Service\TaskCreators\TaskCreatorContext;
  8. use CopywritelyBundle\Utils\HtmlFormatter;
  9. use CoreBundle\Entity\Language;
  10. use CoreBundle\Exception\ArticleExtractorException;
  11. use Exception;
  12. use Symfony\Component\DependencyInjection\ContainerInterface;
  13. use Symfony\Component\Form\FormEvent;
  14. use Symfony\Component\PropertyAccess\PropertyAccess;
  15. /**
  16.  * Class FormatNewCopywritelyTask
  17.  */
  18. class FormatNewCopywritelyTask
  19. {
  20.     const URL_CREATOR_ERROR 'uncheckedUrl';
  21.     const URL_TEXT_LENGTH_LIMIT 'url_text_length_limit';
  22.     const TEXT_LENGTH_LIMIT_ERROR 'text_length_limit';
  23.     const PUBLIC_USER_URL_CHECK_LIMIT 2500;
  24.     /** @var HtmlFormatter  */
  25.     private $htmlFormatter;
  26.     /** @var ContainerInterface */
  27.     protected $container;
  28.     /**
  29.      * FormatNewCopywritelyTask constructor.
  30.      * @param HtmlFormatter $htmlFormatter
  31.      * @param ContainerInterface $container
  32.      */
  33.     public function __construct(HtmlFormatter $htmlFormatterContainerInterface $container)
  34.     {
  35.         $this->htmlFormatter $htmlFormatter;
  36.         $this->container $container;
  37.     }
  38.     /**
  39.      * @TODO rewrite with single form for all data
  40.      * @param FormEvent $event
  41.      * @throws Exception
  42.      */
  43.     public function onFormSubmit(FormEvent $event)
  44.     {
  45.         $formData $event->getData();
  46.         /** @var CopywritelyTask $task */
  47.         $task $event->getForm()->getData();
  48.         if ($event->getForm()->getName() === 'copywritely_public_task') {
  49.             $user $this->container
  50.                 ->get('doctrine.orm.entity_manager')
  51.                 ->find("CoreBundle:User"$this->container->getParameter("public_user_id"));
  52.         } else {
  53.             $user $this->container->get('security.token_storage')->getToken()->getUser();
  54.         }
  55.         $task->setUser($user);
  56.         if (!empty($formData['url'])) {
  57.             $urlTaskService $this->container->get('url_task_service');
  58.             $taskCreatorContext = new TaskCreatorContext($urlTaskService);
  59.             $taskData $taskCreatorContext->createTask(new TaskDataExtractor($formData));
  60.             if(isset($taskData['error'])) {
  61.                 throw new Exception($taskData['error']);
  62.             }
  63.             if ($taskData['content']) {
  64.                 $task->setContent($taskData['content']);
  65.             }
  66.             if (!isset($formData['plagiarismIgnoreDomainUrl'])) {
  67.                 $formData['plagiarismIgnoreDomainUrl'] = $formData['url'];
  68.             }
  69.             if (!isset($formData['html']) && !empty($taskData['html'])) {
  70.                 $formData['html'] = $taskData['html'];
  71.             }
  72.             if (!isset($formData['title']) && !empty($taskData['title'])) {
  73.                 $formData['title'] = $taskData['title'];
  74.             }
  75.             foreach ($formData as $key => $value) {
  76.                 $formData[$key] = $taskData[$key] ?? $value;
  77.             }
  78.             if (isset($taskData['language']) && $taskData['language'] instanceof Language) {
  79.                 $task->setLanguage($taskData['language']);
  80.                 $formData['language'] = $taskData['language']->getSmallTitle();
  81.             }
  82.             $event->setData($formData);
  83.         } elseif ($formData['html']) {
  84.             $textTaskService $this->container->get('text_task_service');
  85.             $taskCreatorContext = new TaskCreatorContext($textTaskService);
  86.             $taskData $taskCreatorContext->createTask(new TaskDataExtractor($formData));
  87.             foreach ($formData as $key => $value) {
  88.                 $formData[$key] = $taskData[$key] ?? $value;
  89.             }
  90.             if (isset($taskData['language']) && $taskData['language'] instanceof Language) {
  91.                 $task->setLanguage($taskData['language']);
  92.                 $formData['language'] = $taskData['language']->getSmallTitle();
  93.             }
  94.             $event->setData($formData);
  95.         }
  96.     }
  97.     /**
  98.      * @param EditedTaskEvent $event
  99.      * @throws \Psr\SimpleCache\InvalidArgumentException
  100.      */
  101.     public function onEdited(EditedTaskEvent $event)
  102.     {
  103.         $task $event->getTask();
  104.         try {
  105.             $response $this->htmlFormatter->parseHtml($task->getHtml());
  106.             $task->setHtml($response['html']);
  107.         } catch (\Exception $exception) {}
  108.         if ($task->getContent()) {
  109.             try {
  110.                 $response $this->htmlFormatter->parseHtml($task->getContent());
  111.                 $task->setContent($response['html']);
  112.             } catch (\Exception $exception) {}
  113.         }
  114.     }
  115.     /**
  116.      * @param ProcessCreatedTaskEvent $event
  117.      * @throws ArticleExtractorException
  118.      * @throws Exception
  119.      * @throws \Psr\SimpleCache\InvalidArgumentException
  120.      */
  121.     public function onCreated(ProcessCreatedTaskEvent $event)
  122.     {
  123.         $task $event->getTask();
  124.         $source $event->getSource();
  125.         switch ($source) {
  126.             case ProcessCreatedTaskEvent::PROCESS_URL_CREATE:
  127.                 $urlTaskService $this->container->get('url_task_service');
  128.                 $taskCreatorContext = new TaskCreatorContext($urlTaskService);
  129.                 $taskData $taskCreatorContext->createTask(new TaskDataExtractor([
  130.                     'url' => $task->getUrl()
  131.                 ]));
  132.                 if(isset($taskData['error'])) {
  133.                     throw new Exception($taskData['error']);
  134.                 }
  135.                 $propertyAccessor PropertyAccess::createPropertyAccessorBuilder()
  136.                     ->getPropertyAccessor();
  137.                 foreach ($taskData as $key => $value) {
  138.                     if ($propertyAccessor->isWritable($task$key)) {
  139.                         $propertyAccessor->setValue($task$key$value);
  140.                     }
  141.                 }
  142.                 break;
  143.             case ProcessCreatedTaskEvent::PROCESS_TEXT_CREATE:
  144.                 try {
  145.                     $html $this->getFormattedHtml($task->getHtml());
  146.                     $task->setHtml($html);
  147.                 } catch (Exception $exception) {}
  148.                 break;
  149.         }
  150.     }
  151.     /**
  152.      * @param string $html
  153.      * @return string
  154.      * @throws \Psr\SimpleCache\InvalidArgumentException
  155.      */
  156.     private function getFormattedHtml(string $html)
  157.     {
  158.         try {
  159.             $response $this->htmlFormatter->parseHtml($html);
  160.             return $response['html'];
  161.         } catch (\Exception $exception) {
  162.             return $html;
  163.         }
  164.     }
  165. }