Sindbad~EG File Manager

Current Path : /home/copmadinaarea/thecopmadinaarea.org/portal/classes/
Upload File :
Current File : /home/copmadinaarea/thecopmadinaarea.org/portal/classes/DirectoryManager.php

<?php
class DirectoryManager {
    private $db;
    
    public function __construct() {
        $this->db = Database::getInstance()->getConnection();
    }
    
    /**
     * Add a new standalone directory entry
     */
    public function addEntry($data) {
        $sql = "INSERT INTO standalone_directory (
            title, first_name, middle_name, last_name, gender, phone, email,
            address_line, city, area_id, district_id, assembly_id,
            occupation, position, notes, photo, created_by
        ) VALUES (:title, :first_name, :middle_name, :last_name, :gender, :phone, :email,
            :address_line, :city, :area_id, :district_id, :assembly_id,
            :occupation, :position, :notes, :photo, :created_by)";
        
        $stmt = $this->db->prepare($sql);
        return $stmt->execute([
            ':title' => $data['title'],
            ':first_name' => $data['first_name'],
            ':middle_name' => $data['middle_name'],
            ':last_name' => $data['last_name'],
            ':gender' => $data['gender'],
            ':phone' => $data['phone'],
            ':email' => $data['email'],
            ':address_line' => $data['address_line'],
            ':city' => $data['city'],
            ':area_id' => $data['area_id'],
            ':district_id' => $data['district_id'],
            ':assembly_id' => $data['assembly_id'],
            ':occupation' => $data['occupation'],
            ':position' => $data['position'],
            ':notes' => $data['notes'],
            ':photo' => $data['photo'],
            ':created_by' => $data['created_by']
        ]);
    }
    
    /**
     * Update standalone directory entry
     */
    public function updateEntry($id, $data) {
        $sql = "UPDATE standalone_directory SET
            title = :title, first_name = :first_name, middle_name = :middle_name, last_name = :last_name,
            gender = :gender, phone = :phone, email = :email, address_line = :address_line, city = :city,
            area_id = :area_id, district_id = :district_id, assembly_id = :assembly_id,
            occupation = :occupation, position = :position, notes = :notes, photo = :photo
            WHERE id = :id";
        
        $stmt = $this->db->prepare($sql);
        return $stmt->execute([
            ':title' => $data['title'],
            ':first_name' => $data['first_name'],
            ':middle_name' => $data['middle_name'],
            ':last_name' => $data['last_name'],
            ':gender' => $data['gender'],
            ':phone' => $data['phone'],
            ':email' => $data['email'],
            ':address_line' => $data['address_line'],
            ':city' => $data['city'],
            ':area_id' => $data['area_id'],
            ':district_id' => $data['district_id'],
            ':assembly_id' => $data['assembly_id'],
            ':occupation' => $data['occupation'],
            ':position' => $data['position'],
            ':notes' => $data['notes'],
            ':photo' => $data['photo'],
            ':id' => $id
        ]);
    }
    
    /**
     * Delete standalone directory entry
     */
    public function deleteEntry($id) {
        $sql = "DELETE FROM standalone_directory WHERE id = :id";
        $stmt = $this->db->prepare($sql);
        return $stmt->execute([':id' => $id]);
    }
    
    /**
     * Get standalone directory entry by ID
     */
    public function getEntryById($id) {
        $sql = "SELECT sd.*, 
                a.area_name, d.district_name, asm.assembly_name
                FROM standalone_directory sd
                LEFT JOIN areas a ON sd.area_id = a.id
                LEFT JOIN districts d ON sd.district_id = d.id
                LEFT JOIN assemblies asm ON sd.assembly_id = asm.id
                WHERE sd.id = :id";
        
        $stmt = $this->db->prepare($sql);
        $stmt->execute([':id' => $id]);
        return $stmt->fetch();
    }
    
    /**
     * Get all standalone directory entries with filters
     */
    public function getAllEntries($filters = []) {
        $sql = "SELECT sd.*, 
                a.area_name, d.district_name, asm.assembly_name
                FROM standalone_directory sd
                LEFT JOIN areas a ON sd.area_id = a.id
                LEFT JOIN districts d ON sd.district_id = d.id
                LEFT JOIN assemblies asm ON sd.assembly_id = asm.id
                WHERE sd.is_active = 1";
        
        $params = [];
        
        if (!empty($filters['search'])) {
            $sql .= " AND (sd.first_name LIKE :search1 OR sd.middle_name LIKE :search2 OR sd.last_name LIKE :search3 
                      OR sd.phone LIKE :search4 OR sd.email LIKE :search5)";
            $searchTerm = "%{$filters['search']}%";
            $params[':search1'] = $searchTerm;
            $params[':search2'] = $searchTerm;
            $params[':search3'] = $searchTerm;
            $params[':search4'] = $searchTerm;
            $params[':search5'] = $searchTerm;
        }
        
        if (!empty($filters['district_id'])) {
            $sql .= " AND sd.district_id = :district_id";
            $params[':district_id'] = $filters['district_id'];
        }
        
        if (!empty($filters['assembly_id'])) {
            $sql .= " AND sd.assembly_id = :assembly_id";
            $params[':assembly_id'] = $filters['assembly_id'];
        }
        
        $sql .= " ORDER BY sd.first_name, sd.last_name";
        
        $stmt = $this->db->prepare($sql);
        $stmt->execute($params);
        return $stmt->fetchAll();
    }
    
    /**
     * Search members from members table
     */
    public function searchMembers($search = '', $filters = []) {
        $sql = "SELECT m.id, m.membershipcard_id, m.title, m.first_name, m.middle_name, m.last_name,
                m.phone, m.email, m.gender,
                a.area_name, d.district_name, asm.assembly_name
                FROM members m
                LEFT JOIN areas a ON m.area_id = a.id
                LEFT JOIN districts d ON m.district_id = d.id
                LEFT JOIN assemblies asm ON m.assembly_id = asm.id
                WHERE m.is_active = 1";
        
        $params = [];
        
        if (!empty($search)) {
            $sql .= " AND (m.first_name LIKE :search1 OR m.middle_name LIKE :search2 OR m.last_name LIKE :search3 
                      OR m.phone LIKE :search4 OR m.email LIKE :search5 OR m.membershipcard_id LIKE :search6)";
            $searchTerm = "%{$search}%";
            $params[':search1'] = $searchTerm;
            $params[':search2'] = $searchTerm;
            $params[':search3'] = $searchTerm;
            $params[':search4'] = $searchTerm;
            $params[':search5'] = $searchTerm;
            $params[':search6'] = $searchTerm;
        }
        
        if (!empty($filters['district_id'])) {
            $sql .= " AND m.district_id = :district_id";
            $params[':district_id'] = $filters['district_id'];
        }
        
        if (!empty($filters['assembly_id'])) {
            $sql .= " AND m.assembly_id = :assembly_id";
            $params[':assembly_id'] = $filters['assembly_id'];
        }
        
        $sql .= " ORDER BY m.first_name, m.last_name LIMIT 100";
        
        $stmt = $this->db->prepare($sql);
        $stmt->execute($params);
        return $stmt->fetchAll();
    }
    
    /**
     * Get statistics
     */
    public function getStats() {
        $stats = [];
        
        // Total standalone entries
        $stmt = $this->db->query("SELECT COUNT(*) as total FROM standalone_directory WHERE is_active = 1");
        $result = $stmt->fetch();
        $stats['standalone_total'] = $result['total'];
        
        // Total members
        $stmt = $this->db->query("SELECT COUNT(*) as total FROM members WHERE is_active = 1");
        $result = $stmt->fetch();
        $stats['members_total'] = $result['total'];
        
        return $stats;
    }
}

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