LemixComposer.php 1.7 KB
<?php

namespace FootyRoom\Http\ViewComposers;

use FootyRoom\Queries\PostQuery;
use Illuminate\Contracts\View\View;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class LemixComposer
{
    /**
     * @var int
     */
    const LEMIX_CATEGORY_ID = 34;

    /**
     * @var \FootyRoom\Queries\PostQuery
     */
    protected $postQuery;

    /**
     * Constructor.
     */
    public function __construct(PostQuery $postQuery)
    {
        $this->postQuery = $postQuery;
    }

    /**
     * Compose the view.
     *
     * @param \Illuminate\Contracts\View\View $view
     * @param int $page
     *
     * @return \Illuminate\Contracts\View\View
     */
    public function compose(View $view, $page)
    {
        $perPage = 24;
        $offset = $perPage * ($page - 1);

        $posts = $this->postQuery->findByCategoryIds([self::LEMIX_CATEGORY_ID], $offset, $perPage);

        if (!$posts) {
            throw new NotFoundHttpException();
        }

        $this->setupPosts($view, $posts);

        $view->with('page', $page);

        $hasMorePosts = (bool) $this->postQuery->findByCategoryIds(
            [self::LEMIX_CATEGORY_ID],
            $offset + $perPage,
            1
        );

        $view->with('hasMorePosts', $hasMorePosts);

        return $view;
    }

    /**
     * Setup posts.
     *
     * @param \Illuminate\Contracts\View\View $view
     * @param \FootyRoom\Queries\Post\Post[] $posts
     */
    protected function setupPosts(View $view, $posts)
    {
        foreach ($posts as $post) {
            $post->url = route('lemixPost', ['slug' => $post->slug, 'id' => $post->id]);
            $post->categoryUrl = route('lemix');
        }

        $view->with('posts', $posts);
    }
}