<?php
session_start();
require_once 'db.php';
require_once 'lang.php';
// Обработка выхода
if (isset($_GET['logout'])) {
session_destroy();
header("Location: login.php");
exit;
}
if (!isset($_SESSION['user_id'])) {
header("Location: login.php");
exit;
}
// Получение данных пользователя
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$_SESSION['user_id']]);
$user = $stmt->fetch();
if (!$user || $user['status'] === 'blocked') {
session_destroy();
header("Location: login.php?error=blocked");
exit;
}
// Обновление сессии
$_SESSION['role'] = $user['role'];
$_SESSION['username'] = $user['username'];
$_SESSION['avatar'] = $user['avatar'];
// Получение настроек
$stmt = $pdo->query("SELECT * FROM settings");
$settings = [];
while ($row = $stmt->fetch()) {
$settings[$row['name']] = $row['value'];
}
$siteTitle = $settings['site_title'] ?? 'ChatApp';
$siteFavicon = $settings['favicon'] ?? 'assets/logo.png';
$footerText = $settings['footer_text'] ?? 'by ANUS_TANGA';
$footerText = $settings['footer_text'] ?? 'by ANUS_TANGA';
$enableVideo = $settings['enable_video'] ?? '0';
$hasLicense = true; // Видеозвонки бесплатны
// Обработка обновления профиля
$profileMessage = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_profile'])) {
$newAvatar = $user['avatar'];
if (isset($_FILES['new_avatar']) && $_FILES['new_avatar']['error'] === 0) {
$ext = pathinfo($_FILES['new_avatar']['name'], PATHINFO_EXTENSION);
$newName = 'avatar_' . $_SESSION['user_id'] . '_' . time() . '.' . $ext;
if (move_uploaded_file($_FILES['new_avatar']['tmp_name'], 'assets/avatars/' . $newName)) {
$newAvatar = 'assets/avatars/' . $newName;
}
}
$pdo->prepare("UPDATE users SET avatar = ? WHERE id = ?")->execute([$newAvatar, $_SESSION['user_id']]);
$_SESSION['avatar'] = $newAvatar;
$profileMessage = $t['update_success'] ?? 'Profile updated!';
}
?>
<!DOCTYPE html>
<html lang="<?php echo $_SESSION['lang']; ?>">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title><?php echo htmlspecialchars($siteTitle); ?></title>
<link rel="icon" type="image/png" href="<?php echo htmlspecialchars($siteFavicon); ?>">
<link rel="stylesheet" href="assets/style.css">
<script>
const USER = {
id: <?php echo $_SESSION['user_id']; ?>,
username: '<?php echo htmlspecialchars($_SESSION['username']); ?>',
avatar: '<?php echo htmlspecialchars($_SESSION['avatar'] ?? 'assets/default_avatar.png'); ?>',
role: '<?php echo $_SESSION['role']; ?>',
hasLicense: <?php echo $hasLicense ? 'true' : 'false'; ?>,
isVideoEnabled: <?php echo $enableVideo === '1' ? 'true' : 'false'; ?>
};
const LANG = <?php echo json_encode($t); ?>;
</script>
</head>
<body>
<div class="app-layout">
<aside class="sidebar">
<div class="sidebar-header">
<div style="display:flex; align-items:center; gap:12px;">
<img src="<?php echo htmlspecialchars($siteFavicon); ?>" alt="Logo" style="width:36px; height:36px; border-radius:50%; border:1px solid rgba(255,255,255,0.1);">
<h2 style="margin:0; font-size:1.4rem; font-weight:700; color:#fff;"><?php echo htmlspecialchars($siteTitle); ?></h2>
</div>
</div>
<div style="padding: 20px 20px 10px 20px;">
<h3 style="font-size:0.8rem; text-transform:uppercase; letter-spacing:1.5px; opacity:0.5; margin:0; font-weight:700; color:rgba(255,255,255,0.7);"><?php echo $t['rooms']; ?></h3>
</div>
<div class="create-room"><input type="text" id="newRoomName" placeholder="<?php echo $t['new_room']; ?>"><button id="createRoomBtn" onclick="if(window.handleCreateRoom) window.handleCreateRoom();">+</button></div>
<div id="roomsList" class="rooms-list"></div>
<div class="sidebar-footer" style="height:96px; padding:0 20px; display:flex; flex-direction:column; justify-content:center; font-size:0.75rem; color:rgba(255,255,255,0.3); text-align:center; border-top:1px solid rgba(255,255,255,0.1); flex-shrink:0;">
<div style="width:100%; text-align:center; margin-bottom:5px; line-height:1.4;">© <?php echo date('Y'); ?> <strong><?php echo htmlspecialchars($siteTitle); ?></strong><span style="opacity:0.5; margin:0 4px;">•</span><span style="opacity:0.7; font-size:0.75rem;"><?php echo htmlspecialchars(str_replace('by ', '', $footerText)); ?></span></div>
<?php if ((isset($_SESSION['role']) && $_SESSION['role'] === 'admin') || (isset($_SESSION['user_id']) && $_SESSION['user_id'] == 1)): ?><a href="admin.php" style="color:#0a84ff; text-decoration:none; font-weight:bold; display:block; margin-top:8px;">★ Admin Panel</a><?php endif; ?>
</div>
</aside>
<div class="chat-container">
<div class="chat-header">
<button id="menuBtn" class="icon-btn mobile-menu-btn"><svg viewBox="0 0 24 24" width="24" height="24" fill="currentColor">
<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z" />
</svg></button>
<div style="display:flex; align-items:center; gap:10px;">
<div class="avatar-container" onclick="document.getElementById('profile-modal').style.display='flex'" style="cursor:pointer;"><img src="<?php echo htmlspecialchars($_SESSION['avatar'] ?? 'assets/default_avatar.png'); ?>" class="msg-avatar">
<div class="status-dot online"></div>
</div>
<div>
<h3 id="chatRoomTitle" style="margin-bottom:2px;">ChatApp</h3>
<div class="header-user-info" style="font-size:0.75rem; opacity:0.7;"><span class="welcome-text"><?php echo $t['welcome']; ?>, <?php echo htmlspecialchars($_SESSION['username']); ?></span></div>
</div>
</div>
<div class="header-controls"><button onclick="document.getElementById('profile-modal').style.display='flex'" style="background:rgba(157,78,221,0.1); border:1px solid rgba(157,78,221,0.2); color:var(--primary); padding:6px 12px; border-radius:8px; cursor:pointer; font-size:0.75rem; font-weight:700;"><?php echo $t['profile']; ?></button><a href="?logout=1" class="logout-btn desktop-only" style="margin-left:10px;"><?php echo $t['logout']; ?></a></div>
</div>
<div class="messages-area" id="messagesArea"></div>
<div class="input-area">
<input type="file" id="imageInput" accept="image/*" style="display:none">
<button id="photoBtn" class="icon-btn"><svg viewBox="0 0 24 24" width="24" height="24" fill="currentColor">
<path d="M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z" />
</svg></button>
<input type="text" id="messageInput" placeholder="<?php echo $t['type_msg'] ?? 'Type message...'; ?>">
<button id="sendBtn" class="icon-btn"><svg viewBox="0 0 24 24" width="20" height="20" fill="currentColor">
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z" />
</svg></button>
<button id="recordBtn" class="icon-btn"><svg viewBox="0 0 24 24" width="20" height="20" fill="currentColor">
<path d="M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.66 9 5v6c0 1.66 1.34 3 3 3z" />
<path d="M17 11c0 2.76-2.24 5-5 5s-5-2.24-5-5H5c0 3.53 2.61 6.43 6 6.92V21h2v-3.08c3.39-.49 6-3.39 6-6.92h-2z" />
</svg></button>
</div>
</div>
</div>
<!-- Модальное окно профиля (Свой профиль) -->
<div id="profile-modal" class="modal-overlay" style="display:none;">
<div class="profile-card">
<button onclick="document.getElementById('profile-modal').style.display='none'" class="close-modal">×</button>
<h2 style="margin-bottom:25px;"><?php echo $t['profile']; ?></h2>
<form method="POST" enctype="multipart/form-data">
<div style="margin-bottom:25px; position:relative; display:inline-block;">
<img id="profile-preview" src="<?php echo htmlspecialchars($_SESSION['avatar'] ?? 'assets/default_avatar.png'); ?>" style="width:120px; height:120px; border-radius:50%; object-fit:cover; border:3px solid var(--primary); box-shadow:0 0 20px rgba(157,78,221,0.2);">
<input type="file" name="new_avatar" id="avatar-input" style="display:none;" onchange="previewProfileAvatar(this)">
<label for="avatar-input" style="position:absolute; bottom:0; right:0; background:var(--primary); color:#fff; width:36px; height:36px; border-radius:50%; display:flex; align-items:center; justify-content:center; cursor:pointer; border:3px solid #1e1e1e; font-size:1.2rem;" title="<?php echo $t['change_avatar']; ?>">📷</label>
</div>
<div style="font-weight:800; font-size:1.5rem; margin-bottom:5px; color:#fff;"><?php echo htmlspecialchars($_SESSION['username']); ?></div>
<div style="margin-bottom:25px; opacity:0.6; font-size:0.85rem; text-transform:uppercase; letter-spacing:1px; font-weight:700;">
<?php echo $_SESSION['role'] === 'admin' ? '👑 Admin' : (isset($t['standard_user']) ? $t['standard_user'] : 'Standard User'); ?>
</div>
<?php if ($profileMessage): ?><div style="color:#4cd137; margin-bottom:15px; background:rgba(76,209,55,0.1); padding:10px; border-radius:10px; font-size:0.9rem;"><?php echo $profileMessage; ?></div><?php endif; ?>
<button type="submit" name="update_profile" class="btn"><?php echo $t['save_changes']; ?></button>
</form>
</div>
</div>
<!-- Модальное окно профиля другого пользователя (Заполняется через JS) -->
<div id="view-user-modal" class="modal-overlay" style="display:none;"></div>
<!-- Модальное окно участников комнаты (Заполняется через JS) -->
<div id="room-members-modal" class="modal-overlay" style="display:none;"></div>
<script src="assets/script.js?v=<?php echo time(); ?>"></script>
<script src="assets/user-profile-modal.js"></script>
<script src="protected/video-call-core.js"></script>
<script>
function previewProfileAvatar(i) {
if (i.files && i.files[0]) {
var r = new FileReader();
r.onload = function(e) {
document.getElementById('profile-preview').src = e.target.result;
};
r.readAsDataURL(i.files[0]);
}
}
<?php if ($profileMessage): ?>document.getElementById('profile-modal').style.display = 'flex';
<?php endif; ?>
</script>
</body>
</html>