src/Controller/Front/BlogController.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Front;
  3. use App\Entity\Info;
  4. use App\Manager\InfoManager;
  5. use App\Traits\UrlTrait;
  6. use App\Traits\UtilTrait;
  7. use DateTime;
  8. use Exception;
  9. use GuzzleHttp\Client;
  10. use Psr\Http\Message\ResponseInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\JsonResponse;
  13. use Symfony\Component\Routing\Annotation\Route;
  14. class BlogController extends AbstractController
  15. {
  16.     use UtilTrait;
  17.     use UrlTrait;
  18.     /**
  19.      * @Route("/get-blog-posts/", name="get-blog-posts")
  20.      */
  21.     public function blogPosts(InfoManager $infoManager): JsonResponse
  22.     {
  23.         /** @var Info $info */
  24.         $info $infoManager->find(1);
  25.         $url $info->getSocialBlogLink();
  26.         $categories $info->getSocialBlogCategories();
  27.         $n_posts $info->getSocialBlogPosts() ?: 3;
  28.         try {
  29.             $posts $this->getPosts($url$categories$n_posts);
  30.             $response = new JsonResponse(['success' => true'posts' => $posts'message' => 'success']);
  31.         } catch (Exception $e) {
  32.             $response = new JsonResponse(['success' => false'posts' => [], 'message' => $e->getMessage()]);
  33.         }
  34.         $response->headers->set('X-Robots-Tag''noindex, nofollow');
  35.         return $response;
  36.     }
  37.     /**
  38.      * @throws Exception
  39.      */
  40.     public function getPosts($url$categories$n_posts): array
  41.     {
  42.         $host $this->getHostUrl($url);
  43.         if (is_null($url)) {
  44.             throw new Exception('Blog url not defined');
  45.         }
  46.         $path $this->getPathUrl($url);
  47.         $path $this->addPath($path'wp-json/wp/v2/posts');
  48.         $query $this->getParametersBlog($categories$n_posts);
  49.         $reponse $this->getClientRequest($host$path$query);
  50.         $posts $this->getRequestData($reponse);
  51.         return $this->postsToArray($url$posts);
  52.     }
  53.     public function postsToArray($url$posts): array
  54.     {
  55.         $postsArray = [];
  56.         foreach ($posts as $index => $post) {
  57.             $postsArray[] = $this->postToArray($url$post);
  58.         }
  59.         return $postsArray;
  60.     }
  61.     public function postToArray($url$post): array
  62.     {
  63.         $host $this->getHostUrl($url);
  64.         $path $this->getPathUrl($url);
  65.         $path $this->addPath($path'wp-json/wp/v2/media');
  66.         $path $path '/' $post->featured_media;
  67.         $mediaRequest $this->getClientRequest($host$path);
  68.         $mediaData $this->getRequestData($mediaRequestnulltrue);
  69.         $date = new Datetime($post->date);
  70.         return [
  71.             'postid' => $post->id,
  72.             'image' => array_key_exists('guid'$mediaData) ? $mediaData['guid']['rendered'] : '',
  73.             'title' => $post->title->rendered,
  74.             'excerpt' => $post->excerpt->rendered,
  75.             'link' => $post->link,
  76.             'categories' => $post->categories,
  77.             'createdat' => $date->format('d/m/Y'),
  78.         ];
  79.     }
  80.     public function getParametersBlog($categories null$perPage 3): array
  81.     {
  82.         $parameters = [];
  83.         $categories $this->getParameterCategoriesBlog($categories);
  84.         if (count($categories) > 0) {
  85.             $parameters['categories'] = implode(','$categories);
  86.         }
  87.         $perPage $this->getParameterPerPageBlog($perPage);
  88.         $parameters['per_page'] = $perPage;
  89.         return $parameters;
  90.     }
  91.     public function getParameterCategoriesBlog($categories null): array
  92.     {
  93.         $categoriesArray = [];
  94.         if (!is_null($categories) and $categories != '') {
  95.             $categoriesArray explode(','$categories);
  96.             $categoriesArray array_map('trim'$categoriesArray);
  97.         }
  98.         return $categoriesArray;
  99.     }
  100.     public function getParameterPerPageBlog($perPage 3)
  101.     {
  102.         if (is_null($perPage) or $perPage == 0) {
  103.             $perPage 3;
  104.         }
  105.         return $perPage;
  106.     }
  107.     public function getClientRequest($url$path$query = []): ResponseInterface
  108.     {
  109.         $client = new Client(['base_uri' => $url]);
  110.         $urlArray parse_url($url);
  111.         $urlPath array_key_exists('path'$urlArray) ? $urlArray['path'] : '';
  112.         $urlPath trim($urlPath'/');
  113.         $path $urlPath ? ($urlPath $path) : $path;
  114.         return $client->request('GET'$path, ['query' => $query]);
  115.     }
  116.     public function getRequestData(ResponseInterface $response$origin null$array false)
  117.     {
  118.         $body $response->getBody();
  119.         $bodyArray json_decode($body$array);
  120.         return ($origin) ? $bodyArray->$origin $bodyArray;
  121.     }
  122. }