src/Service/RssService.php line 48

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\Post;
  4. use App\Entity\PostType;
  5. use App\Entity\RssArticle;
  6. use App\Entity\RssEvent;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Component\Routing\RouterInterface;
  9. class RssService
  10. {
  11.   public function __construct(private EntityManagerInterface $em)
  12.   {
  13.   }
  14.   public function getArrayArticle(RssArticle $rssarticle): mixed
  15.   {
  16.     //Posts de base
  17.     $host "info.lenord.fr";
  18.     //Posts de base
  19.     $excluded_ids = [];
  20.     $results = [];
  21.     $posts $rssarticle->getPosts();
  22.     foreach ($posts as $p) {
  23.       array_push($excluded_ids$p->getId());
  24.       array_push($results$p);
  25.     }
  26.     $posts_exclus $rssarticle->getPostsExclus();
  27.     foreach ($posts_exclus as $p) {
  28.       array_push($excluded_ids$p->getId());
  29.     }
  30.     $exp $rssarticle->getMotscles();
  31.     $search_topics = [];
  32.     $search_territories = [];
  33.     if (count($rssarticle->getThematiques()) > 0) {
  34.       foreach ($rssarticle->getThematiques() as $theme) {
  35.         array_push($search_topics$theme->getId());
  36.       }
  37.     }
  38.     if (count($rssarticle->getLieux()) > 0) {
  39.       foreach ($rssarticle->getLieux() as $theme) {
  40.         array_push($search_territories$theme->getId());
  41.       }
  42.     }
  43.     if ($exp != null || count($search_topics) > || count($search_territories) > 0) {
  44.       $others $this->em->getRepository(Post::class)->getSearchArticleXml(explode(";"$exp), $excluded_idsfalse$rssarticle->getVideo(), $search_territories$search_topics);
  45.       foreach ($others as $p) {
  46.         array_push($results$p);
  47.       }
  48.     }
  49.     $response = [];
  50.     $i 0;
  51.     foreach ($results as $post) {
  52.       if ($i >= 3) {
  53.         break;
  54.       }
  55.       array_push($response, ['url' => "https://" $host "/" $post->getSlug(), 'title' => $post->getTitle(), 'image' => 'https://' $host '/media/cache/thumb/upload/images/' $post->getIllustrationfilName(), 'type' => $post->getType()->getId(), 'duration' => $post->getDuree()]);
  56.       $i++;
  57.     }
  58.     return $response;
  59.   }
  60.   public function getXmlArticle(RssArticle $rssarticle): string
  61.   {
  62.     //Posts de base
  63.     $excluded_ids = [];
  64.     $results = [];
  65.     $posts $rssarticle->getPosts();
  66.     foreach ($posts as $p) {
  67.       array_push($excluded_ids$p->getId());
  68.       array_push($results$p);
  69.     }
  70.     $posts_exclus $rssarticle->getPostsExclus();
  71.     foreach ($posts_exclus as $p) {
  72.       array_push($excluded_ids$p->getId());
  73.     }
  74.     $exp $rssarticle->getMotscles();
  75.     $search_topics = [];
  76.     $search_territories = [];
  77.     if (count($rssarticle->getThematiques()) > 0) {
  78.       foreach ($rssarticle->getThematiques() as $theme) {
  79.         array_push($search_topics$theme->getId());
  80.       }
  81.     }
  82.     if (count($rssarticle->getLieux()) > 0) {
  83.       foreach ($rssarticle->getLieux() as $theme) {
  84.         array_push($search_territories$theme->getId());
  85.       }
  86.     }
  87.     if ($exp != null || count($search_topics) > || count($search_territories) > 0) {
  88.       $others $this->em->getRepository(Post::class)->getSearchArticleXml(explode(";"$exp), $excluded_idsfalse$rssarticle->getVideo(), $search_territories$search_topics);
  89.       foreach ($others as $p) {
  90.         array_push($results$p);
  91.       }
  92.     }
  93.     //dom
  94.     $dom = new \DOMDocument('1.0''UTF-8');
  95.     $rss $dom->createElement('rss');
  96.     $rss->setAttribute('version''2.0');
  97.     $rss->setAttribute("xmlns:atom""http://www.w3.org/2005/Atom");
  98.     $rss_node $dom->appendChild($rss);
  99.     $channel $dom->createElement('channel');
  100.     $channel_node $rss_node->appendChild($channel);
  101.     $atom_link $dom->createElement('atom:link');
  102.     $atom_link->setAttribute("href""https://info.lenord.fr/rss/" $rssarticle->getAlias());
  103.     $atom_link->setAttribute("rel""self");
  104.     $atom_link->setAttribute("type""application/rss+xml");
  105.     $channel_node->appendChild($atom_link);
  106.     $channel_node->appendChild($dom->createElement('title'$rssarticle->getName()));
  107.     $channel_node->appendChild($dom->createElement('description'$rssarticle->getDescription()));
  108.     $channel_node->appendChild($dom->createElement('link'"https://info.lenord.fr"));
  109.     //$media_logo = $dom->createElement('media');
  110.     //$media_logo->setAttribute('url','https://info.lenord.fr/img/logos/logo.png');
  111.     //$channel_node->appendChild($media_logo);
  112.     $enclosure_logo $dom->createElement('enclosure');
  113.     $enclosure_logo->setAttribute('url''https://info.lenord.fr/img/logos/logo.png');
  114.     $enclosure_logo->setAttribute('type''image/png');
  115.     $enclosure_logo->setAttribute('length''110000');
  116.     $channel_node->appendChild($enclosure_logo);
  117.     //Posts
  118.     foreach ($results as $post) {
  119.       $pdate null;
  120.       $pubDate date_create_from_format("d/m/Y H:i"$post->getDateDernierStatut());
  121.       if ($pubDate != null) {
  122.         $pdate $pubDate->format('r');
  123.       }
  124.       $item $dom->createElement('item');
  125.       $item_node $channel_node->appendChild($item);
  126.       $item_node->appendChild($dom->createElement('guid'"https://info.lenord.fr/" $post->getSlug()));
  127.       $item_node->appendChild($dom->createElement('title'str_replace("&""and", (string) $post->getTitle())));
  128.       $item_node->appendChild($dom->createElement('link'"https://info.lenord.fr/" $post->getSlug()));
  129.       $item_node->appendChild($dom->createElement('pubDate'$pdate));
  130.       //$item_node->appendChild($dom->createElement('description', $post->getShortDescription()));
  131.       if ($post->getType()->getId() == 4) {
  132.         $item_node->appendChild($dom->createElement('category'"Vidéo"));
  133.         $item_node->appendChild($dom->createElement('duration'$post->getDuree()));
  134.       } else {
  135.         $item_node->appendChild($dom->createElement('category'"Article"));
  136.       }
  137.       /*$media_post = $dom->createElement('media');
  138.       $media_post->setAttribute('url','https://info.lenord.fr/media/cache/thumb/upload/images/'.$post->getIllustrationfilName());
  139.       $item_node->appendChild($media_post);*/
  140.       $enclosure_logo $dom->createElement('enclosure');
  141.       $enclosure_logo->setAttribute('url''https://info.lenord.fr/media/cache/thumb/upload/images/' $post->getIllustrationfilName());
  142.       $enclosure_logo->setAttribute('type''image/jpeg');
  143.       $enclosure_logo->setAttribute('length''110000');
  144.       $item_node->appendChild($enclosure_logo);
  145.     }
  146.     $xml $dom->saveXML();
  147.     return $xml;
  148.     //$this->filesystem->dumpFile('public/xml/GS.xml', $xml);
  149.   }
  150.   public function getXmlEvent(RssEvent $rssarticle): string
  151.   {
  152.     //Posts de base
  153.     $excluded_ids = [];
  154.     $results = [];
  155.     $posts $rssarticle->getPosts();
  156.     foreach ($posts as $p) {
  157.       array_push($excluded_ids$p->getId());
  158.       array_push($results$p);
  159.     }
  160.     $posts_exclus $rssarticle->getPostsExclus();
  161.     foreach ($posts_exclus as $p) {
  162.       array_push($excluded_ids$p->getId());
  163.     }
  164.     $exp $rssarticle->getMotscles();
  165.     $search_topics = [];
  166.     $search_territories = [];
  167.     if (count($rssarticle->getThematiques()) > 0) {
  168.       foreach ($rssarticle->getThematiques() as $theme) {
  169.         array_push($search_topics$theme->getId());
  170.       }
  171.     }
  172.     if (count($rssarticle->getLieux()) > 0) {
  173.       foreach ($rssarticle->getLieux() as $theme) {
  174.         array_push($search_territories$theme->getId());
  175.       }
  176.     }
  177.     if ($exp != null || count($search_topics) > || count($search_territories) > 0) {
  178.       $others $this->em->getRepository(Post::class)->getSearchEventXml(explode(";"$exp), $excluded_idsfalse$search_territories$search_topics);
  179.       foreach ($others as $p) {
  180.         array_push($results$p);
  181.       }
  182.     }
  183.     //dom
  184.     $dom = new \DOMDocument('1.0''UTF-8');
  185.     $rss $dom->createElement('rss');
  186.     $rss->setAttribute('version''2.0');
  187.     $rss->setAttribute("xmlns:atom""http://www.w3.org/2005/Atom");
  188.     $rss_node $dom->appendChild($rss);
  189.     $channel $dom->createElement('channel');
  190.     $channel_node $rss_node->appendChild($channel);
  191.     $atom_link $dom->createElement('atom:link');
  192.     $atom_link->setAttribute("href""https://info.lenord.fr/rss-event/" $rssarticle->getAlias());
  193.     $atom_link->setAttribute("rel""self");
  194.     $atom_link->setAttribute("type""application/rss+xml");
  195.     $channel_node->appendChild($atom_link);
  196.     $channel_node->appendChild($dom->createElement('title'$rssarticle->getName()));
  197.     $channel_node->appendChild($dom->createElement('description'$rssarticle->getDescription()));
  198.     $channel_node->appendChild($dom->createElement('link'"https://info.lenord.fr/agenda"));
  199.     $enclosure_logo $dom->createElement('enclosure');
  200.     $enclosure_logo->setAttribute('url''https://info.lenord.fr/img/logos/logo.png');
  201.     $enclosure_logo->setAttribute('type''image/png');
  202.     $enclosure_logo->setAttribute('length''110000');
  203.     $channel_node->appendChild($enclosure_logo);
  204.     //Posts
  205.     foreach ($results as $post) {
  206.       $pdate null;
  207.       $pubDate date_create_from_format("d/m/Y H:i"$post->getDateDernierStatut());
  208.       if ($pubDate != null) {
  209.         $pdate $pubDate->format('r');
  210.       }
  211.       $dates null;
  212.       $dates "du " $post->getDateDebut() . " au " $post->getDateFin();
  213.       $item $dom->createElement('item');
  214.       $item_node $channel_node->appendChild($item);
  215.       $item_node->appendChild($dom->createElement('guid'"https://info.lenord.fr/" $post->getSlug()));
  216.       $item_node->appendChild($dom->createElement('title'str_replace("&""and", (string) $post->getTitle())));
  217.       $item_node->appendChild($dom->createElement('link'"https://info.lenord.fr/" $post->getSlug()));
  218.       $item_node->appendChild($dom->createElement('pubDate'$pdate));
  219.       $item_node->appendChild($dom->createElement('description'$post->getSubtitle()));
  220.       $item_node->appendChild($dom->createElement('category'"Evenement"));
  221.       $item_node->appendChild($dom->createElement('lieu'$post->getLieu()));
  222.       $item_node->appendChild($dom->createElement('ville'$post->getVille()));
  223.       $item_node->appendChild($dom->createElement('dates'$dates));
  224.       /*$media_post = $dom->createElement('media');
  225.       $media_post->setAttribute('url','https://info.lenord.fr/media/cache/thumb/upload/images/'.$post->getIllustrationfilName());
  226.       $item_node->appendChild($media_post);*/
  227.       $enclosure_logo $dom->createElement('enclosure');
  228.       $enclosure_logo->setAttribute('url''https://info.lenord.fr/media/cache/thumb/upload/images/' $post->getIllustrationfilName());
  229.       $enclosure_logo->setAttribute('type''image/jpeg');
  230.       $enclosure_logo->setAttribute('length', (string)filesize('https://info.lenord.fr/media/cache/thumb/upload/images/' $post->getIllustrationfilName()));
  231.       $item_node->appendChild($enclosure_logo);
  232.     }
  233.     $xml $dom->saveXML();
  234.     return $xml;
  235.   }
  236.   public function getXmlNordevasion(RouterInterface $routerstring $host): string
  237.   {
  238.     //dom
  239.     $dom = new \DOMDocument('1.0''UTF-8');
  240.     $rss $dom->createElement('rss');
  241.     $rss->setAttribute('version''2.0');
  242.     $rss->setAttribute("xmlns:atom""http://www.w3.org/2005/Atom");
  243.     $rss_node $dom->appendChild($rss);
  244.     $channel $dom->createElement('channel');
  245.     $channel_node $rss_node->appendChild($channel);
  246.     $atom_link $dom->createElement('atom:link');
  247.     $atom_link->setAttribute("href""https://info.lenord.fr/xml/events2evasion.xml");
  248.     $atom_link->setAttribute("rel""self");
  249.     $atom_link->setAttribute("type""application/rss+xml");
  250.     $channel_node->appendChild($atom_link);
  251.     $channel_node->appendChild($dom->createElement('title'"Evenements Nord Evasion"));
  252.     $channel_node->appendChild($dom->createElement('description'""));
  253.     $channel_node->appendChild($dom->createElement('link'"https://info.lenord.fr/xml/events2evasion.xml"));
  254.     $enclosure_logo $dom->createElement('enclosure');
  255.     $enclosure_logo->setAttribute('url''https://info.lenord.fr/img/logos/logo.png');
  256.     $enclosure_logo->setAttribute('type''image/png');
  257.     $enclosure_logo->setAttribute('length''110000');
  258.     $channel_node->appendChild($enclosure_logo);
  259.     $type $this->em->getRepository(PostType::class)->find(3);
  260.     $results $this->em->getRepository(Post::class)->findBy(['type' => $type], ['date_update' => 'DESC']);
  261.     //Posts
  262.     foreach ($results as $post) {
  263.       $pdate null;
  264.       $pubDate date_create_from_format("d/m/Y H:i"$post->getDateDernierStatut());
  265.       if ($pubDate != null) {
  266.         $pdate $pubDate->format('r');
  267.       }
  268.       $date_debut null;
  269.       $date_fin null;
  270.       if ($post->getDateDebut() != null) {
  271.         $date_debut date_create_from_format('d/m/Y'$post->getDateDebut());
  272.         if ($date_debut == false) {
  273.           $date_debut date_create_from_format('d/m/Y H:i'$post->getDateDebut());
  274.         }
  275.       }
  276.       if ($post->getDateFin() != null) {
  277.         $date_fin date_create_from_format('d/m/Y'$post->getDateFin());
  278.         if ($date_fin == false) {
  279.           $date_fin date_create_from_format('d/m/Y H:i'$post->getDateFin());
  280.         }
  281.       }
  282.       $date_jour = new \DateTime;
  283.       if ($date_fin != null && $date_fin $date_jour) {
  284.         continue;
  285.       }
  286.       if ($date_debut != null) {
  287.         $date_debut $date_debut->format('r');
  288.       }
  289.       if ($date_fin != null) {
  290.         $date_fin $date_fin->format('r');
  291.       }
  292.       $date_creation null;
  293.       if ($post->getCreatedAt() != null) {
  294.         $date_creation date_create_from_format('d/m/Y'$post->getCreatedAt());
  295.         if ($date_creation == false) {
  296.           $date_creation date_create_from_format('d/m/Y H:i'$post->getCreatedAt());
  297.         }
  298.         if ($date_creation != null) {
  299.           $date_creation $date_creation->format('r');
  300.         }
  301.       }
  302.       $date_modification null;
  303.       if ($post->getDateUpdate() !== null) {
  304.         $date_modification $post->getDateUpdate()->format('r');
  305.       } else {
  306.         $date_modification $date_creation;
  307.       }
  308.       $status_id null;
  309.       if ($post->getStatus() !== null) {
  310.         $status_id $post->getStatus()->getId();
  311.       }
  312.       $types "";
  313.       foreach ($post->getEventType() as $type) {
  314.         if ($types != null) {
  315.           $types .= ', ';
  316.         }
  317.         $types .= $type->getDisplayName();
  318.       }
  319.       $item $dom->createElement('item');
  320.       $item_node $channel_node->appendChild($item);
  321.       $item_node->appendChild($dom->createElement('guid', (string)$post->getId()));
  322.       $item_node->appendChild($dom->createElement('title'str_replace("&""and"$post->getTitle())));
  323.       $item_node->appendChild($dom->createElement('subtitle'str_replace("&""and"$post->getSubtitle())));
  324.       $item_node->appendChild($dom->createElement('link'"https://info.lenord.fr/" $post->getSlug()));
  325.       $item_node->appendChild($dom->createElement('date_publication'$pdate));
  326.       $item_node->appendChild($dom->createElement('lieu'htmlspecialchars($post->getLieu())));
  327.       $item_node->appendChild($dom->createElement('ville'htmlspecialchars($post->getVille())));
  328.       $item_node->appendChild($dom->createElement('date_debut'$date_debut));
  329.       $item_node->appendChild($dom->createElement('date_fin'$date_fin));
  330.       $item_node->appendChild($dom->createElement('date_creation'$date_creation));
  331.       $item_node->appendChild($dom->createElement('date_modification'$date_modification));
  332.       $item_node->appendChild($dom->createElement('statut', (string)$status_id));
  333.       $enclosure_logo $dom->createElement('enclosure');
  334.       $enclosure_logo->setAttribute('url''https://info.lenord.fr/public/upload/images/' $post->getIllustrationfilName());
  335.       $enclosure_logo->setAttribute('type''image/jpeg');
  336.       $item_node->appendChild($enclosure_logo);
  337.       $item_node->appendChild($dom->createElement('horaires'htmlspecialchars($post->getHoraires())));
  338.       $item_node->appendChild($dom->createElement('tarifs'htmlspecialchars($post->getTarifs())));
  339.       $item_node->appendChild($dom->createElement("types_event"$types));
  340.       $item_node->appendChild($dom->createElement("organized_by"htmlspecialchars($post->getOrganizedBy())));
  341.       $url_content $router->generate('api_get_content', ['id' => $post->getId()]);
  342.       $item_node->appendChild($dom->createElement('url_content'$host $url_content));
  343.     }
  344.     $xml $dom->saveXML();
  345.     return $xml;
  346.   }
  347. }