shell bypass 403

UnknownSec Shell


name : ConsultantsController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Exports\ConsultantsExport;
use App\Http\Controllers\Controller;
use App\Models\Group;
use App\Models\Meeting;
use App\Models\ReserveMeeting;
use App\Models\Role;
use App\Models\Sale;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Facades\Excel;

class ConsultantsController extends Controller
{
    public function index(Request $request, $exportExcel = false)
    {
        $this->authorize('admin_consultants_lists');

        $query = User::whereIn('role_name', [Role::$teacher, Role::$organization])
            ->join('meetings', 'meetings.creator_id', '=', 'users.id')
            ->leftJoin('sales', function ($join) {
                $join->on('meetings.id', '=', 'sales.meeting_id')
                    ->whereNull('sales.refund_at');
            })
            ->select('users.*', 'meetings.amount', 'meetings.discount', 'meetings.disabled',
                'sales.seller_id', 'sales.meeting_id', 'sales.refund_at',
                DB::raw('count(sales.seller_id) as sales_count'),
                DB::raw('sum(sales.total_amount) as sales_amount'),
                DB::raw('(sum(sales.total_amount) - (sum(sales.tax) + sum(sales.commission))) as totalIncome'),
            )
            ->groupBy('users.id');

        $totalConsultants = User::whereHas('meeting')->get();

        $availableConsultants = User::whereHas('meeting', function ($query) {
            $query->where('disabled', false);
        })->count();

        $unavailableConsultants = User::whereHas('meeting', function ($query) {
            $query->where('disabled', true);
        })->count();

        $consultantsWithoutAppointment = 0;
        foreach ($totalConsultants as $consultant) {
            $checkConsultantsMeetingSale = Sale::whereNull('refund_at')
                ->where('seller_id', $consultant->id)
                ->whereNotNull('meeting_id')
                ->count();

            if ($checkConsultantsMeetingSale < 1) {
                $consultantsWithoutAppointment += 1;
            }
        }

        $organizations = User::select('id', 'full_name', 'created_at')
            ->where('role_name', Role::$organization)
            ->orderBy('created_at', 'desc')
            ->get();

        $userGroups = Group::where('status', 'active')
            ->orderBy('created_at', 'desc')
            ->get();

        $query = $this->filters($query, $request);

        if ($exportExcel) {
            return $query->with([
                'userGroup'
            ])->get();
        }

        $consultants = $query->with([
            'userGroup'
        ])->paginate(10);

        $consultants = $this->addUsersExtraInfo($consultants);

        $data = [
            'pageTitle' => trans('admin/main.consultants_list_title'),
            'totalConsultants' => count($totalConsultants),
            'availableConsultants' => $availableConsultants,
            'unavailableConsultants' => $unavailableConsultants,
            'consultantsWithoutAppointment' => $consultantsWithoutAppointment,
            'organizations' => $organizations,
            'userGroups' => $userGroups,
            'consultants' => $consultants,
        ];

        return view('admin.consultants.lists', $data);
    }

    private function addUsersExtraInfo($users)
    {
        foreach ($users as $user) {
            $meetingIds = Meeting::where('creator_id', $user->id)->pluck('id');
            $reserveMeetingsQuery = ReserveMeeting::whereIn('meeting_id', $meetingIds)
                ->where(function ($query) {
                    $query->whereHas('sale', function ($query) {
                        $query->whereNull('refund_at');
                    });

                    $query->orWhere(function ($query) {
                        $query->whereIn('status', ['canceled']);
                        $query->whereHas('sale');
                    });
                });

            $user->meetingsSalesCount = deepClone($reserveMeetingsQuery)->count();
            $user->meetingsSalesSum = deepClone($reserveMeetingsQuery)->sum('paid_amount');
            $user->pendingAppointments = deepClone($reserveMeetingsQuery)->where('status', 'pending')->count();


            /*$reserveMeetings = deepClone($reserveMeetingsQuery)->get();

            $totalIncome = 0;
            foreach ($reserveMeetings as $reserveMeeting) {
                $sale = $reserveMeeting->sale;

                $totalIncome += $sale->total_amount - ($sale->tax + $sale->commission);
            }

            $user->totalIncome = $totalIncome;*/
        }

        return $users;
    }

    private function filters($query, $request)
    {
        $from = $request->get('from', null);
        $to = $request->get('to', null);
        $search = $request->get('search', null);
        $sort = $request->get('sort', null);
        $organization_id = $request->get('organization_id', null);
        $group_id = $request->get('group_id', null);
        $disabled = $request->get('disabled', null);

        $query = fromAndToDateFilter($from, $to, $query, 'users.created_at');

        if (!empty($search)) {
            $query->where('users.full_name', 'like', "%$search%");
        }

        if (!empty($sort)) {
            switch ($sort) {
                case 'appointments_asc':
                    $query->orderBy('sales_count', 'asc');
                    break;
                case 'appointments_desc':
                    $query->orderBy('sales_count', 'desc');
                    break;
                case 'appointments_income_asc':
                    $query->orderBy('totalIncome', 'asc');
                    break;
                case 'appointments_income_desc':
                    $query->orderBy('totalIncome', 'desc');
                    break;
                case 'pending_appointments_asc':
                    $query->orderBy('pendingAppointments', 'asc');
                    break;
                case 'pending_appointments_desc':
                    $query->orderBy('pendingAppointments', 'desc');
                    break;
                case 'created_at_asc':
                    $query->orderBy('users.created_at', 'asc');
                    break;
                case 'created_at_desc':
                    $query->orderBy('users.created_at', 'desc');
                    break;
            }
        }

        if (!empty($organization_id)) {
            $query->where('organ_id', $organization_id);
        }

        if (!empty($group_id)) {
            $query->where('group_id', $group_id);
        }

        if (isset($disabled)) {
            $query->where('disabled', ($disabled == '1') ? 1 : 0);
        }

        return $query;
    }

    public function exportExcel(Request $request)
    {
        $this->authorize('admin_consultants_export_excel');

        $consultants = $this->index($request, true);

        $exports = new ConsultantsExport($consultants);

        return Excel::download($exports, 'consultants.xlsx');
    }
}

© 2025 UnknownSec
Courses | Anyleson - Learning Platform
INR (₹)
India Rupee
$
United States Dollar

Courses

17 Courses
Course
Full Stack Web Development

Full Stack Web Development

in Web Development
83:20 Hours
10 Oct 2024
₹28,318.82
Course
Installment and Secure Host

Installment and Secure Host

in Business Strategy
5.00
1:30 Hours
16 Mar 2023
₹118
Course
New Update Features

New Update Features

in Language
4.00
1:30 Hours
21 Jun 2022
Free
Not conducted
Bestseller
New In-App Live System

New In-App Live System

in Communications
5.00
2:30 Hours
1 Mar 2026
₹11.80
Featured
New Learning Page

New Learning Page

in Lifestyle
5.00
3:30 Hours
1 Mar 2022
Free
Finished
How to Travel Around the World

How to Travel Around the World

in Lifestyle
5.00
2:30 Hours
2 Mar 2022
₹29.50

Type

More options