119 lines
4.3 KiB
PHP
119 lines
4.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Front;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Category;
|
|
use App\Models\CountryLocale;
|
|
use App\Models\Post;
|
|
use Illuminate\Http\Request;
|
|
|
|
class HomeController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$country = strtolower($request->session()->get('country'));
|
|
|
|
return redirect()->route('home.country', ['country' => $country]);
|
|
}
|
|
|
|
public function country(Request $request, $country)
|
|
{
|
|
$country_locale = CountryLocale::where('slug', $country)->first();
|
|
|
|
if (! is_null($country_locale)) {
|
|
|
|
$request->session()->put('view_country_locale', $country_locale);
|
|
|
|
$featured_posts = Post::select('posts.*')
|
|
->join('post_categories', 'posts.id', '=', 'post_categories.post_id')
|
|
->join('categories', 'post_categories.category_id', '=', 'categories.id')
|
|
->whereNotNull('post_categories.id')
|
|
->whereNotNull('categories.id')
|
|
->where('categories.country_locale_slug', $country_locale->slug)
|
|
->where('posts.featured', true)
|
|
->where('posts.status', 'publish')
|
|
->orderBy('posts.updated_at', 'desc')
|
|
->take(3)
|
|
->get();
|
|
|
|
$latest_posts = Post::select('posts.*')
|
|
->join('post_categories', 'posts.id', '=', 'post_categories.post_id')
|
|
->join('categories', 'post_categories.category_id', '=', 'categories.id')
|
|
->whereNotNull('post_categories.id')
|
|
->whereNotNull('categories.id')
|
|
->where('categories.country_locale_slug', $country_locale->slug)
|
|
->whereNotIn('posts.id', $featured_posts->pluck('id')->toArray())
|
|
->where('posts.status', 'publish')
|
|
->orderBy('posts.updated_at', 'desc')
|
|
->distinct()
|
|
->take(10)
|
|
->get();
|
|
|
|
return view('front.country', compact('country_locale', 'featured_posts', 'latest_posts')
|
|
);
|
|
}
|
|
|
|
return redirect()->route('home.country', ['country' => config('platform.general.fallback_country_slug')]);
|
|
}
|
|
|
|
public function countryCategory(Request $request, $country, $category)
|
|
{
|
|
$country_locale = CountryLocale::where('slug', $country)->first();
|
|
|
|
if (is_null($country_locale)) {
|
|
abort(404);
|
|
}
|
|
|
|
$category = Category::where('slug', $category)->where('enabled', true)->first();
|
|
|
|
if (is_null($category)) {
|
|
abort(404);
|
|
}
|
|
|
|
$latest_posts = Post::with('post_categories')->select('posts.*')
|
|
->join('post_categories', 'posts.id', '=', 'post_categories.post_id')
|
|
->join('categories', 'post_categories.category_id', '=', 'categories.id')
|
|
->whereNotNull('post_categories.id')
|
|
->whereNotNull('categories.id')
|
|
->where('categories.country_locale_slug', $country_locale->slug)
|
|
->where('categories.id', $category->id)
|
|
->where('posts.status', 'publish')
|
|
->orderBy('posts.updated_at', 'desc')
|
|
->distinct()
|
|
->paginate(15);
|
|
|
|
return view('front.country_category', compact('country_locale', 'category', 'latest_posts'));
|
|
}
|
|
|
|
public function all(Request $request, $country)
|
|
{
|
|
$country_locale = CountryLocale::where('slug', $country)->first();
|
|
|
|
$latest_posts = Post::with('post_categories')->select('posts.*')
|
|
->join('post_categories', 'posts.id', '=', 'post_categories.post_id')
|
|
->join('categories', 'post_categories.category_id', '=', 'categories.id')
|
|
->whereNotNull('post_categories.id')
|
|
->whereNotNull('categories.id')
|
|
->where('categories.country_locale_slug', $country_locale->slug)
|
|
->where('posts.status', 'publish')
|
|
->orderBy('posts.updated_at', 'desc')
|
|
->distinct()
|
|
->paginate(15);
|
|
|
|
return view('front.country_all', compact('country_locale', 'latest_posts'));
|
|
}
|
|
|
|
public function post(Request $request, $country, $post_slug)
|
|
{
|
|
$post = Post::where('slug', $post_slug)->where('status', 'publish')->first();
|
|
|
|
if (! is_null($post)) {
|
|
|
|
return view('front.post', compact('post'));
|
|
}
|
|
abort(404);
|
|
|
|
}
|
|
}
|