diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java index e4c7e2d526ec421507a3204656cf91788f935941..964f1005eacfa6ea0e0a8d66831fbba57559264f 100644 --- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java +++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java @@ -38,6 +38,7 @@ import org.springframework.web.bind.annotation.RestController; import de.thm.arsnova.entities.Answer; import de.thm.arsnova.entities.Question; import de.thm.arsnova.exceptions.BadRequestException; +import de.thm.arsnova.exceptions.ForbiddenException; import de.thm.arsnova.exceptions.NoContentException; import de.thm.arsnova.exceptions.NotFoundException; import de.thm.arsnova.services.IQuestionService; @@ -332,9 +333,17 @@ public class LecturerQuestionController extends AbstractController { @RequestMapping(value = "/answers", method = RequestMethod.DELETE) public final void deleteAllQuestionsAnswers( @RequestParam final String sessionkey, + @RequestParam(value = "lecturequestionsonly", defaultValue = "false") final boolean lectureQuestionsOnly, + @RequestParam(value = "preparationquestionsonly", defaultValue = "false") final boolean preparationQuestionsOnly, final HttpServletResponse response ) { - questionService.deleteAllQuestionsAnswers(sessionkey); + if (lectureQuestionsOnly) { + questionService.deleteAllLectureAnswers(sessionkey); + } else if (preparationQuestionsOnly) { + questionService.deleteAllPreparationAnswers(sessionkey); + } else { + questionService.deleteAllQuestionsAnswers(sessionkey); + } } /** diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index fd1affb0fd2dd8e299c71c8cbad1d41638c1045f..c80cd8d4977f9cd1fb3930e253832ce343f13ab6 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -1461,6 +1461,22 @@ public class CouchDBDao implements IDatabaseDao { } } + @Override + public void deleteAllPreparationAnswers(final Session session) { + final List<Question> questions = getQuestions(new NovaView("skill_question/preparation_question_by_session"), session); + for (final Question q : questions) { + deleteAnswers(q); + } + } + + @Override + public void deleteAllLectureAnswers(final Session session) { + final List<Question> questions = getQuestions(new NovaView("skill_question/lecture_question_by_session"), session); + for (final Question q : questions) { + deleteAnswers(q); + } + } + @Override public int getLearningProgress(final Session session) { // Note: we have to use this many views because our CouchDB version does not support diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 37e1a2115e5701672fb6504d616c963723786fe0..7a1c205f9d70e80088fa542a091fc812876f9634 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -173,4 +173,8 @@ public interface IDatabaseDao { List<SessionInfo> getMySessionsInfo(User user); List<SessionInfo> getMyVisitedSessionsInfo(User currentUser); + + void deleteAllPreparationAnswers(Session session); + + void deleteAllLectureAnswers(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 a964c77e35d51449cdddc7297c4605390fdd04fe..633478fd05377f74204b4f9c6e4f1287af036ea7 100644 --- a/src/main/java/de/thm/arsnova/services/IQuestionService.java +++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java @@ -120,4 +120,8 @@ public interface IQuestionService { void deleteAllQuestionsAnswers(String sessionkey); + void deleteAllPreparationAnswers(String sessionkey); + + void deleteAllLectureAnswers(String sessionkey); + } diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index 4c1b2c2d867abb6c7260f1bd3ccfa690abc5d039..9484450063b0acec0519561ea9acffa7bfcbfd38 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -214,21 +214,13 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis } @Override - @PreAuthorize("isAuthenticated()") + @PreAuthorize("isAuthenticated() and hasPermission(#questionId, 'question', 'owner')") public void deleteAnswers(final String questionId) { final Question question = databaseDao.getQuestion(questionId); - if (question == null) { - throw new NotFoundException(); - } - - final User user = userService.getCurrentUser(); - final Session session = databaseDao.getSession(question.getSessionKeyword()); - if (user == null || session == null || !session.isCreator(user)) { - throw new UnauthorizedException(); - } databaseDao.deleteAnswers(question); } + @Override @PreAuthorize("isAuthenticated()") public List<String> getUnAnsweredQuestionIds(final String sessionKey) { @@ -609,6 +601,20 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis databaseDao.deleteAllQuestionsAnswers(session); } + @Override + @PreAuthorize("isAuthenticated() and hasPermission(#sessionkey, 'session', 'owner')") + public void deleteAllPreparationAnswers(String sessionkey) { + final Session session = getSession(sessionkey); + databaseDao.deleteAllPreparationAnswers(session); + } + + @Override + @PreAuthorize("isAuthenticated() and hasPermission(#sessionkey, 'session', 'owner')") + public void deleteAllLectureAnswers(String sessionkey) { + final Session session = getSession(sessionkey); + databaseDao.deleteAllLectureAnswers(session); + } + @Override public void setApplicationEventPublisher(ApplicationEventPublisher publisher) { this.publisher = publisher; diff --git a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java index 4a48df93f774a2c1f0515f77465962f603eea5ca..956d495664e41c99b1f2ad73b1b983cd463d0468 100644 --- a/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java +++ b/src/test/java/de/thm/arsnova/dao/StubDatabaseDao.java @@ -511,7 +511,7 @@ public class StubDatabaseDao implements IDatabaseDao { @Override public void deleteAllInterposedQuestions(Session session, User user) { // TODO Auto-generated method stub - + } @Override @@ -531,4 +531,16 @@ public class StubDatabaseDao implements IDatabaseDao { // TODO Auto-generated method stub return null; } + + @Override + public void deleteAllPreparationAnswers(Session session) { + // TODO Auto-generated method stub + + } + + @Override + public void deleteAllLectureAnswers(Session session) { + // TODO Auto-generated method stub + + } }