diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Feedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Feedback.java index 5f70b51d18b5b423a9e419294622668040fcee19..773103d2bff7c333fe4ece1983d8e21f420c4341 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Feedback.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/interfaces/Feedback.java @@ -1,7 +1,7 @@ package unipotsdam.gf.interfaces; import unipotsdam.gf.core.management.project.Project; import unipotsdam.gf.core.management.user.User; -import unipotsdam.gf.modules.peer2peerfeedback.Peer2PeerFeedback; +import unipotsdam.gf.modules.peer2peerfeedback.peerfeedback.Model.Peer2PeerFeedback; import unipotsdam.gf.modules.researchreport.ResearchReport; import java.io.File; @@ -17,12 +17,20 @@ public interface Feedback { /** * create Peer2PeerFeedback Object * - * @param feedbackuser: The student who is creating the feedback - * @param selectedstudent: The student who receive the feedback - * @param document: The selected document to give feedback about + * @param feedback: * @return Returns the Peer2PeerFeedback Object */ + Peer2PeerFeedback createPeer2PeerFeedback (Peer2PeerFeedback feedback); + //(String id, String reciever, String sender, String text, Category category, String filename); + + /** + * create Peer2PeerFeedback Object + * + * @param feedbackuser: + * @param selectedstudent: + * @param document: + * **/ Peer2PeerFeedback createPeer2PeerFeedbackmask(User feedbackuser, User selectedstudent, File document); /** diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/DummyFeedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/DummyFeedback.java index b8098bebafa5b556b4403ef1ac256b7ac1450d2b..443ce212400945a30640d7b3213233a3ed4e6e1f 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/DummyFeedback.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/DummyFeedback.java @@ -1,6 +1,5 @@ package unipotsdam.gf.modules.peer2peerfeedback; -import org.mockito.Mockito; import uk.co.jemos.podam.api.PodamFactory; import uk.co.jemos.podam.api.PodamFactoryImpl; import unipotsdam.gf.assignments.Assignee; @@ -8,6 +7,7 @@ import unipotsdam.gf.assignments.NotImplementedLogger; import unipotsdam.gf.core.management.project.Project; import unipotsdam.gf.core.management.user.User; import unipotsdam.gf.interfaces.Feedback; +import unipotsdam.gf.modules.peer2peerfeedback.peerfeedback.Model.Peer2PeerFeedback; import unipotsdam.gf.modules.researchreport.ResearchReport; import java.io.File; @@ -33,6 +33,8 @@ public class DummyFeedback implements Feedback { return null; } + public Peer2PeerFeedback createPeer2PeerFeedback (Peer2PeerFeedback feedback){return null; } + @Override public Boolean giveFeedback(Peer2PeerFeedback feedback, ResearchReport document) { return null; diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/ExampleFeedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/ExampleFeedback.java deleted file mode 100644 index 9b44f2d2e81a8ca1133da2917cfb47ba69bfdb7d..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/ExampleFeedback.java +++ /dev/null @@ -1,30 +0,0 @@ -package unipotsdam.gf.modules.peer2peerfeedback; - -import unipotsdam.gf.core.management.user.User; - -import java.io.File; - -/** - Peer2PeerFeedback example - created by Katharina - */ - -public class ExampleFeedback { - - String feedbacktopic = "Vorschlag zur Methodik"; - String feedbacktype = "Text"; - Category feedbackcategory = Category.METHODIK; - User feedbackrec = new User(); - User feedbacksend = new User(); - File file = new File("src/main/resources/example.txt"); //gibt erstmal nur einen Pfad an - //String path = file.getAbsolutePath(); - - - public Peer2PeerFeedback examplePeerFeedback (){ - - Peer2PeerFeedback example = new Peer2PeerFeedback(feedbacktopic, feedbacktype, - feedbackcategory, file, feedbacksend, feedbackrec); - - return example; - } -} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Peer2PeerFeedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Peer2PeerFeedback.java deleted file mode 100644 index 55bd0e9dad14bc9e1954f223599ebdb4587f0dd6..0000000000000000000000000000000000000000 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/Peer2PeerFeedback.java +++ /dev/null @@ -1,104 +0,0 @@ -package unipotsdam.gf.modules.peer2peerfeedback; - -import unipotsdam.gf.core.management.user.User; - -import java.io.File; - -/** - Peer2PeerFeedback Object - created by Katharina - */ - -public class Peer2PeerFeedback{ - - - private String feedbacktopic; - private String feedbacktype; - private Category feedbackcategory; - private File document; - private User feedbacksender; - private User feedbackreceiver; - - public Peer2PeerFeedback(String feedbacktopic, String feedbacktype, Category feedbackcategory, File document, User feedbacksender, User feedbackreceiver) { - this.feedbacktopic = feedbacktopic; - this.feedbacktype = feedbacktype; - this.feedbackcategory = feedbackcategory; - this.document = document; - this.feedbacksender = feedbacksender; - this.feedbackreceiver = feedbackreceiver; - } - - public String getFeedbacktopic() { - - return feedbacktopic; - } - - public void setFeedbacktopic(String feedbacktopic) { - - this.feedbacktopic = feedbacktopic; - } - - - public String getFeedbacktype() { - - return feedbacktype; - } - - public void setFeedbacktype(String feedbacktype) { - - this.feedbacktype = feedbacktype; - } - - - - public Category getFeedbackcategory() { - return feedbackcategory; - } - - public void setFeedbackcategory(Category feedbackcategory) { - this.feedbackcategory = feedbackcategory; - } - - - public File getDocument() { - - return document; - } - - public void setDocument(File document) { - - this.document = document; - } - - - public User getFeedbacksender() { - return feedbacksender; - } - - public void setFeedbacksender(User feedbacksender) { - this.feedbacksender = feedbacksender; - } - - public User getFeedbackreceiver() { - return feedbackreceiver; - } - - public void setFeedbackreceiver(User feedbackreceiver) { - this.feedbackreceiver = feedbackreceiver; - } - - - @Override - public String toString() { - return "Peer2PeerFeedback{" + - "feedbacktopic=" + feedbacktopic + - ", feedbacktype=" + feedbacktype + - ", feedbackreference=" + feedbackcategory + - ", feedbacksender='" + feedbacksender + - ", feedbackreceiver=" + feedbackreceiver + - ", document=" + document.toString() + - '}'; - } - - -} \ No newline at end of file diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/PeerFeedbackService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/PeerFeedbackService.java new file mode 100644 index 0000000000000000000000000000000000000000..60a1f82710a3e27b29d1cb402ff8a58fa9b567b4 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/PeerFeedbackService.java @@ -0,0 +1,5 @@ +package unipotsdam.gf.modules.peer2peerfeedback; + +public interface PeerFeedbackService { + +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/peerfeedback/Controller/PeerFeedbackController.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/peerfeedback/Controller/PeerFeedbackController.java new file mode 100644 index 0000000000000000000000000000000000000000..f7b899b487b07220779ccf5674bd0d1d8d259b23 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/peerfeedback/Controller/PeerFeedbackController.java @@ -0,0 +1,112 @@ +package unipotsdam.gf.modules.peer2peerfeedback.peerfeedback.Controller; + +import unipotsdam.gf.core.database.mysql.MysqlConnect; +import unipotsdam.gf.core.database.mysql.VereinfachtesResultSet; +import unipotsdam.gf.modules.peer2peerfeedback.Category; +import unipotsdam.gf.modules.peer2peerfeedback.peerfeedback.Model.Peer2PeerFeedback; + +import java.util.ArrayList; +import java.util.UUID; + +public class PeerFeedbackController { + + //@Override + public void createPeer2PeerFeedback(Peer2PeerFeedback feedback) { + + // create a new id if we found no id. + String uuid = UUID.randomUUID().toString(); + // while (existsfeedbackId(uuid)) { //Todo: existsfeedbackId + // uuid = UUID.randomUUID().toString(); + // } + + // establish connection + MysqlConnect connection = new MysqlConnect(); + connection.connect(); + + // build and execute request + String request = "INSERT INTO peerfeedback (`id`, `reciever`, `sender`, `text`, `category`, `filename`) VALUES (?,?,?,?,?,?);"; + connection.issueInsertOrDeleteStatement(request, uuid, feedback.getFeedbackreceiver(), feedback.getFeedbacksender(), feedback.getText(), feedback.getFeedbackcategory(), feedback.getFilename()); + + // close connection + connection.close(); + + // build response annotation + //Annotation annotationResponse = getAnnotation(uuid); + + // return Response.ok().build(); + //return null; + + } + + //@Override + public Peer2PeerFeedback getPeer2PeerFeedback(String id) { + + // establish connection + MysqlConnect connection = new MysqlConnect(); + connection.connect(); + + // build and execute request + String request = "SELECT * FROM peerfeedback WHERE id = ?;"; + VereinfachtesResultSet rs = connection.issueSelectStatement(request, id); + System.out.print(rs); + + if (rs.next()) { + + // save annotation + Peer2PeerFeedback feedback = getPeerfeedbackFromResultSet(rs); + + // close connection + connection.close(); + System.out.print(feedback); + + return feedback; + } else { + + // close connection + connection.close(); + System.out.print("null"); + return null; + } + + } + + public ArrayList<Peer2PeerFeedback> getAllFeedbacks(String sender) { + + ArrayList<Peer2PeerFeedback> feedbacks = new ArrayList<>(); + + // establish connection + MysqlConnect connection = new MysqlConnect(); + connection.connect(); + + // build and execute request + String request = "SELECT * FROM peerfeedback WHERE sender= ?;"; + VereinfachtesResultSet rs = connection.issueSelectStatement(request, sender); + + while (rs.next()) { + feedbacks.add(getPeerfeedbackFromResultSet(rs)); + } + + // close connection + connection.close(); + System.out.print(feedbacks); + return feedbacks; + + } + + + private Peer2PeerFeedback getPeerfeedbackFromResultSet(VereinfachtesResultSet rs) { + + String id = rs.getString("id"); + long timestamp = rs.getTimestamp(2).getTime(); + String reciever = rs.getString("reciever"); + String sender = rs.getString("sender"); + String text = rs.getString("text"); + Object category = rs.getObject("category"); + String filename = rs.getString("filename"); + + //AnnotationBody body = new AnnotationBody(title, comment, startCharacter, endCharacter); + + //return new Peer2PeerFeedback("id", 1234, Category.TITEL, "reciever", "sender", "test", "filename"); + return new Peer2PeerFeedback(id,timestamp,Category.TITEL,reciever, sender, text, filename); + } +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/peerfeedback/Model/Peer2PeerFeedback.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/peerfeedback/Model/Peer2PeerFeedback.java new file mode 100644 index 0000000000000000000000000000000000000000..3974138735cb7cba9b824310fcdad5b2eee9e079 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/peerfeedback/Model/Peer2PeerFeedback.java @@ -0,0 +1,94 @@ +package unipotsdam.gf.modules.peer2peerfeedback.peerfeedback.Model; + +import unipotsdam.gf.core.management.user.User; +import unipotsdam.gf.modules.peer2peerfeedback.Category; +import static unipotsdam.gf.view.MarkdownUtils.convertMarkdownToHtml; + +import java.io.File; + +/** + Peer2PeerFeedback Object + created by Katharina + */ + +public class Peer2PeerFeedback{ + + + private String id; + private long timestamp; + private Category category; + private String text; + private String sender; + private String receiver; + private String filename; + + public Peer2PeerFeedback(String id, long timestamp, Category category, String text, String sender, String receiver, String filename) { + this.id = id; + this.timestamp = timestamp; + this.category = category; + this.text = convertMarkdownToHtml(text); + this.sender = sender; + this.receiver = receiver; + this.filename = filename; + } + + public Peer2PeerFeedback(){ + + } + + public String getID() { return id; } + + public void setID(String id) { this.id = id; } + + public long getTimestamp() { return timestamp; } + + public void setTimestamp(long timestamp) { this.timestamp = timestamp; } + + public Category getFeedbackcategory() { + return category; + } + + public void setFeedbackcategory(Category category) { + this.category = category; + } + + public String getText() { return text; } + + public void setText(String text) { this.text = text; } + + public String getFilename() { return filename; } + + public void setFilename(String filename) { this.filename = filename; } + + public String getFeedbacksender() { + return sender; + } + + public void setFeedbacksender(String feedbacksender) { + this.sender = sender; + } + + public String getFeedbackreceiver() { + return receiver; + } + + public void setFeedbackreceiver(String feedbackreceiver) { + this.receiver = receiver; + } + + + @Override + public String toString() { + return "Peer2PeerFeedback{" + + "id=" + id + + ", timestamp=" + timestamp + + ", category=" + category + + ", sender='" + sender + + ", receiver=" + receiver + + ", text=" + text + + ", filename=" + filename + + '}'; + } + + +} \ No newline at end of file diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/peerfeedback/View/PeerFeedbackView.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/peerfeedback/View/PeerFeedbackView.java new file mode 100644 index 0000000000000000000000000000000000000000..90f0f0519bb334fce5818a3c1fd12220cdb96536 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/peer2peerfeedback/peerfeedback/View/PeerFeedbackView.java @@ -0,0 +1,57 @@ +package unipotsdam.gf.modules.peer2peerfeedback.peerfeedback.View; + +import com.sun.tools.xjc.model.Model; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import unipotsdam.gf.modules.peer2peerfeedback.Category; +import unipotsdam.gf.modules.peer2peerfeedback.peerfeedback.Model.Peer2PeerFeedback; +import unipotsdam.gf.modules.peer2peerfeedback.peerfeedback.Controller.PeerFeedbackController; + +import javax.ws.rs.*; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.ArrayList; + +@Path("/peerfeedback") +//@Consumes({"application/json"}) +//@Produces({"application/json"}) +//@Consumes(MediaType.APPLICATION_FORM_URLENCODED) +//@Produces(MediaType.TEXT_PLAIN) +@Consumes(MediaType.APPLICATION_FORM_URLENCODED) +@Produces(MediaType.APPLICATION_JSON) +public class PeerFeedbackView { + + //private final Logger log = LoggerFactory.getLogger(PeerFeedbackView.class); + + @POST + @Path("/save") + public Response createPeerfeedback(@FormParam("text") String text, @FormParam("student") String student, @FormParam("id") String id, @FormParam("reciever") String reciever, + @FormParam("sender") String sender, @FormParam("filename") String filename, @FormParam("category") Category category, @FormParam("timestamp") Long timestamp) { + + // save peerfeedback request in database and receive the new peerfeedback object + //PeerFeedbackController controller = new PeerFeedbackController(); + //Peer2PeerFeedback pf = controller.createPeer2PeerFeedback(feedback); + //return Response.ok(pf).build(); + + String message = text + student; + Peer2PeerFeedback feedback = new Peer2PeerFeedback("id", 1234, Category.TITEL, "reciever", "sender", text, "filename"); + PeerFeedbackController controller = new PeerFeedbackController(); + controller.createPeer2PeerFeedback(feedback); + + + return Response.ok().build(); //feedback + + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("{sender}") + public Response getPeerfeedback(@PathParam("sender") String sender){ + + PeerFeedbackController controller = new PeerFeedbackController(); + ArrayList<Peer2PeerFeedback> fd = controller.getAllFeedbacks(sender); + return Response.ok(fd).build(); + } + + +} diff --git a/gemeinsamforschen/src/main/webapp/assets/css/viewfeedback.css b/gemeinsamforschen/src/main/webapp/assets/css/viewfeedback.css new file mode 100644 index 0000000000000000000000000000000000000000..625f097619306e338664716c6fd15adac0e219c8 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/css/viewfeedback.css @@ -0,0 +1,42 @@ +.feedback-container { + border: 2px solid #dedede; + background-color: #f1f1f1; + border-radius: 5px; + padding: 10px; + margin: 10px 0; +} + +.darker { + border-color: #ccc; + background-color: #ddd; +} + +.feedback-container::after { + content: ""; + clear: both; + display: table; +} + +.feedback-container img { + float: left; + max-width: 60px; + width: 100%; + margin-right: 20px; + border-radius: 50%; +} + +.feedback-container img.right { + float: right; + margin-left: 20px; + margin-right:0; +} + +.time-right { + float: right; + color: #aaa; +} + +.time-left { + float: left; + color: #999; +} \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/assets/js/givepeerfeedback.js b/gemeinsamforschen/src/main/webapp/assets/js/givepeerfeedback.js new file mode 100644 index 0000000000000000000000000000000000000000..58721539a34d8a5af868d09fd6d25c6e87d8061f --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/js/givepeerfeedback.js @@ -0,0 +1,82 @@ + +var student = getQueryVariable("token"); +var project = getQueryVariable("projectId"); + +$(document).ready(function() { + $('#student').val(student); + $('#project').val(project); + + + var peerfeedbackID = getQueryVariable("Peerfeedback"); + console.log(peerfeedbackID); + var peerfeedbackID = "a3cef66d-e1b7-4030-8fcd-1413d6e77ba0"; + var sender = "sender"; + console.log(peerfeedbackID); + //if(peerfeedbackID) { + $.ajax({ + url: "../rest/peerfeedback/"+sender //peerfeedbackID {id} + + }).then(function (data) { + //$('#editor').append(data.descriptionMD); + console.log("function1"); + loadFeedback(data); + console.log("function2"); + + //document.getElementById("Peerfeedback").innerHTML = data.text +"text"; + //document.write(data); + //console.log(data); + /** + var newDiv = document.createElement("div"); + var newContent = document.createTextNode(data.text); + newDiv.appendChild(newContent); // füge den Textknoten zum neu erstellten div hinzu. + + // füge das neu erstellte Element und seinen Inhalt ins DOM ein + var currentDiv = document.getElementById("div1"); + currentDiv.appendChild(newDiv); + //document.body.insertBefore(newDiv, currentDiv); + */ + //$('#peerfeedbackID').val(peerfeedbackID); + console.log(data); + }); + // } + function loadFeedback(data) { + for (var feedback in data) { + /**var feedbackString = '<div class="pf-container">' + + '<div class="journal-date"> ' + + data[feedback].timestamp + + '</div>' + + '<div class="journal-name">' + + // TODO id to name + data[feedback].text + + '</div>' + + '<div class="journal-category">' + + data[feedback].id + + '</div>' + + '<div class="journal-edit" align="right">'; + + feedbackString = feedbackString + '</div>' + + '<div class="journal-text">' + + data[feedback].entryHTML + + '</div>' + + '</div><br><br>';*/ + + var newdiv = document.createElement("div"); + + + //newdiv.innerHTML = data[feedback].text; + //newdiv.append(data[feedback].text); + newdiv.insertAdjacentHTML('beforeend',data[feedback].text); + newdiv.className = "feedback-container"; + //var text = convertMarkdownToHtml(data[feedback].text); + //var newcontent = document.createTextNode(data[feedback].text); + //newdiv.appendChild(newcontent); // füge den Textknoten zum neu erstellten div hinzu. + + // füge das neu erstellte Element und seinen Inhalt ins DOM ein + var currentdiv = document.getElementById("div1"); + currentdiv.appendChild(newdiv); + //document.body.insertBefore(newDiv, currentDiv); + //document.getElementById("div").innerHTML = data[feedback].text; + + //$('.Peerfeedback').append(feedbackString) + }}; +}) \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/assets/js/peerfeedback.js b/gemeinsamforschen/src/main/webapp/assets/js/peerfeedback.js new file mode 100644 index 0000000000000000000000000000000000000000..beb297c9c329233a74183dbcd35034cd89be3106 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/js/peerfeedback.js @@ -0,0 +1,55 @@ +/** + * POST: Save an peerfeedback in the database + * + * @param Peer2PeerFeedback The post request + * @param responseHandler The response handler + */ +/**function createPeerfeedback(Peer2PeerFeedback, responseHandler) { + var url = "../rest/peerfeedback/save"; + var json = JSON.stringify(Peer2PeerFeedback); + $.ajax({ + url: url, + type: "POST", + data: json, + contentType: "application/json", + dataType: "json", + success: function (response) { + responseHandler(response); + } + }); +}*/ + +var student = getQueryVariable("token"); +var project = getQueryVariable("projectId"); + +function go(){ + var a = document.getElementById("editor").valueOf().toString(); + var b = document.getElementById("as"); + b.innerHTML = a.toString(); + + //b = document.getElementById("editor").innerHTML; + + +} + +$(document).ready(function() { + $('#student').val(student); + $('#project').val(project); + + $.ajax({ + url: "../rest/peerfeedback/save" + }).then(function (data) { + $('#editor').append(data.descriptionMD); + + /** //TODO preselet in select tags + new InscrybMDE({ + element: document.getElementById("editor"), + spellChecker: false, + forceSync: true, + });*/ + + //console.log(data); + location.href="givefeedback.jsp?token=" + getUserTokenFromUrl(); + alert("Feedback wurde gesendet!"); + }); +}) \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/assets/js/project-student.js b/gemeinsamforschen/src/main/webapp/assets/js/project-student.js index 520600a93a3444968585c2d382cd2497acb5c0b5..91e62e10ffcba41e1d9200d943e1ae662256b591 100644 --- a/gemeinsamforschen/src/main/webapp/assets/js/project-student.js +++ b/gemeinsamforschen/src/main/webapp/assets/js/project-student.js @@ -36,9 +36,17 @@ $(document).ready(function(){ location.href="viewfeedback.jsp?token="+getUserTokenFromUrl(); }); + $('.annotationview').click(function () { + location.href="annotation-document.jsp?token="+getUserTokenFromUrl(); + }); + $('#btnUnstructuredUpload').click(function () { location.href="unstructured-upload.jsp?token="+getUserTokenFromUrl() + "&projectId=" + getQueryVariable("projectId"); }) + + $('.viewprojectstudent').click(function () { + location.href="project-student.jsp?token="+getUserTokenFromUrl(); + }) }); /** diff --git a/gemeinsamforschen/src/main/webapp/assets/js/project-student.js.orig b/gemeinsamforschen/src/main/webapp/assets/js/project-student.js.orig new file mode 100644 index 0000000000000000000000000000000000000000..91e62e10ffcba41e1d9200d943e1ae662256b591 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/assets/js/project-student.js.orig @@ -0,0 +1,110 @@ +$(document).ready(function(){ + // fetch all submission part project representations from database + getSubmissionPartsByProjectId(getQueryVariable("projectId"), function (response) { + + // iterate over response and display each element + for (let i = 0; i < response.length; i++) { + displaySubmission(response[i].user, response[i].category, response[i].fullSubmissionId); + } + + // add click listener to feedback buttons + $('.annotationview').click(function () { + let fullSubmissionId = $(this).closest("li").data("fullSubmissionId"); + let category = $(this).closest("li").data("category"); + location.href="annotation-document.jsp?token=" + getUserTokenFromUrl() + + "&projectId=" + getQueryVariable("projectId") + + "&fullSubmissionId=" + fullSubmissionId + + "&category=" + category; + }); + + }, function () { + // display empty view + displayEmptyView() + }); + + /* + var memberTable = $('#myGroupMembers'); + memberTable.hide(); + $('#nextPhase').on('click',function(){ + memberTable.show(); + }); + */ + $('.givefeedback').click(function () { + location.href="givefeedback.jsp?token="+getUserTokenFromUrl(); + }); + $('.viewfeedback').click(function () { + location.href="viewfeedback.jsp?token="+getUserTokenFromUrl(); + }); + + $('.annotationview').click(function () { + location.href="annotation-document.jsp?token="+getUserTokenFromUrl(); + }); + + $('#btnUnstructuredUpload').click(function () { + location.href="unstructured-upload.jsp?token="+getUserTokenFromUrl() + "&projectId=" + getQueryVariable("projectId"); + }) + + $('.viewprojectstudent').click(function () { + location.href="project-student.jsp?token="+getUserTokenFromUrl(); + }) +}); + +/** + * Display category of submission part in list + * + * @param user The user of the submission part + * @param category The category of the submission part + * @param fullSubmissionId The id of the full submission the submission part belongs to + */ +function displaySubmission(user, category, fullSubmissionId) { + // build link + $('#submissionUpload').append( + $('<li>') + .append($('<span>').append(category.toUpperCase() + " eingereicht")) + .append($('<a>').attr("class", "annotationview").attr("role", "button") + .append($('<label>').css("font-size", "10px") + .append($('<i>').attr("class", "far fa-comments").css("font-size", "15px")) + .append("feedback") + ) + ) + // add data to link + .data("fullSubmissionId", fullSubmissionId) + .data("category", category) + ); + +} + +/** + * Display a not found message if there are no submission parts in the database (or on error) + */ +function displayEmptyView() { + // build link + $('#submissionUpload').append( + $('<li>') + .append($('<span>').append("keine Daten gefunden")) + ); +} + +/** + * GET: Get all representations of a submission part for a given project id + * + * @param projectId The id of the project + * @param responseHandler The response handler + * @param errorHandler The error handler + */ +function getSubmissionPartsByProjectId(projectId, responseHandler, errorHandler) { + var url = "../rest/submissions/project/" + projectId; + $.ajax({ + url: url, + type: "GET", + dataType: "json", + success: function (response) { + // handle the response + responseHandler(response); + }, + error: function () { + // handle the error + errorHandler(); + } + }) +} \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/givefeedback.jsp b/gemeinsamforschen/src/main/webapp/pages/givefeedback.jsp index c01c2a3c665c4a23f249fac3e5cba112107e885e..688a5df9105e5918f12ae6464bf5f483f868a37b 100644 --- a/gemeinsamforschen/src/main/webapp/pages/givefeedback.jsp +++ b/gemeinsamforschen/src/main/webapp/pages/givefeedback.jsp @@ -1,10 +1,13 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %> <!DOCTYPE html> <html> <head> + <%-- <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>muster-gemeinsam-forschen</title> @@ -21,37 +24,27 @@ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.css"> <script src="../assets/js/utility.js"></script> <script src="../assets/js/project-student.js"></script> + <link rel="stylesheet" type="text/css" href="../assets/css/editDescription.css"> + <script src="../assets/js/jquery.min.js"></script> + <script src="../assets/bootstrap/js/bootstrap.min.js"></script> + <script src="../assets/js/Sidebar-Menu.js"></script> + <script src="../assets/js/editDescription.js"></script> + --%> + + <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.css"> + <script src="https://cdn.jsdelivr.net/npm/inscrybmde@1.11.3/dist/inscrybmde.min.js"></script> + <link rel="stylesheet" type="text/css" href="../assets/css/create-journal.css"> + <script src="../assets/js/utility.js"></script> + <script src="../assets/js/project-student.js"></script> + <script src="../assets/js/peerfeedback.js"></script> + <omniDependencies:omniDependencies/> </head> <body> <div id="wrapper"> - <menu:menu></menu:menu> - + <menu:menu/> <div class="page-content-wrapper"> - <div class="container-fluid"> - <h1 id="projectId"> PeerFeedback</h1> - </div> - <div align="right" class="dropdown" > - <button style= "position: absolute; right: 50px;" class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown"> - - <i class="glyphicon glyphicon-envelope"></i> - </button> - - <ul class="dropdown-menu"> - <li><a class="viewfeedback" role="button">Feedback A</a></li> - <li><a class="viewfeedback" role="button">Feedback B</a></li> - <li><a class="viewfeedback" role="button">Feedback C</a></li> - </ul> - - <a href="#"> - <span class="glyphicon glyphicon-cog" style="font-size:29px;margin-right:30px;margin-top:3px;"></span> - </a> - - </div> - - <div> - - </div> + <headLine:headLine/> <div> <table> <tr> @@ -85,110 +78,61 @@ </label> </div> <hr /> - <div class="line-spacer"></div> - <td id="Peerfeedback" valign="top"> + <div> + <table> + <tr> + <td id="yourContent"> + <h2> Schreibe dein Feedback! </h2> - <div style="height:100px;padding-bottom:100px;"> - <textarea id="demo1"> - Das ist ein Test! - </textarea> - </div> + <form id= "form" method="POST" action="../rest/peerfeedback/save"> + <%--id="journalform" class="form-journal"--%> + <input type="hidden" id="student" name="student"> + <input type="hidden" id="project" name="project"> + <input type="hidden" id="feedbackid" name="id"> + <input type="hidden" id="reciever" name="reciever"> + <input type="hidden" id="sender" name="sender"> + <input type="hidden" id="filename" name="filename"> + <input type="hidden" id="category" name="category"> + <input type="hidden" id="filename" name="filename"> - <button onclick="save()">Speichern</button> - <p id = "output"> Output... </p> - <script> - var editor = new InscrybMDE({ - element: document.getElementById("demo1"), - spellChecker: false, - //toolbar: ["bold", "italic", "heading", "|", "quote", "table", "code", "|" , "side-by-side", "fullscreen"], - minHeight: "80px", - }); + <div class="journal-form-container"> + <div class="journal-form-editor"> + <textarea id="editor" name="text"></textarea> <%--form="journalform"--%> + </div> - editor.style = "min-height: 100px"; + <div class="journal-form-buttons"> + <input class="btn btn-default btn-sm" type="submit"> + <a id="backLink" class="btn btn-default btn-sm"> Zurück </a> + </div> - function save() { - console.log("save"); - console.log(editor.value()); + <div> + <p id="as">Now what</p> + <input type="button" value="get txt" onclick="go()" /> + </div> - var converter = new showdown.Converter(), - text = editor.value(), - html = converter.makeHtml(text); + </div> + </form> - document.getElementById('output').innerHTML = html;11 - } - </script> + </td> + </tr> + </table> + </div> + - <button class="btn btn-secondary" onclick="goBack()">Zurück</button> <script> function goBack() { window.history.back(); } </script> - </td> - - <td id="chat"> - <div class="card"> - <div class="card-header"> - <h6 class="mb-0">Gruppen+Projekt Chat</h6> - </div> - <div class="card-body"> - <ul class="list-group"> - <li class="list-group-item"> - <div class="media"> - <div></div> - <div class="media-body"> - <div class="media" style="overflow:visible;"> - <div><img src="../assets/img/1.jpg" class="mr-3" - style="width: 25px; height:25px;"></div> - <div class="media-body" style="overflow:visible;"> - <div class="row"> - <div class="col-md-12"> - <p><a href="#">Sara Doe:</a> This guy has been going - 100+ MPH on side streets. <br> - <small class="text-muted">August 6, 2016 @ 10:35am - </small> - </p> - </div> - </div> - </div> - </div> - </div> - </div> - </li> - <li class="list-group-item"> - <div class="media"> - <div></div> - <div class="media-body"> - <div class="media" style="overflow:visible;"> - <div><img src="../assets/img/2.jpg" class="mr-3" - style="width: 25px; height:25px;"></div> - <div class="media-body" style="overflow:visible;"> - <div class="row"> - <div class="col-md-12"> - <p><a href="#">Brennan Prill:</a> This guy has been - going 100+ MPH on side streets. <br> - <small class="text-muted">August 6, 2016 @ 10:35am - </small> - </p> - </div> - </div> - </div> - </div> - </div> - </div> - </li> - </ul> - <button class="btn btn-light"> - Add Comment - </button> - </div> - </div> - </td> + </tr> + </td> + + </tr> </table> </div> @@ -198,6 +142,7 @@ <script src="../assets/js/jquery.min.js"></script> <script src="../assets/bootstrap/js/bootstrap.min.js"></script> <script src="../assets/js/Sidebar-Menu.js"></script> +<script src="../assets/js/createJournal.js"></script> </body> </html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/project-student.jsp b/gemeinsamforschen/src/main/webapp/pages/project-student.jsp index a4ff66173013c070fb9a27c01d8279db77fbfdc2..ddb3cae7992b5aa6647c19e7386f54ffef99c2ed 100644 --- a/gemeinsamforschen/src/main/webapp/pages/project-student.jsp +++ b/gemeinsamforschen/src/main/webapp/pages/project-student.jsp @@ -103,7 +103,7 @@ </tr> </table> - <button onclick="goBack()" class="btn btn-secondary">Zurueck</button> + <button onclick="goBack()" class="btn btn-secondary">Zurück</button> </td> </tr> </table> diff --git a/gemeinsamforschen/src/main/webapp/pages/project-student.jsp.orig b/gemeinsamforschen/src/main/webapp/pages/project-student.jsp.orig new file mode 100644 index 0000000000000000000000000000000000000000..a5671b8ada831eeef0162fca442adfced0d10762 --- /dev/null +++ b/gemeinsamforschen/src/main/webapp/pages/project-student.jsp.orig @@ -0,0 +1,187 @@ +<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> +<%--suppress XmlDuplicatedId --%> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="footer" %> + + + +<!--todo: E-mail an Studenten als Notifikation für Phasenwechsel --> + + +<!DOCTYPE html> +<html> + +<head> + <omniDependencies:omniDependencies/> + <script src="../assets/js/project-student.js"></script> + <link rel="stylesheet" href="../assets/css/Community-ChatComments.css"> + +</head> + +<body> +<div id="wrapper"> + <menu:menu/> + + <div class="page-content-wrapper"> + <headLine:headLine/> + <div> + <table> + <tr> + <td id="yourContent"> + <h1>Feedbackable Students</h1> + <!-- here will be all the content --> + <table id="myGroupMembers"> + <tr> + + <td width="100px" valign="top"> + <h3>student1</h3> + <img src="../assets/img/1.jpg"> + <a href="#">student1@uni.de</a> + <hr> + <ul> + + <li> + Projektübersicht hochgeladen + <a class="annotationview" role="button"> + <label style="font-size:10px;"><i class="far fa-comments" + style="font-size:15px;"></i>feedback</label> + </a> + </li> + <li> + Blumen ins Hausaufgabenheft geklebt + <a class="annotationview" role="button"> + <label style="font-size:10px;"><i class="far fa-comments" + style="font-size:15px;"></i>feedback</label> + </a> + </li> + </ul> + </td> + <td></td> + + <td width="100px" valign="top"> + <h3>student2</h3> + <img src="../assets/img/2.jpg"> + <a href="#">student2@uni.de</a> + <hr> + <ul> + <li> + Blumen an Vegetarier verfüttert + <a class="annotationview" role="button"> + <label style="font-size:10px;"><i class="far fa-comments" + style="font-size:15px;"></i>feedback</label> + </a> + </li> + <li> + Literaturverzeichnis hochgeladen + <a class="annotationview" role="button"> + <label style="font-size:10px;"><i class="far fa-comments" + style="font-size:15px;"></i>feedback</label> + </a> + </li> + <li> + Die armen Vegetarier + <a class="annotationview" role="button"> + <label style="font-size:10px;"><i class="far fa-comments" + style="font-size:15px;"></i>feedback</label> + </a> + </li> + </ul> + </td> + <td></td> + + <td width="100px" valign="top"> + <h3>student3</h3> + <img src="../assets/img/3.jpg"> + <a href="#">student3@uni.de</a> + <hr> + <ul id="submissionUpload"> + </ul> + </td> + + </tr> + </table> + +<<<<<<< HEAD + <button onclick="goBack()" class="btn btn-secondary">Zurück</button> + + <script> + function goBack() { + window.history.back(); + } + </script> + + </td> + <td id="chat"> + <div class="card"> + <div class="card-header"> + <h6 class="mb-0">Gruppen+Projekt Chat</h6> + </div> + <div class="card-body"> + <ul class="list-group"> + <li class="list-group-item"> + <div class="media"> + <div></div> + <div class="media-body"> + <div class="media" style="overflow:visible;"> + <div><img src="../assets/img/1.jpg" class="mr-3" + style="width: 25px; height:25px;"></div> + <div class="media-body" style="overflow:visible;"> + <div class="row"> + <div class="col-md-12"> + <p><a href="#">Sara Doe:</a> This guy has been going + 100+ MPH on side streets. <br> + <small class="text-muted">August 6, 2016 @ 10:35am + </small> + </p> + </div> + </div> + </div> + </div> + </div> + </div> + </li> + <li class="list-group-item"> + <div class="media"> + <div></div> + <div class="media-body"> + <div class="media" style="overflow:visible;"> + <div><img src="../assets/img/2.jpg" class="mr-3" + style="width: 25px; height:25px;"></div> + <div class="media-body" style="overflow:visible;"> + <div class="row"> + <div class="col-md-12"> + <p><a href="#">Brennan Prill:</a> This guy has been + going 100+ MPH on side streets. <br> + <small class="text-muted">August 6, 2016 @ 10:35am + </small> + </p> + </div> + </div> + </div> + </div> + </div> + </div> + </li> + </ul> + <button class="btn btn-light"> + Add Comment + </button> + </div> + </div> +======= + <button onclick="goBack()" class="btn btn-secondary">Zurueck</button> +>>>>>>> development_master + </td> + </tr> + </table> + </div> + </div> + <footer:footer/> + +</div> + +</body> + +</html> \ No newline at end of file diff --git a/gemeinsamforschen/src/main/webapp/pages/viewfeedback.jsp b/gemeinsamforschen/src/main/webapp/pages/viewfeedback.jsp index 7782962570fe23549d27559bf209c1eeb53695af..d444f858ad4ac0803d6d99e233a90ed4e809144b 100644 --- a/gemeinsamforschen/src/main/webapp/pages/viewfeedback.jsp +++ b/gemeinsamforschen/src/main/webapp/pages/viewfeedback.jsp @@ -1,30 +1,25 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu"%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="menu" %> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="headLine" %> +<%@ taglib uri="../core/pages/gemeinsamForschen.tld" prefix="omniDependencies" %> <!DOCTYPE html> <html> <head> - <meta charset="utf-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>muster-gemeinsam-forschen</title> - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> - <link rel="stylesheet" href="../assets/css/styles.css"> - <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> - <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> - <link rel="stylesheet" href="../assets/fonts/font-awesome.min.css"> - <link rel="stylesheet" href="../assets/css/Community-ChatComments.css"> - <link rel="stylesheet" href="../assets/css/Sidebar-Menu-1.css"> - <link rel="stylesheet" href="../assets/css/Sidebar-Menu.css"> + <link rel="stylesheet" href="../assets/css/viewfeedback.css"> + <omniDependencies:omniDependencies/> <script src="../assets/js/utility.js"></script> <script src="../assets/js/project-student.js"></script> + <script src="../assets/js/givepeerfeedback.js"></script> + </head> <body> <div id="wrapper"> - <menu:menu></menu:menu> - + <menu:menu/> <div class="page-content-wrapper"> + <headLine:headLine/> <div class="container-fluid"> <h1 id="projectId"> PeerFeedback</h1> </div> @@ -48,22 +43,66 @@ <div> <table> <tr> - <td id="Peerfeedback"> - <h2>Feedback Nachrichten von Student X</h2> + <tr> + <th>Feedback Nachrichten von Student X</th> + </tr> + + + <td id="filter-feedbacks"> + + + <%--<iframe width="90%" height="200%" src="http://rocketchat.westeurope.cloudapp.azure.com/channel/general?layout=embedded"></iframe> + --%> + <%--<p id="view"></p> type="hidden"--%> + <input type="hidden" name="peerfeedbackID" id="peerfeedbackID-input" value=""/> + <div style="height: 100px; overflow: auto"> + <div class="feedback-container"> + <p>Sender</p> + <span class="time-right">11:00</span> + </div> + </div> - <iframe width="90%" height="200%" src="http://rocketchat.westeurope.cloudapp.azure.com/channel/general?layout=embedded"></iframe> - <button class="btn btn-secondary" onclick="goBack()">Zurück</button> + </td> - <script> - function goBack() { - window.history.back(); - } - </script> + <td id="view-feedbacks"> + + <div style="height: 300px; overflow: auto"> + + <div class="feedback-container"> + <p>Hello. How are you today?</p> + <span class="time-right">11:00</span> + </div> + + <div class="feedback-container"> + <p>Hey! I'm fine. Thanks for asking!</p> + <span class="time-left">11:01</span> + </div> + + <div class="feedback-container"> + <p>Sweet! So, what do you wanna do today?</p> + <span class="time-right">11:02</span> + </div> + + <div id="div1"></div> + + </div> + </td> + + + <button class="btn btn-secondary" onclick="goBack()">Zurück</button> + + <script> + function goBack() { + window.history.back(); + } + </script> </td> + + <td id="chat"> <div class="card"> <div class="card-header"> diff --git a/gemeinsamforschen/src/scripts/dbschema/peerfeedback b/gemeinsamforschen/src/scripts/dbschema/peerfeedback new file mode 100644 index 0000000000000000000000000000000000000000..8e7c7de6b40df09f1a13f31c294daed1cfc58d2f --- /dev/null +++ b/gemeinsamforschen/src/scripts/dbschema/peerfeedback @@ -0,0 +1,16 @@ +USE `fltrail`; + +CREATE TABLE if not exists `peerfeedback` ( + `id` varchar(130) NOT NULL, + `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP + ON UPDATE CURRENT_TIMESTAMP, + `reciever` varchar(400) NOT NULL, + `sender` varchar(400) NOT NULL, + `text` varchar(1000) NOT NULL, + `category` varchar(400) NOT NULL, + `filename` varchar(400) NOT NULL, + PRIMARY KEY( id ) + +) + ENGINE = InnoDB + DEFAULT CHARSET = utf8; \ No newline at end of file diff --git a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java index 1bd1d7a2e0f059759079914b2ab766f590df6bef..2022098901c1d33133d46ffa6ebe1268e8b960d9 100644 --- a/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java +++ b/gemeinsamforschen/src/test/java/unipotsdam/gf/interfaces/ActivityFlowTest.java @@ -6,10 +6,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mockito.Spy; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoJUnitRunner; import org.mockito.junit.MockitoRule; @@ -17,18 +14,15 @@ import uk.co.jemos.podam.api.PodamFactory; import uk.co.jemos.podam.api.PodamFactoryImpl; import unipotsdam.gf.config.GFApplicationBinder; import unipotsdam.gf.core.management.Management; -import unipotsdam.gf.core.management.group.Group; import unipotsdam.gf.core.management.project.Project; import unipotsdam.gf.core.management.project.ProjectConfiguration; import unipotsdam.gf.core.management.user.User; import unipotsdam.gf.core.states.ProjectPhase; -import unipotsdam.gf.modules.assessment.QuizAnswer; -import unipotsdam.gf.modules.assessment.controller.model.StudentAndQuiz; import unipotsdam.gf.modules.groupfinding.GroupFormationMechanism; import unipotsdam.gf.modules.groupfinding.GroupfindingCriteria; import unipotsdam.gf.modules.journal.model.Journal; import unipotsdam.gf.modules.peer2peerfeedback.Category; -import unipotsdam.gf.modules.peer2peerfeedback.Peer2PeerFeedback; +import unipotsdam.gf.modules.peer2peerfeedback.peerfeedback.Model.Peer2PeerFeedback; import unipotsdam.gf.modules.researchreport.ResearchReport; import unipotsdam.gf.modules.researchreport.ResearchReportManagement; import javax.inject.Inject; @@ -39,7 +33,6 @@ import java.util.Iterator; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify;