summaryrefslogblamecommitdiffstats
path: root/assets/js/teachers.js
blob: da0a62de2be69e0fc5d321b37cc15e66f5086bb1 (plain) (tree)
1
2
3
4
5
                                                                 



                                                         










                                                         














                                                         
                                                                




                                                           

                                                                                 











                                        
                              

                          


                               
                                






















                                                                                                                                                             





























                                                           












                                                                                
 

                                                              





















                                                               
   
// const API_ENDPOINT = "https://gimb.tk/test.php"; // deprecated
// const API_ENDPOINT = "http://localhost:5000/test.php";

var teachers = null;

// Set loading bar visibility
function setLoading(state) {
    if (state) {
        $("#loading-bar").removeClass("hidden");
    } else {
        $("#loading-bar").addClass("hidden");
    }
}

// Function, responsible for fetching and displaying data
async function loadTeachers(force_refresh = false) {
    setLoading(true);
    // Load required data
    let promises_to_run = [
        localforage.getItem("username").then((value) => {
            username = value;
        }),
        localforage.getItem("password").then((value) => {
            password = value;
        }),
        localforage.getItem("teachers").then((value) => {
            teachers = value;
        })
    ];
    await Promise.all(promises_to_run);
    // If we don't have a list of teachers, query it
    if (teachers === null || teachers === [] || force_refresh) {
        try {
            let gsecInstance = new gsec();
            await gsecInstance.login(username, password);
            gsecInstance.fetchTeachers().then( (value) => {
                teachers = value;
                localforage.setItem("teachers", value).then((saved_teachers) => {
                    displayData(saved_teachers);
                    setLoading(false);
                });
                setLoading(false);
            }).catch( (err) => {
                gsecErrorHandlerUI(err);
                setLoading(false);
            });
        } catch (err) {
            gsecErrorHandlerUI(err);
            setLoading(false);
        }
    } else {
        displayData(teachers);
        setLoading(false);
    }
}

// Function for displaying data
function displayData(teachers) {
    for(const teacher of Object.keys(teachers)) {
        // Create row
        let row = document.createElement("tr");
        // Create cell 1
        let cell_name = document.createElement("td");
        let cell_name_text = document.createTextNode(teacher);
        // Create cell 2
        let cell_subject = document.createElement("td");
        // Array ([0]) is useless, since every teacher is duplicated (for each subject) // <-- ne velja za gsec.js, velja pa za gimsisextclient, PHP varianta
        var subjectsString = "";
        for(const subject of Object.keys(teachers[teacher]["subjects"])) {
            subjectsString += subject;
            subjectsString += ", ";
        }
        let cell_subject_text = document.createTextNode(subjectsString.slice(0, -2)); // slajsnemo zadnji ", "
        cell_name.appendChild(cell_name_text);
        row.appendChild(cell_name);
        cell_subject.appendChild(cell_subject_text);
        row.appendChild(cell_subject);
        $("#teachers-body").append(row);
    };
    // Refresh handlers
    refreshTableClickHandlers();
}

async function checkLogin() {
    localforage.getItem("logged_in").then((value) => {
        // This code runs once the value has been loaded
        // from the offline store.
        if (value !== true) {
            window.location.replace("/index.html");
        }
    }).catch((err) => {
        // This code runs if there were any errors
        console.log(err);
    });
}

function clearTable() {
    const table = document.getElementById("teachers-body");
    while (table.firstChild) {
        table.removeChild(table.firstChild);
    }
}

function refreshTableClickHandlers() {
    // Arrow function doesn't work apparently?
    $('#teachers-body').find("tr").click(function () {
        teacherInfo($(this).index());
    });
}

function teacherInfo(teacher_id) {
    let name = Object.keys(teachers)[teacher_id];
    let teacher_object = teachers[name];
    var subjectsString = "";
    for(const subject of Object.keys(teacher_object["subjects"])) {
        subjectsString += subject;
        subjectsString += ", ";
    }
    let subject = subjectsString.slice(0, -2);
    let office_day = dateString.day(teacher_object["tpMeetings"]["day"]);
    let office_lesson = teacher_object["tpMeetings"]["period"];
    $("#teacher-name").text(name);
    $("#teacher-subject").text(`${S("schoolSubject")}: ${subject}`);
    $("#teacher-office").text(`${office_day}, ${S("lesson")} ${office_lesson}`);

    const modal = document.querySelectorAll(".side-modal")[0];
    M.Sidenav.getInstance(modal).open();
}

document.addEventListener("DOMContentLoaded", () => {
    checkLogin();
    loadTeachers();

    // Setup refresh handler
    $("#refresh-icon").click(() => {
        clearTable();
        loadTeachers(true);
    });

    // Set row onClick functions
    refreshTableClickHandlers();

    // Setup side menu
    const menus = document.querySelectorAll('.side-menu');
    M.Sidenav.init(menus, { edge: 'right', draggable: true });

    // Setup side modal
    const modals = document.querySelectorAll('.side-modal');
    M.Sidenav.init(modals, { edge: 'left', draggable: false });
});