Skip to content
Snippets Groups Projects
Commit 8a82a77c authored by wiepke's avatar wiepke
Browse files

create-groups-manual prototype done

parent 11cfde66
No related branches found
No related tags found
No related merge requests found
Showing
with 109 additions and 42 deletions
......@@ -19,6 +19,8 @@ public interface IGroupFinding {
void selectGroupfindingCriteria(
GroupfindingCriteria groupfindingCriteria, Project project);
GroupFormationMechanism getGFM(Project project);
/**
* Persist the selected manual groups
* @param groupComposition
......@@ -47,5 +49,7 @@ public interface IGroupFinding {
int getMinNumberOfStudentsNeeded(Project project);
void deleteGroups(Project project);
List<Group> createRandomGroups(Project project);
}
......@@ -182,9 +182,11 @@ public class GroupDAO {
}
public void deleteGroups(Project project) {
String query = "DELETE from groups where projectName = ?";
String query ="DELETE gu FROM groupuser gu INNER JOIN groups g ON gu.groupId=g.id WHERE g.projectName = ?;";
String query2="DELETE FROM groups WHERE projectName=?;";
connect.connect();
connect.issueInsertOrDeleteStatement(query, project.getName());
connect.issueInsertOrDeleteStatement(query2, project.getName());
connect.close();
}
}
......
......@@ -117,9 +117,7 @@ public class GroupView {
@Path("/projects/{projectName}")
public void saveGroups(@PathParam("projectName") String projectName, Group[] groups) {
Project project = new Project(projectName);
//groupformationprocess.saveGroups(groups)
//delete:
groupfinding.persistGroups(Arrays.asList(groups), project);
groupFormationProcess.saveGroups(Arrays.asList(groups), project);
}
@PUT
......@@ -127,8 +125,7 @@ public class GroupView {
@Path("/projects/{projectName}/groups")
public void persistGroups(@PathParam("projectName") String projectName, GroupData data) {
Project project = new Project(projectName);
groupfinding.persistGroups(data.getGroups(), project);
groupFormationProcess.saveGroups(data.getGroups(), project);
}
@POST
......
......@@ -30,6 +30,11 @@ public class GroupfindingImpl implements IGroupFinding {
//
}
@Override
public GroupFormationMechanism getGFM(Project project){
return groupDAO.getGroupFormationMechanism(project);
}
@Override
public void persistGroups(List<Group> groupComposition, Project project) {
for (Group group : groupComposition) {
......@@ -67,6 +72,11 @@ public class GroupfindingImpl implements IGroupFinding {
return participantsNeeded;
}
@Override
public void deleteGroups(Project project){
groupDAO.deleteGroups(project);
}
@Override
public List<Group> createRandomGroups(Project project) {
ArrayList<Group> result = new ArrayList<>();
......
......@@ -77,6 +77,10 @@ public class GroupFormationProcess {
groups = groupfinding.createRandomGroups(project);
}
return new GroupData(groups);
}
public void saveGroups(List<Group> groups,Project project){
groupfinding.deleteGroups(project);
groupfinding.persistGroups(groups, project);
}
}
package unipotsdam.gf.process.tasks;
import unipotsdam.gf.interfaces.IGroupFinding;
import unipotsdam.gf.modules.group.GroupFormationMechanism;
import unipotsdam.gf.modules.project.Project;
import unipotsdam.gf.modules.project.ProjectDAO;
import unipotsdam.gf.modules.submission.controller.SubmissionController;
......@@ -14,6 +15,8 @@ import unipotsdam.gf.mysql.VereinfachtesResultSet;
import javax.annotation.ManagedBean;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import static unipotsdam.gf.process.tasks.TaskName.*;
......@@ -88,7 +91,14 @@ public class TaskDAO {
project.setName(vereinfachtesResultSet.getString("projectName"));
ParticipantsCount participantsCount = projectDAO.getParticipantCount(project);
participantsCount.setParticipantsNeeded(groupFinding.getMinNumberOfStudentsNeeded(project));
task.setTaskData(participantsCount);
Map<String, Object> taskData = new HashMap<>();
taskData.put("participantCount", participantsCount);
GroupFormationMechanism gfm =groupFinding.getGFM(project);
taskData.put("gfm", gfm);
task.setTaskData(taskData);
if (gfm.equals(GroupFormationMechanism.Manual)){
task.setTaskType(TaskType.LINKED);
}
task.setHasRenderModel(true);
return task;
}
......
......@@ -16,29 +16,36 @@
<script src="js/create-groups-manual.js"></script>
<link rel="stylesheet" href="css/create-groups-manual.css">
</head>
<script id="groupTemplate" type="text/x-jQuery-tmpl">
<div style="display: block; margin-top: 5px; margin-left: 5px;" id="${groupName}">
<button type="button" class="group-button list-group-item list-group-item-action">${groupName}</button>
{{each groupMember}}
<button type="button" name="student" class="student-button list-group-item list-group-item-action">
<span>${name}</span>
<p name="userEmail" hidden>${email}</p></button>
{{/each}}
<p name="chatRoomId" hidden>${chatRoomId}</p>
</div>
</script>
<body>
<menu:menu hierarchy="1"/>
<div style="display: block">
<div style="display: flex">
<div style="display:block">
<div id="studentsWithoutGroup" class="alert alert-warning">
Es sind noch Studenten "gruppenlos".
</div>
Gruppen:
<div class="list-group" style="display: flex" id="groupsInProject">
<div class="list-group" style="display: flex; flex-wrap: wrap;" id="groupsInProject">
<div style="display:block;" id="gruppenlos">
<button type="button" class="group-button list-group-item list-group-item-action active">
gruppenlos
</button>
</div>
<script id="groupTemplate" type="text/x-jQuery-tmpl">
<div style="display: block" id="${groupName}">
<button type="button" class="group-button list-group-item list-group-item-action">${groupName}</button>
{{each groupMember}}
<button type="button" name="student" class="student-button list-group-item list-group-item-action">${name}</button>
{{/each}}
</div>
</script>
</div>
<button id="openNewGroup">neue Gruppe öffnen</button>
</div>
</div>
......
$(document).ready(function () {
let userEmail = $('#userEmail').html().trim();
let projectName = $('#projectName').html().trim();
$('#studentsWithoutGroup').hide();
getAllGroups(function (allGroups) {
groupsToTemplate(allGroups, function (done) {
selectableButtons(done);
......@@ -11,14 +10,20 @@ $(document).ready(function () {
selectableButtons(done);
});
relocateMember(function (done) {
selectableButtons(done);
selectableButtons(done); //i have no clue why this needs to be called twice, but it seems necessary
});
});
$('#btnSave').click(function () {
viewToGroup(function (groups) {
saveNewGroups(groups);
})
});
$('#openNewGroup').click(function () {
openNewGroup(function(done){
selectableButtons(done);
});
selectableButtons(true); //i have no clue why this needs to be called twice, but it seems necessary
});
});
function getAllGroups(callback) {
......@@ -38,17 +43,12 @@ function getAllGroups(callback) {
}
function groupsToTemplate(allGroups, callback) {
let studentTmplObject = [];
let groupTmplObject = [];
for (let group = 0; group < allGroups.length; group++) {
/*for (let groupMember = 0; groupMember < allGroups[group].members.length; groupMember++) {
studentTmplObject.push({
studentName: allGroups[group].members[groupMember].name
});
}*/
groupTmplObject.push({
groupName: "group" + group,
groupMember: allGroups[group].members,
chatRoomId: allGroups[group].chatRoomId,
});
}
$('#groupTemplate').tmpl(groupTmplObject).appendTo('#groupsInProject');
......@@ -84,46 +84,72 @@ function relocateMember(callback) {
function viewToGroup(callback) {
if ($('#gruppenlos').children().length > 1) {
$('#studentsWithoutGroup').show();
return null;
}
let groups = [];
$('#groupsInProject').children().each(function () {
if ($(this).attr("id").trim() !== "gruppenlos") {
let members = [];
let chatRoomId = 0;
$(this).children().each(function () {
if ($(this).attr("name") === "student")
if ($(this).attr("name") === "student") {
let entries = $(this).children();
let email = entries[1].innerText;
let name = entries[0].innerText;
members.push({
email: "", //todo:
name: $(this).html().trim(),
rocketChatPersonalAccessToken: "", //todo:
rocketChatUserId: "", //todo:
rocketChatUsername: "", //todo:
email: email,
name: name,
rocketChatPersonalAccessToken: "",
rocketChatUserId: "",
rocketChatUsername: "",
student: true
});
}
if ($(this).attr("name") === "chatRoomId") {
chatRoomId = $(this).html().trim();
}
});
groups.push({
chatRoomId: "1", //todo:
id: "1", //todo:
members: members,
})
if (members.length !== 0){
groups.push({
chatRoomId: chatRoomId,
id: "",
members: members,
})
}
}
});
callback(groups);
}
function saveNewGroups(groups) {
let data = JSON.stringify(groups);
$.ajax({
url: "group/projects/" + $('#projectName').html().trim(),
url: "../rest/group/projects/" + $('#projectName').html().trim(),
data: data,
headers: {
"Content-Type": "application/json",
"Cache-Control": "no-cache"
},
type: 'POST',
success: function (response) {
alert("done");
},
error: function (a) {
alert(a);
}
});
}
function openNewGroup(callback) {
let groupTmplObject = [];
let nextGroup = $('#groupsInProject').children().length;
groupTmplObject.push({
groupName: "group" + nextGroup,
groupMember: [],
chatRoomId: "",
});
$('#groupTemplate').tmpl(groupTmplObject).appendTo('#groupsInProject');
let done = true;
callback(done);
}
\ No newline at end of file
......@@ -94,7 +94,8 @@ function fitObjectInTmpl(object){
}else {result.timeFrame="";}
switch (object.taskName){
case "WAIT_FOR_PARTICPANTS":
result.infoText = "Warten Sie auf die Anmeldungen der Studenten.";
result.infoText = "Warten Sie auf die Anmeldungen der Studenten.\n" +
"Es sind bereits "+object.taskData.participantCount.participants+" Studenten eingetragen.";
break;
case "BUILD_GROUPS":
result.infoText="Erstellen Sie die Gruppen.";
......@@ -119,6 +120,12 @@ function fitObjectInTmpl(object){
}
if (object.taskType.includes("LINKED")){
switch (object.taskName) {
case "WAIT_FOR_PARTICPANTS":
if (object.taskData.gfm==="Manual"){
result.solveTaskWith="Gruppen erstellen";
result.solveTaskWithLink="redirect(\'../groupfinding/create-groups-manual.jsp?projectName="+object.projectName+"\')";
}
break;
case "CLOSE_GROUP_FINDING_PHASE":
result.solveTaskWith="Entwurfsphase starten";
result.solveTaskWithLink="closePhase(\'"+object.phase+"\', \'"+object.projectName+"\');";
......
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