Attendize/app/Http/Controllers/PublicController.php

201 lines
6.5 KiB
PHP
Raw Normal View History

2018-12-10 07:32:53 +00:00
<?php
/**
* Created by PhpStorm.
* User: merdan
* Date: 12/9/2018
* Time: 12:39 PM
*/
namespace App\Http\Controllers;
2019-09-16 12:55:29 +00:00
use App\Http\Requests\AddEventRequest;
use App\Http\Requests\SearchRequest;
use App\Http\Requests\SubscribeRequest;
use App\Models\EventRequest;
use App\Models\Subscriber;
2019-09-10 13:33:55 +00:00
use App\Models\Category;
2018-12-10 07:32:53 +00:00
use App\Models\Event;
2019-08-28 06:34:37 +00:00
use App\Models\Slider;
2019-11-16 11:26:11 +00:00
use App;
use Illuminate\Mail\Markdown;
2020-02-18 12:30:16 +00:00
use Illuminate\Support\Facades\Config;
2020-03-06 12:52:54 +00:00
use Illuminate\Support\Facades\DB;
2020-03-28 09:32:51 +00:00
use function Clue\StreamFilter\fun;
2018-12-10 07:32:53 +00:00
class PublicController extends Controller
{
public function showHomePage(){
2020-03-28 09:00:22 +00:00
$cinema = Category::categoryLiveEvents(16,'cinema')
2020-03-28 08:23:21 +00:00
->take(1);
2019-09-10 13:33:55 +00:00
2020-03-28 09:10:53 +00:00
$cartoon = Category::categoryLiveEvents(16,'exhibition')
2020-03-28 08:33:22 +00:00
->take(1);
2019-09-10 13:33:55 +00:00
2020-03-28 09:00:22 +00:00
$musical = Category::categoryLiveEvents(8,'concert')
2020-03-28 08:17:58 +00:00
->take(1)
2020-03-28 08:37:58 +00:00
;
2020-03-28 09:00:22 +00:00
$categories = $cinema->unionAll($cartoon)->unionAll($musical)->get();
2019-09-10 13:33:55 +00:00
2020-02-18 12:30:16 +00:00
$sliders = Slider::where('active',1)
->where(Config::get('app.locale'),1)
->get();
2020-03-27 10:20:35 +00:00
2020-02-13 15:20:40 +00:00
return $this->render("Pages.HomePage",[
2020-03-28 09:00:22 +00:00
'categories' => $categories,
2019-08-28 06:34:37 +00:00
'sliders' => $sliders
]);
Markdown::parse();
2018-12-10 07:32:53 +00:00
}
2019-10-05 11:05:56 +00:00
public function showCategoryEvents($cat_id){
2019-09-10 13:33:55 +00:00
2020-03-28 09:32:51 +00:00
[$order, $data] = $this->sorts_filters();
2020-03-28 10:40:03 +00:00
$category = Category::select('id','title_tk','title_ru','events_limit')
2020-03-28 09:54:31 +00:00
->with(['children' => function($query) use($data,$order){
2020-03-28 09:32:51 +00:00
$query->whereHas('cat_events',
function ($query) use($data){
$query->onLive($data['start'], $data['end']);
2020-03-28 10:40:03 +00:00
});
// ->with(['cat_events' => function($q) use($data,$order){
// $q->onLive($data['start'], $data['end'])
// ->orderBy($order['field'],$order['order']);
// }]);
2020-03-28 10:17:13 +00:00
// $query->withLiveEvents($order, $data['start'], $data['end']);
2020-03-28 09:32:51 +00:00
}])
2019-09-28 07:05:26 +00:00
->findOrFail($cat_id);
2020-03-28 10:40:03 +00:00
$sub_cats = $category->children;
$sub_cats_events = $sub_cats->pop()
->cat_events()
->onLive($data['start'],$data['end'])
->orderBy($order['field'],$order['order'])
->take($category->events_limit);
foreach ($sub_cats as $sub_cat){
$events = $sub_cat->cat_events()
->onLive($data['start'],$data['end'])
->orderBy($order['field'],$order['order'])
->take($category->events_limit);
$sub_cats_events = $sub_cats_events->unionAll($events);
}
dd($sub_cats_events->get());
2020-03-28 10:17:13 +00:00
2019-10-05 11:05:56 +00:00
$data['category'] = $category;
2020-03-28 09:54:31 +00:00
2019-10-05 11:05:56 +00:00
$data['sub_cats'] = $category->children()
2020-03-07 06:19:22 +00:00
->withLiveEvents($order, $data['start'], $data['end'], $category->events_limit)//wiered
2020-01-09 12:47:28 +00:00
->whereHas('cat_events',
function ($query) use($data){
$query->onLive($data['start'], $data['end']);
})
2020-01-09 12:45:20 +00:00
->get();
2019-10-03 09:18:21 +00:00
2020-02-18 12:13:32 +00:00
return $this->render("Pages.EventsPage",$data);
2019-10-05 11:05:56 +00:00
}
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'])
2020-02-10 12:32:10 +00:00
->paginate(16);
2019-10-05 11:05:56 +00:00
2020-02-18 12:13:32 +00:00
return $this->render("Pages.CategoryEventsPage",$data);
2019-10-05 11:05:56 +00:00
}
private function sorts_filters(){
2020-01-09 12:55:03 +00:00
$data['start'] = \request()->get('start');
$data['end'] = \request()->get('end');
2019-10-05 11:05:56 +00:00
$sort = \request()->get('sort');
2019-10-03 09:18:21 +00:00
2019-10-05 11:05:56 +00:00
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';
2019-09-28 07:05:26 +00:00
}
2019-10-05 11:05:56 +00:00
$data['sort'] = $sort;
//todo check date formats;
return [$orderBy, $data];
2019-09-28 07:05:26 +00:00
}
2019-09-16 12:55:29 +00:00
public function search(SearchRequest $request){
//todo implement with elastick search and scout
2020-02-07 14:57:12 +00:00
$query = sanitise($request->get('q'));
2020-02-01 17:47:51 +00:00
$events = Event::onLive()
2020-02-07 14:57:12 +00:00
->where('title_ru','like',"%{$query}%")
->orWhere('title_tk','like',"%{$query}%")
2020-03-06 12:52:54 +00:00
->withCount(['stats as views' => function($q){
$q->select(DB::raw("SUM(views) as v"));}])
2020-02-01 17:47:51 +00:00
->paginate(10);
2019-09-16 12:55:29 +00:00
2020-02-18 12:13:32 +00:00
return $this->render('Pages.SearchResults',[
'events' => $events,
'query' => $query
]);
2019-09-16 12:55:29 +00:00
}
public function postAddEvent(AddEventRequest $request){
$addEvent = EventRequest::create([
'name' => sanitise($request->get('name')),
'email' => sanitise($request->get('email')),
'phone' => sanitise($request->get('phone')),
2020-03-03 17:07:37 +00:00
'details' => sanitise($request->get('details'))
2019-09-16 12:55:29 +00:00
]);
2020-03-03 17:02:15 +00:00
2020-03-03 18:40:09 +00:00
if($addEvent)
return response()->json([
'status' => 'success',
'message' => trans('ClientSide.add_event_success_message'),
]);
else
return response()->json([
'status' => 'error',
'message' => trans('ClientSide.add_event_error_message'),
]);
2019-09-16 12:55:29 +00:00
}
public function subscribe(SubscribeRequest $request){
$email = sanitise($request->get('email'));
2019-09-28 07:05:26 +00:00
//todo validate email
2019-09-16 12:55:29 +00:00
$subscribe = Subscriber::updateOrCreate(['email'=>$email,'active'=>1]);
2020-03-03 18:40:09 +00:00
if($subscribe)
return response()->json([
'status' => 'success',
'message' => trans('ClientSide.subscribe_success_message'),
]);
else
return response()->json([
'status' => 'error',
'message' => trans('ClientSide.subscribe_error_message'),
]);
}
public function venues($id = false){
2020-03-27 08:45:07 +00:00
$data['venues'] = App\Models\Venue::select('id','venue_name_'.Config::get('app.locale'),
'description_'.Config::get('app.locale').' as description','address','images')
->where('active',1)
->orderBy('venue_name_'.Config::get('app.locale'),'ASC')
->get();
2020-03-28 09:54:31 +00:00
$data['current'] = $id ? $data['venues']->where('id',$id)->first() ?? $data['venues']->first(): $data['venues']->first();
return $this->render('Pages.VenuesPage',$data);
}
2020-01-09 12:45:20 +00:00
}