Sindbad~EG File Manager
-- 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