86 lines
2.7 KiB
PHP
86 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\API;
|
|
|
|
use App\Models\Category;
|
|
use App\Models\Event;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use App\Http\Controllers\Controller;
|
|
|
|
class PublicController extends Controller
|
|
{
|
|
public function getCategories($parent_id = false){
|
|
$categories = Category::select('title_tk','title_ru','id','parent_id');
|
|
|
|
if($parent_id)
|
|
$categories->children($parent_id)->orderBy('lft');
|
|
else
|
|
$categories->main();
|
|
return response()->json($categories->get());
|
|
// return $categories->get();
|
|
}
|
|
|
|
public function showCategoryEvents($cat_id){
|
|
|
|
$category = Category::select('id','title_tk','title_ru','view_type','events_limit','parent_id')
|
|
->findOrFail($cat_id);
|
|
|
|
[$order, $data] = $this->sorts_filters();
|
|
$data['category'] = $category;
|
|
$data['sub_cats'] = $category->children()
|
|
->withLiveEvents($order, $data['start'], $data['end'], $category->events_limit)
|
|
->whereHas('cat_events',
|
|
function ($query) use($data){
|
|
$query->onLive($data['start'], $data['end']);
|
|
})
|
|
->withCount(['cat_events' => function($query) use($data){
|
|
$query->onLive($data['start'], $data['end']);
|
|
}])
|
|
->orderBy('cats_event_count','desc')
|
|
->get();
|
|
|
|
|
|
return response()->json($data);
|
|
}
|
|
|
|
private function sorts_filters(){
|
|
$data['start'] = \request()->get('start') ?? Carbon::today();
|
|
$data['end'] = \request()->get('end')?? Carbon::today()->endOfCentury();
|
|
$sort = \request()->get('sort');
|
|
|
|
if($sort == 'new')
|
|
$orderBy = ['field'=>'created_at','order'=>'desc'];
|
|
if ($sort =='popular')
|
|
$orderBy = ['field'=>'views','order'=>'desc'];
|
|
else
|
|
{
|
|
$orderBy =['field'=>'start_date','order'=>'asc'];
|
|
$sort = 'start_date';
|
|
}
|
|
$data['sort'] = $sort;
|
|
//todo check date formats;
|
|
return [$orderBy, $data];
|
|
}
|
|
public function showSubCategoryEvents($cat_id){
|
|
$category = Category::select('id','title_tk','title_ru','view_type','events_limit','parent_id')
|
|
->findOrFail($cat_id);
|
|
|
|
[$order, $data] = $this->sorts_filters();
|
|
|
|
$data['category'] = $category;
|
|
|
|
$data['events'] = $category->cat_events()
|
|
->onLive($data['start'],$data['end'])
|
|
->orderBy($order['field'],$order['order'])
|
|
->get();
|
|
|
|
return response()->json($data);
|
|
}
|
|
|
|
public function getEvent($id){
|
|
$event = Event::with('images')->findOrFail($id);
|
|
return response()->json($event);
|
|
}
|
|
}
|