From 1814f69ecb2a103109d38afdc1d190f408b0b02b Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Sat, 23 May 2026 02:42:32 +0300 Subject: [PATCH] Deploy: 2026-05-23 02:42:32 --- backend/app/Controllers/AuthController.php | 3 +- backend/app/Controllers/StaffController.php | 18 +++ .../app/Controllers/WhatsAppController.php | 15 +- backend/app/Middlewares/AuthMiddleware.php | 1 + backend/migrate_super_admin_features.php | 36 +++++ backend/public/index.html | 131 +++++++++++++++++- 6 files changed, 196 insertions(+), 8 deletions(-) create mode 100644 backend/migrate_super_admin_features.php diff --git a/backend/app/Controllers/AuthController.php b/backend/app/Controllers/AuthController.php index c59e759..b88ce0a 100644 --- a/backend/app/Controllers/AuthController.php +++ b/backend/app/Controllers/AuthController.php @@ -114,7 +114,8 @@ class AuthController extends BaseController 'id' => $user['id'], 'company_id' => $user['company_id'], 'name' => $user['name'], - 'role' => $user['role'] + 'role' => $user['role'], + 'is_super_admin' => (int)$user['company_id'] === 1 ] ], 200); } diff --git a/backend/app/Controllers/StaffController.php b/backend/app/Controllers/StaffController.php index a21ac87..7fb9849 100644 --- a/backend/app/Controllers/StaffController.php +++ b/backend/app/Controllers/StaffController.php @@ -60,6 +60,24 @@ class StaffController extends BaseController return; } + // Fetch subscription limits for agents + $activeSub = \App\Models\CompanySubscription::findActiveByCompany($companyId); + $maxAgents = 1; + if (isset($request->is_super_admin) && $request->is_super_admin) { + $maxAgents = 999; + } elseif ($activeSub) { + $maxAgents = (int)($activeSub['max_agents'] ?? 1); + } + + $currentStaffCount = Database::selectOne("SELECT COUNT(*) as count FROM users WHERE company_id = ? AND role = 'staff'", [$companyId])['count'] ?? 0; + if ($currentStaffCount >= $maxAgents) { + $response->status(400)->json([ + 'status' => 'error', + 'error' => "You have reached the maximum number of staff agents allowed by your plan ({$maxAgents})." + ]); + return; + } + $body = $request->getBody(); $email = strtolower(trim($body['email'])); diff --git a/backend/app/Controllers/WhatsAppController.php b/backend/app/Controllers/WhatsAppController.php index d5e2fe6..8001802 100644 --- a/backend/app/Controllers/WhatsAppController.php +++ b/backend/app/Controllers/WhatsAppController.php @@ -102,9 +102,18 @@ class WhatsAppController extends BaseController $companyId = $request->company_id; $sessions = WhatsAppSession::findAllByCompany($companyId); + $activeSub = \App\Models\CompanySubscription::findActiveByCompany($companyId); + $maxSessions = 1; + if (isset($request->is_super_admin) && $request->is_super_admin) { + $maxSessions = 999; + } elseif ($activeSub) { + $maxSessions = (int)$activeSub['max_sessions']; + } + $response->json([ 'status' => 'success', - 'data' => $sessions + 'data' => $sessions, + 'max_sessions' => $maxSessions ]); } @@ -120,8 +129,8 @@ class WhatsAppController extends BaseController // Fetch subscription limits $activeSub = \App\Models\CompanySubscription::findActiveByCompany($companyId); $maxSessions = 1; - if ($companyId === 1) { - $maxSessions = 10; + if (isset($request->is_super_admin) && $request->is_super_admin) { + $maxSessions = 999; // Unlimited for Super Admin } elseif ($activeSub) { $maxSessions = (int)$activeSub['max_sessions']; } diff --git a/backend/app/Middlewares/AuthMiddleware.php b/backend/app/Middlewares/AuthMiddleware.php index e0863ff..6187169 100644 --- a/backend/app/Middlewares/AuthMiddleware.php +++ b/backend/app/Middlewares/AuthMiddleware.php @@ -38,5 +38,6 @@ class AuthMiddleware $request->user_id = $payload['user_id']; $request->company_id = $payload['company_id']; $request->role = $payload['role']; + $request->is_super_admin = (int)$payload['company_id'] === 1; } } diff --git a/backend/migrate_super_admin_features.php b/backend/migrate_super_admin_features.php new file mode 100644 index 0000000..ddcebd7 --- /dev/null +++ b/backend/migrate_super_admin_features.php @@ -0,0 +1,36 @@ +safeLoad(); + +try { + $pdo = new PDO( + "mysql:host=" . $_ENV['DB_HOST'] . ";dbname=" . $_ENV['DB_NAME'], + $_ENV['DB_USER'], + $_ENV['DB_PASS'] + ); + $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + + echo "=== Running Database Migrations: Super Admin Features ===\n"; + + // 1. Add max_agents to subscription_plans if not exists + $result = $pdo->query("SHOW COLUMNS FROM `subscription_plans` LIKE 'max_agents'"); + if ($result->rowCount() === 0) { + $pdo->exec("ALTER TABLE `subscription_plans` ADD COLUMN `max_agents` INT DEFAULT 1 AFTER `max_sessions`"); + echo "✅ Added 'max_agents' column to 'subscription_plans' table.\n"; + } else { + echo "ℹ️ Column 'max_agents' already exists in 'subscription_plans' table. Skipping.\n"; + } + + // 2. Update default plans limits (Starter: 1, Growth: 3, Pro: 10) + $pdo->exec("UPDATE `subscription_plans` SET `max_agents` = 1 WHERE `id` = 1"); + $pdo->exec("UPDATE `subscription_plans` SET `max_agents` = 3 WHERE `id` = 2"); + $pdo->exec("UPDATE `subscription_plans` SET `max_agents` = 10 WHERE `id` = 3"); + + echo "✅ Updated default subscription plans limits.\n"; + + echo "Migration completed successfully!\n"; +} catch (PDOException $e) { + echo "❌ Database error: " . $e->getMessage() . "\n"; +} diff --git a/backend/public/index.html b/backend/public/index.html index eb71657..4230e76 100644 --- a/backend/public/index.html +++ b/backend/public/index.html @@ -759,6 +759,12 @@