MMCT TEAM
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/admin/

[  Home  ][  C0mmand  ][  Upload File  ]

Current File : /home/u915722082/public_html/rasi/../projects/admin/users.php
<?php
session_start();

if (!isset($_SESSION['admin_id'])) {
    header("Location: login.php");
    exit;
}

// ADMIN/MANAGER ONLY ACCESS
if ($_SESSION['role'] === 'Employee') {
    header("Location: employee.php");
    exit;
}

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

$current_user_role = $_SESSION['role'] ?? 'Manager';
$current_user_id = $_SESSION['admin_id'];
$current_user_name = $_SESSION['user_name'] ?? 'Admin';

$sql = "SELECT u.*, creator.fname as creator_fname 
        FROM tbl_user u 
        LEFT JOIN tbl_user creator ON u.created_by = creator.uid 
        ORDER BY u.created_at DESC";
$result = mysqli_query($con, $sql);


?>
<!DOCTYPE html>
<html lang="en">
<head>
    <base href="../" />
    <title>User Management - 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" />
</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 'includes/header.php'; ?>
            
            <div class="app-wrapper flex-column flex-row-fluid" id="kt_app_wrapper">
                
                <?php include 'includes/sidebar.php'; ?>
                
                <!-- Main Content -->
                <div class="app-main flex-column flex-row-fluid" id="kt_app_main">
                    <div class="d-flex flex-column flex-column-fluid">
                        
                        <!-- Toolbar -->
                        <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">
                                        User Management
                                    </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">User Management</li>
                                    </ul>
                                </div>
                            </div>
                        </div>
                        
                        <!-- Content -->
                        <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-header border-0 pt-6">
                                        <div class="card-title">
                                            <div class="d-flex align-items-center position-relative my-1">
                                                <i class="ki-duotone ki-magnifier fs-3 position-absolute ms-5">
                                                    <span class="path1"></span>
                                                    <span class="path2"></span>
                                                </i>
                                                <input type="text" id="searchUser" 
                                                       class="form-control form-control-solid w-250px ps-13" 
                                                       placeholder="Search users..." />
                                            </div>
                                        </div>
                                        
                                        <div class="card-toolbar">
                                            <button type="button" class="btn btn-sm btn-primary" 
                                                    data-bs-toggle="modal" data-bs-target="#userModal" 
                                                    onclick="openAddModal()">
                                                <i class="ki-duotone ki-plus fs-2"></i>
                                                Add User
                                            </button>
                                        </div>
                                    </div>
                                    
                                    <div class="card-body py-4">
                                        <table class="table align-middle table-row-dashed fs-6 gy-5" id="usersTable">
                                            <thead>
                                                <tr class="text-start text-muted fw-bold fs-7 text-uppercase gs-0">
                                                    <th class="min-w-125px">User</th>
                                                    <th class="min-w-125px">Email</th>
                                                    <th class="min-w-125px">Role</th>
                                                    <th class="min-w-125px">Created By</th>
                                                    <th class="min-w-100px">Status</th>
                                                    <th class="text-end min-w-100px">Actions</th>
                                                </tr>
                                            </thead>
                                            <tbody class="text-gray-600 fw-semibold">
                                                <?php while ($user = mysqli_fetch_assoc($result)): ?>
                                                <tr>
                                                    <td class="d-flex align-items-center">
                                                        <div class="symbol symbol-circle symbol-50px overflow-hidden me-3">
                                                            <div class="symbol-label fs-3 bg-light-primary text-primary">
                                                                <?php echo strtoupper(substr($user['fname'], 0, 1)); ?>
                                                            </div>
                                                        </div>
                                                        <div class="d-flex flex-column">
                                                            <span class="text-gray-800 text-hover-primary mb-1">
                                                                <?php echo htmlspecialchars($user['fname']); ?>
                                                            </span>
                                                        </div>
                                                    </td>
                                                    <td><?php echo htmlspecialchars($user['email']); ?></td>
                                                    <td>
                                                        <span class="badge badge-light-<?php 
                                                            echo $user['role'] === 'CEO' ? 'danger' : 
                                                                ($user['role'] === 'Manager' ? 'warning' : 'success'); 
                                                        ?>">
                                                            <?php echo htmlspecialchars($user['role']); ?>
                                                        </span>
                                                    </td>
                                                    <td>
                                                        <?php 
                                                        if ($user['creator_fname']) {
                                                            echo htmlspecialchars($user['creator_fname']);
                                                        } else {
                                                            echo '<span class="text-muted">Self</span>';
                                                        }
                                                        ?>
                                                    </td>
                                                    <td>
                                                        <span class="badge badge-light-<?php echo $user['status'] === 'active' ? 'success' : 'danger'; ?>">
                                                            <?php echo ucfirst($user['status']); ?>
                                                        </span>
                                                    </td>
<td class="text-end">
    <?php if ($user['uid'] != $current_user_id): ?>
        
        <!-- ✅ Calendar Icon - Only for Employees -->
        <?php if ($user['role'] === 'Employee'): ?>
        <a href="admin/employee_calendar.php?employee_id=<?php echo $user['uid']; ?>" 
           class="btn btn-icon btn-light btn-active-light-success btn-sm me-1" 
           title="View Employee Calendar">
            <i class="ki-duotone ki-calendar fs-3">
                <span class="path1"></span>
                <span class="path2"></span>
            </i>
        </a>
        <?php endif; ?>
        
        <!-- View Details Button (only for employees) -->
        <?php if ($user['role'] === 'Employee'): ?>
        <a href="admin/employee_details.php?id=<?php echo $user['uid']; ?>" 
           class="btn btn-icon btn-light btn-active-light-info btn-sm me-1" 
           title="View Details">
            <i class="ki-duotone ki-eye fs-3">
                <span class="path1"></span>
                <span class="path2"></span>
                <span class="path3"></span>
            </i>
        </a>
        <?php endif; ?>
        
        <!-- ✅ Edit Button - Manager cannot edit CEO or other Managers -->
        <?php 
        $can_edit = true;
        if ($current_user_role === 'Manager' && ($user['role'] === 'CEO' || $user['role'] === 'Manager')) {
            $can_edit = false;
        }
        ?>
        
        <?php if ($can_edit): ?>
        <button class="btn btn-icon btn-light btn-active-light-primary btn-sm me-1" 
                onclick='editUser(<?php echo json_encode($user); ?>)'>
            <i class="ki-duotone ki-pencil fs-3">
                <span class="path1"></span>
                <span class="path2"></span>
            </i>
        </button>
        <?php else: ?>
        <button class="btn btn-icon btn-light btn-sm me-1" 
                disabled
                title="Only CEO can edit <?php echo $user['role']; ?> accounts">
            <i class="ki-duotone ki-lock fs-3 text-muted">
                <span class="path1"></span>
                <span class="path2"></span>
            </i>
        </button>
        <?php endif; ?>
        
        <!-- ✅ Delete Button - Manager cannot delete CEO or other Managers -->
        <?php 
        $can_delete = true;
        if ($current_user_role === 'Manager' && ($user['role'] === 'CEO' || $user['role'] === 'Manager')) {
            $can_delete = false;
        }
        ?>
        
        <?php if ($can_delete): ?>
        <button class="btn btn-icon btn-light btn-active-light-primary btn-sm" 
                onclick="deleteUser(<?php echo $user['uid']; ?>, '<?php echo htmlspecialchars($user['fname']); ?>')">
            <i class="ki-duotone ki-trash fs-3">
                <span class="path1"></span>
                <span class="path2"></span>
                <span class="path3"></span>
                <span class="path4"></span>
                <span class="path5"></span>
            </i>
        </button>
        <?php else: ?>
        <button class="btn btn-icon btn-light btn-sm" 
                disabled
                title="Only CEO can delete <?php echo $user['role']; ?> accounts">
            <i class="ki-duotone ki-lock fs-3 text-muted">
                <span class="path1"></span>
                <span class="path2"></span>
            </i>
        </button>
        <?php endif; ?>
        
    <?php endif; ?>
</td>
                                                </tr>
                                                <?php endwhile; ?>
                                            </tbody>
                                        </table>
                                    </div>
                                </div>
                                
                            </div>
                        </div>
                        
                    </div>
                    
                    <!-- Footer -->
                    <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&copy;</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>
    
    <!-- Add/Edit User Modal -->
    <div class="modal fade" id="userModal" tabindex="-1" aria-hidden="true">
        <div class="modal-dialog modal-dialog-centered mw-650px">
            <div class="modal-content">
                <div class="modal-header">
                    <h2 class="fw-bolder" id="modalTitle">Add User</h2>
                    <div class="btn btn-icon btn-sm btn-active-icon-primary" data-bs-dismiss="modal">
                        <i class="ki-duotone ki-cross fs-1">
                            <span class="path1"></span>
                            <span class="path2"></span>
                        </i>
                    </div>
                </div>
                
                <form id="userForm" method="POST">
                    <div class="modal-body py-10 px-lg-17">
                        <input type="hidden" name="action" id="action" value="add">
                        <input type="hidden" name="user_id" id="user_id" value="">
                        
                        <div id="alertBox"></div>
                        
                        <div class="fv-row mb-7" id="nameField">
                            <label class="required fs-6 fw-semibold mb-2">Name</label>
                            <input type="text" class="form-control form-control-solid" 
                                   name="fname" id="fname" required />
                        </div>
                        
                        <div class="fv-row mb-7" id="emailField">
                            <label class="required fs-6 fw-semibold mb-2">Email</label>
                            <input type="email" class="form-control form-control-solid" 
                                   name="email" id="email" required />
                        </div>
                        
                                               <div class="fv-row mb-7">
                            <label class="required fs-6 fw-semibold mb-2">Role</label>
                            <select class="form-select form-select-solid" 
                                    name="role" 
                                    id="role" 
                                    data-control="select2" 
                                    data-placeholder="Select a role" 
                                    data-hide-search="true"
                                    required>
                                <option value="">Select Role</option>
                                <?php if ($current_user_role === 'CEO'): ?>
                                <option value="CEO">CEO</option>
                                <option value="Manager">Manager</option>
                                <?php endif; ?>
                                <option value="Employee">Employee</option>
                            </select>
                            <?php if ($current_user_role === 'Manager'): ?>
                            <div class="form-text text-muted">
                                <i class="ki-duotone ki-information-2 fs-6 text-warning">
                                    <span class="path1"></span>
                                    <span class="path2"></span>
                                    <span class="path3"></span>
                                </i>
                                Managers can only add Employees
                            </div>
                            <?php endif; ?>
                        </div>
                                                
                        <div class="fv-row mb-7" id="passwordField">
                            <label class="required fs-6 fw-semibold mb-2">Password</label>
                            <input type="password" class="form-control form-control-solid" 
                                   name="password" id="password" />
                            <div class="form-text">Minimum 6 characters</div>
                        </div>
                        
                    </div>
                    
                    <div class="modal-footer flex-center">
                        <button type="reset" class="btn btn-light me-3" data-bs-dismiss="modal">Cancel</button>
                        <button type="submit" class="btn btn-primary" id="submitBtn">
                            <span class="indicator-label">Submit</span>
                            <span class="indicator-progress">Please wait...
                                <span class="spinner-border spinner-border-sm align-middle ms-2"></span>
                            </span>
                        </button>
                    </div>
                </form>
                
            </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>
    
    <script>
    let currentModal = null;

    function openAddModal() {
        document.getElementById('modalTitle').textContent = 'Add User';
        document.getElementById('action').value = 'add';
        document.getElementById('user_id').value = '';
        document.getElementById('userForm').reset();
        
        document.getElementById('nameField').style.display = 'block';
        document.getElementById('emailField').style.display = 'block';
        document.getElementById('passwordField').style.display = 'block';
        document.getElementById('password').setAttribute('required', 'required');
        document.getElementById('fname').setAttribute('required', 'required');
        document.getElementById('email').setAttribute('required', 'required');
        
        document.getElementById('alertBox').innerHTML = '';
        
        $('#role').select2({
            dropdownParent: $('#userModal')
        });
    }

    function editUser(userData) {
        document.getElementById('modalTitle').textContent = 'Edit User Role';
        document.getElementById('action').value = 'edit';
        document.getElementById('user_id').value = userData.uid;
        
        document.getElementById('nameField').style.display = 'none';
        document.getElementById('emailField').style.display = 'none';
        document.getElementById('passwordField').style.display = 'none';
        
        document.getElementById('password').removeAttribute('required');
        document.getElementById('fname').removeAttribute('required');
        document.getElementById('email').removeAttribute('required');
        
        document.getElementById('role').value = userData.role;
        
        document.getElementById('alertBox').innerHTML = '';
        
        $('#role').select2({
            dropdownParent: $('#userModal')
        });
        $('#role').val(userData.role).trigger('change');
        
        currentModal = new bootstrap.Modal(document.getElementById('userModal'), {
            backdrop: 'static',
            keyboard: false
        });
        currentModal.show();
    }

    document.getElementById('userForm').addEventListener('submit', function(e) {
        e.preventDefault();
        
        const submitBtn = document.getElementById('submitBtn');
        const formData = new FormData(this);
        
        submitBtn.setAttribute('data-kt-indicator', 'on');
        submitBtn.disabled = true;
        
        fetch('admin/user_actions.php', {
            method: 'POST',
            body: formData
        })
        .then(response => response.json())
        .then(data => {
            submitBtn.removeAttribute('data-kt-indicator');
            submitBtn.disabled = false;
            
            if (data.success) {
                const modalElement = document.getElementById('userModal');
                const modal = bootstrap.Modal.getInstance(modalElement);
                if (modal) {
                    modal.hide();
                }
                
                setTimeout(() => {
                    document.querySelectorAll('.modal-backdrop').forEach(el => el.remove());
                    document.body.classList.remove('modal-open');
                    document.body.style.removeProperty('padding-right');
                    document.body.style.removeProperty('overflow');
                    
                    const appRoot = document.getElementById('kt_app_root');
                    if (appRoot) {
                        appRoot.removeAttribute('aria-hidden');
                    }
                    
                    Swal.fire({
                        text: data.message,
                        icon: "success",
                        buttonsStyling: false,
                        confirmButtonText: "Ok, got it!",
                        customClass: {
                            confirmButton: "btn btn-primary"
                        }
                    }).then(() => {
                        location.reload();
                    });
                }, 300);
            } else {
                document.getElementById('alertBox').innerHTML = 
                    `<div class="alert alert-danger d-flex align-items-center p-5 mb-10">
                        <i class="ki-duotone ki-shield-cross fs-2hx text-danger me-4">
                            <span class="path1"></span>
                            <span class="path2"></span>
                            <span class="path3"></span>
                        </i>
                        <div class="d-flex flex-column">
                            <h4 class="mb-1 text-danger">Error</h4>
                            <span>${data.message}</span>
                        </div>
                    </div>`;
            }
        })
        .catch(error => {
            submitBtn.removeAttribute('data-kt-indicator');
            submitBtn.disabled = false;
            
            document.getElementById('alertBox').innerHTML = 
                `<div class="alert alert-danger d-flex align-items-center p-5 mb-10">
                    <i class="ki-duotone ki-shield-cross fs-2hx text-danger me-4">
                        <span class="path1"></span>
                        <span class="path2"></span>
                        <span class="path3"></span>
                    </i>
                    <div class="d-flex flex-column">
                        <h4 class="mb-1 text-danger">Error</h4>
                        <span>An error occurred. Please try again.</span>
                    </div>
                </div>`;
            console.error('Error:', error);
        });
    });

    function deleteUser(userId, userName) {
        Swal.fire({
            text: `Are you sure you want to delete ${userName}?`,
            icon: "warning",
            showCancelButton: true,
            buttonsStyling: false,
            confirmButtonText: "Yes, delete!",
            cancelButtonText: "No, cancel",
            customClass: {
                confirmButton: "btn fw-bold btn-danger",
                cancelButton: "btn fw-bold btn-active-light-primary"
            }
        }).then((result) => {
            if (result.isConfirmed) {
                const formData = new FormData();
                formData.append('action', 'delete');
                formData.append('user_id', userId);
                
                fetch('admin/user_actions.php', {
                    method: 'POST',
                    body: formData
                })
                .then(response => response.json())
                .then(data => {
                    if (data.success) {
                        Swal.fire({
                            text: data.message,
                            icon: "success",
                            buttonsStyling: false,
                            confirmButtonText: "Ok, got it!",
                            customClass: {
                                confirmButton: "btn btn-primary"
                            }
                        }).then(() => {
                            location.reload();
                        });
                    } else {
                        Swal.fire({
                            text: data.message,
                            icon: "error",
                            buttonsStyling: false,
                            confirmButtonText: "Ok, got it!",
                            customClass: {
                                confirmButton: "btn btn-primary"
                            }
                        });
                    }
                })
                .catch(error => {
                    console.error('Error:', error);
                    Swal.fire({
                        text: "An error occurred while deleting the user.",
                        icon: "error",
                        buttonsStyling: false,
                        confirmButtonText: "Ok, got it!",
                        customClass: {
                            confirmButton: "btn btn-primary"
                        }
                    });
                });
            }
        });
    }

    document.getElementById('searchUser').addEventListener('keyup', function() {
        const searchValue = this.value.toLowerCase();
        const tableRows = document.querySelectorAll('#usersTable tbody tr');
        
        tableRows.forEach(row => {
            const text = row.textContent.toLowerCase();
            row.style.display = text.includes(searchValue) ? '' : 'none';
        });
    });

    $(document).ready(function() {
        $('#role').select2({
            dropdownParent: $('#userModal')
        });
    });
    </script>
    <?php include 'includes/chat_widget.php'; ?>
</body>
</html>

MMCT - 2023