![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/pdf-ai.com/private_html/app/Http/Controllers/User/ |
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Mail;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Events\PayoutRequested;
use App\Mail\ReferralEmail;
use App\Models\Setting;
use App\Models\Referral;
use App\Models\Payout;
use App\Models\User;
use DataTables;
use DB;
use Exception;
class ReferralController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$referral_information = ['referral_headline', 'referral_guideline'];
$referral = [];
$settings = Setting::all();
foreach ($settings as $row) {
if (in_array($row['name'], $referral_information)) {
$referral[$row['name']] = $row['value'];
}
}
$total_commission = Referral::select(DB::raw("sum(commission) as data"))->where('referrer_id', auth()->user()->id)->get();
return view('user.referrals.index', compact('referral', 'total_commission'));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function gateway()
{
$user = User::where('id', auth()->user()->id)->first();
return view('user.referrals.gateway.index', compact('user'));
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function gatewayStore(Request $request)
{
request()->validate([
'payment_method' => 'required',
]);
$user = User::where('id', auth()->user()->id)->first();
$user->referral_payment_method = request('payment_method');
$user->referral_paypal = request('paypal');
$user->referral_bank_requisites = request('bank_requisites');
$user->save();
toastr()->success(__('Payment Gateway settings were successfully saved'));
return redirect()->back();
}
/**
* Send a inviation email
*/
public function email(Request $request)
{
try {
Mail::to(request('email'))->cc(auth()->user()->email)->send(new ReferralEmail());
if (Mail::flushMacros()) {
toastr()->error(__('Sending email failed, please try again'));
return redirect()->back();
}
} catch(Exception $e) {
toastr()->error(__('SMTP settings are not configured correctly yet') . $e->getMessage());
return redirect()->back();
}
toastr()->success(__('Email was sent successfully'));
return redirect()->back();
}
/**
* List user payout requests.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function payouts(Request $request)
{
if ($request->ajax()) {
$data = Payout::where('user_id', auth()->user()->id)->latest()->get();
return Datatables::of($data)
->addIndexColumn()
->addColumn('actions', function($row){
$actionBtn = '<div class="dropdown">
<button class="btn table-actions" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-ellipsis-v"></i>
</button>
<div class="dropdown-menu table-actions-dropdown" role="menu" aria-labelledby="actions">
<a class="dropdown-item" href="'. route("user.referral.payout.show", $row["id"] ). '"><i class="fa fa-file-text"></i> View</a>
<a class="dropdown-item" data-toggle="modal" id="deletePayoutButton" data-target="#deletePayoutModal" href="" data-attr="'. route("user.referral.payout.cancel", $row["id"] ). '"><i class="fa fa-close"></i> Cancel</a>
</div>
</div>';
return $actionBtn;
})
->addColumn('custom-status', function($row){
$custom_status = '<span class="cell-box payout-'.$row["status"].'">'.ucfirst($row["status"]).'</span>';
return $custom_status;
})
->addColumn('custom-total', function($row){
$custom_status = config('payment.default_system_currency_symbol') . $row["total"];
return $custom_status;
})
->addColumn('created-on', function($row){
$created_on = '<span>'.date_format($row["created_at"], 'Y-m-d H:i:s').'</span>';
return $created_on;
})
->rawColumns(['created-on', 'actions', 'custom-status', 'custom-total'])
->make(true);
}
return view('user.referrals.payouts.index');
}
/**
* Create payout request.
*
* @return \Illuminate\Http\Response
*/
public function payoutsCreate()
{
return view('user.referrals.payouts.create');
}
/**
* Create payout request.
*
* @return \Illuminate\Http\Response
*/
public function payoutsStore(Request $request)
{
$request->validate([
'payout' => 'required|numeric',
]);
if ($request->payout > auth()->user()->balance) {
toastr()->warning(__('Requested amount is more than your current balance'));
return redirect()->back();
}
if ($request->payout < config('payment.referral.payment.threshold')) {
toastr()->warning(__('Requested payout amount is less than minimum payout threshold'));
return redirect()->back();
}
if (auth()->user()->referral_payment_method == '') {
toastr()->warning(__('You will need to set payment method first'));
return redirect()->back();
}
$user = User::where('id', auth()->user()->id)->firstOrFail();
$user->balance = ($user->balance - $request->payout);
$user->save();
Payout::create([
'request_id' => strtoupper(Str::random(15)),
'user_id' => auth()->user()->id,
'total' => $request->payout,
'gateway' => auth()->user()->referral_payment_method,
'status' => 'processing',
]);
event(new PayoutRequested($user));
toastr()->success(__('Your request for payout has been created successfully'));
return redirect()->route('user.referral.payout');
}
/**
* Show payout request.
*
* @return \Illuminate\Http\Response
*/
public function payoutsShow(Payout $id)
{
if ($id->user_id != auth()->user()->id) {
return view('user.balance.referrals.payouts.index');
}
return view('user.referrals.payouts.show', compact('id'));
}
/**
* Cancel payout request.
*
* @return \Illuminate\Http\Response
*/
public function payoutsCancel(Payout $id)
{
if ($id->user_id != auth()->user()->id) {
return view('user.referrals.payouts.index');
}
return view('user.referrals.payouts.delete', compact('id'));
}
/**
* Decline payout request.
*
* @return \Illuminate\Http\Response
*/
public function payoutsDecline(Payout $id)
{
if ($id->status == 'completed') {
toastr()->warning(__('Requested payout has been processed and cannot be cancelled'));
return redirect()->back();
}
if ($id->status == 'declined') {
toastr()->warning(__('Requested payout has been declined by admin and cannot be cancelled'));
return redirect()->back();
}
if ($id->status == 'cancelled') {
toastr()->warning(__('Requested payout has already been cancelled'));
return redirect()->back();
}
Payout::where('id', $id->id)->update(['status' => 'cancelled']);
$user = User::where('id', $id->user_id)->firstOrFail();
$user->balance = ($user->balance + $id->total);
$user->save();
toastr()->success(__('Selected payout request has been cancelled successfully'));
return redirect()->back();
}
/**
* Show all payment referrals.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function referrals(Request $request)
{
if ($request->ajax()) {
$data = Referral::whereNotNull('order_id')->where('referrer_id', auth()->user()->id)->latest()->get();
return Datatables::of($data)
->addIndexColumn()
->addColumn('created-on', function($row){
$created_on = '<span>'.date_format($row["created_at"], 'Y-m-d H:i:s').'</span>';
return $created_on;
})
->addColumn('custom-rate', function($row){
$created_on = '<span>'.$row["rate"].'%</span>';
return $created_on;
})
->addColumn('custom-payment', function($row){
$custom_status = config('payment.default_system_currency_symbol') . $row["payment"];
return $custom_status;
})
->addColumn('custom-commission', function($row){
$custom_status = config('payment.default_system_currency_symbol') . $row["commission"];
return $custom_status;
})
->rawColumns(['created-on', 'custom-rate', 'custom-payment', 'custom-commission'])
->make(true);
}
$total_users = Referral::select(DB::raw("count(DISTINCT referred_id) as data"))->where('referrer_id', auth()->user()->id)->get();
$total_commission = Referral::select(DB::raw("sum(commission) as data"))->where('referrer_id', auth()->user()->id)->get();
return view('user.referrals.referrals.index', compact('total_users', 'total_commission'));
}
}