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/js/admin_common.js
var app = app || {};

/* ================= DOCUMENT STATE ================= */
app.document = {
    docId: "",
    rowId: "",
    assignment_no: "",
    searchText: ""
};

/* ================= BASE URL ================= */
app.location = window.location.origin + "/admin/";

if (window.location.hostname === "sh018.hostgator.tempwebhost.net") {
    app.location = "http://sh018.hostgator.tempwebhost.net/~a16102wt/matrix/admin/";
}

/* ================= SORT STATE ================= */
app.sortData = {
    column_name: "",
    order: "",
    action: "",
    table_id: "",
    searchText: ""
};

/* ================= INIT ================= */
$(document).ready(function () {
    app.getData();
});

/* ================= CLICK ROW ================= */
$(document).on('click', '#row_link', function () {

    // ✅ Safe URL parsing
    const params = new URLSearchParams(window.location.search);
    app.document.assignment_no = params.get('assignment_no');

    if (app.document.assignment_no) {
        $('#admin_tabs').hide();
    }

    app.document.docId = $(this).data('doc_id');
    app.document.rowId = $(this).data('row_id');

    app.clickToDocId();
});

/* ================= SORTING ================= */

// Generic sort handler (replaces 4 duplicate handlers)
$(document).on('click', '.column_sort_new, .column_sort_assign, .column_sort_complete, .column_sort_delete', function () {

    app.sortData.column_name = $(this).attr('id');
    app.sortData.order = $(this).data('order');

    if ($(this).hasClass('column_sort_new')) {
        app.sortData.action = "new_assignment_table_sort";
        app.sortData.table_id = "new_assignment_table";
    } else if ($(this).hasClass('column_sort_assign')) {
        app.sortData.action = "assignment_to_table_sort";
        app.sortData.table_id = "assignment_to_table";
    } else if ($(this).hasClass('column_sort_complete')) {
        app.sortData.action = "assignment_complete_table_sort";
        app.sortData.table_id = "assignment_complete_table";
    } else if ($(this).hasClass('column_sort_delete')) {
        app.sortData.action = "assignment_delete_table_sort";
        app.sortData.table_id = "assignment_delete_table";
    }

    app.getSortTable();
});

/* ================= SEARCH (DEBOUNCED) ================= */

let debounceTimer;

$(document).on('keyup', '#search', function () {

    clearTimeout(debounceTimer);

    debounceTimer = setTimeout(() => {

        app.sortData.searchText = $(this).val();

        if ($(this).hasClass('assignment_to')) {
            app.sortData.action = "assignment_to_table_sort";
            app.sortData.table_id = "assignment_to_table";
        } else if ($(this).hasClass('assignment_complete')) {
            app.sortData.action = "assignment_complete_table_sort";
            app.sortData.table_id = "assignment_complete_table";
        } else if ($(this).hasClass('assignment_new')) {
            app.sortData.action = "new_assignment_table_sort";
            app.sortData.table_id = "new_assignment_table";
        } else if ($(this).hasClass('assignment_delete')) {
            app.sortData.action = "assignment_delete_table_sort";
            app.sortData.table_id = "assignment_delete_table";
        }

        app.getSortTable();

    }, 300); // ✅ debounce delay
});

/* ================= API CALL ================= */
app.getSortTable = function () {

    const formData = {
        searchText: app.sortData.searchText,
        sortorder: app.sortData.order,
        sortby: app.sortData.column_name,
        action: app.sortData.action
    };

    $.ajax({
        url: app.location + "sort.php",
        method: "POST",
        dataType: "html",
        data: { formData },

        success: function (data) {
            $('#' + app.sortData.table_id).html(data);
        },

        error: function (jqXHR, textStatus, errorThrown) {
            console.error("Sort API Error:", textStatus, errorThrown);
            alert("Failed to load sorted data");
        }
    });
};

/* ================= DEFAULT SELECTION ================= */
app.getData = function () {

    const items = $('ul.list-group > li.done');

    if (items.length > 0) {
        items.first().find('a').trigger('click');
        items.first().addClass('active');
    }
};

/* ================= DOCUMENT VIEW ================= */
app.clickToDocId = function () {

    if (!app.document.assignment_no || !app.document.docId) {
        console.warn("Missing document info");
        return;
    }

    $("#row_iframe").attr(
        "src",
        "../docs/" + app.document.assignment_no + "/" + app.document.docId + ".pdf"
    );

    $("#rowId").val(app.document.rowId);
    $("#docId").val(app.document.docId);

    $('ul.list-group > li.active').removeClass('active');

    $('ul')
        .find('[data-doc_id="' + app.document.docId + '"]')
        .closest('li')
        .addClass('active');
};