Nimbin[12]?Web & Tools / dienstplancreator / js/administration.js

dienstplancreator git · main

Dienstplan (roster) creator, PHP/JS web app

php javascript roster web · first commit 2023-07-13 · last commit 2023-09-14 (3 years ago) · synced 3 days ago · upstream: github.com/nimbin2/dienstplancreator

JavaScript 50% PHP 40.5% CSS 8.5%
git clone https://git.christianimmanuel.de/web-tools/dienstplancreator.gitwget https://git.christianimmanuel.de/web-tools/dienstplancreator/archive/dienstplancreator.tar.gz
js/administration.js 12.2 KB · 296 lines raw

logout = () => {
    fetch("/api/logout.php", {
        method: "POST",
        headers: {
        "Content-Type": "application/json; charset=UTF-8"
        }
    }).then(() => {window.location = "login.php"})
}
closePopup = () => {
    let block = document.querySelector(".Popup-request-remove-institution")
    block.classList.remove("active")
    block.querySelector(".password").value = ""
    document.querySelector(".Popup-request-remove-institution .hint").innerHTML = ""
}
addNewInstitution = () => {
    let block_name = document.querySelector(".Popup-add-new .name")
    let name = block_name.value
    if (name.length === 0) {return}
    dbAdd_institution(name, DATE_YEAR_WEEK).then(() => {
        block_name.value = ""
        renderInstitutions()
        document.querySelector(".Popup-add-new").classList.remove("active")
    })
}
removeInstitution = async (id) => {
    let check = await dbRemove_institution(id, document.querySelector(".Popup-request-remove-institution .password").value)
    if (check) {
        closePopup()
        renderInstitutions()
        renderUsers()
    } else {
        document.querySelector(".Popup-request-remove-institution .hint").innerHTML = "Passwort stimmt nicht überein."
    }
}
requestRemoveInstitution = (id, name) => {
    let block = document.querySelector(".Popup-request-remove-institution")
    block.classList.add("active")
    let block_name = block.querySelector(".name")
    block_name.innerHTML = name
    let password = block.querySelector(".password").value
    let block_confirm = block.querySelector(".confirm")
    block_confirm.setAttribute("onClick", `removeInstitution(${id})`)
}
visiteInstitution = async (data_id, as) => {
    dbSwitchAs_institution(data_id, as).then(() => {window.location = "/";})
}
renderInstitutions = async () => {
    let institutions = await dbGet_institutions()
    let block = document.querySelector("#Institutions")
    block.innerHTML = ""
    institutions.forEach(institution => {
        let block_name = document.createElement("div")
        block_name.classList.add("name")
        block_name.innerHTML = institution.name
        block.appendChild(block_name)
        /*
        let block_visite_container = document.createElement("div")
        block_visite_container.classList.add("container-visite")
        let block_visite = document.createElement("button")
        block_visite.innerHTML = "Anschauen"
        block_visite.setAttribute("onClick", `visiteInstitution(${institution.id}, "visitor")`)
        block_visite_container.appendChild(block_visite)
        let block_edit = document.createElement("button")
        block_edit.innerHTML = "Bearbeiten"
        block_edit.setAttribute("onClick", `visiteInstitution(${institution.id}, "editor")`)
        block_visite_container.appendChild(block_edit)
        block.appendChild(block_visite_container)
        */
        let block_remove_container = document.createElement("div")
        block_remove_container.classList.add("container-remove")
        let block_remove = document.createElement("button")
        block_remove.setAttribute("onClick", `requestRemoveInstitution(${institution.id}, "${institution.name}")`)
        block_remove.innerHTML = "Löschen"
        block_remove_container.appendChild(block_remove)
        block.appendChild(block_remove_container)
    })
    let block_add = document.createElement("button")
    block_add.setAttribute("onClick", `document.querySelector(".Popup-add-new").classList.add("active")`)
    block_add.setAttribute("id", "Institution-add-button")
    block_add.innerHTML = "Hinzufügen"
    block.appendChild(block_add)
}
changeSelectRole = (role) => {
    if (role === "superadmin") {
        document.querySelector(".Popup-container .label-institution").classList.add("d-none")
        document.querySelector(".Popup-container .label-select-institution").classList.add("d-none")
    } else {
        document.querySelector(".Popup-container .label-institution").classList.remove("d-none")
        document.querySelector(".Popup-container .label-select-institution").classList.remove("d-none")
    }
}
addNewUser = () => {
    let block = document.querySelector(".Popup-add-new-user")
    let block_hint = block.querySelector(".hint")
    let name = block.querySelector(".name").value
    let password = block.querySelector(".password").value
    let password_1 = block.querySelector(".password-confirm").value
    let institution = parseFloat(block.querySelector(".select-institution").value)
    let role = block.querySelector(".select-role").value
    if (password !== password_1) {
        block_hint.innerHTML = "Passwörter stimmen nicht überein."
        return
    } 
    if (password.length < 8) {
        block_hint.innerHTML = "Das passwort sollte mindestens 8 stellen haben."
        return
    }
    addU = async () => {
		let response = await fetch("/api/account/addUser.php", {
			method: "POST",
			body: JSON.stringify({name: name, password: password, role: role, data_id: institution}),
			headers: { "Content-Type": "application/json; charset=UTF-8" }
		})  
		let user_id = await response.json()
		if (isNaN(user_id)) {
			block_hint.innerHTML = user_id
		} else {
			renderUsers()
			closeAddUser()
		}
    }
	addU()
}
closeAddUser = () => {
    let block = document.querySelector(".Popup-add-new-user")
    block.querySelector(".hint").innerHTML = ""
    block.querySelector(".name").value = ""
    block.querySelector(".password").value = ""
    block.querySelector(".password-confirm").value = ""
	block.classList.remove("active")
}
renderAddUser = async () => {
    let block = document.querySelector(".Popup-add-new-user")
    let block_select_institutions = block.querySelector(".select-institution")
    block_select_institutions.innerHTML = ""
    let institutions = await dbGet_institutions()
    institutions.forEach((institution, iid) => {
        let block_option = document.createElement("option")
        block_option.innerHTML = institution.name
        block_option.value = institution.id
        if (iid === 0) {
            block_option.setAttribute("selected", "selected")
        }
        block_select_institutions.appendChild(block_option)
    })

    document.querySelector(".Popup-add-new-user").classList.add("active")
}
changePassword = () => {
    let block = document.querySelector(".Popup-edit-user")
    let user_id = parseFloat(block.getAttribute("user_id"))
    let pw_1 = block.querySelector(".password_1").value
    let pw_2 = block.querySelector(".password_2").value
    if (pw_1 !== pw_2) {
        block.querySelector(".hint-password").innerHTML = "Die Passwörter stimmen nicht überein."
        return
    }   
    fetch("/api/account/updatePassword.php", {
        method: "POST",
        body: JSON.stringify({id: user_id, password: pw_1}),
        headers: {
        "Content-Type": "application/json; charset=UTF-8"
        }
    }).then((response) => response.json()).then(data => {
        if (data === user_id) {
            window.location = "/admin.php"
        } else {
            block.querySelector(".hint-password").innerHTML = data
        }
    })  
    
}
changeName = () => {
    let block = document.querySelector(".Popup-edit-user")
    let user_id = parseFloat(block.getAttribute("user_id"))
    let user_name = block.querySelector(".container-name .name").value
    fetch("/api/account/updateName.php", {
        method: "POST",
        body: JSON.stringify({id: user_id, name: user_name}),
        headers: {
        "Content-Type": "application/json; charset=UTF-8"
        }
    }).then((response) => response.json()).then(data => {
        if (data === user_name) {
            window.location = "/admin.php"
        } else {
            block.querySelector(".hint-name").innerHTML = data
        }
    })  
    
}
renderEditUser = (user_id, user_name) => {
    let block = document.querySelector(".Popup-edit-user")
    let block_title_name = block.querySelector("h2.name")
    block_title_name.innerHTML = user_name
    block.classList.add("active")
    block.setAttribute("user_id", user_id)
    block.querySelector("input.name").value = user_name
}
removeUser = (user_id, data_id) => {
    let block = document.querySelector(".Popup-remove-user")
    let password = block.querySelector(".password").value
    fetch("/api/account/removeUser.php", {
        method: "POST",
        body: JSON.stringify({user_id: user_id, data_id: data_id, password: password}),
        headers: {
        "Content-Type": "application/json; charset=UTF-8"
        }
    }).then((response) => response.json()).then(data => {
        if (data === user_id) {
            window.location = "/admin.php"
        } else {
            block.querySelector(".hint").innerHTML = data
        }
    })  
}
renderRemoveUser = (user_id, user_name, data_id) => {
    let block = document.querySelector(".Popup-remove-user")
    block.setAttribute("user_id", user_id)
    block.classList.add("active")
    let block_name = block.querySelector(".name")
    block_name.innerHTML = user_name
    let block_confirm = block.querySelector(".confirm")
    block_confirm.setAttribute("onClick", `removeUser(${user_id}, ${data_id})`)
}
renderUsers = async () => {
    let ROLES = [{c: "user", n: "Benutzer"}, {c: "admin", n: "Einrichtungs-Administrator"}, {c: "superadmin", n: "Super-Administrator"}]
    let users = await dbGet_users()
    let institutions = await dbGet_institutions()
    let block = document.querySelector("#Users")
    block.innerHTML = ""
    let block_name_title = document.createElement("div")
    block_name_title.innerHTML = "Name"
    block_name_title.classList.add("title")
    block.appendChild(block_name_title)
    let block_role_title = document.createElement("div")
    block_role_title.innerHTML = "Rolle"
    block_role_title.classList.add("title")
    block.appendChild(block_role_title)
    let block_institution_title = document.createElement("div")
    block_institution_title.innerHTML = "Einrichtung"
    block_institution_title.classList.add("title")
    block.appendChild(block_institution_title)
    let block_created_title = document.createElement("div")
    block_created_title.innerHTML = "Erstellt"
    block_created_title.classList.add("title")
    block.appendChild(block_created_title)
    let block_edit_title = document.createElement("div")
    block_edit_title.classList.add("title")
    block.appendChild(block_edit_title)
    let block_remove_title = document.createElement("div")
    block_remove_title.classList.add("title")
    block.appendChild(block_remove_title)
    for (let u=0; u<users.length; u++) {
        let user = users[u]
        if (user.role === "user") { continue }
        let block_name = document.createElement("div")
        block_name.innerHTML = user.name
        block.appendChild(block_name)
        let block_role = document.createElement("div")
        block_role.innerHTML = ROLES.find(r => r.c === user.role).n
        block.appendChild(block_role)
        let block_institution = document.createElement("div")
        block_institution.innerHTML = user.role === "superadmin" ? "" : institutions?.find(i => i.id === user.data_id)?.name
        block.appendChild(block_institution)
        let block_created = document.createElement("div")
        block_created.innerHTML = `${user.created_at.substring(8, 10)}.${user.created_at.substring(5, 7)}.${user.created_at.substring(0, 4)}`
        block.appendChild(block_created)
        let block_edit = document.createElement("button")
        block_edit.innerHTML = "Bearbeiten"
        block_edit.setAttribute("onClick", `renderEditUser(${user.id}, "${user.name}")`)
        block.appendChild(block_edit)
        let block_remove = document.createElement("button")
        block_remove.innerHTML = "Löschen"
        block_remove.setAttribute("onClick", `renderRemoveUser(${user.id}, "${user.name}", ${user.data_id})`)
        block.appendChild(block_remove)
    }
    let block_add = document.createElement("button")
    block_add.setAttribute("onClick", `renderAddUser()`)
    block_add.setAttribute("id", "Users-add-button")
    block_add.innerHTML = "Hinzufügen"
    block.appendChild(block_add)

}

closePopup = () => {
    let popups = document.querySelectorAll(".Popup.active")
    for (let i=0; i<popups.length; i++) {
        popups[i].classList.remove("active")
    }
    let clear_inputs = document.querySelectorAll(".Popup input")
    for (i=0; i<clear_inputs.length; i++) {
        clear_inputs[i].value = ""
    }
}