HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/SBogers10/topswtw.komma.pro/app/KommaApp/Shop/Posts/PostService.php
<?php

/**
 * Short description for the file.
 *
 * @author      Tim Van Samang <timvansamang@komma.pro>
 * @copyright   (c) 2012-2015, Komma Mediadesign
 */

namespace KommaApp\Shop\Posts;



use Carbon\Carbon;
use Komma\Kms\Posts\Models\Post;
use Komma\Kms\Posts\Models\ShopPost;

class PostService
{
    const AMOUNT_EACH_PAGE = 2;

    private $languageId;
    private $shopId;

    public function setLanguageAndShop($languageId, $shopId)
    {
        $this->languageId = $languageId;
        $this->shopId = $shopId;
    }

    public function getPosts($pagination = true, $amount = self::AMOUNT_EACH_PAGE)
    {

        if(!isset($this->languageId) || !isset($this->shopId)) {
            throw new \BadMethodCallException('One of the required value languageId or shopId has not been set.');
        }

        $shopPosts = ShopPost::where('shop_id', '=', $this->shopId)
            ->where('active', '=', 1)
            ->get();

        $postIds = [];

        foreach ($shopPosts as $shopPost) {
            $postIds[] = $shopPost->post_id;
        }

        $posts = Post::where('date', '<=', Carbon::now()->endOfDay())
            ->whereIn('posts.id', $postIds)
            ->leftJoin('post_translations', function ($join){
                $join->on( 'post_translations.post_id', '=', 'posts.id')
                    ->where('language_id', '=', $this->languageId);

            })
            ->leftJoin('images', function($join)
            {
                $join->on('images.imageble_id', '=', 'posts.id')
                    ->where('images.imageble_type', '=', 'Komma\Kms\Posts\Models\Post');
            })
            ->where('post_translations.language_id', '=', $this->languageId)
            ->orderBy('posts.date', 'desc')
            ->select('posts.id', 'posts.date', 'post_translations.id as post_translation_id', 'post_translations.*', 'images.id as image_id', 'images.*');

        if($pagination) $posts = $posts->paginate($amount);
        else $posts = $posts->get();

        return $posts;
    }

    public function getPostBySlug($slug)
    {
        if(!isset($this->languageId) || !isset($this->shopId)) {
            throw new \BadMethodCallException('One of the required value languageId or shopId has not been set.');
        }

        $post = Post::where('date', '<=', Carbon::now()->endOfDay())
            ->leftJoin('post_translations', function ($join){
                $join->on( 'post_translations.post_id', '=', 'posts.id')
                    ->where('language_id', '=', $this->languageId);

            })
            ->leftJoin('posts_shops', function ($join){
                $join->on( 'posts_shops.post_id', '=', 'posts.id')
                    ->where('shop_id', '=', $this->shopId);
            })
            ->leftJoin('images', function($join)
            {
                $join->on('images.imageble_id', '=', 'posts.id')
                    ->where('images.imageble_type', '=', 'Komma\Kms\Posts\Models\Post');
            })
            ->where('post_translations.language_id', '=', $this->languageId)
            ->where('post_translations.slug', '=', $slug)
            ->where('posts_shops.shop_id', '=', $this->shopId)
            ->select('posts.id', 'posts_shops.shop_id', 'posts.date', 'post_translations.id as post_translation_id', 'post_translations.*', 'images.id as image_id', 'images.*')
            ->first();

        return $post;
    }
}