���Root Mod By V1rus_Alfa
User / IP
:
216.73.217.78
Host / Server
:
195.214.235.115 / npln.ir
System
:
Linux damavand.pws-dns.net 5.14.0-503.35.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Apr 4 05:23:43 EDT 2025 x86_64
Command
|
Upload
|
Mass Deface
|
Create
:
/
home2
/
cutunixc
/
repositories
/
portal-cutunix
/
app
/
Http
/
Controllers
/
Viewing: ChatController.php
<?php namespace App\Http\Controllers; use App\Events\MessageSent; use App\Models\Conversation; use App\Models\Message; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; class ChatController extends Controller { public function index() { $user = Auth::user(); $conversations = $user->conversations()->with(['participants', 'messages' => function ($query) { $query->latest()->take(1); }])->get(); return view('chat.index', compact('conversations')); } public function show(Conversation $conversation) { $messages = $conversation->messages()->with('sender')->latest()->paginate(50); return view('chat.show', compact('conversation', 'messages')); } public function store(Request $request, Conversation $conversation) { $request->validate([ 'content' => 'nullable|string', 'file' => 'nullable|file|max:102400' // 100MB max file size ]); $messageData = [ 'sender_type' => get_class(Auth::user()), 'sender_id' => Auth::id() ]; if ($request->hasFile('file')) { $file = $request->file('file'); $messageType = $this->getMessageType($file->getMimeType()); $fileName = Str::random(40) . '.' . $file->getClientOriginalExtension(); $filePath = $file->storeAs('chat-files/' . $conversation->id, $fileName, 'public'); $messageData = array_merge($messageData, [ 'message_type' => $messageType, 'file_path' => $filePath, 'file_name' => $file->getClientOriginalName(), 'file_size' => $file->getSize(), 'file_mime_type' => $file->getMimeType() ]); } else { $messageData['content'] = $request->content; $messageData['message_type'] = 'text'; } $message = $conversation->messages()->create($messageData); // Broadcast the message using Reverb broadcast(new MessageSent($message))->toOthers(); return response()->json($message); } public function create(Request $request) { $request->validate([ 'type' => 'required|in:admin-admin,admin-tenant,admin-user,tenant-tenant,tenant-user,user-user', 'participant_id' => 'required|integer' ]); $conversation = Conversation::create([ 'type' => $request->type ]); // Add current user as participant $conversation->addParticipant(Auth::user()); // Add other participant $participantClass = $this->getParticipantClass($request->type); $participant = $participantClass::findOrFail($request->participant_id); $conversation->addParticipant($participant); return redirect()->route('chat.show', $conversation); } private function getParticipantClass($type) { return match($type) { 'admin-admin' => \App\Models\Admin::class, 'admin-tenant' => \App\Models\TenantStaff::class, 'admin-user' => \App\Models\User::class, 'tenant-tenant' => \App\Models\TenantStaff::class, 'tenant-user' => \App\Models\User::class, 'user-user' => \App\Models\User::class, default => throw new \InvalidArgumentException('Invalid conversation type') }; } private function getMessageType($mimeType): string { return match(true) { str_starts_with($mimeType, 'image/') => 'image', str_starts_with($mimeType, 'video/') => 'video', str_starts_with($mimeType, 'audio/') => 'audio', in_array($mimeType, [ 'application/pdf', 'application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'text/plain' ]) => 'document', in_array($mimeType, [ 'application/zip', 'application/x-rar-compressed', 'application/x-7z-compressed' ]) => 'archive', default => 'text' }; } }
Coded With 💗 by
0x6ick Mod By V1rus_Alfa