Skip to content
Snippets Groups Projects
Commit d1168c34 authored by Martin Staehr's avatar Martin Staehr
Browse files

#77 adds functionality to save portfolio entry

parent 7f2a277f
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
......
......@@ -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 +
'}';
}
......
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 +
'}';
}
}
package unipotsdam.gf.modules.submission.model;
public enum Visibility {
PUBLIC,
DOCENT,
GROUP,
PERSONAL
}
......@@ -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
......
......@@ -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 () {
......
......@@ -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`
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment