diff --git a/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java b/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java index d390d7a5f05a172e78c944e1b9c63acc792f5537..5b606d54e098552f0e566e5bedc5de74d62c6aaa 100644 --- a/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java +++ b/src/main/java/de/thm/arsnova/controller/AudienceQuestionController.java @@ -117,4 +117,5 @@ public class AudienceQuestionController extends AbstractController { ) { questionService.deleteInterposedQuestion(questionId); } + } diff --git a/src/main/java/de/thm/arsnova/controller/LegacyController.java b/src/main/java/de/thm/arsnova/controller/LegacyController.java index 8f2c5b7a0774467e35830a32f96d2f870e9faeee..83c049daddd8b5df8e8e246a291148a0c066fcab 100644 --- a/src/main/java/de/thm/arsnova/controller/LegacyController.java +++ b/src/main/java/de/thm/arsnova/controller/LegacyController.java @@ -22,16 +22,23 @@ import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +import de.thm.arsnova.services.IQuestionService; @Controller public class LegacyController extends AbstractController { public static final Logger LOGGER = LoggerFactory.getLogger(LegacyController.class); + @Autowired + private IQuestionService questionService; + /* specific routes */ @RequestMapping(value = "/session/mysessions", method = RequestMethod.GET) @@ -115,6 +122,15 @@ public class LegacyController extends AbstractController { return String.format("forward:/audiencequestion/?sessionkey=%s", sessionKey); } + @RequestMapping(value = "/session/{sessionKey}/interposed", method = RequestMethod.DELETE) + @ResponseBody + public final void deleteAllInterposedQuestions( + @PathVariable final String sessionKey, + final HttpServletResponse response + ) { + questionService.deleteAllInterposedQuestions(sessionKey); + } + @RequestMapping(value = "/session/{sessionKey}/interposedcount", method = RequestMethod.GET) public final String redirectQuestionByAudienceCount( @PathVariable final String sessionKey, diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index 9df14c78594113c4f3c146c08496101441a786ce..f1be1d0aa80f19888db80c573bd967c68cf8924e 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -1164,4 +1164,22 @@ public class CouchDBDao implements IDatabaseDao { LOGGER.error("Could not delete session {}", session); } } + + @Override + public void deleteAllInterposedQuestions(Session session) { + NovaView view = new NovaView("interposed_question/by_session"); + view.setKey(session.get_id()); + ViewResults questions = this.getDatabase().view(view); + if (questions == null || questions.isEmpty()) { + return; + } + for (Document document : questions.getResults()) { + try { + this.deleteDocument(document.getId()); + } catch (IOException e) { + LOGGER.error("Could not delete all interposed questions {}", session); + } + } + + } } diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 2827c41b08336e1e33e8655875d9939d09b0d07c..d4e60807bfd117762ba6c21588b14a2edf3dadf9 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 { Session updateSession(Session session); void deleteSession(Session session); + + void deleteAllInterposedQuestions(Session session); } diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java index 4f04a0c73506ff5b42baaf5c87cf24e8321047a8..c1ff4f9e447ef49a08b9133a5a5a2c7c5053afd4 100644 --- a/src/main/java/de/thm/arsnova/services/IQuestionService.java +++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java @@ -79,4 +79,6 @@ public interface IQuestionService { void deleteInterposedQuestion(String questionId); + void deleteAllInterposedQuestions(String sessionKeyword); + } diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index f6f51d6d732f4a049684c7013ff7b0ae7d46839a..a7755c96071d6b28774e4a314e892d0ae80314c8 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -180,6 +180,17 @@ public class QuestionService implements IQuestionService { } databaseDao.deleteInterposedQuestion(question); } + + @Override + @Authenticated + public void deleteAllInterposedQuestions(String sessionKeyword) { + User user = userService.getCurrentUser(); + Session session = databaseDao.getSessionFromKeyword(sessionKeyword); + if (user == null || session == null || ! session.isCreator(user)) { + throw new UnauthorizedException(); + } + databaseDao.deleteAllInterposedQuestions(session); + } @Override @Authenticated diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index 8bef8eb9b932d22de9d0d0d4a080bdee49428402..ecb8038f930f8554b740ba05b198a859c1e61693 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -409,4 +409,10 @@ public class StubDatabaseDao implements IDatabaseDao { // TODO Auto-generated method stub } + + @Override + public void deleteAllInterposedQuestions(Session session) { + // TODO Auto-generated method stub + + } }