Path : /home/vishqocm/pcib.in/admin/
File Upload :
Current File : /home/vishqocm/pcib.in/admin/canned_responses.php

<?php
$pageTitle = "Manage Canned Responses";
include_once('includes/header.php');
include_once('includes/check_login.php');

// Check if admins table exists
$admins_table_check = $conn->query("SHOW TABLES LIKE 'admins'");
$has_admins_table = ($admins_table_check->num_rows > 0);

// Create canned responses table if not exists
$conn->query("
    CREATE TABLE IF NOT EXISTS `support_canned_responses` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `title` varchar(255) NOT NULL,
        `message` text NOT NULL,
        `category` varchar(50) DEFAULT NULL,
        `created_by` int(11) DEFAULT NULL,
        `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
        `updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
        PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");

// Handle form submission for adding/editing canned response
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_response'])) {
    $title = isset($_POST['title']) ? trim($conn->real_escape_string($_POST['title'])) : '';
    $message = isset($_POST['message']) ? trim($conn->real_escape_string($_POST['message'])) : '';
    $category = isset($_POST['category']) ? trim($conn->real_escape_string($_POST['category'])) : '';
    $response_id = isset($_POST['response_id']) ? (int)$_POST['response_id'] : 0;
    
    if (empty($title) || empty($message)) {
        $_SESSION['error_msg'] = "Title and message are required fields.";
    } else {
        if ($response_id > 0) {
            // Update existing response
            $stmt = $conn->prepare("
                UPDATE support_canned_responses 
                SET title = ?, message = ?, category = ? 
                WHERE id = ?
            ");
            $stmt->bind_param("sssi", $title, $message, $category, $response_id);
            
            if ($stmt->execute()) {
                $_SESSION['success_msg'] = "Canned response updated successfully.";
            } else {
                $_SESSION['error_msg'] = "Failed to update canned response.";
            }
        } else {
            // Add new response
            $admin_id = isset($_SESSION['admin_id']) ? $_SESSION['admin_id'] : NULL;
            
            // Add new response - handle case where created_by might not be required
            if ($has_admins_table && $admin_id) {
                $stmt = $conn->prepare("
                    INSERT INTO support_canned_responses 
                    (title, message, category, created_by) 
                    VALUES (?, ?, ?, ?)
                ");
                $stmt->bind_param("sssi", $title, $message, $category, $admin_id);
            } else {
                $stmt = $conn->prepare("
                    INSERT INTO support_canned_responses 
                    (title, message, category) 
                    VALUES (?, ?, ?)
                ");
                $stmt->bind_param("sss", $title, $message, $category);
            }
            
            if ($stmt->execute()) {
                $_SESSION['success_msg'] = "Canned response added successfully.";
            } else {
                $_SESSION['error_msg'] = "Failed to add canned response.";
            }
        }
        
        // Redirect to avoid form resubmission
        header("Location: canned_responses.php");
        exit();
    }
}

// Handle delete request
if (isset($_GET['delete']) && is_numeric($_GET['delete'])) {
    $response_id = (int)$_GET['delete'];
    
    $stmt = $conn->prepare("DELETE FROM support_canned_responses WHERE id = ?");
    $stmt->bind_param("i", $response_id);
    
    if ($stmt->execute()) {
        $_SESSION['success_msg'] = "Canned response deleted successfully.";
    } else {
        $_SESSION['error_msg'] = "Failed to delete canned response.";
    }
    
    header("Location: canned_responses.php");
    exit();
}

// Get response details if editing
$response = null;
if (isset($_GET['edit']) && is_numeric($_GET['edit'])) {
    $response_id = (int)$_GET['edit'];
    
    $stmt = $conn->prepare("SELECT * FROM support_canned_responses WHERE id = ?");
    $stmt->bind_param("i", $response_id);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($result->num_rows > 0) {
        $response = $result->fetch_assoc();
    }
}

// Fetch all canned responses
$responses = [];
$category_filter = isset($_GET['category']) ? $conn->real_escape_string($_GET['category']) : '';

// Modify query based on whether admins table exists
if ($has_admins_table) {
    $query = "SELECT r.*, a.name as admin_name FROM support_canned_responses r 
            LEFT JOIN admins a ON r.created_by = a.id";
} else {
    $query = "SELECT r.* FROM support_canned_responses r";
}

if (!empty($category_filter)) {
    $query .= " WHERE r.category = '$category_filter'";
}

$query .= " ORDER BY r.title ASC";
$result = $conn->query($query);

if ($result && $result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        $responses[] = $row;
    }
}

// Get unique categories
$categories = [];
$result = $conn->query("SELECT DISTINCT category FROM support_canned_responses WHERE category != '' ORDER BY category");
if ($result && $result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        $categories[] = $row['category'];
    }
}

// Define support categories
$support_categories = [
    'account' => 'Account Access',
    'payment' => 'Payment Issues',
    'enrollment' => 'Course Enrollment',
    'certificate' => 'Certificate Issues',
    'exam' => 'Exam Related',
    'technical' => 'Technical Support',
    'general' => 'General Information',
    'other' => 'Other'
];
?>

<div class="container-fluid py-4">
    <div class="d-flex justify-content-between align-items-center mb-4">
        <h2 class="h3">Manage Canned Responses</h2>
        <button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#responseModal">
            <i class="fas fa-plus me-1"></i> Add New Response
        </button>
    </div>
    
    <?php if (isset($_SESSION['success_msg'])): ?>
    <div class="alert alert-success alert-dismissible fade show" role="alert">
        <?php echo $_SESSION['success_msg']; unset($_SESSION['success_msg']); ?>
        <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
    </div>
    <?php endif; ?>
    
    <?php if (isset($_SESSION['error_msg'])): ?>
    <div class="alert alert-danger alert-dismissible fade show" role="alert">
        <?php echo $_SESSION['error_msg']; unset($_SESSION['error_msg']); ?>
        <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
    </div>
    <?php endif; ?>
    
    <!-- Filter bar -->
    <div class="card mb-4">
        <div class="card-body">
            <form method="get" action="" class="row g-3">
                <div class="col-md-4">
                    <label for="category" class="form-label">Filter by Category</label>
                    <select class="form-select" name="category" id="category" onchange="this.form.submit()">
                        <option value="">All Categories</option>
                        <?php foreach ($support_categories as $key => $label): ?>
                        <option value="<?php echo $key; ?>" <?php echo $category_filter === $key ? 'selected' : ''; ?>>
                            <?php echo $label; ?>
                        </option>
                        <?php endforeach; ?>
                    </select>
                </div>
                <div class="col-md-8 d-flex align-items-end">
                    <div class="ms-auto">
                        <?php if (!empty($category_filter)): ?>
                        <a href="canned_responses.php" class="btn btn-outline-secondary">
                            <i class="fas fa-times me-1"></i> Clear Filter
                        </a>
                        <?php endif; ?>
                    </div>
                </div>
            </form>
        </div>
    </div>
    
    <!-- Responses table -->
    <div class="card">
        <div class="card-body">
            <?php if (count($responses) > 0): ?>
            <div class="table-responsive">
                <table class="table table-striped table-hover">
                    <thead>
                        <tr>
                            <th width="30%">Title</th>
                            <th width="20%">Category</th>
                            <th width="30%">Preview</th>
                            <th width="10%">Created By</th>
                            <th width="10%">Actions</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($responses as $item): ?>
                        <tr>
                            <td><?php echo htmlspecialchars($item['title']); ?></td>
                            <td>
                                <?php if (!empty($item['category'])): ?>
                                <span class="badge bg-info">
                                    <?php echo isset($support_categories[$item['category']]) ? 
                                        htmlspecialchars($support_categories[$item['category']]) : 
                                        htmlspecialchars($item['category']); ?>
                                </span>
                                <?php else: ?>
                                <span class="text-muted">Not categorized</span>
                                <?php endif; ?>
                            </td>
                            <td>
                                <div class="text-truncate" style="max-width: 300px;">
                                    <?php echo htmlspecialchars(substr($item['message'], 0, 100)) . (strlen($item['message']) > 100 ? '...' : ''); ?>
                                </div>
                            </td>
                            <td><?php echo isset($item['admin_name']) ? htmlspecialchars($item['admin_name']) : 'N/A'; ?></td>
                            <td>
                                <div class="btn-group">
                                    <button type="button" class="btn btn-sm btn-outline-primary preview-btn" 
                                            data-title="<?php echo htmlspecialchars($item['title']); ?>"
                                            data-message="<?php echo htmlspecialchars($item['message']); ?>">
                                        <i class="fas fa-eye"></i>
                                    </button>
                                    <a href="canned_responses.php?edit=<?php echo $item['id']; ?>" class="btn btn-sm btn-outline-secondary">
                                        <i class="fas fa-edit"></i>
                                    </a>
                                    <a href="canned_responses.php?delete=<?php echo $item['id']; ?>" 
                                       class="btn btn-sm btn-outline-danger"
                                       onclick="return confirm('Are you sure you want to delete this canned response?')">
                                        <i class="fas fa-trash"></i>
                                    </a>
                                </div>
                            </td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
            <?php else: ?>
            <div class="alert alert-info mb-0">
                <i class="fas fa-info-circle me-2"></i> No canned responses found. 
                <?php if (!empty($category_filter)): ?>
                <a href="canned_responses.php">Clear the filter</a> to see all responses.
                <?php else: ?>
                Click the "Add New Response" button to create your first canned response.
                <?php endif; ?>
            </div>
            <?php endif; ?>
        </div>
    </div>
</div>

<!-- Response Modal -->
<div class="modal fade" id="responseModal" tabindex="-1" aria-labelledby="responseModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <form method="post" action="">
                <div class="modal-header">
                    <h5 class="modal-title" id="responseModalLabel">
                        <?php echo $response ? 'Edit Canned Response' : 'Add New Canned Response'; ?>
                    </h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
                </div>
                <div class="modal-body">
                    <?php if ($response): ?>
                    <input type="hidden" name="response_id" value="<?php echo $response['id']; ?>">
                    <?php endif; ?>
                    
                    <div class="mb-3">
                        <label for="title" class="form-label">Title</label>
                        <input type="text" class="form-control" id="title" name="title" 
                               value="<?php echo $response ? htmlspecialchars($response['title']) : ''; ?>" required>
                        <div class="form-text">A descriptive name for this response (visible to admins only)</div>
                    </div>
                    
                    <div class="mb-3">
                        <label for="category" class="form-label">Category</label>
                        <select class="form-select" id="category" name="category">
                            <option value="">Select Category</option>
                            <?php foreach ($support_categories as $key => $label): ?>
                            <option value="<?php echo $key; ?>" <?php echo ($response && $response['category'] === $key) ? 'selected' : ''; ?>>
                                <?php echo $label; ?>
                            </option>
                            <?php endforeach; ?>
                        </select>
                    </div>
                    
                    <div class="mb-3">
                        <label for="message" class="form-label">Response Message</label>
                        <textarea class="form-control" id="message" name="message" rows="10" required><?php echo $response ? htmlspecialchars($response['message']) : ''; ?></textarea>
                        <div class="form-text">
                            You can use the following placeholders in your message:
                            <ul class="mb-0 ps-3 mt-1">
                                <li><code>{student_name}</code> - Student's name</li>
                                <li><code>{ticket_number}</code> - Support ticket number</li>
                                <li><code>{course_name}</code> - Course name (if applicable)</li>
                            </ul>
                        </div>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
                    <button type="submit" name="save_response" class="btn btn-primary">Save Response</button>
                </div>
            </form>
        </div>
    </div>
</div>

<!-- Preview Modal -->
<div class="modal fade" id="previewModal" tabindex="-1" aria-labelledby="previewModalLabel" aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="previewModalLabel">Response Preview</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                <h6 class="preview-title fw-bold"></h6>
                <hr>
                <div class="preview-message"></div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
            </div>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Show edit modal on page load if editing
    <?php if ($response): ?>
    var responseModal = new bootstrap.Modal(document.getElementById('responseModal'));
    responseModal.show();
    <?php endif; ?>
    
    // Handle preview buttons
    const previewButtons = document.querySelectorAll('.preview-btn');
    const previewModal = new bootstrap.Modal(document.getElementById('previewModal'));
    const previewTitle = document.querySelector('.preview-title');
    const previewMessage = document.querySelector('.preview-message');
    
    previewButtons.forEach(button => {
        button.addEventListener('click', function() {
            const title = this.getAttribute('data-title');
            const message = this.getAttribute('data-message');
            
            previewTitle.textContent = title;
            previewMessage.innerHTML = message.replace(/\n/g, '<br>');
            
            previewModal.show();
        });
    });
});
</script>

<?php include_once('includes/footer.php'); ?>