Sindbad~EG File Manager

Current Path : /home/copmadinaarea/thecopmadinaarea.org/portal/includes/
Upload File :
Current File : /home/copmadinaarea/thecopmadinaarea.org/portal/includes/sidebar.php

<?php
// Get user access level
$userAccessLevel = getUserAccessLevel();
$isSuperUser = isSuperuser();

// Get modules from database with access control
$db = Database::getInstance()->getConnection();

// Query to get modules that user has access to based on their access level
if ($isSuperUser) {
    // Superusers: Get all active modules where superuser access is enabled
    $moduleQuery = "
        SELECT DISTINCT
            m.id,
            m.module_name,
            m.module_icon,
            m.module_url,
            m.display_order,
            m.category,
            m.is_active
        FROM module_management m
        INNER JOIN module_access_levels mal ON m.id = mal.module_id
        WHERE m.is_active = 1
        AND mal.access_level = 'superuser'
        AND mal.is_enabled = 1
        ORDER BY m.display_order, m.module_name
    ";
    $modules = $db->query($moduleQuery)->fetchAll();
} else {
    // Other users: Get only modules enabled for their specific access level
    $moduleQuery = "
        SELECT DISTINCT
            m.id,
            m.module_name,
            m.module_icon,
            m.module_url,
            m.display_order,
            m.category,
            m.is_active
        FROM module_management m
        INNER JOIN module_access_levels mal ON m.id = mal.module_id
        WHERE m.is_active = 1
        AND mal.access_level = :access_level
        AND mal.is_enabled = 1
        ORDER BY m.display_order, m.module_name
    ";
    $stmt = $db->prepare($moduleQuery);
    $stmt->execute(['access_level' => $userAccessLevel]);
    $modules = $stmt->fetchAll();
}

// Add static items (Home, Dashboard)
$staticMenuItems = [
    ['name' => 'Home', 'url' => '', 'icon' => 'home', 'category' => 'Navigation'],
    ['name' => 'Dashboard', 'url' => 'dashboard.php', 'icon' => 'tachometer-alt', 'category' => 'Navigation'],
];

// Define category display order
$categoryOrder = [
    'Navigation',
    'Core Management',
    'General Management',
    'User Management',
    'Event Management',
    'Communication',
    'System',
    'Reports'
];

// Group modules by category
$modulesByCategory = [];
foreach ($staticMenuItems as $item) {
    $modulesByCategory[$item['category']][] = $item;
}

foreach ($modules as $module) {
    $category = $module['category'] ?? 'General';
    $modulesByCategory[$category][] = [
        'name' => $module['module_name'],
        'url' => $module['module_url'],
        'icon' => $module['module_icon'],
        'category' => $category
    ];
}

// Sort categories by defined order
$sortedModules = [];
foreach ($categoryOrder as $category) {
    if (isset($modulesByCategory[$category])) {
        $sortedModules[$category] = $modulesByCategory[$category];
    }
}
// Add any remaining categories not in the order list
foreach ($modulesByCategory as $category => $items) {
    if (!isset($sortedModules[$category])) {
        $sortedModules[$category] = $items;
    }
}
$modulesByCategory = $sortedModules;
?>

<!-- Sidebar -->
<aside id="sidebar" class="sidebar bg-white w-64 fixed inset-y-0 left-0 z-40 transform -translate-x-full md:translate-x-0 transition-transform duration-300 ease-in-out shadow-xl mt-16 overflow-y-auto">
    <div class="p-4">
        <h2 class="text-lg font-bold text-gray-800 mb-4 flex items-center">
            <i class="fas fa-th-large mr-2 text-blue-500"></i>
            Menu
        </h2>
        
        <nav class="space-y-1">
            <?php foreach ($modulesByCategory as $category => $items): ?>
                <?php if (!empty($items)): ?>
                    <!-- Category Header -->
                    <?php if ($category !== 'Navigation'): ?>
                        <div class="pt-4 pb-2">
                            <h3 class="px-4 text-xs font-semibold text-gray-400 uppercase tracking-wider">
                                <?php echo htmlspecialchars($category); ?>
                            </h3>
                        </div>
                    <?php endif; ?>
                    
                    <!-- Module Items -->
                    <?php foreach ($items as $item): ?>
                        <a href="<?php echo BASE_URL . $item['url']; ?>" 
                           class="flex items-center px-4 py-2.5 text-gray-700 hover:text-white rounded-lg transition group text-sm"
                           onmouseover="this.style.background='linear-gradient(135deg, #1E40AF 0%, #9333EA 100%)'; this.style.color='white';"
                           onmouseout="this.style.background=''; this.style.color='';">
                            <i class="fas fa-<?php echo htmlspecialchars($item['icon']); ?> mr-3 text-base w-5"></i>
                            <span class="font-medium"><?php echo htmlspecialchars($item['name']); ?></span>
                        </a>
                    <?php endforeach; ?>
                <?php endif; ?>
            <?php endforeach; ?>
            
            <hr class="my-4">
            
            <a href="<?php echo BASE_URL; ?>profile.php" 
               class="flex items-center px-4 py-2.5 text-gray-700 hover:bg-gradient-to-r hover:from-blue-500 hover:to-blue-600 hover:text-white rounded-lg transition text-sm">
                <i class="fas fa-user-circle mr-3 text-base w-5"></i>
                <span class="font-medium">My Profile</span>
            </a>
            
            <a href="<?php echo BASE_URL; ?>logout.php" 
               class="flex items-center px-4 py-2.5 text-red-600 hover:bg-red-50 rounded-lg transition text-sm">
                <i class="fas fa-sign-out-alt mr-3 text-base w-5"></i>
                <span class="font-medium">Logout</span>
            </a>
        </nav>
    </div>
</aside>

<!-- Sidebar Overlay for mobile -->
<div id="sidebarOverlay" class="fixed inset-0 bg-black bg-opacity-50 z-30 hidden md:hidden"></div>

<script>
    // Sidebar toggle for mobile
    const sidebar = document.getElementById('sidebar');
    const sidebarToggle = document.getElementById('sidebarToggle');
    const sidebarOverlay = document.getElementById('sidebarOverlay');
    
    if (sidebarToggle) {
        sidebarToggle.addEventListener('click', function() {
            sidebar.classList.toggle('-translate-x-full');
            sidebarOverlay.classList.toggle('hidden');
        });
    }
    
    if (sidebarOverlay) {
        sidebarOverlay.addEventListener('click', function() {
            sidebar.classList.add('-translate-x-full');
            sidebarOverlay.classList.add('hidden');
        });
    }
    
    // Close sidebar when clicking a link on mobile
    const sidebarLinks = sidebar.querySelectorAll('a');
    sidebarLinks.forEach(link => {
        link.addEventListener('click', function() {
            if (window.innerWidth < 768) {
                sidebar.classList.add('-translate-x-full');
                sidebarOverlay.classList.add('hidden');
            }
        });
    });
</script>

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists