MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 8.0.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/imensosw/demo.imensosoftware.com/matrix/admin/sort.php
<?php
require_once '../config.php';

ini_set('display_errors', 0); // keep OFF in production

/* ================= HELPERS ================= */

function formatDate($date)
{
    return (!empty($date) && $date !== '0000-00-00')
        ? date('m/d/Y', strtotime($date))
        : '';
}

function getOrder($order)
{
    return ($order === 'desc') ? 'asc' : 'desc';
}

function getValidSortColumn($column)
{
    $allowed = [
        'assignment_no',
        'no_of_record',
        'name',
        'assignment_date',
        'submit_date',
        'id'
    ];

    return in_array($column, $allowed) ? $column : 'assignments.id';
}

function buildSearchQuery(&$params, &$types, $search)
{
    if (!empty($search)) {
        $params[] = "%" . $search . "%";
        $types .= "s";
        return " AND assignments.assignment_no LIKE ? ";
    }
    return "";
}

/* ================= INPUT ================= */

$formData = $_POST['formData'] ?? [];

$action    = $formData['action'] ?? '';
$order     = getOrder($formData['sortorder'] ?? 'desc');
$sort_by   = getValidSortColumn($formData['sortby'] ?? '');
$search    = $formData['searchText'] ?? '';

$params = [];
$types  = "";

/* ================= BASE QUERY ================= */

$whereSearch = buildSearchQuery($params, $types, $search);

/* ================= ACTION HANDLER ================= */

switch ($action) {

    case 'assignment_complete_table_sort':

        $sql = "SELECT assignments.*, users.name 
                FROM assignments
                INNER JOIN users ON users.id = assignments.user_id
                WHERE assignments.assignment_status_id = 2 
                AND assignments.deleted = 0
                $whereSearch
                ORDER BY $sort_by $order";

        echo renderTable($conn, $sql, $params, $types, 'complete', $order);
        break;

    case 'assignment_delete_table_sort':

        $params = [];
        $types  = "";

        // ✅ FIRST add date (matches first ?)
        $params[] = date('Y-m-d', strtotime('-3 days'));
        $types .= "s";

        // ✅ THEN build search
        $whereSearch = buildSearchQuery($params, $types, $search);

        $sql = "SELECT assignments.*, users.name 
            FROM assignments
            INNER JOIN users ON users.id = assignments.user_id
            WHERE assignments.assignment_status_id = 2 
            AND assignments.deleted = 0
            AND assignments.submit_date <= ?
            $whereSearch
            ORDER BY $sort_by $order";

        echo renderTable($conn, $sql, $params, $types, 'delete', $order);
        break;

    case 'assignment_to_table_sort':

        $sql = "SELECT assignments.*, 
                SUM(IF(assignment_details.doc_title != '' 
                OR assignment_details.doc_date != '' 
                OR assignment_details.doc_description != '', 1, 0)) AS completed_count,
                users.name AS user_name
                FROM assignments
                INNER JOIN users ON users.id = assignments.user_id
                INNER JOIN assignment_details ON assignment_details.assignment_id = assignments.id
                WHERE assignments.assignment_status_id = 1
                $whereSearch
                GROUP BY assignments.id
                ORDER BY $sort_by $order";

        echo renderTable($conn, $sql, $params, $types, 'assign', $order);
        break;

    case 'new_assignment_table_sort':

        $sql = "SELECT * FROM assignments
                WHERE assignments.assignment_status_id = 1
                $whereSearch
                GROUP BY assignments.id
                ORDER BY $sort_by $order";

        echo renderTable($conn, $sql, $params, $types, 'new', $order);
        break;
}

/* ================= TABLE RENDER ================= */

function renderTable($conn, $sql, $params, $types, $type, $order)
{

    $stmt = $conn->prepare($sql);

    if (!empty($params)) {
        $stmt->bind_param($types, ...$params);
    }

    $stmt->execute();
    $result = $stmt->get_result();

    $output = '<table class="table table-striped table-sm table-bordered">';
    $output .= '<tr>';

    // Header
    $output .= '<th>Action</th>';
    $output .= '<th><a class="column_sort_' . $type . '" id="assignment_no" data-order="' . $order . '">Folder Index</a></th>';
    $output .= '<th><a class="column_sort_' . $type . '" id="no_of_record" data-order="' . $order . '">Data Count</a></th>';

    if ($type === 'assign') {
        $output .= '<th>Completed Count</th>';
        $output .= '<th><a class="column_sort_' . $type . '" id="name" data-order="' . $order . '">Assigned To</a></th>';
    } elseif ($type !== 'new') {
        $output .= '<th><a class="column_sort_' . $type . '" id="name" data-order="' . $order . '">User</a></th>';
    }

    $output .= '<th><a class="column_sort_' . $type . '" id="assignment_date" data-order="' . $order . '">Assigned Date</a></th>';

    if ($type !== 'new') {
        $output .= '<th><a class="column_sort_' . $type . '" id="submit_date" data-order="' . $order . '">Completed Date</a></th>';
    }

    $output .= '</tr>';

    // Rows
    while ($row = $result->fetch_assoc()) {

        $output .= '<tr>';

        $output .= '<td><input type="checkbox" value="' . $row['assignment_no'] . '"></td>';
        $output .= '<td>' . $row['assignment_no'] . '</td>';
        $output .= '<td>' . $row['no_of_record'] . '</td>';

        if ($type === 'assign') {
            $output .= '<td>' . ($row['completed_count'] ?? 0) . '</td>';
            $output .= '<td>' . $row['user_name'] . '</td>';
        } elseif ($type !== 'new') {
            $output .= '<td>' . $row['name'] . '</td>';
        }

        $output .= '<td>' . formatDate($row['assignment_date']) . '</td>';

        if ($type !== 'new') {
            $output .= '<td>' . formatDate($row['submit_date']) . '</td>';
        }

        $output .= '</tr>';
    }

    $output .= '</table>';

    return $output;
}