Nimbin[12]?Web & Tools / dienstplancreator / js/user-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/user-administration.js 9.3 KB · 239 lines raw

logout = () => {
    fetch("/api/logout.php", {
        method: "POST",
        headers: {
        "Content-Type": "application/json; charset=UTF-8"
        }
    }).then(() => {window.location = "login.php"})
}
addNewUser = () => {
    let block = document.querySelector(".Popup-add-new-user")
    let block_hint = block.querySelector(".hint")
    let password = block.querySelector(".password").value
    let password_1 = block.querySelector(".password-confirm").value
    let role = block.querySelector(".select-role").value
    let connected = block.querySelector(".connect").checked
    let name
    let connected_id
    if (role === "admin" && !connected) {
        name = block.querySelector(".name").value
    } else { 
        connected_id = parseFloat(block.querySelector(".name").value)
        name = PERSONS.find(p => p.id === connected_id).name
    }
    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 () => {
        connected = connected_id ? connected_id : "false"
		let response = await fetch("/api/account/addUserDefaultData.php", {
			method: "POST",
			body: JSON.stringify({name: name, password: password, role: role, connected: connected}),
			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")
}
changeConnected = (value) => {
    if (value) {
        renderNameSelect()
    } else {
        let block = document.querySelector(".Popup-add-new-user")
        let block_name_container = block.querySelector(".container-name")
        let block_name = document.createElement("input")
        block_name.classList.add("name")
        block_name_container.innerHTML = ""
        block_name_container.appendChild(block_name)
    }
}
changeRoleSelect = (value) => {
    let block = document.querySelector(".Popup-add-new-user")
    let block_input_connect = block.querySelector(".connect")
    let block_label_connect = block.querySelector(".connect-label")
    if (value === "admin" && PERSONS.length === 0) {
        block.querySelector(".hint-user").innerHTML = ""
        block_input_connect.classList.add("d-none")
        block_label_connect.classList.add("d-none")
        changeConnected(false)
        block.querySelector(".connect").checked = false
        block.querySelector(".confirm").classList.remove("d-none")
    } else if (value === "admin") {
        block.querySelector(".hint-user").innerHTML = ""
        block_input_connect.classList.remove("d-none")
        block_label_connect.classList.remove("d-none")
    } else {
        changeConnected(true)
        block_input_connect.classList.add("d-none")
        block_label_connect.classList.add("d-none")
    }
}
renderNameSelect = () => {
    let block = document.querySelector(".Popup-add-new-user")
    block.querySelector(".hint-user").innerHTML = ""
    block.querySelector(".confirm").classList.remove("d-none")
    if (PERSONS.length === 0) {
        block.querySelector(".hint-user").innerHTML = "Um Benutzer hinzufügen zu können musst du im Schichtplan Personen hinzufügen."
        block.querySelector(".confirm").classList.add("d-none")
    }
    let block_select_container = block.querySelector(".container-name")
    block_select_container.innerHTML = ""
    let block_select_label = document.createElement("label")
    block_select_label.classList.add("chevron-select", "chevron-down")
    let block_select_name = document.createElement("select")
    block_select_name.classList.add("name")
    for (let i=0; i<PERSONS.length; i++) {
        let person = PERSONS[i]
        if (USERS.map(u => u.connected_person).indexOf(person.id) > -1) {continue}
        let block_option = document.createElement("option")
        block_option.setAttribute("value", person.id)
        block_option.innerHTML = person.name
        block_select_name.appendChild(block_option)
    }
    block_select_label.appendChild(block_select_name)
    block_select_container.appendChild(block_select_label)
}
renderAddUser = async () => {
    let block = document.querySelector(".Popup-add-new-user")
    if (PERSONS.length === 0) {
        changeRoleSelect("admin")
        document.querySelector(".Popup-add-new-user .select-role").value = "admin"
    } else {
        renderNameSelect()
    }
    block.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 = "/useradmin.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 = "/useradmin.php"
        } else {
            block.querySelector(".hint-name").innerHTML = data
        }
    })
    
}
getPersons = async () => {
    let response_persons = await fetch("/api/persons_active/getAllActiveIdAndName.php", {
        method: "POST",
        body: JSON.stringify({yearweek: DATE_YEAR_WEEK}),
        headers: { "Content-Type": "application/json; charset=UTF-8" }
    })
    let persons = await response_persons.json()
    return persons.sort((a,b) => a.name.localeCompare(b.name))
}
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
}
renderUsers = async () => {
    PERSONS = await getPersons()
    let ROLES = [{c: "user", n: "Benutzer"}, {c: "admin", n: "Einrichtungs-Administrator"}]
    USERS = await dbGet_users()
    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_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)
    USERS.forEach(user => {
        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_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_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 = ""
    }
}