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