Contact Us Controller Documentation
File: /controllers/contactusController.php
Purpose: Manages customer contact form submissions with administrative response tracking and AJAX functionality
Last Updated: December 20, 2024
Total Functions: 4
Lines of Code: ~219
---
๐ Overview
The Contact Us Controller manages customer inquiries and contact form submissions. It provides administrative functionality to view, respond to, and track contact form messages with user management and status tracking capabilities.
Primary Functions
- โ Contact form message management
- โ Administrative response tracking
- โ AJAX-powered DataTable interface
- โ Message status management (read/unread)
- โ Client vs visitor identification
- โ Soft delete functionality
- โ Advanced search and filtering
---
๐๏ธ Database Tables
| Table Name | Purpose | Key Columns | |
|---|---|---|---|
| **contactus** | Contact messages | id, clientid, name, mobile, email, subject, message, isRead, sysDate, userreadid, isdel | |
| **user** | System users | userid, employeename |
๐ Key Functions
1. Default Action - Display Contact Messages
Location: Lines 7-10
Purpose: Show contact form management interface
2. details - View Message Details
Location: Lines 11-23
Purpose: View and mark contact message as read
Process Flow:
1. Load message by ID
2. Mark as read and assign to current user
3. Update read status and date
4. Display message details with user information
3. showajax - AJAX DataTable Interface
Location: Lines 67-194
Purpose: Provide paginated, searchable contact message interface
Features:
- โข Advanced Filtering: By date range, status, client type, user
- โข Search Functionality: Multi-column search capability
- โข Pagination: Server-side pagination for large datasets
- โข Sorting: Column-based sorting
- โข Status Display: Visual indicators for read/unread status
Filter Parameters:
$start_date = $_POST['start_date'];
$end_date = $_POST['end_date'];
$isdel = $_POST['isdel']; // Deleted status
$isRead = $_POST['isRead']; // Read status
$id = $_POST['id']; // Specific message ID
$clientid = $_POST['clientid']; // Client filter
$userreadid = $_POST['userreadid']; // User who read filter
DataTable Response:
$output = array(
"draw" => intval($_POST["draw"]),
"recordsTotal" => intval($apps),
"recordsFiltered" => $totals,
"data" => array()
);
4. removecontroller - Soft Delete Message
Location: Lines 199-214
Purpose: Mark message as deleted (soft delete)
Process Flow:
1. Load message by ID
2. Set deletion flag and metadata
3. Record deletion user and timestamp
4. Return success/failure status
---
๐ URL Routes & Actions
| URL Parameter | Function | Description | |
|---|---|---|---|
| `do=` (empty) | Default | Show contact messages interface | |
| `do=details` | View details | View specific message and mark as read | |
| `do=getselectjoin` | AJAX helper | Generic select lookup functionality | |
| `do=showajax` | AJAX data | DataTable data source | |
| `do=removecontroller` | Delete | Soft delete message |
- โข Search: Global search across all columns
- โข Pagination:
start,length,drawparameters - โข Sorting:
order[0][column],order[0][dir] - โข Filtering: Date range, status, client type filters
---
๐งฎ Query Logic
Advanced Search Query Building
$searchQuery = " ";
// Date range filtering
if($start_date != '' && $end_date != ''){
$searchQuery .='and contactus.sysDate >= "' . $start_date . '" and contactus.sysDate <= "' . $end_date . '" ';
}
// Status filtering
if($isRead == 1){
$searchQuery .= " and contactus.isRead > 0 ";
}else{
$searchQuery .= " and contactus.isRead = 0 ";
}
// Multi-column search
if (isset($_POST['search']['value']) && $_POST['search']['value'] != "") {
$searchQuery .= "and ( contactus.id LIKE '%" . $_POST["search"]["value"] . "%'
OR contactus.name LIKE '%" . $_POST["search"]["value"] . "%'
OR contactus.email LIKE '%" . $_POST["search"]["value"] . "%'
OR contactus.subject LIKE '%" . $_POST["search"]["value"] . "%'
)";
}
Join Query for User Information
SELECT contactus.*, user.employeename
FROM `contactus`
LEFT JOIN user ON contactus.userreadid = user.userid
WHERE 1 {searchQuery}
---
๐ Security & Performance
Input Validation
- โข All inputs filtered via
filter_input()functions - โข SQL injection prevention through parameterized queries
- โข XSS prevention in output display
Performance Considerations
- โข Server-side pagination: Handles large message volumes
- โข Indexed searches: Date and status fields should be indexed
- โข Soft delete: Maintains data integrity while hiding deleted records
Required Indexes
CREATE INDEX idx_contactus_date ON contactus(sysDate);
CREATE INDEX idx_contactus_status ON contactus(isRead, isdel);
CREATE INDEX idx_contactus_user ON contactus(userreadid);
---
๐ Status Management
Message Status Types
- โข isRead = 0: Unread message (default)
- โข isRead = 1: Read message
- โข isdel = 0: Active message (default)
- โข isdel = 1: Deleted message
Client Type Classification
- โข clientid < 1: Visitor (non-registered user)
- โข clientid > 0: Registered client
Display Logic
// Client type display
if($row["clientid"] < 1){
$clientid = 'ุฒุงุฆุฑ'; // Visitor
}else{
$clientid = 'ุนู
ูู'; // Client
}
// Read status display
if($row["isRead"] < 1){
$isRead = 'ุบูุฑ ู
ูุฑูุกุฉ'; // Unread
}else{
$isRead = 'ู
ูุฑูุกุฉ'; // Read
}
---
๐ Related Documentation
- โข CLAUDE.md - PHP 8.2 migration guide
- โข clientController.md - Customer management
- โข userController.md - User management
---
Documented By: AI Assistant
Review Status: โ Complete
Next Review: When major changes occur