454 lines
16 KiB
PHP
454 lines
16 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Http\Requests\ProfileRequest;
|
|
use App\Models\Category;
|
|
use App\Models\Subscription;
|
|
use App\Models\User_sub;
|
|
use App\Models\UserMaterial;
|
|
use Illuminate\Support\Facades\Redirect;
|
|
use App\Models\Topheaderadv;
|
|
use App\Models\Material;
|
|
use App\Models\Order;
|
|
use App\User;
|
|
use Illuminate\Support\Facades\Log;
|
|
use GuzzleHttp\Client;
|
|
use Carbon\Carbon;
|
|
use http\Env\Request;
|
|
use Illuminate\Support\Facades\Cookie;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Str;
|
|
|
|
class HomeController extends Controller
|
|
{
|
|
/**
|
|
* Create a new controller instance.
|
|
*
|
|
* @return void
|
|
*/
|
|
protected $mainCategories;
|
|
|
|
/**
|
|
* Show the application dashboard.
|
|
*
|
|
* @return \Illuminate\Contracts\Support\Renderable
|
|
*/
|
|
|
|
public function index(){
|
|
|
|
$materials = Material::orderBy('created_at','desc')
|
|
->paginate(6);
|
|
$topheaderadvers = Topheaderadv::inRandomOrder()->get();
|
|
$topheaderadvs = $topheaderadvers[0];
|
|
|
|
return view('main')->with([
|
|
'cat' => "",
|
|
'materials' => $materials,
|
|
'sort' => 'all',
|
|
'topheaderadvs' => $topheaderadvs,
|
|
]);
|
|
}
|
|
|
|
public function category($cat_id){
|
|
$request = \request();
|
|
$sort = $request['sort'];
|
|
$sort = $sort ?? 'all';
|
|
$topheaderadvers = Topheaderadv::inRandomOrder()->get();
|
|
$topheaderadvs = $topheaderadvers[0];
|
|
|
|
if($cat_id != 0){
|
|
$cat = Category:: findOrFail($cat_id);
|
|
$materials = $cat->materials();
|
|
|
|
}
|
|
else{
|
|
$cat = '';
|
|
$materials = Material::query();
|
|
}
|
|
switch ($sort){
|
|
case 'rate':
|
|
$materials->orderBy('like','DESC');
|
|
break;
|
|
case 'date':
|
|
$materials->orderBy('created_at','ASC');
|
|
break;
|
|
case 'all':
|
|
$materials->orderBy('created_at','DESC');
|
|
}
|
|
$materials = $materials->paginate(6);
|
|
//dd($materials);
|
|
return view('main')->with([
|
|
'cat' => $cat,
|
|
'materials' => $materials,
|
|
'sort' => $sort,
|
|
'topheaderadvs' => $topheaderadvs,
|
|
]);
|
|
}
|
|
|
|
public function download($material_id){
|
|
//todo check limits
|
|
$material = Material::findOrFail($material_id);
|
|
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
|
|
$order = Order::where('user_id',auth()->id())
|
|
->where('material_id',$material_id)
|
|
->where('payed',1)
|
|
->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 ),
|
|
);
|
|
// dd($file_name,$headers);
|
|
|
|
return response()->download($file, $file_name,$headers);
|
|
}
|
|
else{
|
|
request()->session()->flash('status','danger');
|
|
request()->session()->flash('status_message','Indirme wagtyňyz ýada gezegiňiz gutardy.');
|
|
redirect()->back();
|
|
}
|
|
//todo else show expired message
|
|
|
|
}
|
|
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function material($material_id){
|
|
$material = Material::findOrFail($material_id);
|
|
$topheaderadvers = Topheaderadv::inRandomOrder()->get();
|
|
$topheaderadvs = $topheaderadvers[0];
|
|
$liked = false;
|
|
$order = null;
|
|
$subscribed = false;
|
|
$user = auth()->user();
|
|
if($user != null){
|
|
$user_check = User_sub::where('user_id',$user->id)->first();
|
|
if($user_check != null && $user_check->status == 1){
|
|
$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;
|
|
}
|
|
}
|
|
}
|
|
if(auth()->guest()){
|
|
$watch_list_cookie = Cookie::get('watchlist');
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
else{
|
|
$um = UserMaterial::firstOrCreate(
|
|
['user_id' => auth()->id(), 'material_id' => $material_id],
|
|
['watched'=>1, 'liked'=>0]
|
|
);
|
|
if($um->wasRecentlyCreated){
|
|
$material->view++;
|
|
$material->save();
|
|
}
|
|
$liked = $um->liked;
|
|
$order = Order::where('user_id',auth()->id())
|
|
->where('material_id',$material_id)
|
|
->where('payed',1)
|
|
->first();
|
|
}
|
|
|
|
// CategoryMaterial::where('material_id',$material_id)
|
|
// ->update(['views'=> DB::raw('views + 1')]);
|
|
|
|
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'))
|
|
->with('liked',$liked)
|
|
->with('order',$order)
|
|
->with('subscribed',$subscribed)
|
|
->with('topheaderadvs', $topheaderadvs);
|
|
|
|
// ->with('cat',$material->category);
|
|
}
|
|
|
|
public function like($material_id){
|
|
|
|
$material = Material::findOrFail($material_id);
|
|
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
|
|
$um = UserMaterial::where([
|
|
'user_id'=>auth()->id(),
|
|
'material_id' =>$material_id])
|
|
->first();
|
|
if(!$um->liked)
|
|
{
|
|
$material->like++;
|
|
$material->save();
|
|
$um->liked = true;
|
|
$um->save();
|
|
}
|
|
return $material->like;
|
|
}
|
|
|
|
public function watch_list(){
|
|
$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);
|
|
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
|
|
return view('watched',compact('materials'));
|
|
|
|
}
|
|
|
|
public function like_list(){
|
|
$sort = request('sort','high');
|
|
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
|
|
$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;
|
|
}
|
|
$materials = $materials->paginate(6);
|
|
|
|
return view('liked',compact('materials'))->with('sort',$sort);
|
|
}
|
|
|
|
public function orders_list(){
|
|
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
|
|
$orders = Order::where('user_id',auth()->id())->paginate(20);
|
|
return view('orders',compact('orders'));
|
|
}
|
|
public function bought_list(){
|
|
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
|
|
$orders = Order::with('material')
|
|
->where('user_id',auth()->id())
|
|
->where('payed',1)
|
|
->paginate(6);
|
|
|
|
return view('bought',compact('orders'));
|
|
}
|
|
|
|
public function profile(){
|
|
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
|
|
// dd(route()->getName());
|
|
return view('profile')->with('user',auth()->user());
|
|
}
|
|
|
|
public function profileUpdate(ProfileRequest $request){
|
|
//$topheaderadvs = Topheaderadv::where('home', 1)->first();
|
|
$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();
|
|
}
|
|
|
|
public function search(){
|
|
$topheaderadvers = Topheaderadv::inRandomOrder()->get();
|
|
$topheaderadvs = $topheaderadvers[0];
|
|
$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)
|
|
->with('topheaderadvs', $topheaderadvs);
|
|
}
|
|
|
|
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,
|
|
'amount' =>$subscription->price,// amount v kopeykah
|
|
'returnUrl' => route('substatus', $user_sub->id),
|
|
//'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');
|
|
request()->session()->flash('status_message','Bank bilen aragatnaşyga geçip bolmady birsalymdan täzeden synanşyp görmegiňizi haýyş edýäris');
|
|
return redirect()->back();
|
|
}
|
|
}
|
|
|
|
public function substatus($id){
|
|
$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');
|
|
return redirect()->back();
|
|
}
|
|
return view('subscription_complete')->with('user_sub',$user_sub);
|
|
}
|
|
|
|
}
|