|
Server IP : 217.21.85.138 / Your IP : 216.73.216.103 Web Server : LiteSpeed System : Linux in-mum-web906.main-hosting.eu 4.18.0-553.37.1.lve.el8.x86_64 #1 SMP Mon Feb 10 22:45:17 UTC 2025 x86_64 User : u915722082 ( 915722082) PHP Version : 7.4.33 Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail MySQL : OFF | cURL : ON | WGET : ON | Perl : OFF | Python : OFF Directory (0755) : /home/u915722082/public_html/rasi/../projects/config/../admin/ |
| [ Home ] | [ C0mmand ] | [ Upload File ] |
|---|
<?php
session_start();
if (!isset($_SESSION['admin_id'])) {
header("Location: login.php");
exit;
}
require_once '../config/config.php';
require_once '../config/db.php';
$current_user_id = $_SESSION['admin_id'];
$current_user_name = $_SESSION['user_name'] ?? 'User';
$current_user_role = $_SESSION['role'] ?? 'Employee';
// Get all active users for chat list
$users_query = "SELECT uid, fname, role FROM tbl_user WHERE status = 'active' AND uid != ? ORDER BY fname ASC";
$users_stmt = mysqli_prepare($con, $users_query);
mysqli_stmt_bind_param($users_stmt, "i", $current_user_id);
mysqli_stmt_execute($users_stmt);
$users_result = mysqli_stmt_get_result($users_stmt);
// Get chat rooms
$rooms_query = "SELECT * FROM tbl_chat_rooms ORDER BY created_at DESC";
$rooms_result = mysqli_query($con, $rooms_query);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<base href="../" />
<title>Live Chat - TDS Admin Hub</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter:300,400,500,600,700" />
<link href="assets/plugins/global/plugins.bundle.css" rel="stylesheet" type="text/css" />
<link href="assets/css/style.bundle.css" rel="stylesheet" type="text/css" />
<style>
.chat-container {
height: calc(100vh - 300px);
min-height: 500px;
}
.chat-messages {
height: calc(100% - 80px);
overflow-y: auto;
padding: 20px;
background: #f8f9fa;
}
.chat-input-area {
padding: 15px;
background: white;
border-top: 1px solid #e4e6ef;
}
.message-bubble {
max-width: 70%;
margin-bottom: 15px;
clear: both;
}
.message-bubble.sent {
float: right;
}
.message-bubble.received {
float: left;
}
.message-content {
padding: 10px 15px;
border-radius: 10px;
word-wrap: break-word;
}
.message-bubble.sent .message-content {
background: #3699ff;
color: white;
}
.message-bubble.received .message-content {
background: white;
color: #3f4254;
}
.message-time {
font-size: 11px;
color: #a1a5b7;
margin-top: 5px;
}
.message-sender {
font-size: 12px;
font-weight: 600;
margin-bottom: 5px;
color: #181c32;
}
.online-indicator {
width: 8px;
height: 8px;
background: #50cd89;
border-radius: 50%;
display: inline-block;
margin-right: 5px;
}
.user-list-item {
padding: 10px 15px;
cursor: pointer;
border-bottom: 1px solid #e4e6ef;
transition: background 0.2s;
}
.user-list-item:hover {
background: #f1faff;
}
.user-list-item.active {
background: #f1faff;
border-left: 3px solid #3699ff;
}
</style>
</head>
<body id="kt_app_body" data-kt-app-layout="dark-sidebar" data-kt-app-header-fixed="true"
data-kt-app-sidebar-enabled="true" data-kt-app-sidebar-fixed="true"
data-kt-app-sidebar-hoverable="true" data-kt-app-sidebar-push-header="true"
data-kt-app-sidebar-push-toolbar="true" data-kt-app-sidebar-push-footer="true"
data-kt-app-toolbar-enabled="true" class="app-default">
<script>
var defaultThemeMode = "light";
var themeMode;
if (document.documentElement) {
if (document.documentElement.hasAttribute("data-bs-theme-mode")) {
themeMode = document.documentElement.getAttribute("data-bs-theme-mode");
} else {
if (localStorage.getItem("data-bs-theme") !== null) {
themeMode = localStorage.getItem("data-bs-theme");
} else {
themeMode = defaultThemeMode;
}
}
if (themeMode === "system") {
themeMode = window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
}
document.documentElement.setAttribute("data-bs-theme", themeMode);
}
</script>
<div class="d-flex flex-column flex-root app-root" id="kt_app_root">
<div class="app-page flex-column flex-column-fluid" id="kt_app_page">
<?php include 'header.php'; ?>
<div class="app-wrapper flex-column flex-row-fluid" id="kt_app_wrapper">
<!-- Sidebar -->
<div id="kt_app_sidebar" class="app-sidebar flex-column">
<div class="app-sidebar-logo px-6" id="kt_app_sidebar_logo">
<a href="admin/dashboard.php">
<img alt="Logo" src="assets/media/logos/LOGO.png" class="h-25px app-sidebar-logo-default" />
</a>
<div id="kt_app_sidebar_toggle" class="app-sidebar-toggle btn btn-icon btn-shadow btn-sm btn-color-muted btn-active-color-primary h-30px w-30px position-absolute top-50 start-100 translate-middle rotate">
<i class="ki-duotone ki-black-left-line fs-3 rotate-180">
<span class="path1"></span>
<span class="path2"></span>
</i>
</div>
</div>
<div class="app-sidebar-menu overflow-hidden flex-column-fluid">
<div class="app-sidebar-wrapper hover-scroll-overlay-y my-5">
<div class="menu menu-column menu-rounded menu-sub-indention px-3">
<div class="menu-item">
<div class="menu-content">
<span class="menu-heading fw-bold text-uppercase fs-7">TDS Admin Hub</span>
</div>
</div>
<div class="menu-item">
<a class="menu-link" href="admin/dashboard.php">
<span class="menu-icon">
<i class="ki-duotone ki-element-11 fs-2">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
<span class="path4"></span>
</i>
</span>
<span class="menu-title">Dashboard</span>
</a>
</div>
<?php if ($current_user_role !== 'Employee'): ?>
<div class="menu-item">
<a class="menu-link" href="admin/users.php">
<span class="menu-icon">
<i class="ki-duotone ki-address-book fs-2">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
</i>
</span>
<span class="menu-title">User Management</span>
</a>
</div>
<div class="menu-item">
<a class="menu-link" href="admin/tasks.php">
<span class="menu-icon">
<i class="ki-duotone ki-calendar-tick fs-2">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
<span class="path4"></span>
<span class="path5"></span>
<span class="path6"></span>
</i>
</span>
<span class="menu-title">Task Assignment</span>
</a>
</div>
<div class="menu-item">
<a class="menu-link" href="admin/meetings.php">
<span class="menu-icon">
<i class="ki-duotone ki-calendar-8 fs-2">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
<span class="path4"></span>
<span class="path5"></span>
<span class="path6"></span>
</i>
</span>
<span class="menu-title">Meetings</span>
</a>
</div>
<div class="menu-item">
<a class="menu-link" href="admin/team_report.php">
<span class="menu-icon">
<i class="ki-duotone ki-chart-simple fs-2">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
<span class="path4"></span>
</i>
</span>
<span class="menu-title">Team Report</span>
</a>
</div>
<div class="menu-item">
<a class="menu-link" href="admin/project_summary.php">
<span class="menu-icon">
<i class="ki-duotone ki-abstract-26 fs-2">
<span class="path1"></span>
<span class="path2"></span>
</i>
</span>
<span class="menu-title">Project Summary</span>
</a>
</div>
<?php endif; ?>
<!-- Chat - ACTIVE -->
<div class="menu-item">
<a class="menu-link active" href="admin/chat.php">
<span class="menu-icon">
<i class="ki-duotone ki-message-text-2 fs-2">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
</i>
</span>
<span class="menu-title">Live Chat</span>
</a>
</div>
<?php if ($current_user_role === 'Employee'): ?>
<div class="menu-item">
<a class="menu-link" href="admin/logout.php">
<span class="menu-icon">
<i class="ki-duotone ki-entrance-left fs-2 text-danger">
<span class="path1"></span>
<span class="path2"></span>
</i>
</span>
<span class="menu-title text-danger">Logout</span>
</a>
</div>
<?php endif; ?>
</div>
</div>
</div>
</div>
<!-- Main Content -->
<div class="app-main flex-column flex-row-fluid" id="kt_app_main">
<div class="d-flex flex-column flex-column-fluid">
<div id="kt_app_toolbar" class="app-toolbar py-3 py-lg-6">
<div id="kt_app_toolbar_container" class="app-container container-xxl d-flex flex-stack">
<div class="page-title d-flex flex-column justify-content-center flex-wrap me-3">
<h1 class="page-heading d-flex text-gray-900 fw-bold fs-3 flex-column my-0">
Live Chat
</h1>
<ul class="breadcrumb breadcrumb-separatorless fw-semibold fs-7 my-0 pt-1">
<li class="breadcrumb-item text-muted">
<a href="admin/dashboard.php" class="text-muted text-hover-primary">Home</a>
</li>
<li class="breadcrumb-item">
<span class="bullet bg-gray-500 w-5px h-2px"></span>
</li>
<li class="breadcrumb-item text-muted">Chat</li>
</ul>
</div>
</div>
</div>
<div id="kt_app_content" class="app-content flex-column-fluid">
<div id="kt_app_content_container" class="app-container container-xxl">
<div class="card">
<div class="card-body p-0">
<div class="row g-0">
<!-- Chat Rooms & Users List -->
<div class="col-md-3 border-end">
<div class="p-5 border-bottom">
<h3 class="mb-0">Chats</h3>
</div>
<div class="p-3">
<h6 class="text-muted text-uppercase fs-8 mb-3">Chat Rooms</h6>
<div id="roomsList">
<div class="user-list-item active" onclick="selectRoom('general', 'General Chat')">
<div class="d-flex align-items-center">
<div class="symbol symbol-35px me-3">
<span class="symbol-label bg-light-primary">
<i class="ki-duotone ki-message-text-2 fs-3 text-primary">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
</i>
</span>
</div>
<div>
<div class="fw-bold">General Chat</div>
<div class="text-muted fs-7">All team members</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Chat Messages Area -->
<div class="col-md-9">
<div class="chat-container">
<!-- Chat Header -->
<div class="p-5 border-bottom">
<div class="d-flex align-items-center">
<div class="symbol symbol-40px me-3">
<span class="symbol-label bg-light-primary">
<i class="ki-duotone ki-message-text-2 fs-3 text-primary">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
</i>
</span>
</div>
<div>
<h4 class="mb-0" id="chatRoomName">General Chat</h4>
<div class="text-muted fs-7">
<span class="online-indicator"></span>
<span id="onlineCount">Loading...</span>
</div>
</div>
</div>
</div>
<!-- Messages -->
<div class="chat-messages" id="chatMessages">
<div class="text-center text-muted py-10">
<i class="ki-duotone ki-message-text-2 fs-3x mb-3">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
</i>
<p>Loading messages...</p>
</div>
</div>
<!-- Input Area -->
<div class="chat-input-area">
<form id="chatForm" class="d-flex">
<input type="text"
class="form-control form-control-solid me-3"
id="messageInput"
placeholder="Type your message..."
autocomplete="off"
required />
<button type="submit" class="btn btn-primary">
<i class="ki-duotone ki-send fs-2">
<span class="path1"></span>
<span class="path2"></span>
</i>
Send
</button>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="kt_app_footer" class="app-footer">
<div class="app-container container-fluid d-flex flex-column flex-md-row flex-center flex-md-stack py-3">
<div class="text-gray-900 order-2 order-md-1">
<span class="text-muted fw-semibold me-1">2024©</span>
<a href="https://thedotstudios.com/" target="_blank" class="text-gray-800 text-hover-primary">
Copyright All rights reserved | Made with <span class="fa fa-heart text-danger"></span>
<b>by TheDotStudios.</b>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Scripts -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="assets/plugins/global/plugins.bundle.js"></script>
<script src="assets/js/scripts.bundle.js"></script>
<!-- Firebase SDK -->
<script src="https://www.gstatic.com/firebasejs/10.7.1/firebase-app-compat.js"></script>
<script src="https://www.gstatic.com/firebasejs/10.7.1/firebase-database-compat.js"></script>
<script>
// ✅ Firebase Configuration (Replace with your own config)
const firebaseConfig = {
apiKey: "AIzaSyDfycMOFrE5-z-yTyFiNA1cLKCgn6G3hEY",
authDomain: "projects-aa300.firebaseapp.com",
databaseURL: "https://projects-aa300-default-rtdb.firebaseio.com", // ✅ ADD THIS LINE!
projectId: "projects-aa300",
storageBucket: "projects-aa300.firebasestorage.app",
messagingSenderId: "1018429343204",
appId: "1:1018429343204:web:e8801e0726af72662333f1",
measurementId: "G-7Z67HPKRVH"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
const database = firebase.database();
// Current user info
const currentUserId = <?php echo $current_user_id; ?>;
const currentUserName = "<?php echo $current_user_name; ?>";
const currentUserRole = "<?php echo $current_user_role; ?>";
let currentRoom = 'general';
// Select chat room
function selectRoom(roomId, roomName) {
currentRoom = roomId;
document.getElementById('chatRoomName').textContent = roomName;
loadMessages();
// Update active state
document.querySelectorAll('.user-list-item').forEach(item => {
item.classList.remove('active');
});
event.currentTarget.classList.add('active');
}
// Load messages
function loadMessages() {
const messagesRef = database.ref('messages/' + currentRoom);
document.getElementById('chatMessages').innerHTML = '';
messagesRef.on('value', (snapshot) => {
const messages = snapshot.val();
const messagesDiv = document.getElementById('chatMessages');
messagesDiv.innerHTML = '';
if (messages) {
Object.keys(messages).forEach(key => {
const msg = messages[key];
displayMessage(msg);
});
// Scroll to bottom
messagesDiv.scrollTop = messagesDiv.scrollHeight;
} else {
messagesDiv.innerHTML = `
<div class="text-center text-muted py-10">
<i class="ki-duotone ki-message-text-2 fs-3x mb-3">
<span class="path1"></span>
<span class="path2"></span>
<span class="path3"></span>
</i>
<p>No messages yet. Start the conversation!</p>
</div>`;
}
});
// Update online count
updateOnlineCount();
}
// Display message
function displayMessage(msg) {
const messagesDiv = document.getElementById('chatMessages');
const isSent = msg.userId == currentUserId;
const messageHtml = `
<div class="message-bubble ${isSent ? 'sent' : 'received'}">
${!isSent ? `<div class="message-sender">${msg.userName} <span class="badge badge-light-${msg.userRole === 'CEO' ? 'danger' : (msg.userRole === 'Manager' ? 'warning' : 'info')}">${msg.userRole}</span></div>` : ''}
<div class="message-content">${escapeHtml(msg.message)}</div>
<div class="message-time ${isSent ? 'text-end' : ''}">${formatTime(msg.timestamp)}</div>
</div>
`;
messagesDiv.insertAdjacentHTML('beforeend', messageHtml);
}
// Send message
document.getElementById('chatForm').addEventListener('submit', function(e) {
e.preventDefault();
const messageInput = document.getElementById('messageInput');
const message = messageInput.value.trim();
if (message) {
const messagesRef = database.ref('messages/' + currentRoom);
const newMessageRef = messagesRef.push();
newMessageRef.set({
userId: currentUserId,
userName: currentUserName,
userRole: currentUserRole,
message: message,
timestamp: firebase.database.ServerValue.TIMESTAMP
});
messageInput.value = '';
}
});
// Update online presence
function updateOnlineCount() {
const presenceRef = database.ref('presence/' + currentRoom + '/' + currentUserId);
presenceRef.set({
userId: currentUserId,
userName: currentUserName,
timestamp: firebase.database.ServerValue.TIMESTAMP
});
presenceRef.onDisconnect().remove();
// Count online users
database.ref('presence/' + currentRoom).on('value', (snapshot) => {
const count = snapshot.numChildren();
document.getElementById('onlineCount').textContent = count + ' online';
});
}
// Format timestamp
function formatTime(timestamp) {
const date = new Date(timestamp);
const now = new Date();
const diffMs = now - date;
const diffMins = Math.floor(diffMs / 60000);
if (diffMins < 1) return 'Just now';
if (diffMins < 60) return diffMins + ' mins ago';
if (diffMins < 1440) return Math.floor(diffMins / 60) + ' hours ago';
return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();
}
// Escape HTML
function escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
// Initialize
loadMessages();
</script>
</body>
</html>