diff --git a/src/main/java/de/thm/arsnova/controller/SessionController.java b/src/main/java/de/thm/arsnova/controller/SessionController.java index 4e437984e87e065f30a90508372589609abada0c..e68886e9275760d9939ae0fb2b03a28eb224d9b5 100644 --- a/src/main/java/de/thm/arsnova/controller/SessionController.java +++ b/src/main/java/de/thm/arsnova/controller/SessionController.java @@ -39,6 +39,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; import de.thm.arsnova.connector.model.Course; import de.thm.arsnova.entities.LoggedIn; +import de.thm.arsnova.entities.Question; import de.thm.arsnova.entities.Session; import de.thm.arsnova.entities.User; import de.thm.arsnova.services.ISessionService; @@ -159,6 +160,20 @@ public class SessionController extends AbstractController { return sessions; } + + @RequestMapping(value = "/{sessionkey}/lock", method = RequestMethod.POST) + @ResponseBody + public final Session lockSession( + @PathVariable final String sessionkey, + @RequestParam(required = false) final Boolean lock, + final HttpServletResponse response + ) { + if (lock != null) { + return this.sessionService.setActive(sessionkey, lock); + } + response.setStatus(HttpStatus.NOT_FOUND.value()); + return null; + } /* internal redirections */ diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index b3e53fea94d8dc048bb6cec229da30f47d5409b1..3f7b6a492cfaab6f65d16fb86b6408b864b422c6 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -1421,4 +1421,18 @@ public class CouchDBDao implements IDatabaseDao { return query.toString(); } } + + @Override + public Session lockSession(Session session, Boolean lock) { + try { + Document s = this.database.getDocument(session.get_id()); + s.put("active", lock); + this.database.saveDocument(s); + session.set_rev(s.getRev()); + return session; + } catch (IOException e) { + LOGGER.error("Could not lock session {}", session); + } + return null; + } } diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 1968ce84b3d0351a59075ed94e183d42defda7d7..9b4905f0f74182ae1efd72a299efffd55fd1c311 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -131,4 +131,6 @@ public interface IDatabaseDao { void deleteInterposedQuestion(InterposedQuestion question); List<Session> getCourseSessions(List<Course> courses); + + Session lockSession(Session session, Boolean lock); } diff --git a/src/main/java/de/thm/arsnova/services/ISessionService.java b/src/main/java/de/thm/arsnova/services/ISessionService.java index 17ebdef324d22f4e7a92d888e6927ec0e93498c2..acea01b72befa875a6c259dc85d8ae7ab08946bb 100644 --- a/src/main/java/de/thm/arsnova/services/ISessionService.java +++ b/src/main/java/de/thm/arsnova/services/ISessionService.java @@ -44,4 +44,6 @@ public interface ISessionService { int countActiveUsers(String sessionkey); int countSessions(List<Course> courses); + + Session setActive(String sessionkey, Boolean lock); } diff --git a/src/main/java/de/thm/arsnova/services/SessionService.java b/src/main/java/de/thm/arsnova/services/SessionService.java index d61533588469e85dd3f539f4b660b1cd42e3a7fd..a568c205f769714702e9f81420de2c623842fd9f 100644 --- a/src/main/java/de/thm/arsnova/services/SessionService.java +++ b/src/main/java/de/thm/arsnova/services/SessionService.java @@ -183,4 +183,10 @@ public class SessionService implements ISessionService { } return sessions.size(); } + + @Override + public Session setActive(String sessionkey, Boolean lock) { + Session session = databaseDao.getSessionFromKeyword(sessionkey); + return databaseDao.lockSession(session, lock); + } }