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/assigned_to.php
<?php
include 'admin_header.php';

/**
 * ============================
 * HANDLE RE-ASSIGN (OPTIMIZED)
 * ============================
 */
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['assign_id']) && !empty($_POST['operator_id'])) {

    $ids = array_map('intval', $_POST['assign_id']);
    $operator_id = (int) $_POST['operator_id'];

    // ✅ Single query instead of loop
    $idList = implode(',', $ids);

    $stmt = $conn->prepare("UPDATE assignments SET user_id = ? WHERE id IN ($idList)");
    $stmt->bind_param("i", $operator_id);
    $stmt->execute();
}

/**
 * ============================
 * FETCH DATA (OPTIMIZED)
 * ============================
 */

// ✅ Optimized query using subquery instead of heavy join
$sql = "
SELECT 
    a.id,
    a.assignment_no,
    a.no_of_record,
    a.assignment_date,
    u.name as user_name,

    (
        SELECT COUNT(*) 
        FROM assignment_details ad 
        WHERE ad.assignment_id = a.id 
        AND (ad.doc_title != '' OR ad.doc_date != '' OR ad.doc_description != '')
    ) as completed_count

FROM assignments a
JOIN users u ON u.id = a.user_id
WHERE a.deleted = 0 
AND a.assignment_status_id = 1
";

$result = $conn->query($sql);

$total = 0;
?>

<div class="container" style="background:#fff; margin-top:42px">
    <div class="assignment-dashboard">
        <form method="POST">
            <div class="row">

                <!-- LEFT -->
                <div class="col-sm-8 border-right">
                    <h5 class="mt-3 mb-3">
                        ASSIGNED FOLDERS
                        <span class="font-weight-light small text-info total_count">[0]</span>
                        <div class="pull-right">
                            <strong class="badge badge-secondary checked_count">0</strong>
                        </div>
                    </h5>

                    <input type="text" class="mb-3 assignment_to" placeholder="Search: [Folder Index/User]" id="search" style="width:100%; text-align:center;">

                    <div class="table-responsive">
                        <table id="assignment_to_table" class="table table-striped table-sm table-bordered">
                            <thead>
                                <tr>
                                    <th>Action</th>
                                    <th>Folder Index</th>
                                    <th>Data Count</th>
                                    <th>Completed</th>
                                    <th>Assigned To</th>
                                    <th>Date</th>
                                </tr>
                            </thead>
                            <tbody>

                                <?php while ($row = $result->fetch_assoc()):
                                    $total += $row['no_of_record'];
                                ?>
                                    <tr>
                                        <td>
                                            <input type="checkbox" name="assign_id[]" value="<?= $row['id'] ?>" file_count="<?= $row['no_of_record'] ?>" class="chk_assign_id">
                                        </td>
                                        <td>
                                            <a href="show_doc.php?assignment_no=<?= urlencode($row['assignment_no']) ?>" target="_blank">
                                                <?= htmlspecialchars($row['assignment_no']) ?>
                                            </a>
                                        </td>
                                        <td><?= $row['no_of_record'] ?></td>
                                        <td><?= $row['completed_count'] ?></td>
                                        <td><?= htmlspecialchars($row['user_name']) ?></td>
                                        <td><?= date('m/d/Y', strtotime($row['assignment_date'])) ?></td>
                                    </tr>
                                <?php endwhile; ?>

                            </tbody>
                        </table>
                    </div>
                </div>

                <!-- RIGHT -->
                <div class="col-sm-4">
                    <h5 class="mt-3 mb-3">RE-ASSIGN TO:</h5>

                    <?php
                    $sqlUsers = "
SELECT u.id, u.name, COALESCE(SUM(a.no_of_record),0) as no_of_pending
FROM users u
JOIN role_user r ON r.user_id = u.id
LEFT JOIN assignments a 
    ON a.user_id = u.id AND a.assignment_status_id = 1
WHERE r.role_id IN (2,3)
GROUP BY u.id
";

                    $resUsers = $conn->query($sqlUsers);

                    while ($row = $resUsers->fetch_assoc()):
                    ?>

                        <div class="card mb-3">
                            <div class="card-body">
                                <div class="card-text pull-left">
                                    <img src="../images/user.png" class="rounded-circle border mr-3" width="36">
                                    <strong><?= htmlspecialchars($row["name"]) ?></strong>
                                    <span class="badge badge-info"><?= $row["no_of_pending"] ?></span>
                                </div>
                                <div class="card-link pull-right" style="margin-top:6px;">
                                    <input type="radio" name="operator_id" value="<?= $row["id"] ?>">
                                </div>
                            </div>
                        </div>

                    <?php endwhile; ?>

                    <div class="text-right">
                        <input class="btn btn-primary" type="submit" name="save" value="Assign">
                    </div>

                </div>
            </div>
        </form>
    </div>
</div>

<script>
    document.addEventListener("DOMContentLoaded", function() {

        document.querySelector(".total_count").innerText = "[<?= $total ?>]";

        document.querySelectorAll(".chk_assign_id").forEach(el => {
            el.addEventListener("change", function() {
                let total = 0;
                document.querySelectorAll("input[name='assign_id[]']:checked").forEach(chk => {
                    total += parseInt(chk.getAttribute("file_count")) || 0;
                });
                document.querySelector(".checked_count").innerText = total;
            });
        });

    });
</script>

<?php $conn->close(); ?>