Blame view

app/Http/ViewComposers/LemixComposer.php 1.7 KB
e77200db5   nologostudio.ru   Initial commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  <?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);
      }
  }