turkmentv/app/Http/Controllers/HomeController.php

281 lines
8.8 KiB
PHP
Raw Normal View History

2019-05-11 00:27:49 +00:00
<?php
namespace App\Http\Controllers;
use App\Http\Requests\ProfileRequest;
use App\Models\Category;
2019-07-10 13:47:00 +00:00
use App\Models\CategoryMaterial;
2019-05-11 00:27:49 +00:00
use App\Models\Material;
use App\Models\Order;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cookie;
2019-07-10 14:16:29 +00:00
use Illuminate\Support\Facades\DB;
2019-05-11 08:50:45 +00:00
use Illuminate\Support\Str;
2019-05-11 00:27:49 +00:00
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
protected $mainCategories;
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
2019-05-22 12:49:28 +00:00
2019-05-11 00:27:49 +00:00
public function index(){
2019-06-26 05:45:32 +00:00
// $cat = Category::where('depth',1)
// ->orderBy('lft')->firstOrFail();
$materials = Material::paginate(6);
2019-05-11 00:27:49 +00:00
return view('main')->with([
2019-06-26 05:45:32 +00:00
'cat' => "",
2019-05-11 00:27:49 +00:00
'materials' => $materials,
'sort' => 'all'
]);
}
public function category($cat_id){
//dd(\request());
$request = \request();
$sort = $request['sort'];
$sort = $sort ?? 'all';
//dd($request['sort']);
//todo restrict sort to be only {'all','rate','date'}
2019-06-26 05:45:32 +00:00
if($cat_id != 0){
$cat = Category:: findOrFail($cat_id);
2019-07-10 13:47:00 +00:00
$materials = $cat->materials();
2019-06-26 05:45:32 +00:00
}
else{
$cat = '';
$materials = Material::query();
}
2019-05-11 00:27:49 +00:00
switch ($sort){
case 'rate':
2019-05-13 11:40:38 +00:00
$materials->orderBy('like','DESC');
2019-05-11 00:27:49 +00:00
break;
case 'date':
$materials->orderBy('created_at','DESC');
break;
}
$materials = $materials->paginate(6);
//dd($materials);
return view('main')->with([
'cat' => $cat,
'materials' => $materials,
'sort' => $sort
]);
}
2019-06-26 05:45:32 +00:00
2019-05-11 00:27:49 +00:00
public function download($material_id){
//todo check limits
$material = Material::findOrFail($material_id);
$order = Order::where('user_id',auth()->id())
->where('material_id',$material_id)
2019-06-01 00:08:36 +00:00
->where('payed',1)
2019-05-11 00:27:49 +00:00
->first();
if(!empty($order)){
if(!($order->download_count !=0 && $order->downloaded == $order->download_count)
||(!empty($order->last_date) && !(Carbon::today()->lte($order->last_date))))
{
$file = public_path($material->content_url);
//dd(public_path($material->trailer_url));
$order->downloaded++;
$order->save();
2019-05-11 00:27:49 +00:00
return response()->download($file, Str::slug($material->title));
}
else{
request()->session()->flash('status','danger');
request()->session()->flash('status_message','Indirme wagtynyz yada gezeginiz gutardy.');
redirect()->back();
}
//todo else show expired message
2019-05-11 00:27:49 +00:00
}
2019-05-11 00:27:49 +00:00
return redirect()->back();
}
public function material($material_id){
$material = Material::findOrFail($material_id);
$watch_list_cookie = Cookie::get('watchlist');
2019-05-13 11:40:38 +00:00
2019-05-11 00:27:49 +00:00
$material->view ++;
$material->save();
2019-07-10 13:47:00 +00:00
CategoryMaterial::where('material_id',$material_id)
->update(['views'=> DB::raw('views + 1')]);
2019-05-11 00:27:49 +00:00
// dd($material->details);
if(!$watch_list_cookie){
$watch_list = [1 => $material_id];
Cookie::queue('watchlist', json_encode($watch_list), 450000);
}
else{
$watch_list = json_decode($watch_list_cookie,true);
//dd($watch_list);
if(!array_search($material_id,$watch_list)){
$watch_list[]=$material_id;
Cookie::queue('watchlist', json_encode($watch_list), 450000);
}
}
2019-05-13 11:40:38 +00:00
2019-05-11 00:27:49 +00:00
// Cookie::queue('watchlist', json_encode([$material_id]), 450000);
// Cookie::queue('wishlist', $material_id, 450000);
// dd(Cookie::get('watchlist'));
2019-06-26 05:45:32 +00:00
// cookie()->forever('watchlist',$material_id,450000);
2019-05-13 11:40:38 +00:00
$like_list_cookie = Cookie::get('likelist');
2019-05-11 00:27:49 +00:00
$order = Order::where('user_id',auth()->id())
->where('material_id',$material_id)
2019-06-01 00:08:36 +00:00
->where('payed',1)
2019-05-11 00:27:49 +00:00
->first();
if(!empty($order)){
if($order->download_count !=0 && $order->downloaded == $order->download_count){
$order = null;
}elseif (!empty($order->last_date) && !(Carbon::today()->lte($order->last_date))){
$order = null;
}
}
2019-05-13 11:40:38 +00:00
$liked = !empty($like_list_cookie)
&& array_search($material_id, json_decode($like_list_cookie,true));
2019-05-11 00:27:49 +00:00
return view('material',compact('material'))
2019-05-13 11:40:38 +00:00
->with('liked',$liked)
2019-07-10 13:47:00 +00:00
->with('order',$order);
// ->with('cat',$material->category);
2019-05-11 00:27:49 +00:00
}
public function like($material_id){
//todo ajax post
$material = Material::findOrFail($material_id);
$like_list_cookie = Cookie::get('likelist');
if(!$like_list_cookie){
$like_list = [1 => $material_id];
Cookie::queue('likelist', json_encode($like_list), 450000);
2019-05-13 11:40:38 +00:00
$material->like ++;
2019-05-11 00:27:49 +00:00
$material->save();
2019-07-10 13:47:00 +00:00
CategoryMaterial::where('material_id',$material_id)
->update(['likes'=> DB::raw('likes + 1')]);
2019-05-11 00:27:49 +00:00
}
else{
$like_list = json_decode($like_list_cookie,true);
//dd($watch_list);
if(!array_search($material_id,$like_list)){
$like_list[]=$material_id;
2019-05-13 11:40:38 +00:00
$material->like ++;
2019-05-11 00:27:49 +00:00
$material->save();
2019-07-10 13:47:00 +00:00
CategoryMaterial::where('material_id',$material_id)
->update(['likes'=> DB::raw('likes + 1')]);
2019-05-13 11:40:38 +00:00
Cookie::queue('likelist', json_encode($like_list), 450000);
2019-05-11 00:27:49 +00:00
}
}
// return view('material',compact('material'))->with('cat',$material->category);
2019-05-13 11:40:38 +00:00
return $material->like;
2019-05-11 00:27:49 +00:00
}
public function watch_list(){
$watch_list = json_decode(Cookie::get('watchlist'),true);
$materials = null;
if($watch_list){
$material_ids = array_values($watch_list);
$materials = Material::whereIn('id',$material_ids)->paginate(6);
}
return view('watched',compact('materials'));
}
public function like_list(){
$like_list = json_decode(Cookie::get('likelist'),true);
2019-05-13 11:40:38 +00:00
$request = \request();
$sort = $request['sort'];
$sort = $sort ?? 'high';
2019-05-11 00:27:49 +00:00
$materials = null;
if($like_list){
$material_ids = array_values($like_list);
2019-05-13 11:40:38 +00:00
$materials = Material::whereIn('id',$material_ids);
switch ($sort){
case 'high':
$materials->orderBy('like','DESC');
break;
case 'low':
$materials->orderBy('like','ASC');
break;
}
$materials = $materials->paginate(6);
2019-05-11 00:27:49 +00:00
}
2019-05-13 11:40:38 +00:00
return view('liked',compact('materials'))->with('sort',$sort);
2019-05-11 00:27:49 +00:00
}
2019-07-10 14:16:29 +00:00
public function orders_list(){
$orders = Order::where('user_id',auth()->id())->paginate(20);
return view('orders',compact('orders'));
}
2019-05-11 00:27:49 +00:00
public function bought_list(){
$orders = Order::with('material')
->where('user_id',auth()->id())
2019-06-18 20:27:42 +00:00
->where('payed',1)
2019-05-11 00:27:49 +00:00
->paginate(6);
2019-06-18 20:27:42 +00:00
2019-05-11 00:27:49 +00:00
return view('bought',compact('orders'));
}
public function profile(){
// dd(route()->getName());
return view('profile')->with('user',auth()->user());
}
public function profileUpdate(ProfileRequest $request){
$user = auth()->user();
$user->name = $request['name'];
$user->phone = $request['phone'];
$user->email = $request['email'];
if ( ! $request->input('password') == '')
{
$user->password = bcrypt($request->input('password'));
}
$user->save();
return redirect()->back();
}
2019-05-13 11:40:38 +00:00
public function search(){
$request = \request();
$key = $request['key'];
if(empty($key))
return redirect()->back();
$sort = $request['sort'];
$sort = $sort ?? 'high';
$materials = Material::where('title','like',"%{$key}%");
switch ($sort){
case 'new':
$materials->orderBy('updated_at','DESC');
break;
case 'old':
$materials->orderBy('updated_at','ASC');
break;
case 'like':
$materials->orderBy('like','DESC');
break;
case 'view':
$materials->orderBy('view','DESC');
break;
}
$materials = $materials->paginate(6);
return view('search')
->with('key',$key)
->with('materials',$materials)
->with('sort',$sort);
}
2019-05-11 00:27:49 +00:00
}