Initial commit

This commit is contained in:
Ronald Huynen
2026-03-23 21:37:59 +01:00
commit 2547717edb
2193 changed files with 972171 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
<?php
namespace App\Http\Controllers;
use App\Models\User;
use App\Models\Organization;
use App\Models\Bank;
use App\Models\Admin;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class ChatController extends Controller
{
/**
* Create a new conversation with a specific profile and redirect to the chat.
*
* @param string $profileType The type of profile (user, organization, bank, admin)
* @param int $id The ID of the profile
* @return \Illuminate\Http\RedirectResponse
*/
public function startConversationWith(string $profileType, int $id)
{
// Ensure user is authenticated
if (!Auth::guard('web')->check() &&
!Auth::guard('organization')->check() &&
!Auth::guard('bank')->check() &&
!Auth::guard('admin')->check()) {
abort(403, 'Unauthorized');
}
// Map profile type to model class
$modelClass = match(strtolower($profileType)) {
'user' => User::class,
'organization' => Organization::class,
'bank' => Bank::class,
'admin' => Admin::class,
default => abort(404, 'Invalid profile type'),
};
// Find the recipient profile
$recipient = $modelClass::find($id);
if (!$recipient) {
abort(404, 'Profile not found');
}
// Check if recipient is removed
if (method_exists($recipient, 'isRemoved') && $recipient->isRemoved()) {
abort(404, 'Profile no longer available');
}
// Get the active profile using the helper function
$activeProfile = getActiveProfile();
// Prevent creating conversation with yourself
if ($activeProfile->id === $recipient->id && get_class($activeProfile) === get_class($recipient)) {
return redirect()->route('chats')->with('error', __('You cannot start a conversation with yourself.'));
}
// Create or get existing conversation
$conversation = $activeProfile->createConversationWith($recipient);
// Redirect to the chat page
return redirect()->route('chat', ['conversation' => $conversation->id]);
}
}