diff --git a/anwendung/src/components/InputForm.jsx b/anwendung/src/components/InputForm.jsx index 4b71c56..58009aa 100644 --- a/anwendung/src/components/InputForm.jsx +++ b/anwendung/src/components/InputForm.jsx @@ -14,267 +14,194 @@ let modulesDummy = [ ["Studienarbeit", "Bachelor"] ] -let tempSemesterNumber = 0 -let update = false - -let baseMapping = [] +let hasSemesterNumberChanged = false export default function InputForm(p) { - - const [startDate, setStartDate] = useState("0000-00-00") - const [endDate, setEndDate] = useState("0000-00-00") const [courseName, setCourseName] = useState("") + const [startDate, setStartDate] = useState("") + const [endDate, setEndDate] = useState("") const [semesterNumber, setSemesterNumber] = useState(0) const [users, setUsers] = useState([]) - const [modulesSelectorValues, setModulesSelectorValues] = useState(["nothing", "nothing"]) - const [userModulesMapping, setUserModulesMapping] = useState({}) - const [isChecked, setIsChecked] = useState([]) - const [isActivated, setIsActivated] = useState([]) + const [moduleUserMapping, setModuleUserMapping] = useState([]) + const router = useRouter() + useEffect(() => { - setTimeout(() => { - update = false; - baseMapping = [] + hasSemesterNumberChanged = false - let base = baseURL + "/semester/id?sessionid=" + localStorage.getItem("sessionid") + "&id=" + localStorage.getItem("currentsid") - fetch(base).then(r => r.json()).then(j => { + let arr = [] + modulesDummy[0].map(e => { + arr.push({"moduleid": -1, "userid": -1, "activated": 0}) + }) + setModuleUserMapping(arr) - tempSemesterNumber = j.number - setSemesterNumber(j.number) + let url = baseURL + "/users/all?sessionid=" + localStorage.getItem("sessionid") + fetch(url).then(r => r.json()).then(u => { + setUsers(u) + }) - setCourseName(j.name) + let tempSemesterNumber = 0 + if(localStorage.getItem("currentsid") != 0) + { + fetch(baseURL + "/semester/id?sessionid=" + localStorage.getItem("sessionid") + "&id=" + localStorage.getItem("currentsid")).then(r => r.json()).then(semester => { + setCourseName(semester.name) + let startYear = semester.startyear + let endYear = semester.endyear + let start = new Date(startYear, 0, semester.startday) + let end = new Date(endYear, 0, semester.endday) - let tempStartDate = new Date(parseInt(j.startyear), 0, parseInt(j.startday)) - let tempEndDate = new Date(parseInt(j.endyear), 0, parseInt(j.endday)) + setStartDate(startYear + "-" + ((start.getMonth() + 1) < 10 ? "0" + (start.getMonth() + 1) : (start.getMonth() + 1)) + "-" + (start.getDate() < 10 ? "0" + start.getDate() : start.getDate())) + setEndDate(endYear + "-" + ((end.getMonth() + 1) < 10 ? "0" + (end.getMonth() + 1) : (end.getMonth() + 1)) + "-" + (end.getDate() < 10 ? "0" + end.getDate() : end.getDate())) + + tempSemesterNumber = semester.number + setSemesterNumber(semester.number) + + arr = [] + modulesDummy[semester.number].map(e => { + arr.push({"moduleid": -1, "userid": -1, "activated": 0}) + }) - setStartDate(tempStartDate.getFullYear() + "-" + ((tempStartDate.getMonth() + 1).toString().padStart(2, "0")) + "-" + tempStartDate.getDate().toString().padStart(2, "0")) - setEndDate(tempEndDate.getFullYear() + "-" + ((tempEndDate.getMonth() + 1).toString().padStart(2, "0")) + "-" + tempEndDate.getDate().toString().padStart(2, "0")) }).then(() => { - readModules() - update = true - }).catch(() => readModules()) - }, 100) - - - }, []) - - function readModules() { - let usersTemp = [] - - let userURL = baseURL + "/users/all?sessionid=" + localStorage.getItem("sessionid") - fetch(userURL).then(r => r.json()).then(j => { - setUsers(j) - usersTemp = j - let temp = [false, false, false] - let temp2 = [] - for (let i = 0; i < j.length; i++) { - temp.push(false) - temp2.push(false) - } - setIsChecked(temp) - setIsActivated(temp2) - }).then(() => { - let modulesURL = baseURL + "/module/bysemesterid?sessionid=" + localStorage.getItem("sessionid") + "&semesterid=" + localStorage.getItem("currentsid"); - fetch(modulesURL).then(r => r.json()).then(j => { - - setUserModulesMapping(j) - baseMapping = j - - let temp = isChecked.slice() - let temp2 = isActivated.slice() - - for (let i = 0; i < usersTemp.length; i++) { - let currentUser = usersTemp[i] - - let found = false - let foundModuleLast = null - for (let f = 0; f < j.length; f++) { - let currentModule = j[f] - - if (currentModule.userid === currentUser.id) { - found = true - foundModuleLast = currentModule + fetch(baseURL + "/module/bysemesterid?sessionid=" + localStorage.getItem("sessionid") + "&semesterid=" + localStorage.getItem("currentsid")).then(r => r.json()).then(modules => { + console.log(modules) + for(let i = 0; i < modules.length; i++) + { + for(let j = 0; j < modulesDummy[tempSemesterNumber].length; j++) + { + if(modulesDummy[tempSemesterNumber][j] == modules[i].name) + { + arr[j].userid = modules[i].userid + arr[j].moduleid = modules[i].id + arr[j].activated = modules[i].activated + break + } } } - if (found) { - temp[i] = true - - temp2[i] = foundModuleLast.activated === 1 - } - } - - setIsChecked(temp) - setIsActivated(temp2) - }).then(() => { - setModulesSelectorValues(modulesDummy[tempSemesterNumber]) - }) - }) - } - - function onCourseNameChange(e) { - setCourseName(e.target.value) - } - - function onStartDateChange(e) { - setStartDate(e.target.value) - } - - function onEndDateChange(e) { - setEndDate(e.target.value) - } - - function onSemesterNumberChange(e) { - setSemesterNumber(e.target.value) - setModulesSelectorValues(modulesDummy[e.target.value]) - } - - function isOptionSelected(e, userid) { - let found = false; - - for (let i = 0; i < userModulesMapping.length; i++) { - let current = userModulesMapping[i] - if (current.name === e && current.userid === userid) { - found = true; - } - } - - - return found; - } - - function onCheckedChange(e, index) { - let temp = isChecked.slice() - temp[index] = e.target.checked - setIsChecked(temp) - - if (!e.target.checked) { - let temp = [] - let currentUser = users[index] - for (let j = 0; j < userModulesMapping.length; j++) { - if (userModulesMapping[j].userid !== currentUser.id) { - temp.push(userModulesMapping[j]) - } - } - - setUserModulesMapping(temp) - } - } - - function onActivatedChange(e, index) { - - let temp = isActivated.slice() - temp[index] = e.target.checked - setIsActivated(temp) - - let userid = users[index].id - - for (let j = 0; j < userModulesMapping.length; j++) { - if (userModulesMapping[j].userid === userid) { - userModulesMapping[j].activated = e.target.checked ? 1 : 0 - } - } - } - - function onModuleSelectionChange(e, index) { - let userid = users[index].id - - let newMapping = [] - let oldNamesIds = new Map() - - for (let j = 0; j < userModulesMapping.length; j++) { - let currentModuleMapping = userModulesMapping[j] - if (currentModuleMapping.userid != userid) { - newMapping.push(currentModuleMapping) - } else { - oldNamesIds.set(currentModuleMapping.name, currentModuleMapping.id) - } - } - - let found = false - for (let i = 0; i < e.target.options.length; i++) { - - let currentOption = e.target.options[i] - if (currentOption.selected) { - found = true - - newMapping.push({ - "id": oldNamesIds.has(currentOption.value) ? oldNamesIds.get(currentOption.value) : -1, - "userid": userid, - "semesterid": -1, - "name": currentOption.value, - "activated": isActivated[index] ? 1 : 0 + setModuleUserMapping(arr) }) - } + }) } + }, []) - let temp = isChecked.slice() - temp[index] = found - setIsChecked(temp) - - setUserModulesMapping(newMapping) - } - - function onButtonAbort() { + function onButtonAbort(e) { router.back() } - function onButtonSave() { - let tempDateStart = new Date(parseInt(startDate.split("-")[0]), parseInt(startDate.split("-")[1]) - 1, parseInt(startDate.split("-")[2])) - let tempDateEnd = new Date(parseInt(endDate.split("-")[0]), parseInt(endDate.split("-")[1]) - 1, parseInt(endDate.split("-")[2])) + function onButtonSave(e) { - let startDayInYear = Math.round((tempDateStart - new Date(tempDateStart.getFullYear(), 0, 0)) / (1000 * 60 * 60 * 24)) - let endDayInYear = Math.round((tempDateEnd - new Date(tempDateEnd.getFullYear(), 0, 0)) / (1000 * 60 * 60 * 24)) + let semesterid = localStorage.getItem("currentsid") + let startYear = parseInt(startDate.split("-")[0]) + let endYear = parseInt(endDate.split("-")[0]) - let semesterJson = { - "id": update ? localStorage.getItem("currentsid") : 0, - "startday": startDayInYear, - "endday": endDayInYear, - "name": courseName, - "startyear": tempDateStart.getFullYear(), - "endyear": tempDateEnd.getFullYear(), - "number": semesterNumber + let start = new Date(startYear, parseInt(startDate.split("-")[1]) - 1, parseInt(startDate.split("-")[2])) + let end = new Date(endYear, parseInt(endDate.split("-")[1]) - 1, parseInt(endDate.split("-")[2])) + + let startDayInYear = Math.round((start - new Date(startYear, 0, 0)) / (1000 * 60 * 60 * 24)) + let endDayInYear = Math.round((end - new Date(endYear, 0, 0)) / (1000 * 60 * 60 * 24)) + + if(semesterid == 0) + { + fetch(baseURL + "/semester?sessionid=" + localStorage.getItem("sessionid"), { + method: "POST", + headers: {"Content-Type": "application/json"}, + body: JSON.stringify({ + "id": 0, + "startday": startDayInYear, + "endday": endDayInYear, + "name": courseName, + "startyear": startYear, + "endyear": endYear, + "number": semesterNumber + }) + }).then(r => r.json()).then(semester => {semesterid = semester.id}).then(() => modulesInBackend(semesterid)) } + else + { + fetch(baseURL + "/semester?sessionid=" + localStorage.getItem("sessionid"), { + method: "PUT", + headers: {"Content-Type": "application/json"}, + body: JSON.stringify({ + "id": semesterid, + "startday": startDayInYear, + "endday": endDayInYear, + "name": courseName, + "startyear": startYear, + "endyear": endYear, + "number": semesterNumber + }) + }).then(() => modulesInBackend(semesterid)) + } + } - fetch(baseURL + "/semester?sessionid=" + localStorage.getItem("sessionid"), { - method: update ? "PUT" : "POST", - headers: {"Content-Type": "application/json"}, - body: JSON.stringify(semesterJson) - }).then(r => r.json()).then(async sem => { - let semesterID = sem.id - - for (let i = 0; i < baseMapping.length; i++) { - let found = false - for (let j = 0; j < userModulesMapping.length; j++) { - if (baseMapping[i].name === userModulesMapping[j].name) { - found = true + function modulesInBackend(semesterid) + { + if (hasSemesterNumberChanged) { + fetch(baseURL + "/module/bysemesterid?sessionid=" + localStorage.getItem("sessionid") + "&id=" + localStorage.getItem("currentsid"), { + method: "DELETE" + }).then(() => { + for (let i = 0; i < moduleUserMapping.length; i++) { + let current = moduleUserMapping[i] + if (current.userid != -1) { + if (current.moduleid == -1) { + fetch(baseURL + "/module?sessionid=" + localStorage.getItem("sessionid"), { + method: "POST", + headers: {"Content-Type": "application/json"}, + body: JSON.stringify({ + "id": 0, + "userid": current.userid, + "semesterid": semesterid, + "name": modulesDummy[semesterNumber][i], + "activated": current.activated + }) + }) + } } } + }) + } else { - if (!found) { - fetch(baseURL + "/module?sessionid=" + localStorage.getItem("sessionid") + "&id=" + baseMapping[i].id, { - method: "DELETE" - }) + for (let i = 0; i < moduleUserMapping.length; i++) { + let current = moduleUserMapping[i] + if (current.userid != -1) { + if (current.moduleid == -1) { + fetch(baseURL + "/module?sessionid=" + localStorage.getItem("sessionid"), { + method: "POST", + headers: {"Content-Type": "application/json"}, + body: JSON.stringify({ + "id": 0, + "userid": current.userid, + "semesterid": semesterid, + "name": modulesDummy[semesterNumber][i], + "activated": current.activated + }) + }) + } else { + fetch(baseURL + "/module?sessionid=" + localStorage.getItem("sessionid"), { + method: "PUT", + headers: {"Content-Type": "application/json"}, + body: JSON.stringify({ + "id": current.moduleid, + "userid": current.userid, + "semesterid": 0, + "name": "", + "activated": current.activated + }) + }) + } + } else { + if (current.moduleid != -1) { + fetch(baseURL + "/module?sessionid=" + localStorage.getItem("sessionid") + "&id=" + current.moduleid, { + method: "DELETE" + }) + } } } - - for (let i = 0; i < userModulesMapping.length; i++) { - - userModulesMapping[i].semesterid = semesterID - setTimeout(() => { - fetch(baseURL + "/module?sessionid=" + localStorage.getItem("sessionid"), { - method: userModulesMapping[i].id === -1 ? "POST" : "PUT", - headers: {"Content-Type": "application/json"}, - body: JSON.stringify(userModulesMapping[i]) - }) - }, i * 200) - - } - }) + } router.back() } @@ -285,25 +212,40 @@ export default function InputForm(p) {

Kursname

- onCourseNameChange(e)} value={courseName}/> + { + setCourseName(e.target.value) + }} value={courseName}/>

Theorie Anfang

Theorie Ende

- = endDate) ? "#E44747" : "white" - }} - onChange={e => onStartDateChange(e)} value={startDate}/> - = endDate) ? "#E44747" : "white" - }} - onChange={e => onEndDateChange(e)} value={endDate}/> + = endDate) ? "#E44747" : "white" + }} value={startDate} onChange={e => { + setStartDate(e.target.value) + }}/> + = endDate) ? "#E44747" : "white" + }} value={endDate} onChange={e => { + setEndDate(e.target.value) + }}/>

Semester Wählen

onCheckedChange(e, index)}/> + { + let arr = moduleUserMapping.slice() + arr[index].activated = e.target.checked ? 1 : 0 + setModuleUserMapping(arr) + } + }> - onActivatedChange(e, index)}/> +

{module}

+ - {user.firstName + " " + user.lastName} - - - { + + let arr = moduleUserMapping.slice() + arr[index].userid = e.target.value + setModuleUserMapping(arr) + console.log(moduleUserMapping) + }} + value={index < moduleUserMapping.length && moduleUserMapping[index].userid}> + + {users.map(user => ( + ))} @@ -360,7 +310,10 @@ export default function InputForm(p) { gap: 10 }}>
diff --git a/backend/.idea/misc.xml b/backend/.idea/misc.xml index e1c7304..f89b933 100644 --- a/backend/.idea/misc.xml +++ b/backend/.idea/misc.xml @@ -8,5 +8,5 @@ - + \ No newline at end of file diff --git a/backend/src/main/java/com/example/backend/anwprj/Database/DataBaseHandler.java b/backend/src/main/java/com/example/backend/anwprj/Database/DataBaseHandler.java index 140d75d..67a4b01 100644 --- a/backend/src/main/java/com/example/backend/anwprj/Database/DataBaseHandler.java +++ b/backend/src/main/java/com/example/backend/anwprj/Database/DataBaseHandler.java @@ -360,7 +360,7 @@ public class DataBaseHandler { try { - st.executeUpdate("update modules set activated=" + m.getActivated() + ", semesterid=" + m.getsemesterid() + ", name='" + m.getName() + "' where id=" + m.getid()); + st.executeUpdate("update modules set activated=" + m.getActivated() + ", userid=" + m.getUserid() + " where id=" + m.getid()); return getModule(m.getid()); @@ -382,6 +382,16 @@ public class DataBaseHandler { } } + public boolean deleteModuleBySemesterID(int id) { + try { + st.executeUpdate("delete from modules where semesterid=" + id); + st.executeUpdate("delete from entries where semesterid=" + id); + return true; + } catch (Exception ex) { + return false; + } + } + public boolean deleteModule(int id) { try { st.executeUpdate("delete from modules where id=" + id); diff --git a/backend/src/main/java/com/example/backend/anwprj/controller/ModuleController.java b/backend/src/main/java/com/example/backend/anwprj/controller/ModuleController.java index 277dcc7..61e41c4 100644 --- a/backend/src/main/java/com/example/backend/anwprj/controller/ModuleController.java +++ b/backend/src/main/java/com/example/backend/anwprj/controller/ModuleController.java @@ -169,6 +169,18 @@ public class ModuleController DELETE Delete A Module */ + @CrossOrigin + @DeleteMapping("/module/bysemesterid") + public void deleteModuleBySemesterID(@RequestParam(name = "sessionid") String sessionid, @RequestParam(name="id") int id) + { + User u = UserSessionIDHandler.getUserBySessionID(sessionid); + if (u != null && u.getPermissions() == UserPermissions.admin.getValue()) + { + db.deleteModuleBySemesterID(id); + } + + } + @CrossOrigin @DeleteMapping("/module") public void deleteModule(@RequestParam(name = "sessionid") String sessionid, @RequestParam(name="id") int id) diff --git a/backend/target/classes/com/example/backend/anwprj/Database/DataBaseHandler.class b/backend/target/classes/com/example/backend/anwprj/Database/DataBaseHandler.class index d98ab5c..360eca7 100644 Binary files a/backend/target/classes/com/example/backend/anwprj/Database/DataBaseHandler.class and b/backend/target/classes/com/example/backend/anwprj/Database/DataBaseHandler.class differ diff --git a/backend/target/classes/com/example/backend/anwprj/controller/ModuleController.class b/backend/target/classes/com/example/backend/anwprj/controller/ModuleController.class index 312e161..a755367 100644 Binary files a/backend/target/classes/com/example/backend/anwprj/controller/ModuleController.class and b/backend/target/classes/com/example/backend/anwprj/controller/ModuleController.class differ