File Manager V1.5
FILE_CONTENT: get_chats.php
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH, OPTIONS");
header("Access-Control-Allow-Headers: Authorization, Content-Type, Accept, X-Requested-With, User-Agent, Origin");
header("Access-Control-Max-Age: 86400");
header("Content-Type: application/json; charset=UTF-8");
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
http_response_code(200);
exit;
}
if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
http_response_code(405);
echo json_encode(["success" => false, "message" => "Only GET method allowed"]);
exit;
}
require 'vendor/autoload.php';
require 'db.php';
use Dotenv\Dotenv;
try {
$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();
} catch (Exception $e) {
// Используем настройки из db.php, если .env недоступен
}
// Проверка авторизации
$token = getAuthToken();
if (!$token) {
http_response_code(401);
echo json_encode(['success' => false, 'message' => 'Authorization required']);
exit;
}
$decoded = verifyToken($token);
if (!$decoded) {
http_response_code(401);
echo json_encode(['success' => false, 'message' => 'Invalid token']);
exit;
}
$pdo = getPDO();
$userType = (int)$decoded['user_type']; // Явно преобразуем в int
// Администраторами считаются user_type >= 1 (все кроме обычных пользователей с типом 0)
$isAdmin = ($userType >= 1);
// Только администраторы могут видеть список чатов
if (!$isAdmin) {
http_response_code(403);
echo json_encode([
'success' => false,
'message' => 'Access denied. Admin only.'
]);
exit;
}
try {
// Получаем список всех чатов с информацией о пользователе и последним сообщением
$stmt = $pdo->prepare("
SELECT
c.id,
c.user_id,
c.user_type,
c.created_at,
c.updated_at,
(
SELECT COUNT(*)
FROM messages m
WHERE m.chat_id = c.id AND m.sender_type = 0 AND m.is_read = 0
) as unread_count,
(
SELECT m.message
FROM messages m
WHERE m.chat_id = c.id
ORDER BY m.created_at DESC
LIMIT 1
) as last_message,
(
SELECT m.created_at
FROM messages m
WHERE m.chat_id = c.id
ORDER BY m.created_at DESC
LIMIT 1
) as last_message_time
FROM chats c
ORDER BY c.updated_at DESC
");
$stmt->execute();
$chats = $stmt->fetchAll();
// Для каждого чата получаем информацию о пользователе
foreach ($chats as &$chat) {
$tableName = match((int)$chat['user_type']) {
0 => 'individusers',
1 => 'companyusers',
2 => 'leasingmanagers',
};
$stmt = $pdo->prepare("SELECT id, number, first_name, last_name, company_name FROM $tableName WHERE id = ?");
$stmt->execute([$chat['user_id']]);
$user = $stmt->fetch();
if ($user) {
// Формируем имя пользователя
if ($chat['user_type'] == 0) {
// Индивидуальный пользователь
$name = trim(($user['first_name'] ?? '') . ' ' . ($user['last_name'] ?? ''));
if (empty($name)) {
$name = $user['number'];
}
} elseif ($chat['user_type'] == 1) {
// Компания
$name = $user['company_name'] ?? $user['number'];
} else {
// Менеджер лизинга
$name = trim(($user['first_name'] ?? '') . ' ' . ($user['last_name'] ?? ''));
if (empty($name)) {
$name = $user['company_name'] ?? $user['number'];
}
}
$chat['user_name'] = $name;
$chat['user_phone'] = $user['number'];
} else {
$chat['user_name'] = 'Unknown User';
$chat['user_phone'] = '';
}
// Преобразуем unread_count в integer
$chat['unread_count'] = (int)$chat['unread_count'];
}
unset($chat);
echo json_encode([
'success' => true,
'data' => $chats
]);
} catch (PDOException $e) {
http_response_code(500);
echo json_encode(['success' => false, 'message' => 'Database error: ' . $e->getMessage()]);
} catch (Exception $e) {
http_response_code(500);
echo json_encode(['success' => false, 'message' => $e->getMessage()]);
}
[ KEMBALI ]