diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java index 48542ab66ef24c39f3b5c20121e1096b0fcd8842..9e601b1e2a22d94f5137fb519e75c91e37ed3bd6 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/config/GFApplicationBinder.java @@ -7,6 +7,7 @@ import unipotsdam.gf.healthchecks.HealthChecks; import unipotsdam.gf.interfaces.*; import unipotsdam.gf.modules.annotation.controller.AnnotationController; import unipotsdam.gf.modules.annotation.controller.FeedbackImpl; +import unipotsdam.gf.modules.assessment.AssessmentDAO; import unipotsdam.gf.modules.assessment.controller.service.AssessmentDBCommunication; import unipotsdam.gf.modules.assessment.controller.service.PeerAssessment; import unipotsdam.gf.modules.communication.DummyCommunicationService; @@ -98,6 +99,7 @@ public class GFApplicationBinder extends AbstractBinder { bind(SurveyProcess.class).to(SurveyProcess.class); bind(FileManagementService.class).to(FileManagementService.class); bind(FileManagementDAO.class).to(FileManagementDAO.class); + bind(AssessmentDAO.class).to(AssessmentDAO.class); /** * @Martin comment in for your development diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/AssessmentDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/AssessmentDAO.java index 5c60ede6fbc0369c2721ca35752eaa0b6bdc8308..f9c54a71c9d211abd1bbde739819b4c347690061 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/AssessmentDAO.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/AssessmentDAO.java @@ -1,16 +1,25 @@ package unipotsdam.gf.modules.assessment; +import uk.co.jemos.podam.api.PodamFactory; +import uk.co.jemos.podam.api.PodamFactoryImpl; import unipotsdam.gf.modules.user.UserDAO; import unipotsdam.gf.mysql.MysqlConnect; import javax.inject.Inject; public class AssessmentDAO { + + PodamFactoryImpl podamFactory = new PodamFactoryImpl(); + @Inject private MysqlConnect connect; @Inject private UserDAO userDAO; - + public AssessmentProgress getProgress() { + AssessmentProgress assessmentProgress = podamFactory.manufacturePojo(AssessmentProgress.class); + //assessmentProgress.setNumberOfGroupsWithoutPresentation(3); + return assessmentProgress; + } } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/AssessmentProgress.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/AssessmentProgress.java new file mode 100644 index 0000000000000000000000000000000000000000..564ee3ffc7acf1165beb8ff46f76a3bf3db9f448 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/AssessmentProgress.java @@ -0,0 +1,80 @@ +package unipotsdam.gf.modules.assessment; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class AssessmentProgress { + + private int numberOfGroups; + private int numberOfGroupPresentions; + private int numberOfGroupReports; + private int numberOfGroupsWithoutExternalAssessment; + private int numberOfStudentsWithoutInternalAsssessment; + private int numberOfGroupsWithoutPresentation; + + + public AssessmentProgress( + int numberOfGroups, int numberOfGroupPresentions, int numberOfGroupReports, + int numberOfGroupsWithoutExternalAssessment, int numberOfStudentsWithoutInternalAsssessment) { + this.numberOfGroups = numberOfGroups; + this.numberOfGroupPresentions = numberOfGroupPresentions; + this.numberOfGroupReports = numberOfGroupReports; + this.numberOfGroupsWithoutExternalAssessment = numberOfGroupsWithoutExternalAssessment; + this.numberOfStudentsWithoutInternalAsssessment = numberOfStudentsWithoutInternalAsssessment; + } + + public int getNumberOfGroups() { + return numberOfGroups; + } + + public void setNumberOfGroups(int numberOfGroups) { + this.numberOfGroups = numberOfGroups; + } + + public int getNumberOfGroupPresentions() { + return numberOfGroupPresentions; + } + + public void setNumberOfGroupPresentions(int numberOfGroupPresentions) { + this.numberOfGroupPresentions = numberOfGroupPresentions; + } + + public int getNumberOfGroupReports() { + return numberOfGroupReports; + } + + public void setNumberOfGroupReports(int numberOfGroupReports) { + this.numberOfGroupReports = numberOfGroupReports; + } + + public int getNumberOfGroupsWithoutExternalAssessment() { + return numberOfGroupsWithoutExternalAssessment; + } + + public void setNumberOfGroupsWithoutExternalAssessment(int numberOfGroupsWithoutExternalAssessment) { + this.numberOfGroupsWithoutExternalAssessment = numberOfGroupsWithoutExternalAssessment; + } + + public int getNumberOfStudentsWithoutInternalAsssessment() { + return numberOfStudentsWithoutInternalAsssessment; + } + + public void setNumberOfStudentsWithoutInternalAsssessment(int numberOfStudentsWithoutInternalAsssessment) { + this.numberOfStudentsWithoutInternalAsssessment = numberOfStudentsWithoutInternalAsssessment; + } + + + + public int getNumberOfGroupsWithoutPresentation() { + return numberOfGroupsWithoutPresentation; + } + + public void setNumberOfGroupsWithoutPresentation(int numberOfGroupsWithoutPresentation) { + this.numberOfGroupsWithoutPresentation = numberOfGroupsWithoutPresentation; + } + + public AssessmentProgress() { + } + + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/fileManagement/FileManagementDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/fileManagement/FileManagementDAO.java index 21d13edadf8cf9aa07c1b8368c1c90bf706507ef..2a8b06fe928834a68d47d86d0f05c5b264a5a086 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/fileManagement/FileManagementDAO.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/fileManagement/FileManagementDAO.java @@ -1,5 +1,6 @@ package unipotsdam.gf.modules.fileManagement; +import unipotsdam.gf.modules.group.GroupDAO; import unipotsdam.gf.modules.project.Project; import unipotsdam.gf.modules.user.User; import unipotsdam.gf.mysql.MysqlConnect; @@ -20,40 +21,56 @@ public class FileManagementDAO { @Inject private MysqlConnect connect; + @Inject + private GroupDAO groupDAO; + void writeFileMetaToDB(User user, Project project, String fileLocation, FileRole fileRole, String fileName) { + + Integer groupId = null; + + switch (fileRole) { + case FINAL_REPORT: + case PRESENTATION: + case DOSSIER: + groupId = groupDAO.getGroupByStudent(project, user); + break; + } + connect.connect(); - String mysqlRequest = - "INSERT INTO `largefilestorage`(`userEmail`, `projectName`, `filelocation`, `filerole`, `filename`) VALUES (?,?,?,?,?)"; - connect.issueInsertOrDeleteStatement(mysqlRequest, user.getEmail(), project.getName(), - fileLocation, fileRole.toString(), fileName); + if (groupId != null) { + String mysqlRequest = + "INSERT INTO `largefilestorage`(`userEmail`, `projectName`, `filelocation`, `filerole`, " + + "`filename`, `groupId`) VALUES (?,?,?,?,?,?)"; + connect.issueInsertOrDeleteStatement( + mysqlRequest, user.getEmail(), project.getName(), fileLocation, fileRole.toString(), fileName); + } else { + String mysqlRequest = + "INSERT INTO `largefilestorage`(`userEmail`, `projectName`, `filelocation`, `filerole`, `filename`) VALUES (?,?,?,?,?)"; + connect.issueInsertOrDeleteStatement( + mysqlRequest, user.getEmail(), project.getName(), fileLocation, fileRole.toString(), fileName); + } connect.close(); } Map<String, String> getListOfFiles(User user, Project project) { connect.connect(); - String mysqlRequest = "SELECT * FROM `largefilestorage` lfs JOIN `groupuser` gu " + - "ON gu.userEmail=lfs.userEmail JOIN groups g on g.id=gu.groupId WHERE g.id " + - "IN (SELECT gu2.groupId FROM `groupuser` gu2 WHERE gu2.userEmail=?) AND g.projectName=? " + - "AND g.projectName=lfs.projectName"; + String mysqlRequest = + "SELECT * FROM `largefilestorage` lfs JOIN `groupuser` gu " + "ON gu.userEmail=lfs.userEmail JOIN groups g on g.id=gu.groupId WHERE g.id " + "IN (SELECT gu2.groupId FROM `groupuser` gu2 WHERE gu2.userEmail=?) AND g.projectName=? " + "AND g.projectName=lfs.projectName"; VereinfachtesResultSet vereinfachtesResultSet = connect.issueSelectStatement(mysqlRequest, user.getEmail(), project.getName()); boolean next = vereinfachtesResultSet.next(); Map<String, String> result = new HashMap<>(); while (next) { - result.put( - vereinfachtesResultSet.getString("filelocation"), - vereinfachtesResultSet.getString("fileName") - ); + result.put(vereinfachtesResultSet.getString("filelocation"), vereinfachtesResultSet.getString("fileName")); next = vereinfachtesResultSet.next(); } connect.close(); return result; } - void deleteMetaOfFile(String fileLocation){ + void deleteMetaOfFile(String fileLocation) { connect.connect(); - String mysqlRequest = - "DELETE FROM `largefilestorage` WHERE filelocation=?"; + String mysqlRequest = "DELETE FROM `largefilestorage` WHERE filelocation=?"; connect.issueInsertOrDeleteStatement(mysqlRequest, fileLocation); connect.close(); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/PeerAssessmentProcess.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/PeerAssessmentProcess.java index 5026b17213321585c16a6b6fffb183e1d077da02..63309a2640484dca937aff5cc7b50f1ea6b9ee59 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/PeerAssessmentProcess.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/PeerAssessmentProcess.java @@ -32,7 +32,7 @@ public class PeerAssessmentProcess { // distribute upload tasks taskDAO.persistTaskForAllGroups(project, UPLOAD_PRESENTATION, Phase.Assessment); // distribute teacher tasks - taskDAO.persistTeacherTask(project, TaskName.WAIT_FOR_UPLOADS_OR_FF, Phase.Assessment); + taskDAO.persistTeacherTask(project, TaskName.WAIT_FOR_UPLOAD, Phase.Assessment); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java index 6dda7bec2d7ae512ca47639ed7420b3e51ec7d94..a139d3a46a520cab6c2bda9ad6bae358704968f4 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskDAO.java @@ -1,7 +1,9 @@ package unipotsdam.gf.process.tasks; import unipotsdam.gf.interfaces.IGroupFinding; +import unipotsdam.gf.modules.assessment.AssessmentDAO; import unipotsdam.gf.modules.assessment.controller.model.ContributionCategory; +import unipotsdam.gf.modules.assessment.controller.service.PeerAssessment; import unipotsdam.gf.modules.group.Group; import unipotsdam.gf.modules.group.GroupDAO; import unipotsdam.gf.modules.group.GroupFormationMechanism; @@ -49,6 +51,9 @@ public class TaskDAO { @Inject private SubmissionController submissionController; + @Inject + private AssessmentDAO assessmentDAO; + @Inject private ConstraintsImpl constraints; @@ -316,11 +321,11 @@ public class TaskDAO { updateForUser(waitingForDossiers); break; } - case WAIT_FOR_PRESENTATION_AND_FINAL_REPORT_UPLOAD: { + case WAIT_FOR_UPLOAD: { Task task = getGeneralTask(vereinfachtesResultSet); task.setHasRenderModel(true); // get Progress from peer assessment - //task.setTaskData(); + task.setTaskData(assessmentDAO.getProgress()); result = task; break; } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskName.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskName.java index a184764ad72c9dbd45642353c92f51028c1f1e34..c88e7c07f35c9a44318285c977b5959424745c1a 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskName.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/process/tasks/TaskName.java @@ -16,9 +16,8 @@ public enum TaskName { OPTIONAL_PORTFOLIO_ENTRY, REFLECT_DOSSIER_CREATION, ANSWER_REFLECTION_QUESTIONS, COLLECT_RESULTS_FOR_ASSESSMENT, // assessment tasks - UPLOAD_PRESENTATION, UPLOAD_FINAL_REPORT, WAIT_FOR_PRESENTATION_AND_FINAL_REPORT_UPLOAD, + UPLOAD_PRESENTATION, UPLOAD_FINAL_REPORT, + WAIT_FOR_UPLOAD, GIVE_ASSESSMENT, SEE_ASSESSMENT, - END,; - - + END } diff --git a/gemeinsamforschen/src/main/webapp/assessment/js/assessmentService.js b/gemeinsamforschen/src/main/webapp/assessment/js/assessmentService.js new file mode 100644 index 0000000000000000000000000000000000000000..7c03e3dc5c8fd8d7e798900cb76370feedb1ae4b --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assessment/js/assessmentService.js @@ -0,0 +1,5 @@ +function startGrading(project) { + window.console.log("starting assessment for project: "+ project); + // TODO: send request to backend to start grading + alert("helloo"); +} \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/project/js/tasks.js b/gemeinsamforschen/src/main/webapp/project/js/tasks.js index bca01f21ddaa1bc87e91ce680107dd675abdb7e0..c33f527e98e2664cae365679e08695ef72e92512 100644 --- a/gemeinsamforschen/src/main/webapp/project/js/tasks.js +++ b/gemeinsamforschen/src/main/webapp/project/js/tasks.js @@ -1,14 +1,21 @@ let object; let groupViewLink; +let projectName; +let userEmail; $(document).ready(function () { - let userEmail = $('#userEmail').html().trim(); - let projectName = $('#projectName').html().trim(); + userEmail = $('#userEmail').html().trim(); + projectName = $('#projectName').html().trim(); groupViewLink = $('#groupView'); groupViewLink.hide(); fillTasks(projectName, userEmail); groupViewLink.on('click', function () { location.href = "../groupfinding/view-groups.jsp?projectName=" + projectName; }); + /** + * TODO refactor remove all the inline js and group it like this leading + * + */ + }); function fillTasks(projectName, userEmail) { @@ -43,31 +50,6 @@ function fillTasks(projectName, userEmail) { }); } -function fitObjectInTmpl(object) { - let result = { - taskType: "", - infoText: "", - phase: "", - headLine: "", - solveTaskWith: "", - helpLink: "", - timeFrame: "", - taskData: object.taskData, - taskProgress: object.progress, - inCardSolver: "", - }; - - if (object.taskType !== "INFO") { - if (object.groupTask !== 0) { - result.taskType = "grouptask" - } else { - result.taskType = "usertask" - } - } else { - result.taskType = "infotask" - } -} - function handlePhases(object, result) { switch (object.phase) { case "CourseCreation": @@ -128,6 +110,10 @@ function handleTaskType(object, result) { } function handleInfoTasks(object, result) { + + /* if (object.hasRenderModel) { + result.inCardSolver = object.taskName; + }*/ switch (object.taskName) { case "WAIT_FOR_PARTICPANTS": result.infoText = waitForParticipantsInfoText(object); @@ -139,6 +125,9 @@ function handleInfoTasks(object, result) { break; } break; + case "UPLOAD_FINAL_REPORT": + result.infoText = "Bitte laden Sie den Abschlussbericht (stellvertretend für ihre Gruppe) hoch!"; + break; case "BUILD_GROUPS": result.infoText = "Erstellen Sie die Gruppen."; break; @@ -209,9 +198,6 @@ function handleInfoTasks(object, result) { case "UPLOAD_PRESENTATION": result.infoText = "Bitte laden Sie die Präsentation (stellvertretend für ihre Gruppe) hoch!"; break; - case "UPLOAD_FINAL_REPORT": - result.infoText = "Bitte laden Sie den Abschlussbericht (stellvertretend für ihre Gruppe) hoch!"; - break; default: result.infoText = ""; } @@ -338,7 +324,7 @@ function handleLinkedTasks(object, result) { } } -function handleProgress(object, result) { +function handleFinishedTasks(object, result) { if (object.progress === "FINISHED") { if (object.taskName === "WAIT_FOR_PARTICPANTS") { result.infoText = "Gruppen sind final gespeichert. \n" + @@ -360,6 +346,10 @@ function handleProgress(object, result) { if (object.taskName === "ANNOTATE_DOSSIER" || object.taskName === "UPLOAD_DOSSIER") { result.solveTaskWith = ""; result.solveTaskWithLink = ""; + } + // ev. noch implementieren + if (object.taskName === "WAIT_FOR_UPLOAD"){ + } if (object.taskName.includes("CLOSE")) { result.infoText = object.phase; @@ -385,14 +375,14 @@ function fitObjectInTmpl(object) { timeFrame: "", taskData: object.taskData, taskProgress: object.progress, - inCardSolver: "", + inCardSolver: object.taskName, }; handleTaskType(object, result); handlePhases(object, result); handleDeadlines(object, result); handleInfoTasks(object, result); handleLinkedTasks(object, result); - handleProgress(object, result); + handleFinishedTasks(object, result); return result; } diff --git a/gemeinsamforschen/src/main/webapp/project/tasks-docent.jsp b/gemeinsamforschen/src/main/webapp/project/tasks-docent.jsp index 19a9a3c7bb537726f2ce36eece6edf68100326ee..ce3a8e73f47121cc6a81d90da1391f74a0ae024c 100644 --- a/gemeinsamforschen/src/main/webapp/project/tasks-docent.jsp +++ b/gemeinsamforschen/src/main/webapp/project/tasks-docent.jsp @@ -8,6 +8,7 @@ <jsp:param name="hierarchy" value="1"/> </jsp:include> <script src="js/inCardSolverHTML.js"></script> + <script src="../assessment/js/assessmentService.js"></script> <script src="js/tasks.js"></script> </head> <body> @@ -24,9 +25,8 @@ <div id="listOfTasks"> </div> - + <!-- --> <script id="taskTemplate" type="text/x-jQuery-tmpl"> - <h3 class="phase-heading ${phase} ">${phase}</h3> <div class="card ${phase}"> <div class="col span_s_of_2 icon ${taskType}"> </div> @@ -56,6 +56,20 @@ <button onClick='resizeGroup();'>speichern</button> </div> {{/if}} + {{if inCardSolver=="WAIT_FOR_UPLOAD"}} + <div class="inCardSolver"> + {{if taskData.numberOfGroupsWithoutPresentation > 0 }} + Es haben noch ${taskData.numberOfGroupsWithoutPresentation} Gruppen keine Präsentation hochgeladen. + {{/if}} + {{if taskData.numberOfGroupsWithoutExternalAssessment > 0 }} + ${taskData.numberOfGroupsWithoutExternalAssessment} Gruppen haben keine Bewertung durch Peers bekommen. + {{/if}} + {{if taskData.numberOfStudentsWithoutInternalAsssessment > 0 }} + ${taskData.numberOfStudentsWithoutInternalAsssessment} Studierende haben noch keine Bewertung der Gruppe bekommen. + {{/if}} + <button id='startGradingButton' onClick="startGrading(getProjectName());">Bewertung abschließen</button> + </div> + {{/if}} {{/if}} {{if helpLink}} <div style="width:100%"><a href='${helpLink}'>Hier</a> bekommst du Hilfe.</div> diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java index 71f82f4f520b1bea1216eb9517cc54e72ec5c000..0cdbb30925880329b543917ba0fe6e0aa6b4d274 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/modules/assessment/TestAddAssessment.java @@ -182,7 +182,7 @@ public class TestAddAssessment { public void quickstartAssessmentPhase() { - Project project = new Project("assessmenttest"); + Project project = new Project("assessmenttest2"); List<Group> groups = groupFinding.getGroups(project); assertFalse(groups.isEmpty()); diff --git a/gemeinsamforschen/src/test/resources/database/fltrail.sql b/gemeinsamforschen/src/test/resources/database/fltrail.sql index 3e27d1bbb4d68a5f0b0568bdb89555a5bfb54523..7bdc82b2501c09e532806342219eb22707ae1246 100644 --- a/gemeinsamforschen/src/test/resources/database/fltrail.sql +++ b/gemeinsamforschen/src/test/resources/database/fltrail.sql @@ -219,8 +219,9 @@ CREATE TABLE `journals` CREATE TABLE `largefilestorage` ( - `id` int(11) NOT NULL, - `userEmail` varchar(255) NOT NULL, + `id` int(11) NOT NULL, + `groupId` int(11), + `userEmail` varchar(255), `projectName` varchar(100) NOT NULL, `filelocation` varchar(100) NOT NULL, `filerole` varchar(100) NOT NULL,