Sindbad~EG File Manager

Current Path : /home/copmadinaarea/thecopmadinaarea.org/portal/modules/ministries/
Upload File :
Current File : /home/copmadinaarea/thecopmadinaarea.org/portal/modules/ministries/index.php

<?php
require_once '../../config/config.php';
checkLogin();

$pageTitle = "Ministries & Groups - " . APP_NAME;
$db = Database::getInstance()->getConnection();
$success = '';
$error = '';

// Get user access
$accessLevel = $_SESSION['access_level'] ?? 'assembly';
$userAssemblyId = $_SESSION['assembly_id'] ?? null;

// Handle ministry creation/update
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    try {
        if (isset($_POST['create_ministry'])) {
            $stmt = $db->prepare("
                INSERT INTO ministries (
                    ministry_name, ministry_type, category_id, description, mission_statement,
                    area_id, district_id, assembly_id, leader_member_id, founding_date, meeting_schedule, meeting_venue,
                    contact_person, contact_phone, contact_email, created_by
                ) VALUES (
                    :name, :type, :category_id, :description, :mission_statement,
                    :area_id, :district_id, :assembly_id, :leader_id, :founding_date, :meeting_schedule, :meeting_venue,
                    :contact_person, :contact_phone, :contact_email, :created_by
                )
            ");
            
            $stmt->execute([
                'name' => $_POST['ministry_name'],
                'type' => $_POST['ministry_type'],
                'category_id' => $_POST['category_id'] ?? null,
                'description' => $_POST['description'] ?? null,
                'mission_statement' => $_POST['mission_statement'] ?? null,
                'area_id' => $_POST['area_id'] ?? null,
                'district_id' => $_POST['district_id'] ?? null,
                'assembly_id' => $_POST['assembly_id'] ?? $userAssemblyId,
                'leader_id' => $_POST['leader_member_id'] ?? null,
                'founding_date' => $_POST['founding_date'] ?? null,
                'meeting_schedule' => $_POST['meeting_schedule'] ?? null,
                'meeting_venue' => $_POST['meeting_venue'] ?? null,
                'contact_person' => $_POST['contact_person'] ?? null,
                'contact_phone' => $_POST['contact_phone'] ?? null,
                'contact_email' => $_POST['contact_email'] ?? null,
                'created_by' => $_SESSION['user_id']
            ]);
            
            $success = "Ministry created successfully!";
        }
        
        if (isset($_POST['delete_ministry'])) {
            $stmt = $db->prepare("DELETE FROM ministries WHERE id = :id");
            $stmt->execute(['id' => $_POST['ministry_id']]);
            $success = "Ministry deleted successfully!";
        }
        
    } catch (Exception $e) {
        $error = "Error: " . $e->getMessage();
    }
}

// Get filters
$filterType = $_GET['type'] ?? '';
$filterCategory = $_GET['category'] ?? '';
$filterDistrict = $_GET['district'] ?? '';
$filterAssembly = $_GET['assembly'] ?? '';

// Build query
$query = "
    SELECT m.*, mc.category_name, mc.icon, mc.color,
           mem.first_name as leader_first_name, mem.last_name as leader_last_name,
           asm.assembly_name, d.district_name, a.area_name,
           (SELECT COUNT(*) FROM ministry_members mm WHERE mm.ministry_id = m.id AND mm.status = 'active') as member_count
    FROM ministries m
    LEFT JOIN ministry_categories mc ON m.category_id = mc.id
    LEFT JOIN members mem ON m.leader_member_id = mem.id
    LEFT JOIN assemblies asm ON m.assembly_id = asm.id
    LEFT JOIN districts d ON m.district_id = d.id
    LEFT JOIN areas a ON m.area_id = a.id
    WHERE m.is_active = 1
";

$params = [];

if (!empty($filterType)) {
    $query .= " AND m.ministry_type = :type";
    $params['type'] = $filterType;
}

if (!empty($filterCategory)) {
    $query .= " AND m.category_id = :category_id";
    $params['category_id'] = $filterCategory;
}

if (!empty($filterDistrict)) {
    $query .= " AND m.district_id = :district_id";
    $params['district_id'] = $filterDistrict;
}

if (!empty($filterAssembly)) {
    $query .= " AND m.assembly_id = :assembly_id";
    $params['assembly_id'] = $filterAssembly;
} elseif ($accessLevel === 'assembly') {
    $query .= " AND m.assembly_id = :assembly_id";
    $params['assembly_id'] = $userAssemblyId;
}

$query .= " ORDER BY m.ministry_name";

$stmt = $db->prepare($query);
$stmt->execute($params);
$ministries = $stmt->fetchAll();

// Get categories for filter
$categories = $db->query("SELECT * FROM ministry_categories WHERE is_active = 1 ORDER BY display_order")->fetchAll();

// Get members for leader dropdown
$members = $db->query("SELECT id, first_name, last_name FROM members WHERE is_active = 1 ORDER BY first_name")->fetchAll();

// Get districts and assemblies for filters
$districts = $db->query("SELECT * FROM districts ORDER BY district_name")->fetchAll();
$assemblies = $db->query("SELECT a.*, d.district_name FROM assemblies a LEFT JOIN districts d ON a.district_id = d.id ORDER BY a.assembly_name")->fetchAll();

// Get areas for filter and form
$areas = $db->query("SELECT * FROM areas ORDER BY area_name")->fetchAll();

// Statistics
$stats = [
    'total' => count($ministries),
    'ministries' => count(array_filter($ministries, fn($m) => $m['ministry_type'] === 'ministry')),
    'groups' => count(array_filter($ministries, fn($m) => $m['ministry_type'] === 'group')),
    'interventions' => count(array_filter($ministries, fn($m) => $m['ministry_type'] === 'intervention')),
];

include '../../includes/header.php';
?>

<?php include '../../includes/sidebar.php'; ?>

<main class="flex-1 md:ml-64 mt-16">
<div class="container mx-auto px-4 py-8">
    <div class="max-w-7xl mx-auto">
        <div class="mb-6 flex justify-between items-center">
            <div>
                <h1 class="text-3xl font-bold text-gray-800">
                    <i class="fas fa-hands-helping mr-2 text-blue-500"></i>Ministries & Groups
                </h1>
                <p class="text-gray-600 mt-2">Manage ministries, groups and interventions</p>
            </div>
            <button onclick="document.getElementById('createModal').classList.remove('hidden')" 
                    class="btn-gradient text-white px-6 py-3 rounded-lg transition">
                <i class="fas fa-plus mr-2"></i>Create Ministry/Group
            </button>
        </div>
        
        <?php if ($success): ?>
            <div class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded-lg mb-6">
                <i class="fas fa-check-circle mr-2"></i><?php echo $success; ?>
            </div>
        <?php endif; ?>
        
        <?php if ($error): ?>
            <div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded-lg mb-6">
                <i class="fas fa-exclamation-circle mr-2"></i><?php echo $error; ?>
            </div>
        <?php endif; ?>
        
        <!-- Statistics -->
        <div class="grid grid-cols-1 md:grid-cols-4 gap-4 mb-6">
            <div class="bg-white rounded-lg shadow p-4 border-l-4 border-blue-500">
                <div class="flex items-center justify-between">
                    <div>
                        <p class="text-sm text-gray-600">Total</p>
                        <p class="text-2xl font-bold text-gray-800"><?php echo $stats['total']; ?></p>
                    </div>
                    <i class="fas fa-th-large text-3xl text-blue-500"></i>
                </div>
            </div>
            
            <div class="bg-white rounded-lg shadow p-4 border-l-4 border-green-500">
                <div class="flex items-center justify-between">
                    <div>
                        <p class="text-sm text-gray-600">Ministries</p>
                        <p class="text-2xl font-bold text-gray-800"><?php echo $stats['ministries']; ?></p>
                    </div>
                    <i class="fas fa-church text-3xl text-green-500"></i>
                </div>
            </div>
            
            <div class="bg-white rounded-lg shadow p-4 border-l-4 border-purple-500">
                <div class="flex items-center justify-between">
                    <div>
                        <p class="text-sm text-gray-600">Groups</p>
                        <p class="text-2xl font-bold text-gray-800"><?php echo $stats['groups']; ?></p>
                    </div>
                    <i class="fas fa-users text-3xl text-purple-500"></i>
                </div>
            </div>
            
            <div class="bg-white rounded-lg shadow p-4 border-l-4 border-orange-500">
                <div class="flex items-center justify-between">
                    <div>
                        <p class="text-sm text-gray-600">Interventions</p>
                        <p class="text-2xl font-bold text-gray-800"><?php echo $stats['interventions']; ?></p>
                    </div>
                    <i class="fas fa-hands-helping text-3xl text-orange-500"></i>
                </div>
            </div>
        </div>
        
        <!-- Filters -->
        <div class="bg-white rounded-lg shadow p-4 mb-6">
            <form method="GET" class="grid grid-cols-1 md:grid-cols-5 gap-4">
                <select name="type" class="px-4 py-2 border border-gray-300 rounded-lg">
                    <option value="">All Types</option>
                    <option value="ministry" <?php echo $filterType === 'ministry' ? 'selected' : ''; ?>>Ministries</option>
                    <option value="group" <?php echo $filterType === 'group' ? 'selected' : ''; ?>>Groups</option>
                    <option value="intervention" <?php echo $filterType === 'intervention' ? 'selected' : ''; ?>>Interventions</option>
                </select>
                
                <select name="category" class="px-4 py-2 border border-gray-300 rounded-lg">
                    <option value="">All Categories</option>
                    <?php foreach ($categories as $cat): ?>
                        <option value="<?php echo $cat['id']; ?>" <?php echo $filterCategory == $cat['id'] ? 'selected' : ''; ?>>
                            <?php echo htmlspecialchars($cat['category_name']); ?>
                        </option>
                    <?php endforeach; ?>
                </select>
                
                <select name="district" id="filterDistrict" class="px-4 py-2 border border-gray-300 rounded-lg">
                    <option value="">All Districts</option>
                    <?php foreach ($districts as $dist): ?>
                        <option value="<?php echo $dist['id']; ?>" <?php echo $filterDistrict == $dist['id'] ? 'selected' : ''; ?>>
                            <?php echo htmlspecialchars($dist['district_name']); ?>
                        </option>
                    <?php endforeach; ?>
                </select>
                
                <select name="assembly" id="filterAssembly" class="px-4 py-2 border border-gray-300 rounded-lg">
                    <option value="">All Assemblies</option>
                    <?php foreach ($assemblies as $asm): ?>
                        <option value="<?php echo $asm['id']; ?>" 
                                data-district="<?php echo $asm['district_id']; ?>"
                                <?php echo $filterAssembly == $asm['id'] ? 'selected' : ''; ?>>
                            <?php echo htmlspecialchars($asm['assembly_name']); ?>
                        </option>
                    <?php endforeach; ?>
                </select>
                
                <div class="flex gap-2">
                    <button type="submit" class="flex-1 bg-blue-500 text-white px-4 py-2 rounded-lg hover:bg-blue-600">
                        <i class="fas fa-filter mr-2"></i>Filter
                    </button>
                    <a href="?" class="bg-gray-200 text-gray-700 px-4 py-2 rounded-lg hover:bg-gray-300 flex items-center">
                        <i class="fas fa-times"></i>
                    </a>
                </div>
            </form>
        </div>
        
        <!-- Ministries Grid -->
        <div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
            <?php foreach ($ministries as $ministry): ?>
            <div class="bg-white rounded-lg shadow-lg hover:shadow-xl transition overflow-hidden">
                <div class="p-4" style="background: linear-gradient(135deg, <?php echo $ministry['color'] ?? '#3B82F6'; ?> 0%, #1E40AF 100%);">
                    <div class="flex items-center justify-between text-white mb-2">
                        <i class="fas fa-<?php echo $ministry['icon'] ?? 'church'; ?> text-2xl"></i>
                        <span class="px-3 py-1 bg-white bg-opacity-20 rounded-full text-xs uppercase">
                            <?php echo ucfirst($ministry['ministry_type']); ?>
                        </span>
                    </div>
                    <h3 class="font-bold text-xl text-white"><?php echo htmlspecialchars($ministry['ministry_name']); ?></h3>
                    <?php if ($ministry['category_name']): ?>
                        <p class="text-white text-sm opacity-90 mt-1"><?php echo htmlspecialchars($ministry['category_name']); ?></p>
                    <?php endif; ?>
                </div>
                
                <div class="p-4">
                    <?php if ($ministry['description']): ?>
                        <p class="text-gray-600 text-sm mb-3"><?php echo htmlspecialchars(substr($ministry['description'], 0, 100)); ?>...</p>
                    <?php endif; ?>
                    
                    <div class="space-y-2 text-sm text-gray-700 mb-4">
                        <?php if ($ministry['leader_first_name']): ?>
                        <div class="flex items-center">
                            <i class="fas fa-user-tie w-5 text-blue-500"></i>
                            <span><?php echo htmlspecialchars($ministry['leader_first_name'] . ' ' . $ministry['leader_last_name']); ?></span>
                        </div>
                        <?php endif; ?>
                        
                        <div class="flex items-center">
                            <i class="fas fa-users w-5 text-green-500"></i>
                            <span><?php echo $ministry['member_count']; ?> Members</span>
                        </div>
                        
                        <?php if ($ministry['assembly_name']): ?>
                        <div class="flex items-center">
                            <i class="fas fa-church w-5 text-orange-500"></i>
                            <span><?php echo htmlspecialchars($ministry['assembly_name']); ?>
                            <?php if ($ministry['district_name']): ?>
                                <span class="text-gray-500 text-xs"> (<?php echo htmlspecialchars($ministry['district_name']); ?>)</span>
                            <?php endif; ?>
                            </span>
                        </div>
                        <?php endif; ?>
                        
                        <?php if ($ministry['area_name']): ?>
                        <div class="flex items-center">
                            <i class="fas fa-map-marked-alt w-5 text-indigo-500"></i>
                            <span><?php echo htmlspecialchars($ministry['area_name']); ?> Area</span>
                        </div>
                        <?php endif; ?>
                        
                        <?php if ($ministry['meeting_schedule']): ?>
                        <div class="flex items-center">
                            <i class="fas fa-clock w-5 text-purple-500"></i>
                            <span><?php echo htmlspecialchars($ministry['meeting_schedule']); ?></span>
                        </div>
                        <?php endif; ?>
                    </div>
                    
                    <div class="flex justify-between items-center pt-4 border-t border-gray-200">
                        <a href="executives.php?ministry_id=<?php echo $ministry['id']; ?>" 
                           class="text-blue-600 hover:text-blue-800 text-sm">
                            <i class="fas fa-user-tie mr-1"></i>Executives
                        </a>
                        <div class="flex gap-2">
                            <button onclick="editMinistry(<?php echo $ministry['id']; ?>)" 
                                    class="text-green-600 hover:text-green-800">
                                <i class="fas fa-edit"></i>
                            </button>
                            <form method="POST" class="inline" onsubmit="return confirm('Delete this ministry?')">
                                <input type="hidden" name="ministry_id" value="<?php echo $ministry['id']; ?>">
                                <button type="submit" name="delete_ministry" 
                                        class="text-red-600 hover:text-red-800">
                                    <i class="fas fa-trash"></i>
                                </button>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
            <?php endforeach; ?>
        </div>
        
        <?php if (empty($ministries)): ?>
        <div class="text-center py-12">
            <i class="fas fa-hands-helping text-6xl text-gray-300 mb-4"></i>
            <p class="text-gray-600">No ministries or groups found</p>
        </div>
        <?php endif; ?>
    </div>
</div>
</main>

<!-- Create Ministry Modal -->
<div id="createModal" class="fixed inset-0 bg-black bg-opacity-50 hidden z-50 overflow-y-auto">
    <div class="flex items-center justify-center min-h-screen p-4">
        <div class="bg-white rounded-lg max-w-2xl w-full p-6">
            <div class="flex justify-between items-center mb-4">
                <h3 class="text-lg font-semibold">Create New Ministry/Group</h3>
                <button onclick="document.getElementById('createModal').classList.add('hidden')" 
                        class="text-gray-400 hover:text-gray-600">
                    <i class="fas fa-times"></i>
                </button>
            </div>
            
            <form method="POST" class="space-y-4">
                <div class="grid grid-cols-2 gap-4">
                    <div class="col-span-2">
                        <label class="block text-sm font-medium text-gray-700 mb-2">Name*</label>
                        <input type="text" name="ministry_name" required
                               class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500">
                    </div>
                    
                    <div>
                        <label class="block text-sm font-medium text-gray-700 mb-2">Type*</label>
                        <select name="ministry_type" required
                                class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500">
                            <option value="ministry">Ministry</option>
                            <option value="group">Group</option>
                            <option value="intervention">Intervention</option>
                        </select>
                    </div>
                    
                    <div>
                        <label class="block text-sm font-medium text-gray-700 mb-2">Category</label>
                        <select name="category_id"
                                class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500">
                            <option value="">Select Category</option>
                            <?php foreach ($categories as $cat): ?>
                                <option value="<?php echo $cat['id']; ?>">
                                    <?php echo htmlspecialchars($cat['category_name']); ?>
                                </option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                    
                    <div>
                        <label class="block text-sm font-medium text-gray-700 mb-2">Area (Optional)</label>
                        <select name="area_id"
                                class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500">
                            <option value="">Select Area</option>
                            <?php foreach ($areas as $area): ?>
                                <option value="<?php echo $area['id']; ?>">
                                    <?php echo htmlspecialchars($area['area_name']); ?>
                                </option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                    
                    <div>
                        <label class="block text-sm font-medium text-gray-700 mb-2">District (Optional)</label>
                        <select name="district_id" id="formDistrict"
                                class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500">
                            <option value="">Select District</option>
                            <?php foreach ($districts as $dist): ?>
                                <option value="<?php echo $dist['id']; ?>">
                                    <?php echo htmlspecialchars($dist['district_name']); ?>
                                </option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                    
                    <div>
                        <label class="block text-sm font-medium text-gray-700 mb-2">Assembly*</label>
                        <select name="assembly_id" id="formAssembly" required
                                class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500">
                            <option value="">Select Assembly</option>
                            <?php foreach ($assemblies as $asm): ?>
                                <option value="<?php echo $asm['id']; ?>" data-district="<?php echo $asm['district_id']; ?>">
                                    <?php echo htmlspecialchars($asm['assembly_name']); ?>
                                </option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                    
                    <div class="col-span-2">
                        <label class="block text-sm font-medium text-gray-700 mb-2">Description</label>
                        <textarea name="description" rows="3"
                                  class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500"></textarea>
                    </div>
                    
                    <div class="col-span-2">
                        <label class="block text-sm font-medium text-gray-700 mb-2">Meeting Schedule</label>
                        <input type="text" name="meeting_schedule" placeholder="e.g., Every Sunday at 3:00 PM"
                               class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500">
                    </div>
                    
                    <div>
                        <label class="block text-sm font-medium text-gray-700 mb-2">Contact Person</label>
                        <input type="text" name="contact_person"
                               class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500">
                    </div>
                    
                    <div>
                        <label class="block text-sm font-medium text-gray-700 mb-2">Contact Phone</label>
                        <input type="tel" name="contact_phone"
                               class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500">
                    </div>
                </div>
                
                <div class="flex justify-end space-x-3 pt-4">
                    <button type="button" 
                            onclick="document.getElementById('createModal').classList.add('hidden')"
                            class="px-4 py-2 text-gray-600 hover:text-gray-800">
                        Cancel
                    </button>
                    <button type="submit" name="create_ministry" 
                            class="bg-blue-500 text-white px-6 py-2 rounded-lg hover:bg-blue-600">
                        <i class="fas fa-plus mr-2"></i>Create
                    </button>
                </div>
            </form>
        </div>
    </div>
</div>

<script>
// Cascading dropdown for filters - District -> Assembly
const filterDistrict = document.getElementById('filterDistrict');
const filterAssembly = document.getElementById('filterAssembly');

if (filterDistrict && filterAssembly) {
    filterDistrict.addEventListener('change', function() {
        const selectedDistrict = this.value;
        const assemblyOptions = filterAssembly.querySelectorAll('option');
        
        assemblyOptions.forEach(option => {
            if (option.value === '') {
                option.style.display = '';
                return;
            }
            
            const optionDistrict = option.getAttribute('data-district');
            if (!selectedDistrict || optionDistrict === selectedDistrict) {
                option.style.display = '';
            } else {
                option.style.display = 'none';
            }
        });
        
        // Reset assembly selection if current selection is not visible
        if (filterAssembly.value) {
            const currentOption = filterAssembly.querySelector(`option[value="${filterAssembly.value}"]`);
            if (currentOption && currentOption.style.display === 'none') {
                filterAssembly.value = '';
            }
        }
    });
    
    // Trigger on page load to handle pre-selected values
    if (filterDistrict.value) {
        filterDistrict.dispatchEvent(new Event('change'));
    }
}

// Cascading dropdown for form - District -> Assembly
const formDistrict = document.getElementById('formDistrict');
const formAssembly = document.getElementById('formAssembly');

if (formDistrict && formAssembly) {
    formDistrict.addEventListener('change', function() {
        const selectedDistrict = this.value;
        const assemblyOptions = formAssembly.querySelectorAll('option');
        
        assemblyOptions.forEach(option => {
            if (option.value === '') {
                option.style.display = '';
                return;
            }
            
            const optionDistrict = option.getAttribute('data-district');
            if (!selectedDistrict || optionDistrict === selectedDistrict) {
                option.style.display = '';
            } else {
                option.style.display = 'none';
            }
        });
        
        // Reset assembly selection if current selection is not visible
        if (formAssembly.value) {
            const currentOption = formAssembly.querySelector(`option[value="${formAssembly.value}"]`);
            if (currentOption && currentOption.style.display === 'none') {
                formAssembly.value = '';
            }
        }
    });
}
</script>

<?php include '../../includes/footer.php'; ?>

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