turkmentv/app/Http/Controllers/HomeController.php

452 lines
16 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;
2020-03-23 06:25:14 +00:00
use App\Models\Subscription;
use App\Models\User_sub;
2019-07-23 10:42:23 +00:00
use App\Models\UserMaterial;
2020-03-23 06:25:14 +00:00
use Illuminate\Support\Facades\Redirect;
2019-08-23 12:27:39 +00:00
use App\Models\Topheaderadv;
2019-05-11 00:27:49 +00:00
use App\Models\Material;
use App\Models\Order;
2020-03-23 06:25:14 +00:00
use App\User;
use Illuminate\Support\Facades\Log;
use GuzzleHttp\Client;
2019-05-11 00:27:49 +00:00
use Carbon\Carbon;
2020-03-23 06:25:14 +00:00
use http\Env\Request;
2019-05-11 00:27:49 +00:00
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-07-11 06:28:46 +00:00
2019-07-11 06:39:02 +00:00
$materials = Material::orderBy('created_at','desc')
2019-07-11 06:28:46 +00:00
->paginate(6);
2020-03-23 06:25:14 +00:00
$topheaderadvers = Topheaderadv::inRandomOrder()->get();
$topheaderadvs = $topheaderadvers[0];
2019-09-03 08:01:43 +00:00
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,
2019-08-23 12:27:39 +00:00
'sort' => 'all',
2019-09-03 08:01:43 +00:00
'topheaderadvs' => $topheaderadvs,
2019-05-11 00:27:49 +00:00
]);
}
public function category($cat_id){
$request = \request();
$sort = $request['sort'];
$sort = $sort ?? 'all';
2020-03-23 06:25:14 +00:00
$topheaderadvers = Topheaderadv::inRandomOrder()->get();
$topheaderadvs = $topheaderadvers[0];
2019-07-11 06:28:46 +00:00
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':
2019-07-11 06:28:46 +00:00
$materials->orderBy('created_at','ASC');
2019-05-11 00:27:49 +00:00
break;
2019-07-11 06:28:46 +00:00
case 'all':
$materials->orderBy('created_at','DESC');
2019-05-11 00:27:49 +00:00
}
$materials = $materials->paginate(6);
//dd($materials);
return view('main')->with([
'cat' => $cat,
'materials' => $materials,
2019-08-24 09:36:28 +00:00
'sort' => $sort,
2019-09-03 08:37:57 +00:00
'topheaderadvs' => $topheaderadvs,
2019-05-11 00:27:49 +00:00
]);
}
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);
2019-09-03 08:37:57 +00:00
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
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)
||(!empty($order->last_date) && !(Carbon::today()->lte($order->last_date))))
{
$file = public_path($material->content_url);
$ext = pathinfo($file, PATHINFO_EXTENSION);
$file_name = Str::slug($material->title).'.'.$ext;
$order->downloaded++;
$order->save();
$headers = array(
'Content-Type: ' . mime_content_type( $file ),
);
2019-09-09 09:53:22 +00:00
// dd($file_name,$headers);
2019-09-09 09:40:08 +00:00
return response()->download($file, $file_name,$headers);
2019-05-11 00:27:49 +00:00
}
else{
request()->session()->flash('status','danger');
2019-07-23 10:42:23 +00:00
request()->session()->flash('status_message','Indirme wagtyňyz ýada gezegiňiz 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);
2020-03-23 06:25:14 +00:00
$topheaderadvers = Topheaderadv::inRandomOrder()->get();
$topheaderadvs = $topheaderadvers[0];
2019-07-23 10:42:23 +00:00
$liked = false;
$order = null;
2020-03-23 06:25:14 +00:00
$subscribed = false;
$user = auth()->user();
if($user != null){
$user_check = User_sub::where('user_id',$user->id)->first();
$time = Carbon::parse($user_check->end_time)->format('Y-m-d h:i');
if($time >= now()->format('Y-m-d h:i')){
$subscribed = true;
}
else{
$subscribed = false;
}
}
2019-07-23 10:42:23 +00:00
if(auth()->guest()){
$watch_list_cookie = Cookie::get('watchlist');
2019-05-13 11:40:38 +00:00
2019-07-23 10:42:23 +00:00
if(!$watch_list_cookie){
$watch_list = [1 => $material_id];
Cookie::queue('watchlist', json_encode($watch_list), 450000);
$material->view ++;
$material->save();
}
else{
$watch_list = json_decode($watch_list_cookie,true);
if(!array_search($material_id,$watch_list)){
$watch_list[]=$material_id;
$material->view ++;
$material->save();
Cookie::queue('watchlist', json_encode($watch_list), 450000);
}
}
2019-05-11 00:27:49 +00:00
}
else{
2019-07-23 10:42:23 +00:00
$um = UserMaterial::firstOrCreate(
['user_id' => auth()->id(), 'material_id' => $material_id],
['watched'=>1, 'liked'=>0]
);
if($um->wasRecentlyCreated){
2019-08-06 10:01:35 +00:00
$material->view++;
2019-07-23 10:42:23 +00:00
$material->save();
2019-05-11 00:27:49 +00:00
}
2019-07-23 10:42:23 +00:00
$liked = $um->liked;
$order = Order::where('user_id',auth()->id())
->where('material_id',$material_id)
->where('payed',1)
->first();
2019-05-11 00:27:49 +00:00
}
2019-05-13 11:40:38 +00:00
2019-07-23 10:42:23 +00:00
// CategoryMaterial::where('material_id',$material_id)
// ->update(['views'=> DB::raw('views + 1')]);
2019-05-11 00:27:49 +00:00
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;
}
}
return view('material',compact('material'))
2019-05-13 11:40:38 +00:00
->with('liked',$liked)
2019-09-03 08:37:57 +00:00
->with('order',$order)
2020-03-23 06:25:14 +00:00
->with('subscribed',$subscribed)
2019-09-03 08:37:57 +00:00
->with('topheaderadvs', $topheaderadvs);
2019-07-10 13:47:00 +00:00
// ->with('cat',$material->category);
2019-05-11 00:27:49 +00:00
}
public function like($material_id){
2019-07-23 10:42:23 +00:00
$material = Material::findOrFail($material_id);
2019-09-03 08:37:57 +00:00
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
2019-07-23 10:42:23 +00:00
$um = UserMaterial::where([
'user_id'=>auth()->id(),
'material_id' =>$material_id])
->first();
if(!$um->liked)
{
$material->like++;
2019-05-11 00:27:49 +00:00
$material->save();
2019-07-23 10:42:23 +00:00
$um->liked = true;
$um->save();
2019-05-11 00:27:49 +00:00
}
2019-05-13 11:40:38 +00:00
return $material->like;
2019-05-11 00:27:49 +00:00
}
public function watch_list(){
2019-07-23 10:42:23 +00:00
$materials = Material::join('user_materials','user_materials.material_id','materials.id')
->where('user_materials.user_id',auth()->id())
->where('user_materials.watched',1)
->paginate(6);
2020-03-23 06:25:14 +00:00
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
2019-05-11 00:27:49 +00:00
return view('watched',compact('materials'));
2019-09-03 08:37:57 +00:00
2019-05-11 00:27:49 +00:00
}
public function like_list(){
2019-07-23 10:42:23 +00:00
$sort = request('sort','high');
2020-03-23 06:25:14 +00:00
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
2019-07-23 10:42:23 +00:00
$materials = Material::join('user_materials','user_materials.material_id','materials.id')
->where('user_materials.user_id',auth()->id())
->where('user_materials.liked',1);
switch ($sort){
case 'high':
$materials->orderBy('like','DESC');
break;
case 'low':
$materials->orderBy('like','ASC');
break;
2019-05-11 00:27:49 +00:00
}
2019-07-23 10:42:23 +00:00
$materials = $materials->paginate(6);
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(){
2020-03-23 06:25:14 +00:00
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
2019-07-10 14:16:29 +00:00
$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(){
2020-03-23 06:25:14 +00:00
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
2019-05-11 00:27:49 +00:00
$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(){
2020-03-23 06:25:14 +00:00
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
2019-05-11 00:27:49 +00:00
// dd(route()->getName());
return view('profile')->with('user',auth()->user());
}
public function profileUpdate(ProfileRequest $request){
2020-03-23 06:25:14 +00:00
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
2019-05-11 00:27:49 +00:00
$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(){
2020-03-23 06:25:14 +00:00
$topheaderadvers = Topheaderadv::inRandomOrder()->get();
$topheaderadvs = $topheaderadvers[0];
2019-05-13 11:40:38 +00:00
$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)
2019-09-03 08:37:57 +00:00
->with('sort',$sort)
->with('topheaderadvs', $topheaderadvs);
2019-05-13 11:40:38 +00:00
}
2020-03-23 06:25:14 +00:00
public function subscriptions(){
$topheaderadvers = Topheaderadv::inRandomOrder()->get();
$topheaderadvs = $topheaderadvers[0];
$subscriptions = Subscription::all();
$title = "Subscriptions";
$keywords = "Subscriptions, Turkmen TV subscriptions";
$meta_description = "Subscribe for Turkmen TV";
return view('web.subscriptions')->with([
'topheaderadvs' => $topheaderadvs,
'subscriptions' => $subscriptions,
'title' => $title,
'keywords' => $keywords,
'meta_description' => $meta_description
]);
}
public function subscribe(\Illuminate\Http\Request $request){
$url = config('app.gateway_url');
$user = config('app.gateway_user');
$pwd = config('app.gateway_password');
$client = new Client(['base_uri' => $url]);
$subscription = Subscription::find($request['subscription_type']);
if(!($user && $url && $pwd)){
throw new \Exception('Method not allowed');
}
try{
$user_sub = User_sub::create([
'user_id' => auth()->id(),
'subscription_type' => $request['subscription_type'],
'start_time' => Carbon::now(),
'end_time' => Carbon::now()->addDays($subscription->duration),
'status' => false,
'sid' => uniqid()
]);
$response = $client->request('POST', 'register.do', [
'connect_timeout' => 15,
'timeout' => 15,
'verify' => true,
'form_params' => [
'userName' => $user,
'password' => $pwd,
'orderNumber' => $user_sub->sid,
'currency' => 934,
'language' => 'ru',
'description'=> $subscription->title,
2020-03-26 14:58:57 +00:00
'amount' =>$subscription->price,// amount v kopeykah
2020-03-25 14:03:57 +00:00
'returnUrl' => route('substatus', $user_sub->id),
2020-03-23 06:25:14 +00:00
//'failUrl' => route('paymentFail', $order->id)
]
]);
$data = json_decode($response->getBody(), true);
if($data['errorCode'] == 0){
$user_sub->status = 0;
return Redirect::to($data['formUrl']);
}
else {
Log::error($data['errorMessage']);
return "Registrasiýa amala aşyrylmady";
}
$user_sub->save();
}
catch (\Exception $e){
return $e->getMessage();
request()->session()->flash('status','danger');
2020-03-25 14:03:57 +00:00
request()->session()->flash('status_message','Bank bilen aragatnaşyga geçip bolmady birsalymdan täzeden synanşyp görmegiňizi haýyş edýäris');
2020-03-23 06:25:14 +00:00
return redirect()->back();
}
}
2020-03-25 14:03:57 +00:00
public function substatus($id){
2020-03-23 06:25:14 +00:00
$user_sub = User_sub::find($id);
if($user_sub->status){
return view('subscription_complete')->with('user_sub',$user_sub);
}
$url = config('app.gateway_url');
$user = config('app.gateway_user');
$pwd = config('app.gateway_password');
if(!($user && $url && $pwd)){
throw new MethodNotAllowedException();
}
$client = new Client(['base_uri' => $url]);
try{
$response = $client->request('POST', 'getOrderStatus.do', [
'verify' => false,
'connect_timeout' => 15,
'timeout' => 15,
'form_params' => [
'userName' => $user,
'password' => $pwd,
'orderId' => $user_sub->sid,
]
]);
$data = json_decode($response->getBody(), true);
if($data['ErrorCode'] == 0){
if($data['OrderStatus'] == 2){ //payment successfull
$user_sub->status = 1;
// $this->makePayment($order);
request()->session()->flash('status','success');
request()->session()->flash('status_message',trans('content.payment_successfull'));
//$order->errorMessage = trans('abonent.payment_successfull');
$status_message = 'Проведена полная авторизация суммы заказа';
}
// elseif($data['OrderStatus'] == 0){//order registered but not payed yet
// $status_message = 'Заказ зарегистрирован, но не оплачен';
// }
// elseif ($data['OrderStatus'] == 1){//Предавторизованная сумма захолдирована (для двухстадийных платежей)
// $status_message ='Предавторизованная сумма захолдирована (для двухстадийных платежей)';
// }
// elseif ($data['OrderStatus'] == 4){//Предавторизованная сумма захолдирована (для двухстадийных платежей)
// $status_message ='По транзакции была проведена операция возврата';
// }
// elseif ($data['OrderStatus'] == 5){//Предавторизованная сумма захолдирована (для двухстадийных платежей)
// $status_message ='Инициирована авторизация через ACS банка-эмитента';
// }
// else{//unsuccessfull Авторизация отменена
// $status_message ='Авторизация отменена';
// }
}
else{
// $order->status = 'payment_failed';
$user_sub->status = 0;
}
$user_sub->save();
}
catch (\Exception $e){
dd($e);
request()->session()->flash('status','danger');
request()->session()->flash('status_message','Bank bilen aragatnaşyga geçip bolmady birsalymdan täzeden synanşyp görmegiňizi haýyş edýäris');
2020-03-25 14:03:57 +00:00
return redirect()->back();
2020-03-23 06:25:14 +00:00
}
return view('subscription_complete')->with('user_sub',$user_sub);
}
2019-05-11 00:27:49 +00:00
}