Просмотр файла chat.php

Размер файла: 7.23Kb
<?php
// Включение отображения ошибок для отладки (убрать на продакшене)
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Проверка, была ли сессия уже запущена
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

require_once 'config.php';
require_once 'includes/db.php';
require_once 'includes/auth.php';

// Проверка авторизации
if (!isset($_SESSION['user_id'])) {
    header('Location: login.php');
    exit;
}

global $pdo;
$user_id = $_SESSION['user_id'];
$target_user_id = isset($_GET['user_id']) && is_numeric($_GET['user_id']) ? (int)$_GET['user_id'] : null;

if (!$target_user_id) {
    header('Location: user_list.php');
    exit;
}

// Получаем данные собеседника
$stmt = $pdo->prepare("SELECT id, login, avatar FROM users WHERE id = ?");
$stmt->execute([$target_user_id]);
$target_user = $stmt->fetch();

if (!$target_user) {
    header('Location: user_list.php');
    exit;
}

// Обновляем статус всех непрочитанных сообщений от этого пользователя как прочитанные
$stmt = $pdo->prepare("UPDATE messages SET is_read = TRUE WHERE receiver_id = ? AND sender_id = ? AND is_read = FALSE");
$stmt->execute([$user_id, $target_user_id]);

// Получаем сообщения между текущим пользователем и собеседником
$stmt = $pdo->prepare("SELECT m.id, m.sender_id, m.message, m.created_at, m.is_read, u.login, u.avatar 
                       FROM messages m 
                       JOIN users u ON u.id = m.sender_id 
                       WHERE (m.sender_id = ? AND m.receiver_id = ?) 
                       OR (m.sender_id = ? AND m.receiver_id = ?) 
                       ORDER BY m.created_at ASC");
$stmt->execute([$user_id, $target_user_id, $target_user_id, $user_id]);
$messages = $stmt->fetchAll();

// Обработка отправки нового сообщения
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['message'])) {
    $message = trim($_POST['message']);
    if (!empty($message)) {
        $stmt = $pdo->prepare("INSERT INTO messages (sender_id, receiver_id, message, created_at, is_read) VALUES (?, ?, ?, NOW(), FALSE)");
        $stmt->execute([$user_id, $target_user_id, $message]);
    }
    header('Location: chat.php?user_id=' . $target_user_id);
    exit;
}
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="assets/css/style.css">
    <title>Чат с <?php echo htmlspecialchars($target_user['login']); ?> — AstralForge</title>
</head>
<body>
    <nav class="navbar">
        <div class="navbar-container">
            <?php if (isset($_SESSION['user_id'])): ?>
                <div class="navbar-user">
                    <a href="profile.php" class="navbar-avatar-link">
                        <?php 
                        $current_user = $pdo->prepare("SELECT avatar, login FROM users WHERE id = ?");
                        $current_user->execute([$_SESSION['user_id']]);
                        $current_user_data = $current_user->fetch();
                        ?>
                        <?php if (empty($current_user_data['avatar'])): ?>
                            <span class="default-avatar navbar-avatar">?</span>
                        <?php else: ?>
                            <img src="<?php echo htmlspecialchars($current_user_data['avatar']); ?>" alt="Ваш аватар" class="navbar-avatar" onerror="this.replaceWith(document.createElement('span').classList.add('default-avatar', 'navbar-avatar').textContent='?');">
                        <?php endif; ?>
                    </a>
                    <a href="profile.php" class="navbar-username"><?php echo htmlspecialchars($current_user_data['login']); ?></a>
                </div>
                <div class="navbar-links">
                    <a href="index.php">Главная</a>
                    <a href="user_list.php">Пользователи</a>
                    <a href="messages.php">
                        <span class="message-icon"></span>
                    </a>
                    <?php if (isset($_SESSION['is_admin']) && $_SESSION['is_admin']) echo '<a href="admin/index.php">Админ-панель</a>'; ?>
                    <a href="logout.php">Выход</a>
                </div>
            <?php endif; ?>
        </div>
    </nav>

    <div class="container">
        <h1>Чат с <?php echo htmlspecialchars($target_user['login']); ?></h1>
        <div class="chat-container">
            <div class="chat-messages">
                <?php foreach ($messages as $message): ?>
                    <div class="message <?php echo $message['sender_id'] === $user_id ? 'message-sent' : 'message-received'; ?>">
                        <?php if ($message['sender_id'] !== $user_id): ?>
                            <?php if (empty($message['avatar'])): ?>
                                <span class="default-avatar message-avatar">?</span>
                            <?php else: ?>
                                <img src="<?php echo htmlspecialchars($message['avatar']); ?>" alt="<?php echo htmlspecialchars($message['login']); ?>" class="message-avatar" onerror="this.replaceWith(document.createElement('span').classList.add('default-avatar', 'message-avatar').textContent='?');">
                            <?php endif; ?>
                        <?php endif; ?>
                        <div class="message-content">
                            <p class="message-text"><?php echo htmlspecialchars($message['message']); ?></p>
                            <p class="message-time"><?php echo htmlspecialchars(date('H:i d.m.Y', strtotime($message['created_at']))); ?>
                            <?php if ($message['sender_id'] !== $user_id && !$message['is_read']): ?>
                                <span class="message-unread">Новое</span>
                            <?php endif; ?>
                            </p>
                        </div>
                        <?php if ($message['sender_id'] === $user_id): ?>
                            <?php if (empty($current_user_data['avatar'])): ?>
                                <span class="default-avatar message-avatar">?</span>
                            <?php else: ?>
                                <img src="<?php echo htmlspecialchars($current_user_data['avatar']); ?>" alt="<?php echo htmlspecialchars($current_user_data['login']); ?>" class="message-avatar" onerror="this.replaceWith(document.createElement('span').classList.add('default-avatar', 'message-avatar').textContent='?');">
                            <?php endif; ?>
                        <?php endif; ?>
                    </div>
                <?php endforeach; ?>
            </div>
            <form method="POST" action="chat.php?user_id=<?php echo htmlspecialchars($target_user_id); ?>" class="chat-form">
                <textarea name="message" placeholder="Введите сообщение..." required></textarea>
                <button type="submit">Отправить</button>
            </form>
        </div>
    </div>
</body>
</html>