Sindbad~EG File Manager

Current Path : /home/copmadinaarea/thecopmadinaarea.org/portal/database/
Upload File :
Current File : /home/copmadinaarea/thecopmadinaarea.org/portal/database/schema.sql

-- Church Membership System Database Schema
-- Created: 2025-10-03

-- Drop existing tables if they exist
DROP TABLE IF EXISTS audit_logs;
DROP TABLE IF EXISTS notifications;
DROP TABLE IF EXISTS module_management;
DROP TABLE IF EXISTS reports;
DROP TABLE IF EXISTS members;
DROP TABLE IF EXISTS assemblies;
DROP TABLE IF EXISTS districts;
DROP TABLE IF EXISTS areas;
DROP TABLE IF EXISTS user_roles;
DROP TABLE IF EXISTS access_roles;
DROP TABLE IF EXISTS users;
DROP TABLE IF EXISTS general_settings;
DROP TABLE IF EXISTS email_settings;
DROP TABLE IF EXISTS sms_settings;

-- General Settings Table
CREATE TABLE general_settings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    site_title VARCHAR(255) DEFAULT 'Church Membership System',
    site_logo VARCHAR(255),
    favicon VARCHAR(255),
    theme_primary_color VARCHAR(50) DEFAULT '#3B82F6',
    theme_secondary_color VARCHAR(50) DEFAULT '#FCD34D',
    maintenance_mode BOOLEAN DEFAULT FALSE,
    timezone VARCHAR(100) DEFAULT 'UTC',
    enable_chat BOOLEAN DEFAULT TRUE,
    enable_email_notification BOOLEAN DEFAULT TRUE,
    enable_sms_notification BOOLEAN DEFAULT TRUE,
    header_text TEXT,
    footer_text TEXT,
    font_family VARCHAR(100) DEFAULT 'Inter',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Email Settings Table
CREATE TABLE email_settings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    smtp_host VARCHAR(255),
    smtp_port INT DEFAULT 587,
    smtp_username VARCHAR(255),
    smtp_password VARCHAR(255),
    smtp_encryption VARCHAR(20) DEFAULT 'tls',
    from_email VARCHAR(255),
    from_name VARCHAR(255),
    is_active BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- SMS Settings Table
CREATE TABLE sms_settings (
    id INT AUTO_INCREMENT PRIMARY KEY,
    provider VARCHAR(50),
    api_key VARCHAR(255),
    api_secret VARCHAR(255),
    sender_id VARCHAR(50),
    is_active BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Access Roles Table
CREATE TABLE access_roles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    role_name VARCHAR(50) UNIQUE NOT NULL,
    role_description TEXT,
    permissions JSON,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Areas Table
CREATE TABLE areas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    area_name VARCHAR(100) NOT NULL,
    area_code VARCHAR(20) UNIQUE,
    description TEXT,
    contact_person VARCHAR(100),
    phone VARCHAR(20),
    email VARCHAR(100),
    address TEXT,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_area_code (area_code),
    INDEX idx_area_name (area_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Districts Table
CREATE TABLE districts (
    id INT AUTO_INCREMENT PRIMARY KEY,
    area_id INT NOT NULL,
    district_name VARCHAR(100) NOT NULL,
    district_code VARCHAR(20) UNIQUE,
    description TEXT,
    contact_person VARCHAR(100),
    phone VARCHAR(20),
    email VARCHAR(100),
    address TEXT,
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (area_id) REFERENCES areas(id) ON DELETE CASCADE,
    INDEX idx_area_id (area_id),
    INDEX idx_district_code (district_code),
    INDEX idx_district_name (district_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Assemblies Table
CREATE TABLE assemblies (
    id INT AUTO_INCREMENT PRIMARY KEY,
    district_id INT NOT NULL,
    area_id INT NOT NULL,
    assembly_name VARCHAR(100) NOT NULL,
    assembly_code VARCHAR(20) UNIQUE,
    description TEXT,
    pastor_name VARCHAR(100),
    phone VARCHAR(20),
    email VARCHAR(100),
    address TEXT,
    gps_address VARCHAR(50),
    city VARCHAR(100),
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (district_id) REFERENCES districts(id) ON DELETE CASCADE,
    FOREIGN KEY (area_id) REFERENCES areas(id) ON DELETE CASCADE,
    INDEX idx_district_id (district_id),
    INDEX idx_area_id (area_id),
    INDEX idx_assembly_code (assembly_code),
    INDEX idx_assembly_name (assembly_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Users Table
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    full_name VARCHAR(100) NOT NULL,
    phone VARCHAR(20),
    profile_photo VARCHAR(255),
    is_superuser BOOLEAN DEFAULT FALSE,
    access_level ENUM('area', 'district', 'assembly', 'superuser') NOT NULL,
    area_id INT,
    district_id INT,
    assembly_id INT,
    is_active BOOLEAN DEFAULT TRUE,
    last_login TIMESTAMP NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (area_id) REFERENCES areas(id) ON DELETE SET NULL,
    FOREIGN KEY (district_id) REFERENCES districts(id) ON DELETE SET NULL,
    FOREIGN KEY (assembly_id) REFERENCES assemblies(id) ON DELETE SET NULL,
    INDEX idx_username (username),
    INDEX idx_email (email),
    INDEX idx_access_level (access_level)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- User Roles Mapping Table
CREATE TABLE user_roles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    role_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    FOREIGN KEY (role_id) REFERENCES access_roles(id) ON DELETE CASCADE,
    UNIQUE KEY unique_user_role (user_id, role_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Members Table
CREATE TABLE members (
    id INT AUTO_INCREMENT PRIMARY KEY,
    area_id INT NOT NULL,
    district_id INT NOT NULL,
    assembly_id INT NOT NULL,
    membershipcard_id VARCHAR(50) UNIQUE NOT NULL,
    family_id VARCHAR(50),
    title VARCHAR(50),
    first_name VARCHAR(50) NOT NULL,
    middle_name VARCHAR(50),
    last_name VARCHAR(50) NOT NULL,
    gender ENUM('Male', 'Female') NOT NULL,
    date_of_birth DATE,
    place_of_birth VARCHAR(100),
    phone VARCHAR(20),
    email VARCHAR(100),
    member_type ENUM('Full Member', 'Associate Member', 'Youth', 'Children') DEFAULT 'Full Member',
    marital_status ENUM('Single', 'Married', 'Divorced', 'Widowed'),
    address_line1 TEXT,
    gps_address VARCHAR(50),
    hometown VARCHAR(100),
    street_name VARCHAR(100),
    city VARCHAR(100),
    parent_name VARCHAR(100),
    parent_relationship VARCHAR(50),
    holyghost_baptism BOOLEAN DEFAULT FALSE,
    date_of_holyspirit_baptism DATE,
    water_baptism BOOLEAN DEFAULT FALSE,
    date_of_baptism DATE,
    date_of_conversion DATE,
    date_of_joining DATE,
    place_of_baptism VARCHAR(100),
    officiating_minister_baptism VARCHAR(100),
    officiating_ministers_district VARCHAR(100),
    communicant BOOLEAN DEFAULT FALSE,
    occupation VARCHAR(100),
    level_of_education VARCHAR(100),
    dedicated BOOLEAN DEFAULT FALSE,
    dedication_date DATE,
    name_of_officiating_minister VARCHAR(100),
    church_where_dedication_done VARCHAR(100),
    profile_photo VARCHAR(255),
    is_active BOOLEAN DEFAULT TRUE,
    created_by INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (area_id) REFERENCES areas(id),
    FOREIGN KEY (district_id) REFERENCES districts(id),
    FOREIGN KEY (assembly_id) REFERENCES assemblies(id),
    FOREIGN KEY (created_by) REFERENCES users(id),
    INDEX idx_membershipcard_id (membershipcard_id),
    INDEX idx_family_id (family_id),
    INDEX idx_area_id (area_id),
    INDEX idx_district_id (district_id),
    INDEX idx_assembly_id (assembly_id),
    INDEX idx_email (email),
    INDEX idx_phone (phone),
    INDEX idx_name (first_name, last_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Module Management Table
CREATE TABLE module_management (
    id INT AUTO_INCREMENT PRIMARY KEY,
    module_name VARCHAR(100) NOT NULL,
    module_description TEXT,
    module_icon VARCHAR(100),
    module_url VARCHAR(255),
    display_order INT DEFAULT 0,
    required_role VARCHAR(50),
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_display_order (display_order),
    INDEX idx_is_active (is_active)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Reports Table
CREATE TABLE reports (
    id INT AUTO_INCREMENT PRIMARY KEY,
    report_name VARCHAR(100) NOT NULL,
    report_type VARCHAR(50),
    report_description TEXT,
    generated_by INT,
    filters JSON,
    file_path VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (generated_by) REFERENCES users(id),
    INDEX idx_report_type (report_type),
    INDEX idx_generated_by (generated_by)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Notifications Table
CREATE TABLE notifications (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    notification_type VARCHAR(50),
    title VARCHAR(255),
    message TEXT,
    is_read BOOLEAN DEFAULT FALSE,
    link VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
    INDEX idx_user_id (user_id),
    INDEX idx_is_read (is_read),
    INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Audit Logs Table
CREATE TABLE audit_logs (
    id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    action VARCHAR(100) NOT NULL,
    module VARCHAR(50),
    record_id INT,
    old_values JSON,
    new_values JSON,
    ip_address VARCHAR(45),
    user_agent TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL,
    INDEX idx_user_id (user_id),
    INDEX idx_action (action),
    INDEX idx_module (module),
    INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Insert Default Access Roles
INSERT INTO access_roles (role_name, role_description, permissions) VALUES
('Viewer', 'Can only view data', '{"view": true, "create": false, "edit": false, "delete": false}'),
('Editor', 'Can view and edit data', '{"view": true, "create": true, "edit": true, "delete": false}'),
('Admin', 'Full access to assigned area', '{"view": true, "create": true, "edit": true, "delete": true}');

-- Insert Default General Settings
INSERT INTO general_settings (site_title) VALUES ('Church Membership System');

-- Insert Superuser Account (password: password123 - hashed with password_hash())
-- Password hash for 'password123'
INSERT INTO users (username, email, password_hash, full_name, is_superuser, access_level, is_active) VALUES
('nabibo', 'nabibo2@yahoo.co.uk', '$2y$10$E5qU5K5Z5Z5Z5Z5Z5Z5Z5u5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5Z5a', 'Super Administrator', TRUE, 'superuser', TRUE);

-- Membership Cards Table
CREATE TABLE membership_cards (
    id INT AUTO_INCREMENT PRIMARY KEY,
    member_id INT NULL,
    card_number VARCHAR(50) UNIQUE NOT NULL,
    issue_date DATE NOT NULL,
    expiry_date DATE,
    qr_code TEXT,
    barcode VARCHAR(100),
    is_active BOOLEAN DEFAULT TRUE,
    printed BOOLEAN DEFAULT FALSE,
    print_count INT DEFAULT 0,
    last_printed TIMESTAMP NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (member_id) REFERENCES members(id) ON DELETE CASCADE,
    INDEX idx_card_number (card_number),
    INDEX idx_member_id (member_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Insert Default Modules
INSERT INTO module_management (module_name, module_description, module_icon, module_url, display_order, required_role, is_active) VALUES
('User Management', 'Manage system users and their access', 'users', 'modules/users/index.php', 1, 'admin', TRUE),
('Membership', 'Manage church members', 'user-check', 'modules/membership/index.php', 2, 'viewer', TRUE),
('Membership Cards', 'Generate and manage ID cards', 'id-card', 'modules/membership/cards.php', 3, 'viewer', TRUE),
('Administration', 'Manage Areas, Districts, and Assemblies', 'building', 'modules/administration/index.php', 4, 'admin', TRUE),
('Reports', 'Generate and view reports', 'file-text', 'modules/reports/index.php', 5, 'viewer', TRUE),
('Notifications', 'View system notifications', 'bell', 'modules/notifications/index.php', 6, 'viewer', TRUE),
('Audit Logs', 'View system audit trail', 'shield', 'modules/audit/index.php', 7, 'admin', TRUE),
('Settings', 'General system settings', 'settings', 'modules/settings/index.php', 8, 'admin', TRUE);

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