Alle, von mir zu bearbeitenden, komplizierten und relevanten Codeteile wurden ausführlich beschrieben
This commit is contained in:
AliGitGut
2023-07-08 14:54:50 +02:00
parent 3382d732a9
commit 65a399693e
7 changed files with 104 additions and 72 deletions
+9 -2
View File
@@ -6,8 +6,11 @@
<component name="ChangeListManager">
<list default="true" id="744e9299-0ce3-415c-8733-c935bf920887" name="Changes" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/anwendung/src/components/StatusBar.jsx" beforeDir="false" afterPath="$PROJECT_DIR$/anwendung/src/components/StatusBar.jsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/anwendung/src/styles/globals.css" beforeDir="false" afterPath="$PROJECT_DIR$/anwendung/src/styles/globals.css" afterDir="false" />
<change beforePath="$PROJECT_DIR$/anwendung/src/components/CalendarSideBar.jsx" beforeDir="false" afterPath="$PROJECT_DIR$/anwendung/src/components/CalendarSideBar.jsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/anwendung/src/components/DateElement.jsx" beforeDir="false" afterPath="$PROJECT_DIR$/anwendung/src/components/DateElement.jsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/anwendung/src/components/WeekSelector.jsx" beforeDir="false" afterPath="$PROJECT_DIR$/anwendung/src/components/WeekSelector.jsx" afterDir="false" />
<change beforePath="$PROJECT_DIR$/anwendung/src/pages/semesteroverview.js" beforeDir="false" afterPath="$PROJECT_DIR$/anwendung/src/pages/semesteroverview.js" afterDir="false" />
<change beforePath="$PROJECT_DIR$/anwendung/src/pages/semesteroverviewLecturer.js" beforeDir="false" afterPath="$PROJECT_DIR$/anwendung/src/pages/semesteroverviewLecturer.js" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -154,6 +157,10 @@
<workItem from="1687349584578" duration="477000" />
<workItem from="1687354510081" duration="453000" />
<workItem from="1687354999964" duration="291000" />
<workItem from="1687431213516" duration="596000" />
<workItem from="1688661149524" duration="602000" />
<workItem from="1688661766941" duration="1680000" />
<workItem from="1688812359996" duration="6843000" />
</task>
<servers />
</component>
+23 -23
View File
@@ -14,9 +14,9 @@ export default function BasicDateCalendar(p) {
const ref = useRef(null)
function getBackMonthColor(monthIndex)
function getBackMonthColor(monthIndex) //Farbliche Kennzeichnung des Monats in dem man aktuell Plant
{
let date = new Date(parseInt(startParts[2]), parseInt(startParts[1]) + monthIndex - 1, 1)
let date = new Date(parseInt(startParts[2]), parseInt(startParts[1]) + monthIndex - 1, 1) //Datums Objekt des Monats in dem man sich aktuell befindet
if (date.getFullYear() === p.highlightYear && date.getMonth() === p.highlightMonth)
{
if(lastMonth !== p.highlightMonth)
@@ -35,8 +35,8 @@ export default function BasicDateCalendar(p) {
result = []
calculatedDay = []
startDate = new Date(p.startyear, 0 ,p.startday)
let endDate = new Date(p.endyear, 0 , p.endday)
startDate = new Date(p.startyear, 0 ,p.startday) //Startdatum des Theoriesemesters
let endDate = new Date(p.endyear, 0 , p.endday) //Enddatum des Theoriesemesters
let startString = startDate.getDate() + "." + (startDate.getMonth() + 1) + "." + p.startyear
let endString = endDate.getDate() + "." + (endDate.getMonth() + 1) + "." + p.endyear
generateCalendar(startString, endString)
@@ -45,10 +45,10 @@ export default function BasicDateCalendar(p) {
return (
<div className={"Allround"} ref={ref}>
<div className={"Down"}>
{result.map((monthResult, index) => (
{result.map((monthResult, index) => ( //map durch alle Monate aus dem Array monthResult
<div className={"A box-shadow"} onClick={() => p.onMonthClick(
(parseInt(startParts[1]) + index),
startParts
startParts //gibt zurück auf welchen Monat geklickt wurde, wodurch direkt in den jeweiligen Monat gewechselt werden kann
)} >
<p style={{
textAlign : "center",
@@ -63,7 +63,7 @@ export default function BasicDateCalendar(p) {
pointerEvents: "none"
}}>
{weekdays.map((weekday) => (
<p key={weekday} style={{
<p key={weekday} style={{ //generiere einmal alle Wochentage (Montag,...,Sonntag)
pointerEvents: "none"
}}>{weekday}</p>
))}
@@ -82,8 +82,7 @@ export default function BasicDateCalendar(p) {
}
function getMonthName(monthIndex) {
function getMonthName(monthIndex) { //holt die relevanten Monatsnamen aus dem 2D Array
if (startParts[1] - 1 + monthIndex < 12) {
return months[startParts[1] - 1 + monthIndex][0];
} else {
@@ -94,31 +93,31 @@ function getMonthName(monthIndex) {
function generateCalendar(start, ende)
{
splitter(start, ende)
if (startParts[2] < endParts[2])
if (startParts[2] < endParts[2]) //Abfrage für den Fall, dass ein Theoriesemester Jahresübergreifend ist
{
for (let i = startParts[1] - 1; i <= 11; i++)
for (let i = startParts[1] - 1; i <= 11; i++) //Durchlaufe alle Monate bis zum Jahresende
{
let monthResult = [];
for (let j = 1; j <= days[i]; j++)
for (let j = 1; j <= days[i]; j++) //durchlaufe alle Tage des Monats in dem wir uns befinden
{
if (
new Date(startParts[2], i, j) >= new Date(startParts[2], startParts[1] - 1, startParts[0]) &&
new Date(startParts[2], i, j) <= new Date(startParts[2], 11, 31)
)
) //überprüft ob der Tag noch in der angegebenen Zeitspanne des Theoriesemsters liegt
{
monthResult.push(j);
calculateDay(startParts[2], i, j)
}
}
result.push(monthResult);
if (i == 11)
if (i == 11) //erstes Jahr ist fertig abgebildet
{
for (let h = 0; h <= endParts[1] - 1; h++)
for (let h = 0; h <= endParts[1] - 1; h++) //laufe vom Anfang des Jahres bis zum angegebenen Ende des Theoriesemesters
{
let monthResultNewYear = [];
for (let g = 1; g <= days[h]; g++)
for (let g = 1; g <= days[h]; g++) //durchlaufe alle Tage des Monats in dem wir uns befinden
{
if (new Date(endParts[2], h, g) <= new Date(endParts[2], endParts[1] - 1, endParts[0]))
if (new Date(endParts[2], h, g) <= new Date(endParts[2], endParts[1] - 1, endParts[0])) //überprüft ob der Tag noch in der angegebenen Zeitspanne des Theoriesemsters liegt
{
monthResultNewYear.push(g);
calculateDay(endParts[2], h, g)
@@ -128,17 +127,17 @@ function generateCalendar(start, ende)
}
}
}
} else
} else //Normalfall das ein Anfang und Ende eines Theoriesemester im gleichen Jahr liegt
{
for (let i = startParts[1] - 1; i <= endParts[1] - 1; i++)
for (let i = startParts[1] - 1; i <= endParts[1] - 1; i++) //durchlaufe alle Monate in der angegebenen Zeitspanne
{
let monthResult = [];
for (let j = 1; j <= days[i]; j++)
for (let j = 1; j <= days[i]; j++) //durchlaufe alle Tage des Monats in dem wir uns befinden
{
if (
new Date(startParts[2], i, j) >= new Date(startParts[2], startParts[1] - 1, startParts[0]) &&
new Date(startParts[2], i, j) <= new Date(startParts[2], endParts[1] - 1, endParts[0])
)
) //überprüft ob der Tag noch in der angegebenen Zeitspanne des Theoriesemsters liegt
{
monthResult.push(j)
calculateDay(startParts[2], i, j)
@@ -149,7 +148,8 @@ function generateCalendar(start, ende)
}
}
function calculateDay(x, i, j){
function calculateDay(x, i, j)//berechnet den Wochentag eines Datums (Montag,...,Sonntag)
{
if (j == startDate.getDate() && i == startDate.getMonth() || j == 1){
let monthStart = new Date(x, i, j)
if (monthStart.getDay() == 0)
@@ -158,7 +158,7 @@ function calculateDay(x, i, j){
}
}
function freeSpaces(index)
function freeSpaces(index)//generiert Leerzeichen damit Tage genau unter ihrem jeweiligen Wochentag stehen
{
let arrayTest = []
for (let i = 0; i < calculatedDay[index]; i++) {
+3 -3
View File
@@ -9,9 +9,9 @@ export default function DateElement(p){
let startDate = new Date(p.year, 0, p.startday);
let endDate = new Date(p.year, 0, p.startday + 5);
let startDateString = `${startDate.getDate()}.${startDate.getMonth()+1}.${startDate.getFullYear()}`;
let endDateString = `${endDate.getDate()}.${endDate.getMonth()+1}.${endDate.getFullYear()}`;
return (
let startDateString = `${startDate.getDate()}.${startDate.getMonth()+1}.${startDate.getFullYear()}`; //Anfang der Woche in der man sich befindet wird in startDateString geladen
let endDateString = `${endDate.getDate()}.${endDate.getMonth()+1}.${endDate.getFullYear()}`; //Ende der Woche in der man sich befindet wird in endDateString geladen
return /*Anzeige des Beginns und Endes der Woche in der man sich befindet*/(
<>
<div className="dateElement round-border box-shadow">
<p>{startDateString} - {endDateString}</p>
+1 -1
View File
@@ -7,7 +7,7 @@ import { arrowRight } from "./Icons"
export default function WeekSelector(p){
return (
return /*Aufruf des DateElements mit aktuellem Starttag im Jahr und dem Jahr, sowie Buttons zum hin und her Wechsel der Wochen*/(
<>
<div className="weekSelector">
<Button icon={arrowLeft} onClick={() => p.onFunctionLeft()} width={50} color={"#346991"}/>
+31 -19
View File
@@ -22,6 +22,7 @@ export default function SemesterOverview(p) {
let allModules
let allEntries
//Datenanfrage an das Backend für alle existierenden Semester
await fetch(urlTest).then(response => response.json()).then(s => {
allSemesters = s
if (set) {
@@ -30,17 +31,21 @@ export default function SemesterOverview(p) {
}).then(() => {
if(!set)
{
//Datenanfrage an das Backend um alle Module zu erhalten
fetch(baseURL + "/module/all?sessionid=" + localStorage.getItem("sessionid")).then(r => r.json()).then(mod => {
allModules = mod
}).then(() => {
//Datenanfrage an das Backend um alle gesetzten Entries zu erhalten
fetch(baseURL + "/entries/all?sessionid=" + localStorage.getItem("sessionid")).then(r => r.json()).then(en => {
allEntries = en
}).then(() => {
let modulesCountInSemester = []
for (let i = 0; i < allSemesters.length; i++) {
for (let i = 0; i < allSemesters.length; i++) //durchlaufe die Anzahl der Semester welche von dem Backend zurück gegeben wurden
{
let count = 0
for (let j = 0; j < allModules.length; j++) {
if (allSemesters[i].id === allModules[j].semesterid) {
for (let j = 0; j < allModules.length; j++) { //durchlaufe die Anzahl der Module welche von dem Backend zurück gegeben wurden
if (allSemesters[i].id === allModules[j].semesterid) //Prüfe ob das Modul zu dem jeweiligen Semester gehört und erhöhe count
{
count++;
}
}
@@ -48,20 +53,25 @@ export default function SemesterOverview(p) {
}
let temp = []
for (let s = 0; s < allSemesters.length; s++) {
for (let s = 0; s < allSemesters.length; s++) //durchlaufe die Anzahl der Semester welche von dem Backend zurück gegeben wurden
{
let count = 0;
for (let i = 0; i < allModules.length; i++) {
if (allModules[i].semesterid === allSemesters[s].id) {
for (let i = 0; i < allModules.length; i++) //durchlaufe die Anzahl der Module welche von dem Backend zurück gegeben wurden
{
if (allModules[i].semesterid === allSemesters[s].id) //Prüfe ob das Modul zu dem jeweiligen Semester gehört
{
let sum = 0
let ent = allEntries.filter(e => e.moduleid === allModules[i].id)
for (let j = 0; j < ent.length; j++) {
sum += ent[j].timeend - ent[j].timestart
let ent = allEntries.filter(e => e.moduleid === allModules[i].id) //lade alle Entries die zu dem Modul gehören in dem wir uns befinden in die Variable
for (let j = 0; j < ent.length; j++) //durchlaufe die Anzahl der Entries aus ent
{
sum += ent[j].timeend - ent[j].timestart //summiere die Dauer aller Entries in dem Semester
}
sum /= 3
if (sum >= 20 && allModules[i].activated === 0) {
if (sum >= 20 && allModules[i].activated === 0) //Überprüfung ob alle 20 Schulstunden eines Moduls gesetzt worden sind und der Vorlesungsplan des Moduls abgegeben worden ist
{
count++;
}
}
@@ -75,7 +85,7 @@ export default function SemesterOverview(p) {
temp.push(100)
}
setProgresses(temp)
setProgresses(temp) //setze die Fortschrittsleiste entsprechend der Einträge im Semester
}
@@ -89,7 +99,7 @@ export default function SemesterOverview(p) {
function onClickSemester(e, m) {
if (m.target === m.currentTarget) {
localStorage.setItem("currentsid", e.id)
router.push("/planning")
router.push("/planning") //leite weiter auf die Planungsseite
localStorage.setItem("semestername", e.name + " Sem. " + (e.number + 1))
}
@@ -97,7 +107,7 @@ export default function SemesterOverview(p) {
function onClickNewSemester() {
localStorage.setItem("currentsid", 0);
router.push("/createSemester");
router.push("/createSemester"); //leite weiter auf die Seite für das Inputform zur Erstellung eines neuen Semesters
}
@@ -115,9 +125,9 @@ export default function SemesterOverview(p) {
async function funcButtonDelete() {
let id = localStorage.getItem("currentsid");
let url = baseURL + "/semester?sessionid=" + localStorage.getItem("sessionid") + "&id=" + id;
let url = baseURL + "/semester?sessionid=" + localStorage.getItem("sessionid") + "&id=" + id; //Anfrage an das Backend auf spezifisches Semesters auf das geklickt worden ist
await fetch(url, {
method: "DELETE"
method: "DELETE" //lösche das spezifisch angeklickte Semester
});
togglePopup();
@@ -129,6 +139,7 @@ export default function SemesterOverview(p) {
localStorage.setItem("currentsid", e.id);
let semester = e;
//setze die Einträge des Semesters auf die aktuell gespeicherten Einträge
let startYear = semester.startyear;
let endYear = semester.endyear;
let startDay = semester.startday;
@@ -137,6 +148,7 @@ export default function SemesterOverview(p) {
let startDate = new Date(startYear, 0, startDay + 1);
let endDate = new Date(endYear, 0, endDay + 1);
//speichere die abgeänderten Daten des Semesters
await router.push({
pathname: "/createSemester",
query: {
@@ -170,16 +182,16 @@ export default function SemesterOverview(p) {
{
entries.map((e, index) => (
<div className={"semester-tile box-shadow"} onClick={(f) => onClickSemester(e, f)}>
<SemesterTile text={e.name + " Sem. " + (e.number + 1)} onClick={(f) => onClickSemester(e, f)}
<SemesterTile text={e.name + " Sem. " + (e.number + 1)} onClick={(f) => onClickSemester(e, f) /*Darstellung der Semester mit ihren Namen und der Semesternummer in welcher der Kurs sich befindet*/}
onButtonDeleteClick={() => {
localStorage.setItem("currentsid", e.id)
setModalHint(e.name + " Löschen?");
togglePopup();
}} onButtonEditClick={(m) => {
localStorage.setItem("currentsid", e.id)
funcButtonEdit(e, m);
funcButtonEdit(e, m) /*Aufruf der Editierfunktion für das Angeklickte Semester*/;
}}/>
<StatusBar progress={progresses[index]}/>
<StatusBar progress={progresses[index] /*Fortschrittsleiste wird gesetzt*/}/>
<div style={
{
display: "flex",
@@ -202,7 +214,7 @@ export default function SemesterOverview(p) {
</div>))
}
<Button color={"#dcdcdc"} text={"+"} width={240} height={160} fontColor={"black"} fontSize={50}
onClick={() => onClickNewSemester()}/>
onClick={() => onClickNewSemester() /*Zuweisung der Funktion für den Button zu Erstellung eines neuen Semesters*/}/>
<PopUp hint={modalHint} text1={"Abbrechen"} text2={"Löschen"} displayState={modalDisplay}
function1={funcButtonAbort} function2={funcButtonDelete}/>
</div>
+17 -11
View File
@@ -14,41 +14,48 @@ export default function SemesteroverviewLecturer(p) {
function getModules() {
let urlTest = baseURL + "/module/id?sessionid=" + localStorage.getItem("sessionid");
//Datenanfrage an das Backend für alle Module welche dem User zugewiesen worden sind
fetch(urlTest).then(response => response.json()).then(m => {
setEntries(m);
let args = "";
for (let i = 0; i < m.length; i++) {
args += m[i].semesterid;
for (let i = 0; i < m.length; i++) //durchlaufe die Anzahl der Module
{
args += m[i].semesterid; //füge dem String "args" die Einträge hinzu
if (i < m.length - 1) {
args += "a";
args += "a"; //trenne die Einträge durch ein "a" voneinander ab
}
}
let temp = []
let semesterURL = baseURL + "/semester/id/all?ids=" + args + "&sessionid=" + localStorage.getItem("sessionid");
//Datenanfrage an das Backend für alle Semester welche dem User für die Planung zugewiesen sind
fetch(semesterURL).then(r => r.json()).then(sem => {
sem.map(e => {
temp.push(e.name + " Sem. " + (e.number + 1))
temp.push(e.name + " Sem. " + (e.number + 1)) //lade das Semester in welchem der Kurs sich befindet in das Array "temp"
})
}).then(() => setSemesterNames(temp)).then(() => {
let entriesURL = baseURL + "/entries/all?sessionid=" + localStorage.getItem("sessionid")
//Datenanfrage an das Backend aller Entries eines Moduls eines Semesters (automatisch nur die Entries die durch den User erstellt worden sind)
fetch(entriesURL).then(r => r.json()).then(en => {
let tempTimeStamps = []
for(let j = 0; j < m.length; j++)
for(let j = 0; j < m.length; j++) //durchlaufe die Anzahl an Modulen die von dem Backend zurückgegeben worden sind
{
let sum = 0
let currentModule = m[j]
for (let i = 0; i < en.length; i++)
for (let i = 0; i < en.length; i++) //durchlaufe die Anzahl der Entries die von dem Backend zurückgegeben worden sind
{
if(currentModule.id === en[i].moduleid)
{
sum += en[i].timeend - en[i].timestart
sum += en[i].timeend - en[i].timestart //summiere die Dauer all dieser Entries
}
}
sum /= 3
tempTimeStamps.push(sum)
tempTimeStamps.push(sum) //lade die Summe aller Entries eines Moduls in das Array "tempTimeStamps"
}
setTimeStamps(tempTimeStamps)
@@ -82,9 +89,8 @@ export default function SemesteroverviewLecturer(p) {
const [semesterNames, setSemesterNames] = useState([]);
const router = useRouter();
function getProgressForTime(time, activated)
function getProgressForTime(time, activated)//überprüfe welchen Status die Fortschrittsanzeige haben muss und gib diesen zurück
{
console.log(activated)
if(time === 0)
{
@@ -113,7 +119,7 @@ export default function SemesteroverviewLecturer(p) {
editable={false} text={semesterNames[index]} text2={e.name}
onClick={(f) => onClickSemester(e, f, semesterNames[index])}
/>
<StatusBar progress={getProgressForTime(timeStamps[index], e.activated)} module={e}/>
<StatusBar progress={getProgressForTime(timeStamps[index], e.activated)/*beladenes Array "timeStamps" an der Stelle "index" => relevante Summe der Einträge eines Moduls in einem Semester/Kurs*/} module={e}/>
</div>
))}
</div>
@@ -49,7 +49,7 @@ public class DataBaseHandler {
st.executeUpdate("insert into entries (daynumber, yearnumber, semesterid, usercreatedbyid, timestart, timeend, moduleid, info) values (" +
entry.getDaynumber() + ", " + entry.getYearnumber() + ", " + entry.getSemesterid() + ", " +
entry.getUsercreatedbyid() + ", " + entry.getTimestart() + ", " + entry.getTimeend() + ", " + entry.getModuleid() + " ,'" + entry.getInfo() + "')"
);
); //Datenbank Eintrag eines neu erstellten Entry mit allen nötigen Informationen
}
catch(Exception e)
{
@@ -68,28 +68,31 @@ public class DataBaseHandler {
Entry current = null;
while ((current = resultSetToEntry(rs)) != null) {
entryList.add(current);
}
} //Datenbankanfrage für alle Entries bei denen die Semesterid, das Jahr und der Tag mit den übergebenen Paramtern übereinstimmt
Entry[][] entries = new Entry[6][20];
for (int i = 0; i < 6; i++) {
for (int i = 0; i < 6; i++) //durchlaufe die Anzahl der Tage einer Vorlesungswoche (Montag,...,Samstag)
{
int f = 0;
for (int j = 0; j < entryList.size(); j++) {
for (int j = 0; j < entryList.size(); j++)
{
if (entryList.get(j).getDaynumber() == i + daynumber) {
entries[i][f] = entryList.get(j);
entries[i][f] = entryList.get(j); //belade das Array "entries" mit dem entries einer woche
f++;
}
}
}
return entries;
return entries; //gib das Array "entries" zurück
} catch (Exception e) {
return null;
}
}
public Entry[][] getAllEntrys(int semesterid, int daynumber, int yearnumber, int userid) {
public Entry[][] getAllEntrys(int semesterid, int daynumber, int yearnumber, int userid) //Datenbankanfrage für alle Entries eines Users in einem Semester
{
try {
ResultSet rs = st.executeQuery("select * from entries where " +
"semesterid<>" + semesterid +
@@ -119,7 +122,7 @@ public class DataBaseHandler {
}
public Entry[] getAllEntries()
public Entry[] getAllEntries() //Datenbankanfrage für alle Entries
{
try {
ResultSet rs = st.executeQuery("select * from entries");
@@ -137,7 +140,7 @@ public class DataBaseHandler {
}
}
public Entry[] getAllEntriesModule(int moduleid)
public Entry[] getAllEntriesModule(int moduleid) //Datenbankanfrage für alle Entries eines spezifischen Moduls
{
try {
ResultSet rs = st.executeQuery("select * from entries where moduleid=" + moduleid);
@@ -156,7 +159,8 @@ public class DataBaseHandler {
}
}
public void deleteEntry(int id) {
public void deleteEntry(int id) //Löschung eines spezifischen entries
{
try {
st.executeUpdate("delete from entries where id=" + id);
} catch (Exception e) {
@@ -164,7 +168,8 @@ public class DataBaseHandler {
}
}
public void updateEntry(Entry entry) {
public void updateEntry(Entry entry) //Aktualisiere Einträge eines Entry falls es verändert wurde
{
try {
st.executeUpdate("update entries set timeend=" + entry.getTimeend() + ", timestart=" + entry.getTimestart() + " where id=" + entry.getId());
} catch (Exception e) {
@@ -209,7 +214,8 @@ public class DataBaseHandler {
}
}
public Semester getSemester(int id) {
public Semester getSemester(int id)
{
try {
ResultSet rs = st.executeQuery("select * from semester where id=" + id);
return resultSetToSemester(rs);
@@ -244,7 +250,8 @@ public class DataBaseHandler {
}
}
public Semester updateSemester(Semester semester) {
public Semester updateSemester(Semester semester) //Aktualisiere die Einträge eines Semesters bei Veränderungen durch editier Funktion
{
try {
st.executeUpdate("update semester set startday=" + semester.getStartday() + ", " +
"endday=" + semester.getEndday() + ", " +