diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java index e7e0bb8e2785a3c3c6925d9f207bfa74d0b6884b..d2109728546943d36eed575156a7af37f5e3309b 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/IPeerAssessment.java @@ -76,6 +76,10 @@ public interface IPeerAssessment { */ void postPeerRating(ArrayList<PeerRating> peerRatings, String projectId); + void postContributionRating(StudentIdentifier student, + String fromPeer, + Map<String, Integer> contributionRating); + /** * * @param questions diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java index fe67cd81c9db56804b2d5a56482d564bfd184020..cf44c177031daf236edcde71e60d5ccfd5e57685 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/AssessmentDBCommunication.java @@ -124,8 +124,8 @@ class AssessmentDBCommunication { void writeContributionRatingToDB(StudentIdentifier student, String fromStudent, Map<String, Integer> contributionRating) { MysqlConnect connect = new MysqlConnect(); connect.connect(); - String mysqlRequest = "INSERT INTO `contributionrating`(`studentID`, `projectID`, `fromStudentID`, " + - "`Dossier`, " + + String mysqlRequest = "INSERT INTO `contributionrating`(`studentId`, `projectId`, `fromPeer`, " + + "`dossier`, " + "`eJournal`, " + "`research`" + ") VALUES (?,?,?,?,?,?)"; diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java index a9955e9a355adfe91a6c07bca6ccf34d2088cb36..ef9dd768e6d5890a7790156a62a5aa6b44986c30 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/FBAssessement.java @@ -60,6 +60,11 @@ public class FBAssessement extends AssessmentDAO { } + @Override + public void postContributionRating(StudentIdentifier student, String fromStudent, Map<String, Integer> contributionRating) { + + } + @Override public void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student) { diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java index c2e08f29b76db274c7f9f3bc282c4d40a6d7e1bb..f10eb2285dc1a227f2def9a5f65ea738ae44eb27 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessment.java @@ -206,6 +206,13 @@ public class PeerAssessment implements IPeerAssessment { } } + @Override + public void postContributionRating(StudentIdentifier student, + String fromStudent, + Map<String, Integer> contributionRating) { + new AssessmentDBCommunication().writeContributionRatingToDB(student, fromStudent, contributionRating); + } + @Override public void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student) { for (String question: questions.keySet()){ diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java index 5b105a94fe50ef1d18e41ffc02148faec40d653a..78291cecd72583f82ec78bc02859cbf36ec4a01b 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/service/PeerAssessmentDummy.java @@ -65,6 +65,11 @@ public class PeerAssessmentDummy implements IPeerAssessment { int breakpoint = 0; //todo: print an http-answer for the ajax-request to receive } + @Override + public void postContributionRating(StudentIdentifier student, String fromStudent, Map<String, Integer> contributionRating) { + + } + @Override public void answerQuiz(Map<String, List<String>> questions, StudentIdentifier student) { NotImplementedLogger.logAssignment(Assignee.AXEL, IPeerAssessment.class); diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java index 7ba24ad16827b3b25e2f4f4f3501254ad20a1350..e41b15a6dda0f0a60aa833c0682112d82e3edc4a 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/assessment/controller/view/QuizView.java @@ -46,6 +46,17 @@ public class QuizView { peer.postPeerRating(peerRatings, projectId); } + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Path("/contributionRating/projectId/{projectId}/studentId/{studentId}/fromPeer/{fromPeer}") + public void postContributionRating(Map<String, Integer> contributionRatings, + @PathParam("projectId") String projectId, + @PathParam("studentId") String studentId, + @PathParam("fromPeer") String fromPeer) throws IOException { + StudentIdentifier student = new StudentIdentifier(projectId, studentId); + peer.postContributionRating(student, fromPeer, contributionRatings); + } + @POST @Consumes(MediaType.APPLICATION_JSON) @Path("/quizAnswer/projectId/{projectId}/studentId/{studentId}/") diff --git a/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js b/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js index 593c2369cf4fafc9c788841aefcdd56a48f34892..c56a5da9be96bce3da3fd8be37e1040a03a16f05 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/finalAssessment.js @@ -9,34 +9,37 @@ $(document).ready(function() { }); function assessPeer(){ - var peerStudents =$('.peerStudent'); + let peerStudents =$('.peerStudent'); ///////initialize variables/////// - var dataP = new Array(peerStudents.size()); - var rateThis = ['responsibility','partOfWork','cooperation','communication','autonomous']; + let dataP = new Array(peerStudents.size()); + let rateThis = ['responsibility','partOfWork','cooperation','communication','autonomous']; ///////read values from html/////// - for (var peer=0; peer< peerStudents.length; peer++){ - var workRating = {}; - var peerRating = { + for (let peer=0; peer< peerStudents.length; peer++){ + let workRating = {}; + let peerRating = { "fromPeer": $('#user').html().trim(), "toPeer": peerStudents[peer].id, "workRating": {} }; - for (var rate=0; rate<rateThis.length; rate++ ){ - var category = rateThis[rate]; + for (let rate=0; rate<rateThis.length; rate++ ){ + let category = rateThis[rate]; workRating[category]=($('input[name='+rateThis[rate]+peerStudents[peer].id+']:checked').val()); } - for (var i=0; i<workRating.length; i++){ - if(workRating[i]===undefined){ + + peerRating.workRating = workRating; + //////write values in Post-Variable + dataP[peer]=peerRating; + } + for (let peer=0; peer< dataP.length; peer++){ + for (let workRating=0; workRating<rateThis.length;workRating++){ + if(dataP[peer][workRating]===undefined){ $('#notAllRated').show(); return; } } - peerRating.workRating = workRating; - //////write values in Post-Variable - dataP[peer]=peerRating; } - var projectId=$('#projectId').html().trim(); + let projectId=$('#projectId').html().trim(); $.ajax({ url:'../rest/assessments/peerRating/project/'+projectId, type: 'POST', diff --git a/gemeinsamforschen/src/main/webapp/assets/js/rateContribution.js b/gemeinsamforschen/src/main/webapp/assets/js/rateContribution.js index 8d6c7c7b53d0fd8323dd23e2abea8d79c298954c..b7e3c6b5fcaafd34e8c7c7066027d6d1a7d6069c 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/rateContribution.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/rateContribution.js @@ -1,17 +1,17 @@ $(document).ready(function () { - var ejournalFeedback = new InscrybMDE({ + new InscrybMDE({ element: document.getElementById("ejournalFeedback"), spellChecker: false, //toolbar: ["bold", "italic", "heading", "|", "quote", "table", "code", "|" , "side-by-side", "fullscreen"], minHeight: "80px", }); - var presentationFeedback = new InscrybMDE({ + new InscrybMDE({ element: document.getElementById("presentationFeedback"), spellChecker: false, //toolbar: ["bold", "italic", "heading", "|", "quote", "table", "code", "|" , "side-by-side", "fullscreen"], minHeight: "80px", }); - var dossierFeedback = new InscrybMDE({ + new InscrybMDE({ element: document.getElementById("dossierFeedback"), spellChecker: false, //toolbar: ["bold", "italic", "heading", "|", "quote", "table", "code", "|" , "side-by-side", "fullscreen"], @@ -19,10 +19,41 @@ $(document).ready(function () { }); - editor.style = "min-height: 100px"; + //editor.style = "min-height: 100px"; - $('#submit').on('click',function(){ - document.location="project-student.jsp?token="+getUserTokenFromUrl(); + $('#submit').on('click', function () { + safeContributionRating(); }); -}); \ No newline at end of file +}); + +function safeContributionRating() { + let contributions = $('.contributionRating'); + ///////initialize variables/////// + let dataP = {}; + + ///////read values from html/////// + for (let contribution = 0; contribution < contributions.length; contribution++) { + let checkbox = $("#" + contributions[contribution].id + " input:checked"); + dataP[checkbox.attr('name')] = checkbox.val(); + } + let projectId = $('#projectId').html().trim(); + let fromPeer = $('#user').html().trim(); + let toStudent = $('.peerStudent').attr('id'); + $.ajax({ + url: '../rest/assessments/contributionRating/projectId/' + projectId + + '/studentId/' + toStudent + '/fromPeer/' + fromPeer, + type: 'POST', + headers: { + "Content-Type": "application/json", + "Cache-Control": "no-cache" + }, + data: JSON.stringify(dataP), + success: function () { + location.href = "project-student.jsp?token=" + getUserTokenFromUrl() + "&projectId=" + $('#projectId').html().trim(); + }, + error: function (a, b, c) { + + } + }); +} \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js b/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js index cd0184d43d637fac702d3dc2d27dc6a378c4e4b7..7c293a1a125ccc891df523fd6a1ea415968a28c4 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/takeQuiz.js @@ -1,5 +1,5 @@ $(document).ready(function () { - var loading = $('#loadbar').hide(); + let loading = $('#loadbar').hide(); $(document) .ajaxStart(function () { loading.show(); @@ -8,7 +8,7 @@ $(document).ready(function () { }); $("label.btn").on('click',function () { - var choice = $(this).find('input:radio').val(); + let choice = $(this).find('input:radio').val(); $('#loadbar').show(); $('#quiz').fadeOut(); setTimeout(function(){ @@ -21,40 +21,37 @@ $(document).ready(function () { $ans = 3; - $.fn.checking = function(ck) { - if (ck != $ans) - return 'INCORRECT'; - else - return 'CORRECT'; - }; - - var projectId = document.getElementById('projectId').innerText.trim(); - var studentId = document.getElementById('user').innerText.trim(); + let projectId = document.getElementById('projectId').innerText.trim(); $.ajax({ url: '../rest/assessments/project/'+projectId+'/quiz/', type: 'GET', success: function (data) { - var table = document.getElementById('tableQuiz'); - for (var quiz = 0; quiz < data.length; quiz++){ - var question = data[quiz].question.replace(/ /g,"").replace("?","").replace(",",""); - var answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers); - var colspan = answers.length; - var trQuestion = document.createElement('TR'); - var tdQuestion = '<td colspan="' + colspan + '"' + + let table = document.getElementById('tableQuiz'); + for (let quiz = 0; quiz < data.length; quiz++){ + let question = data[quiz].question.replace(/ /g,"").replace("?","").replace(",",""); + let answers = data[quiz].correctAnswers.concat(data[quiz].incorrectAnswers); + let colspan = answers.length; + let trQuestion = document.createElement('TR'); + let tdQuestion = '<td colspan="' + colspan + '"' + ' data-toggle="collapse" href="#'+question+'" aria-expanded="false" aria-controls="'+question+'">' + '' + data[quiz].question + '</td>'; trQuestion.innerHTML = tdQuestion; - var trAnswers = document.createElement('TR'); + let trAnswers = document.createElement('TR'); answers = shuffle(answers); - var answersTd='<td style="display: block;"><div class="quiz collapse" id="'+question+'" data-toggle="buttons">'; - for (var i = 0; i < answers.length; i++) { + let answersTd='<td style="display: block;">' + + '<div ' + + 'class="quiz collapse" ' + + 'id="'+question+'" ' + + 'data-toggle="buttons">' + + '<p hidden>'+data[quiz].question+'</p>'; + for (let i = 0; i < answers.length; i++) { answersTd = answersTd + '<div>' + '<label class="element-animation1 btn btn-lg btn-primary btn-block">' + '<span class="btn-label">' + '<i class="glyphicon glyphicon-chevron-right">' + '</i>' + '</span>' + - '<input type="checkbox">' + answers[i] + '' + + '<input type="checkbox" value="'+answers[i]+'">' + answers[i] + '' + '</label>' + '</div>'; } @@ -75,7 +72,7 @@ $(document).ready(function () { }); function shuffle(a) { - var j, x, i; + let j, x, i; for (i = a.length - 1; i > 0; i--) { j = Math.floor(Math.random() * (i + 1)); x = a[i]; @@ -85,24 +82,25 @@ function shuffle(a) { return a; } -function safeQuizAnswers(){ //todo: just written before going home. not tested yet, wont work - var quizzes = $('.quiz'); +function safeQuizAnswers(){ + let quizzes = $('.quiz'); ///////initialize variables/////// - var dataP = new Array(quizzes.size()); + let dataP = {}; ///////read values from html/////// - for (var quiz=0; quiz<quizzes.size(); quiz++){ - var answerList = []; - $(quizzes[quiz]+":input:checkbox[name=type]:checked").each(function(){ - answerList.push($(this).val()); - }); - var question = quizzes[quiz].id; - var quizAnswers={question: answerList}; - //////write values in Post-Variable - dataP[quiz]=quizAnswers; + for (let quiz=0; quiz<quizzes.length; quiz++){ + let answerList = []; + if (quizzes[quiz].id !== ""){ + let checkedBoxes = $("#"+quizzes[quiz].id+" input:checked"); + checkedBoxes.each(function(){ + answerList.push($(this).val()); + }); + let question = $("#"+quizzes[quiz].id+" p").html().trim(); + dataP[question]= answerList; + } } - var projectId=$('#projectId').html().trim(); - var studentId=$('#user').html().trim(); + let projectId=$('#projectId').html().trim(); + let studentId=$('#user').html().trim(); $.ajax({ url:'../rest/assessments/quizAnswer/projectId/'+projectId+'/studentId/'+studentId, type: 'POST', @@ -112,7 +110,7 @@ function safeQuizAnswers(){ //todo: just written before going home. not tested }, data: JSON.stringify(dataP), success: function(){ - location.href="takeQuiz.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim(); + location.href="rateContribution.jsp?token="+getUserTokenFromUrl()+"&projectId="+$('#projectId').html().trim(); }, error: function(a,b,c){ diff --git a/gemeinsamforschen/src/main/webapp/pages/rateContribution.jsp b/gemeinsamforschen/src/main/webapp/pages/rateContribution.jsp index e6898e77c5a1a3b2ef51c8c25c0e691dc0804773..50431a5333efaf8cfbe617b8c561a1828a63aac2 100644 --- a/gemeinsamforschen/src/main/webapp/pages/rateContribution.jsp +++ b/gemeinsamforschen/src/main/webapp/pages/rateContribution.jsp @@ -33,44 +33,51 @@ </tr> <tr> <td> - Lernzieltagebuch: - Lernen ist wie Rudern gegen den Strom. Hört man damit auf, treibt man zurück. - <textarea id="ejournalFeedback"> + <div class="contributionRating" id="eJournal"> + Lernzieltagebuch: + Lernen ist wie Rudern gegen den Strom. Hört man damit auf, treibt man zurück. + <textarea id="ejournalFeedback"> meine Bewertung </textarea> - <label><input type="radio" name="ejournalRating">Perfekt</label> - <label><input type="radio" name="ejournalRating">Makellos</label> - <label><input type="radio" name="ejournalRating">regulär</label> - <label><input type="radio" name="ejournalRating">Makelhaft</label> - <label><input type="radio" name="ejournalRating">Lädiert</label> + <label><input type="radio" name="eJournal" value="5">Perfekt</label> + <label><input type="radio" name="eJournal" value="4">Makellos</label> + <label><input type="radio" name="eJournal" value="3">regulär</label> + <label><input type="radio" name="eJournal" value="2">Makelhaft</label> + <label><input type="radio" name="eJournal" value="1">Lädiert</label> + </div> </td> </tr> <tr> <td> - Dossier: - Die meisten Menschen sind bereit zu lernen, aber nur die wenigsten, sich belehren zu - lassen. - <textarea id="dossierFeedback"> + <div class="contributionRating" id="Dossier"> + Dossier: + Die meisten Menschen sind bereit zu lernen, aber nur die wenigsten, sich + belehren zu + lassen. + <textarea id="dossierFeedback"> meine Bewertung </textarea> - <label><input type="radio" name="dossierlRating">Perfekt</label> - <label><input type="radio" name="dossierRating">Makellos</label> - <label><input type="radio" name="dossierRating">regulär</label> - <label><input type="radio" name="dossierRating">Makelhaft</label> - <label><input type="radio" name="dossierRating">Lädiert</label> + <label><input type="radio" name="dossier" value="5">Perfekt</label> + <label><input type="radio" name="dossier" value="4">Makellos</label> + <label><input type="radio" name="dossier" value="3">regulär</label> + <label><input type="radio" name="dossier" value="2">Makelhaft</label> + <label><input type="radio" name="dossier" value="1">Lädiert</label> + </div> </td> </tr> <tr> <td> - Präsentation: <a href="#"><i class="fa fa-paperclip"></i></a> - <textarea id="presentationFeedback"> + <div class="contributionRating" id="research"> + Präsentation: <a href="#"><i class="fa fa-paperclip"></i></a> + <textarea id="presentationFeedback"> meine Bewertung </textarea> - <label><input type="radio" name="presentationRating">Perfekt</label> - <label><input type="radio" name="presentationRating">Makellos</label> - <label><input type="radio" name="presentationRating">regulär</label> - <label><input type="radio" name="presentationRating">Makelhaft</label> - <label><input type="radio" name="presentationRating">Lädiert</label> + <label><input type="radio" name="research" value="5">Perfekt</label> + <label><input type="radio" name="research" value="4">Makellos</label> + <label><input type="radio" name="research" value="3">regulär</label> + <label><input type="radio" name="research" value="2">Makelhaft</label> + <label><input type="radio" name="research" value="1">Lädiert</label> + </div> </td> </tr> </table> diff --git a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql index 9fa4f5d937c07ea125ab90d2ce2e64a48dccca3e..0d5dfe1643c376e6ac1cdfa6f56451bbc9809633 100644 --- a/gemeinsamforschen/src/scripts/dbschema/fltrail.sql +++ b/gemeinsamforschen/src/scripts/dbschema/fltrail.sql @@ -210,4 +210,39 @@ ALTER TABLE `projectuser` ALTER TABLE `projectuser` ADD UNIQUE (`projectId`, `userId`); ALTER TABLE `projects` - ADD UNIQUE (`id`); \ No newline at end of file + ADD UNIQUE (`id`); + +CREATE TABLE if not exists answeredquiz ( + `projectId` varchar(400) NOT NULL, + `studentId` varchar(400) NOT NULL, + `question` varchar(400) NOT NULL, + `correct` tinyint(4) NOT NULL + +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; + +CREATE TABLE if not exists workrating ( + `projectId` varchar(400) NOT NULL, + `studentId` varchar(400) NOT NULL, + `fromPeer` varchar(400) NOT NULL, + `responsibility` int(11) NOT NULL, + `partOfWork` int(11) NOT NULL, + `cooperation` int(11) NOT NULL, + `communication` int(11) NOT NULL, + `autonomous` int(11) NOT NULL + +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; + +CREATE TABLE if not exists contributionrating ( + `projectId` varchar(400) NOT NULL, + `studentId` varchar(400) NOT NULL, + `fromPeer` varchar(400) NOT NULL, + `dossier` int(11) NOT NULL, + `eJournal` int(11) NOT NULL, + `research` int(11) NOT NULL +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; \ No newline at end of file