diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java index 6161d2b92cb9d615e8ad8d2067cd6612845ecf78..3e202baddc1ced7a4d586e7b4b1a0d60ab410861 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/controller/SubmissionController.java @@ -16,9 +16,9 @@ import unipotsdam.gf.modules.submission.model.SubmissionPart; import unipotsdam.gf.modules.submission.model.SubmissionPartBodyElement; import unipotsdam.gf.modules.submission.model.SubmissionPartPostRequest; import unipotsdam.gf.modules.submission.model.SubmissionProjectRepresentation; +import unipotsdam.gf.modules.submission.model.Visibility; import unipotsdam.gf.modules.submission.view.SubmissionRenderData; import unipotsdam.gf.modules.user.User; -import unipotsdam.gf.modules.user.UserDAO; import unipotsdam.gf.mysql.MysqlConnect; import unipotsdam.gf.mysql.VereinfachtesResultSet; import unipotsdam.gf.process.progress.HasProgress; @@ -41,12 +41,13 @@ import java.util.UUID; public class SubmissionController implements ISubmission, HasProgress { private static final org.slf4j.Logger log = LoggerFactory.getLogger(SubmissionController.class); + @Inject private MysqlConnect connection; - @Inject - private UserDAO userDAO; + @Inject private GroupDAO groupDAO; + @Inject private ProjectDAO projectDAO; @@ -59,11 +60,24 @@ public class SubmissionController implements ISubmission, HasProgress { while (existsFullSubmissionId(uuid)) { uuid = UUID.randomUUID().toString(); } + String requestCommand = "INSERT INTO"; + if (!(fullSubmissionPostRequest.getContributionCategory() == ContributionCategory.PORTFOLIO)) { + Project project = new Project(fullSubmissionPostRequest.getProjectName()); + FullSubmission fullSubmission = getFullSubmissionBy(fullSubmissionPostRequest.getGroupId(), project, + fullSubmissionPostRequest.getContributionCategory()); + if (fullSubmission != null) { + uuid = fullSubmission.getId(); + } + requestCommand = "REPLACE INTO"; + } + + String request = String.join(" ", requestCommand.trim(), + "fullsubmissions (`id`, `groupId`, `text`, `projectName`, `contributionCategory`, `userEmail`, `visibility`) VALUES (?,?,?,?,?,?,?);"); // build and execute request - String request = "REPLACE INTO fullsubmissions (`id`, `groupId`, `text`, `projectName`, `contributionCategory`) VALUES (?,?,?,?,?);"; connection.issueInsertOrDeleteStatement(request, uuid, fullSubmissionPostRequest.getGroupId(), - fullSubmissionPostRequest.getText(), fullSubmissionPostRequest.getProjectName(), fullSubmissionPostRequest.getContributionCategory()); + fullSubmissionPostRequest.getText(), fullSubmissionPostRequest.getProjectName(), + fullSubmissionPostRequest.getContributionCategory(), fullSubmissionPostRequest.getUserEMail(), fullSubmissionPostRequest.getVisibility()); // close connection connection.close(); @@ -96,7 +110,7 @@ public class SubmissionController implements ISubmission, HasProgress { return fullSubmission; } - public FullSubmission getFullSubmissionByGroupIdAndProjectNameAndContributionCategory(int groupId, Project project, ContributionCategory contributionCategory) { + public FullSubmission getFullSubmissionBy(int groupId, Project project, ContributionCategory contributionCategory) { FullSubmission fullSubmission = null; connection.connect(); @@ -112,7 +126,7 @@ public class SubmissionController implements ISubmission, HasProgress { } public String getFullSubmissionId(Integer groupId, Project project, ContributionCategory contributionCategory) { - FullSubmission fullSubmission = getFullSubmissionByGroupIdAndProjectNameAndContributionCategory(groupId, project, contributionCategory); + FullSubmission fullSubmission = getFullSubmissionBy(groupId, project, contributionCategory); String fullSubmissionId = null; if (!Objects.isNull(fullSubmission)) { fullSubmissionId = fullSubmission.getId(); @@ -229,10 +243,9 @@ public class SubmissionController implements ISubmission, HasProgress { connection.close(); // get the new submission from database - SubmissionPart submissionPart = getSubmissionPart(submissionPartPostRequest.getFullSubmissionId(), - submissionPartPostRequest.getCategory()); - return submissionPart; + return getSubmissionPart(submissionPartPostRequest.getFullSubmissionId(), + submissionPartPostRequest.getCategory()); } @@ -357,13 +370,9 @@ public class SubmissionController implements ISubmission, HasProgress { int count = rs.getInt("exists"); // return true if we found the id - if (count < 1) { - return false; - } else { - return true; - } + return count >= 1; } - return null; + return false; } /** @@ -377,11 +386,13 @@ public class SubmissionController implements ISubmission, HasProgress { String id = rs.getString("id"); long timestamp = rs.getTimestamp("timestamp").getTime(); Integer groupId = rs.getInt("groupId"); + String userEmail = rs.getString("userEmail"); String text = rs.getString("text"); String projectName = rs.getString("projectName"); ContributionCategory contributionCategory = ContributionCategory.valueOf(rs.getString("contributionCategory")); + Visibility visibility = Visibility.valueOf(rs.getString("visibility")); - return new FullSubmission(id, timestamp, groupId, text, contributionCategory, projectName); + return new FullSubmission(id, timestamp, groupId, userEmail, text, contributionCategory, projectName, visibility); } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmission.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmission.java index 6ebfb2f225cb5289aa3c87c8f0ed43ff3ea6ed2d..033416f65819abdd07d75693161813dabc483017 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmission.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmission.java @@ -12,17 +12,25 @@ public class FullSubmission { private String id; private long timestamp; private Integer groupId; + private String userEmail; private String text; private ContributionCategory contributionCategory; private String projectName; + private Visibility visibility; - public FullSubmission(String id, long timestamp, Integer groupId, String text, ContributionCategory contributionCategory, String projectName) { + public FullSubmission(String id, long timestamp, Integer groupId, String text, ContributionCategory contributionCategory, String projectName, Visibility visibility) { + this(id, timestamp, groupId, null, text, contributionCategory, projectName, visibility); + } + + public FullSubmission(String id, long timestamp, Integer groupId, String userEmail, String text, ContributionCategory contributionCategory, String projectName, Visibility visibility) { this.id = id; this.timestamp = timestamp; this.groupId = groupId; + this.userEmail = userEmail; this.text = text; this.contributionCategory = contributionCategory; this.projectName = projectName; + this.visibility = visibility; } public FullSubmission(String submissionId) { @@ -78,6 +86,21 @@ public class FullSubmission { this.projectName = projectName; } + public String getUserEmail() { + return userEmail; + } + + public void setUserEmail(String userEmail) { + this.userEmail = userEmail; + } + + public Visibility getVisibility() { + return visibility; + } + + public void setVisibility(Visibility visibility) { + this.visibility = visibility; + } @Override public String toString() { @@ -85,9 +108,11 @@ public class FullSubmission { "id='" + id + '\'' + ", timestamp=" + timestamp + ", groupId=" + groupId + + ", userEmail='" + userEmail + '\'' + ", text='" + text + '\'' + ", contributionCategory=" + contributionCategory + ", projectName='" + projectName + '\'' + + ", visibility=" + visibility + '}'; } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmissionPostRequest.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmissionPostRequest.java index d3a6d3cd1e9b59a81581bda8579b4f421dd4097e..ee7df00c6f95ee2871004f4659ae729b5a8618c5 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmissionPostRequest.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/FullSubmissionPostRequest.java @@ -1,20 +1,27 @@ package unipotsdam.gf.modules.submission.model; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; import unipotsdam.gf.modules.assessment.controller.model.ContributionCategory; /** * @author Sven Kästle * skaestle@uni-potsdam.de */ +@JsonIgnoreProperties(ignoreUnknown = true) public class FullSubmissionPostRequest { // variables private Integer groupId; + private boolean personal; private String text; private String html; private String projectName; private ContributionCategory contributionCategory; + // have to be set in backend + private String userEMail; + private Visibility visibility; + public FullSubmissionPostRequest() { } @@ -23,7 +30,7 @@ public class FullSubmissionPostRequest { return groupId; } - public void setUser(Integer groupId) { + public void setGroupId(Integer groupId) { this.groupId = groupId; } @@ -59,15 +66,39 @@ public class FullSubmissionPostRequest { this.contributionCategory = contributionCategory; } + public boolean isPersonal() { + return personal; + } + + public void setPersonal(boolean personal) { + this.personal = personal; + } + + public String getUserEMail() { + return userEMail; + } + + public void setUserEMail(String userEMail) { + this.userEMail = userEMail; + } + + public Visibility getVisibility() { + return visibility; + } + + public void setVisibility(Visibility visibility) { + this.visibility = visibility; + } + @Override public String toString() { return "FullSubmissionPostRequest{" + "groupId=" + groupId + + ", personal=" + personal + ", text='" + text + '\'' + ", html='" + html + '\'' + ", projectName='" + projectName + '\'' + - ", contributionCategory='" + contributionCategory + '\'' + + ", contributionCategory=" + contributionCategory + '}'; } - } diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/Visibility.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/Visibility.java new file mode 100644 index 0000000000000000000000000000000000000000..56a9e9554528bffbe6ab4841d929da8a45b089f9 --- /dev/null +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/model/Visibility.java @@ -0,0 +1,9 @@ +package unipotsdam.gf.modules.submission.model; + +public enum Visibility { + + PUBLIC, + DOCENT, + GROUP, + PERSONAL +} diff --git a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/view/SubmissionService.java b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/view/SubmissionService.java index 210fd00a817dca029793ef17070e53e51de34e28..620453335c37d16530bf0b33321c9914b4bb2a29 100644 --- a/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/view/SubmissionService.java +++ b/gemeinsamforschen/src/main/java/unipotsdam/gf/modules/submission/view/SubmissionService.java @@ -13,6 +13,7 @@ import unipotsdam.gf.modules.submission.model.SubmissionPart; import unipotsdam.gf.modules.submission.model.SubmissionPartPostRequest; import unipotsdam.gf.modules.submission.model.SubmissionProjectRepresentation; import unipotsdam.gf.modules.submission.model.SubmissionResponse; +import unipotsdam.gf.modules.submission.model.Visibility; import unipotsdam.gf.modules.user.User; import unipotsdam.gf.modules.user.UserDAO; import unipotsdam.gf.process.DossierCreationProcess; @@ -65,29 +66,34 @@ public class SubmissionService { public Response addFullSubmission(@Context HttpServletRequest req, FullSubmissionPostRequest fullSubmissionPostRequest) { // save full submission request in database and return the new full submission - final FullSubmission fullSubmission; + String userEmail = (String) req.getSession().getAttribute(GFContexts.USEREMAIL); User user = userDAO.getUserByEmail(userEmail); Project project = new Project(fullSubmissionPostRequest.getProjectName()); - try { - fileManagementService.saveStringAsPDF(user, project, fullSubmissionPostRequest); - } catch (DocumentException | IOException e) { - e.printStackTrace(); - return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Error while converting to pdf").build(); + + if (fullSubmissionPostRequest.isPersonal()) { + fullSubmissionPostRequest.setUserEMail(userEmail); + fullSubmissionPostRequest.setVisibility(Visibility.PERSONAL); + } else { + fullSubmissionPostRequest.setVisibility(Visibility.GROUP); } - fullSubmission = submissionController.addFullSubmission(fullSubmissionPostRequest); + final FullSubmission fullSubmission = submissionController.addFullSubmission(fullSubmissionPostRequest); switch (fullSubmission.getContributionCategory()) { case DOSSIER: + try { + fileManagementService.saveStringAsPDF(user, project, fullSubmissionPostRequest); + } catch (DocumentException | IOException e) { + e.printStackTrace(); + return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("Error while converting to pdf").build(); + } dossierCreationProcess.notifyAboutSubmission(user, project); break; case PORTFOLIO: break; } - - return Response.ok(fullSubmission).build(); } @@ -117,7 +123,7 @@ public class SubmissionService { @PathParam("groupId") Integer groupId, @PathParam("contributionCategory") ContributionCategory contributionCategory) { Project project = new Project(projectName); - FullSubmission fullSubmission = submissionController.getFullSubmissionByGroupIdAndProjectNameAndContributionCategory(groupId, project, contributionCategory); + FullSubmission fullSubmission = submissionController.getFullSubmissionBy(groupId, project, contributionCategory); if (Objects.isNull(fullSubmission)) { return Response.status(Response.Status.NOT_FOUND).build(); @@ -190,8 +196,14 @@ public class SubmissionService { public void finalize(@PathParam("submissionId") String submissionId, @PathParam("projectId") String projectId, @Context HttpServletRequest req) { String userEmail = (String) req.getSession().getAttribute(GFContexts.USEREMAIL); - dossierCreationProcess.finalizeDossier(new FullSubmission(submissionId), new User(userEmail), - new Project(projectId)); + FullSubmission fullSubmission = submissionController.getFullSubmission(submissionId); + switch (fullSubmission.getContributionCategory()) { + case DOSSIER: + dossierCreationProcess.finalizeDossier(fullSubmission, new User(userEmail), new Project(projectId)); + break; + case PORTFOLIO: + break; + } } @GET diff --git a/gemeinsamforschen/src/main/webapp/annotation/js/unstructuredUpload.js b/gemeinsamforschen/src/main/webapp/annotation/js/unstructuredUpload.js index c1cc07d427cb3de4fcfd3b325be175af408e4824..5a555a2fd827295b97579ad6942fe2d3903ab13a 100644 --- a/gemeinsamforschen/src/main/webapp/annotation/js/unstructuredUpload.js +++ b/gemeinsamforschen/src/main/webapp/annotation/js/unstructuredUpload.js @@ -17,30 +17,31 @@ $(document).ready(function () { $('#btnSave').click(function () { - if (quill.getText().length > 1) { - let content = quill.getContents(); - let html = quill.root.innerHTML; + getMyGroupId(function (groupId) { + if (quill.getText().length > 1) { + let content = quill.getContents(); + let html = quill.root.innerHTML; - // build request - let fullSubmissionPostRequest = { - groupId: groupId, - text: JSON.stringify(content), - html: html, - projectName: $('#projectName').text().trim(), - contributionCategory: contributionCategory.toUpperCase() - }; + // build request + let fullSubmissionPostRequest = { + groupId: groupId, + text: JSON.stringify(content), + html: html, + projectName: $('#projectName').text().trim(), + personal: personal, + contributionCategory: contributionCategory.toUpperCase() + }; - // save request in database - createFullSubmission(fullSubmissionPostRequest, function () { - - // back to main page - location.href = hierarchyLevel + "project/tasks-student.jsp?projectName=" + $('#projectName').text().trim(); - }); - } else { - alert("Ein Text wird benötigt"); - } - // fetch user and text + // save request in database + createFullSubmission(fullSubmissionPostRequest, function () { + // back to main page + location.href = hierarchyLevel + "project/tasks-student.jsp?projectName=" + $('#projectName').text().trim(); + }); + } else { + alert("Ein Text wird benötigt"); + } + }); }); $('#backToTasks').click(function () { diff --git a/gemeinsamforschen/src/test/resources/database/fltrail.sql b/gemeinsamforschen/src/test/resources/database/fltrail.sql index 9f6a414ab57acc7956e192915da3d5a4830d5be6..fa16c8f751cb0899145fa3a1ab8168d75163b65a 100644 --- a/gemeinsamforschen/src/test/resources/database/fltrail.sql +++ b/gemeinsamforschen/src/test/resources/database/fltrail.sql @@ -3,7 +3,7 @@ -- https://www.phpmyadmin.net/ -- -- Host: 127.0.0.1 --- Erstellungszeit: 24. Mai 2019 um 11:08 +-- Erstellungszeit: 10. Jun 2019 um 10:43 -- Server-Version: 10.1.32-MariaDB -- PHP-Version: 7.2.5 @@ -131,7 +131,9 @@ CREATE TABLE `fullsubmissions` `projectName` varchar(200) NOT NULL, `feedbackGroup` int(11) DEFAULT NULL, `finalized` tinyint(1) DEFAULT NULL, - `contributionCategory` varchar(200) NOT NULL + `contributionCategory` varchar(200) NOT NULL, + `userEmail` varchar(255) DEFAULT NULL, + `visibility` varchar(200) NOT NULL ) ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT ='This holds the aggregated text of the dossier students should upload'; @@ -580,8 +582,10 @@ ALTER TABLE `contributionrating` -- ALTER TABLE `fullsubmissions` ADD PRIMARY KEY (`id`), - ADD UNIQUE KEY `fullsubmissions_user_projectName_uindex` (`groupId`, `projectName`), - ADD KEY `fullsubmissions_projects_name_fk` (`projectName`); + ADD UNIQUE KEY `fullsubmissions_id_uindex` (`id`), + ADD KEY `fullsubmissions_projects_name_fk` (`projectName`), + ADD KEY `fullsubmissions_users_email_fk` (`userEmail`), + ADD KEY `fullsubmissions_groups_id_fk` (`groupId`); -- -- Indizes für die Tabelle `grades` @@ -812,7 +816,9 @@ ALTER TABLE `contributionrating` -- Constraints der Tabelle `fullsubmissions` -- ALTER TABLE `fullsubmissions` - ADD CONSTRAINT `fullsubmissions_projects_name_fk` FOREIGN KEY (`projectName`) REFERENCES `projects` (`name`) ON DELETE CASCADE ON UPDATE CASCADE; + ADD CONSTRAINT `fullsubmissions_groups_id_fk` FOREIGN KEY (`groupId`) REFERENCES `groups` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `fullsubmissions_projects_name_fk` FOREIGN KEY (`projectName`) REFERENCES `projects` (`name`) ON DELETE CASCADE ON UPDATE CASCADE, + ADD CONSTRAINT `fullsubmissions_users_email_fk` FOREIGN KEY (`userEmail`) REFERENCES `users` (`email`) ON DELETE CASCADE ON UPDATE CASCADE; -- -- Constraints der Tabelle `grades`