Heray-Was-Here
Server : LiteSpeed
System : Linux uk-fast-web1372.main-hosting.eu 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64
User : u390967363 ( 390967363)
PHP Version : 8.2.30
Disable Function : system, exec, shell_exec, passthru, mysql_list_dbs, ini_alter, dl, symlink, link, chgrp, leak, popen, apache_child_terminate, virtual, mb_send_mail
Directory :  /home/u390967363/domains/aibenproperties.com/public_html/app/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/u390967363/domains/aibenproperties.com/public_html/app/support.php
<?php
include 'includes/header.php';

// Access control: Allow all logged-in users
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit;
}

$companyId = getCurrentCompanyId();
$userRole = (string)($_SESSION['user_role'] ?? 'guest');
$roleNorm = strtolower(str_replace([' ', '-'], '_', $userRole));
$viewType = strtolower(trim((string)($_GET['type'] ?? 'support')));
if (!in_array($viewType, ['support','complaint'], true)) { $viewType = 'support'; }
$ticketType = ($viewType === 'complaint') ? 'complaint' : 'support';
$isHr = (function_exists('isHRTier') && isHRTier($userRole)) || in_array($roleNorm, ['hr','hr_manager','admin','super_admin'], true);
$viewAll = ($ticketType === 'complaint') && $isHr && (strtolower(trim((string)($_GET['scope'] ?? ''))) === 'all');

if (function_exists('ensureSupportTicketsSchema')) {
    ensureSupportTicketsSchema();
}
$hasTicketType = function_exists('tableHasColumn') ? tableHasColumn('support_tickets', 'ticket_type') : false;
$hasTicketCompany = function_exists('tableHasColumn') ? tableHasColumn('support_tickets', 'company_id') : false;
$hasUsersName = function_exists('tableHasColumn') ? tableHasColumn('users', 'name') : false;
$userNameExpr = $hasUsersName ? "u.name" : "CONCAT('User #', u.id)";

$success = '';
$error = '';

// Handle New Ticket
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['create_ticket'])) {
    if (!function_exists('ap_csrf_verify') || !ap_csrf_verify(ap_csrf_from_request())) {
        $error = "Security check failed. Please refresh and try again.";
    } else {
    $subject = trim((string)($_POST['subject'] ?? ''));
    $message = trim((string)($_POST['message'] ?? ''));
    $priority = trim((string)($_POST['priority'] ?? 'medium'));
    $postType = strtolower(trim((string)($_POST['ticket_type'] ?? $ticketType)));
    if (!in_array($postType, ['support','complaint'], true)) { $postType = 'support'; }
    
    try {
        $cols = [];
        $vals = [];
        $execParams = [];
        if ($companyId && $hasTicketCompany) {
            $cols[] = "company_id";
            $vals[] = "?";
            $execParams[] = $companyId;
        }
        $cols[] = "user_id";
        $vals[] = "?";
        $execParams[] = (int)$_SESSION['user_id'];
        $cols[] = "subject";
        $vals[] = "?";
        $execParams[] = $subject;
        $cols[] = "message";
        $vals[] = "?";
        $execParams[] = $message;
        $cols[] = "priority";
        $vals[] = "?";
        $execParams[] = $priority;
        if ($hasTicketType) {
            $cols[] = "ticket_type";
            $vals[] = "?";
            $execParams[] = $postType;
        } elseif ($postType === 'complaint' && stripos($subject, 'complaint:') !== 0) {
            $subject = 'Complaint: ' . $subject;
        }

        $stmt = $pdo->prepare("INSERT INTO support_tickets (" . implode(",", $cols) . ") VALUES (" . implode(",", $vals) . ")");
        if ($stmt->execute($execParams)) {
            $success = ($postType === 'complaint') ? "Complaint submitted successfully." : "Ticket created successfully! Our team will get back to you shortly.";
            if (function_exists('logActivity')) {
                logActivity($_SESSION['user_id'], 'TICKET_CREATE', "Created support ticket: $subject");
            }
        } else {
            $error = "Failed to create ticket.";
        }
    } catch (PDOException $e) {
        $error = "Database error: " . $e->getMessage();
    }
    }
}

// Fetch Tickets
$tickets = [];
try {
    $where = [];
    $params = [];
    if (!$viewAll) {
        $where[] = "t.user_id = ?";
        $params[] = (int)$_SESSION['user_id'];
    }
    if ($hasTicketType) {
        $where[] = "t.ticket_type = ?";
        $params[] = $ticketType;
    } elseif ($ticketType === 'complaint') {
        $where[] = "t.subject LIKE 'Complaint:%'";
    }
    if ($companyId && $hasTicketCompany) {
        $where[] = "(t.company_id = ? OR t.company_id IS NULL)";
        $params[] = $companyId;
    }
    $sql = "SELECT t.*" . ($viewAll ? (", {$userNameExpr} AS submitter_name, u.role AS submitter_role") : "") . " FROM support_tickets t" . ($viewAll ? " LEFT JOIN users u ON u.id = t.user_id" : "") . (!empty($where) ? (" WHERE " . implode(" AND ", $where)) : "") . " ORDER BY t.created_at DESC";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $tickets = $stmt->fetchAll(PDO::FETCH_ASSOC) ?: [];
} catch (Throwable $e) {
    $tickets = [];
}

$pageTitle = ($ticketType === 'complaint') ? 'Complaints' : 'Support Center';
$openLabel = ($ticketType === 'complaint') ? 'Submit Complaint' : 'Open New Ticket';
?>

<div class="container-fluid px-4">
    <div class="d-flex justify-content-between align-items-center mt-4 mb-4">
        <h2 class="text-navy"><?= htmlspecialchars($pageTitle) ?></h2>
        <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#newTicketModal">
            <i class="fa-solid fa-plus me-2"></i><?= htmlspecialchars($openLabel) ?>
        </button>
    </div>
    
    <?php if ($success): ?>
        <div class="alert alert-success alert-dismissible fade show" role="alert">
            <i class="fa-solid fa-check-circle me-2"></i><?= $success ?>
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        </div>
    <?php endif; ?>
    
    <?php if ($error): ?>
        <div class="alert alert-danger alert-dismissible fade show" role="alert">
            <i class="fa-solid fa-exclamation-circle me-2"></i><?= $error ?>
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        </div>
    <?php endif; ?>

    <div class="row mb-4">
        <!-- Quick Help Cards -->
        <div class="col-md-4">
            <div class="card shadow-sm h-100 border-0 border-start border-5 border-primary">
                <div class="card-body text-center">
                    <div class="text-primary mb-3"><i class="fa-solid fa-phone fa-3x"></i></div>
                    <h3>Call Us</h3>
                    <p class="text-muted">Direct line for urgent matters.</p>
                    <a href="tel:09044444411" class="btn btn-outline-primary rounded-pill px-4">090 4444 4411</a>
                </div>
            </div>
        </div>
        <div class="col-md-4">
            <div class="card shadow-sm h-100 border-0 border-start border-5 border-success">
                <div class="card-body text-center">
                    <div class="text-success mb-3"><i class="fa-solid fa-envelope fa-3x"></i></div>
                    <h3>Email Support</h3>
                    <p class="text-muted">Response within 24 hours.</p>
                    <a href="mailto:Contact@aibenproperties.com" class="btn btn-outline-success rounded-pill px-4 w-100 text-wrap text-break">Contact@aibenproperties.com</a>
                </div>
            </div>
        </div>
        <div class="col-md-4">
            <div class="card shadow-sm h-100 border-0 border-start border-5 border-info">
                <div class="card-body text-center">
                    <div class="text-info mb-3"><i class="fa-solid fa-book fa-3x"></i></div>
                    <h3>Knowledge Base</h3>
                    <p class="text-muted">Find answers to common questions.</p>
                    <a href="#" class="btn btn-outline-info rounded-pill px-4">View FAQ</a>
                </div>
            </div>
        </div>
    </div>

    <div class="card shadow-sm mb-4">
        <div class="card-header bg-navy text-white">
            <h5 class="mb-0"><i class="fa-solid fa-ticket me-2"></i><?= $viewAll ? 'All Complaints' : (($ticketType === 'complaint') ? 'My Complaints' : 'My Tickets') ?></h5>
        </div>
        <div class="card-body">
            <div class="table-responsive">
                <table class="table table-hover align-middle">
                    <thead class="table-light">
                        <tr>
                            <th>Ticket ID</th>
                            <?php if ($viewAll): ?>
                            <th>Submitted By</th>
                            <?php endif; ?>
                            <th>Subject</th>
                            <th>Status</th>
                            <th>Priority</th>
                            <th>Last Update</th>
                            <th>Action</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($tickets as $ticket): ?>
                        <tr>
                            <td><span class="fw-bold">#<?= $ticket['id'] ?></span></td>
                            <?php if ($viewAll): ?>
                            <td class="text-muted small"><?= htmlspecialchars($ticket['submitter_name'] ?? 'Unknown') ?></td>
                            <?php endif; ?>
                            <td><?= htmlspecialchars($ticket['subject']) ?></td>
                            <td>
                                <?php
                                    $statusClass = 'bg-secondary';
                                    if ($ticket['status'] === 'open') $statusClass = 'bg-primary';
                                    elseif ($ticket['status'] === 'resolved') $statusClass = 'bg-success';
                                    elseif ($ticket['status'] === 'pending') $statusClass = 'bg-warning text-dark';
                                ?>
                                <span class="badge <?= $statusClass ?> rounded-pill">
                                    <?= ucfirst($ticket['status']) ?>
                                </span>
                            </td>
                            <td>
                                <?php
                                    $priorityClass = 'bg-info text-dark';
                                    if ($ticket['priority'] === 'high') $priorityClass = 'bg-danger';
                                    elseif ($ticket['priority'] === 'urgent') $priorityClass = 'bg-dark';
                                    elseif ($ticket['priority'] === 'low') $priorityClass = 'bg-secondary';
                                ?>
                                <span class="badge <?= $priorityClass ?>">
                                    <?= ucfirst($ticket['priority']) ?>
                                </span>
                            </td>
                            <td><?= date('M j, Y', strtotime($ticket['updated_at'])) ?></td>
                            <td>
                                <a class="btn btn-sm btn-outline-primary" href="ticket-details.php?id=<?= (int)$ticket['id'] ?>&back=support&type=<?= urlencode($ticketType) ?>">
                                    <i class="fa-regular fa-eye me-1"></i>View
                                </a>
                            </td>
                        </tr>
                        <?php endforeach; ?>
                        <?php if(empty($tickets)): ?>
                        <tr><td colspan="<?= $viewAll ? 7 : 6 ?>" class="text-center text-muted py-4">No support tickets found.</td></tr>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

<!-- New Ticket Modal -->
<div class="modal fade" id="newTicketModal" tabindex="-1" aria-labelledby="newTicketModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header bg-navy text-white">
                <h5 class="modal-title" id="newTicketModalLabel"><i class="fa-solid fa-plus-circle me-2"></i>Open New Ticket</h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <form method="POST">
                <div class="modal-body">
                    <input type="hidden" name="csrf_token" value="<?= htmlspecialchars(ap_csrf_token()) ?>">
                    <input type="hidden" name="ticket_type" value="<?= htmlspecialchars($ticketType) ?>">
                    <div class="mb-3">
                        <label class="form-label">Subject</label>
                        <input type="text" name="subject" class="form-control" required placeholder="Brief description of the issue">
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Priority</label>
                        <select name="priority" class="form-select">
                            <option value="low">Low</option>
                            <option value="medium" selected>Medium</option>
                            <option value="high">High</option>
                            <option value="urgent">Urgent</option>
                        </select>
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Message</label>
                        <textarea name="message" class="form-control" rows="5" required placeholder="Describe your issue in detail..."></textarea>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
                    <button type="submit" name="create_ticket" class="btn btn-primary">Submit Ticket</button>
                </div>
            </form>
        </div>
    </div>
</div>

<?php include 'includes/footer.php'; ?>

Hry