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;
}
}