diff --git a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java index 758d94865594d22f13ccdbae5da912517a386ec8..e7d55df05bae242ae07171ed2ec48774f1d1220c 100644 --- a/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java +++ b/src/main/java/de/thm/arsnova/controller/LecturerQuestionController.java @@ -121,18 +121,6 @@ public class LecturerQuestionController extends AbstractController { } } - @RequestMapping(value = "/sort", method = RequestMethod.POST) - public void publishQuestion( - @PathVariable final String questionId, - @RequestParam(required = false) final Boolean publish, - @RequestBody final Question question - ) { - if (publish != null) { - question.setActive(publish); - } - questionService.update(question); - } - @RequestMapping(value = "/{questionId}/publishstatistics", method = RequestMethod.POST) public void publishStatistics( @PathVariable final String questionId, @@ -426,4 +414,45 @@ public class LecturerQuestionController extends AbstractController { return questionService.getTotalAnswerCount(sessionkey); } } -} + + @RequestMapping(value = "/setsort", method = RequestMethod.POST) + public void setSubjectSortOrder( + @PathVariable final String questionId, + @RequestParam(required = false) final Boolean publish, + @RequestBody final Question question + ) { + if (publish != null) { + question.setActive(publish); + } + questionService.update(question); + } + + @RequestMapping(value = "/getsort", method = RequestMethod.GET) + public String getSubjectSortType( + @RequestParam(required = true) final String sessionkey, + @RequestParam(required = true) final String isPreparation + ) { + return questionService.getSubjectSortType(sessionkey, isPreparation); + } + + @RequestMapping(value = "/setsort", method = RequestMethod.POST) + public void setQuestionSortOrder( + @PathVariable final String questionId, + @RequestParam(required = false) final Boolean publish, + @RequestBody final Question question + ) { + if (publish != null) { + question.setActive(publish); + } + questionService.update(question); + } + + @RequestMapping(value = "/getsort", method = RequestMethod.GET) + public String getQuestionSortType( + @RequestParam(required = true) final String sessionkey, + @RequestParam(required = true) final String subject, + @RequestParam(required = true) final String isPreparation + ) { + return questionService.getQuestionSortType(sessionkey, subject, isPreparation); + } +} \ No newline at end of file diff --git a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java index df3e5e05d68abf0e41e6b1decc02e36c2da81f09..5d8c7a14b08a894239447a748f94c90c6d229eb2 100644 --- a/src/main/java/de/thm/arsnova/dao/CouchDBDao.java +++ b/src/main/java/de/thm/arsnova/dao/CouchDBDao.java @@ -550,7 +550,6 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware q.put("gridType", question.getGridType()); q.put("scaleFactor", question.getScaleFactor()); q.put("gridScaleFactor", question.getGridScaleFactor()); - q.put("sequenceNo", question.getSequenceNo()); return q; } @@ -1382,28 +1381,40 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware @Cacheable("lecturequestions") @Override public List<Question> getLectureQuestionsForUsers(final Session session) { - SortOrder sortOrder = getSortOrder(session, "lecture"); - if (sordOrder != null) { - //get Questionds via sortOrder List<Question> result = + SortOrder subjectSortOrder = getSortOrder(session.get_id(), "lecture", ""); + if (sortOrder != null) { + List<Question> questions = new ArrayList<Question>(); + if ("alphabet".equals(sortOrder.getSortType())) { + // i srsly dunno, lol + } + else { + questions = getQuestionsBySortOrder(sortOrder, true); + } + return questions; } else { String viewName = "skill_question/lecture_question_by_session_for_all"; - List<Question> result = getQuestions(new NovaView(viewName), session); + return getQuestions(new NovaView(viewName), session); } - return result; } @Override public List<Question> getLectureQuestionsForTeachers(final Session session) { - SortOrder sortOrder = getSortOrder(session, "lecture"); - if (sordOrder != null) { - //get Questionds via sortOrder + SortOrder subjectSortOrder = getSortOrder(session, "lecture", ""); + if (sortOrder != null) { + List<Question> questions = new ArrayList<Question>(); + if ("alphabet".equals(sortOrder.getSortType())) { + // i srsly dunno, lol + } + else { + questions = getQuestionsBySortOrder(sortOrder, false); + } + return questions; } else { String viewName = "skill_question/lecture_question_by_session"; - List<Question> result = getQuestions(new NovaView(viewName), session); + return getQuestions(new NovaView(viewName), session); } - return result; } @Cacheable("flashcardquestions") @@ -1422,9 +1433,16 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware @Cacheable("preparationquestions") @Override public List<Question> getPreparationQuestionsForUsers(final Session session) { - SortOrder sortOrder = getSortOrder(session, "preparation"); - if (sordOrder != null) { - //get Questionds via sortOrder + SortOrder subjectSortOrder = getSortOrder(session, "preparation", ""); + if (sortOrder != null) { + List<Question> questions = new ArrayList<Question>(); + if ("alphabet".equals(sortOrder.getSortType())) { + // i srsly dunno, lol + } + else { + questions = getQuestionsBySortOrder(sortOrder, true); + } + return questions; } else { String viewName = "skill_question/preparation_question_by_session_for_all"; @@ -1435,14 +1453,20 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware @Override public List<Question> getPreparationQuestionsForTeachers(final Session session) { SortOrder sortOrder = getSortOrder(session, "preparation"); - if (sordOrder != null) { - //get Questionds via sortOrder + if (sortOrder != null) { + List<Question> questions = new ArrayList<Question>(); + if ("alphabet".equals(sortOrder.getSortType())) { + // i srsly dunno, lol + } + else { + questions = getQuestionsBySortOrder(sortOrder, false); + } + return questions; } else { String viewName = "skill_question/preparation_question_by_session"; return getQuestions(new NovaView(viewName), session); } - return result; } private List<Question> getQuestions(final NovaView view, final Session session) { @@ -1939,29 +1963,34 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware } @Override - SortOrder getSortOrder(Session session, String questionVariant) { + public SortOrder getSortOrder(String sessionId, String questionVariant, String subject) { + String viewString = ""; if ("preparation".equals(questionVariant)) { - String viewString = "sort_order/preparation_question_sort_order_by_session"; + viewString = "sort_order/preparation_question_sort_order_by_sessionId"; } - else if ("lecture".euals(questionVariant)) { - String viewString = "sort_order/lecture_question_sort_order_by_session"; + else if ("lecture".equals(questionVariant)) { + viewString = "sort_order/lecture_question_sort_order_by_sessionId"; } + NovaView view = new NovaView(viewString); - view.setKey(session.get_id()); + view.setKey(sessionId); + if(subject.isempty() == false) { + String suffix = "_and_subject"; + viewString = viewString.concat(suffix); + view.setKey(subject); + } + ViewResults results = this.getDatabase().view(view); if (results.getJSONArray("rows").optJSONObject(0) == null) { return null; } - return (SortOrder) JSONObject.toBean( - results.getJSONArray("rows").optJSONObject(0).optJSONObject("value"), - SortOrder.class - ); + return (SortOrder) JSONObject.toBean(results.getJSONObject(), Question.class); } @Override - SortOrder createOrUpdateQuestionSortOrder(Session session, SortOrder sortOrder) { + public SortOrder createOrUpdateQuestionSortOrder(SortOrder sortOrder) { try { String id = sortOrder.get_id(); String rev = sortOrder.get_rev(); @@ -1972,18 +2001,35 @@ public class CouchDBDao implements IDatabaseDao, ApplicationEventPublisherAware } d.put("type", "sort_order"); - d.put("sessionId", session.get_id()); + d.put("sessionId", sortOrder.getSessionId()); d.put("questionVariant", sortOrder.getQuestionVariant()); + d.put("subject", sortOrder.getSubject()); d.put("sortOrder", sortOrder.getSortOrder()); database.saveDocument(d, id); - sortOrder.setId(d.getId()); - sortOrder.setRev(d.getRev()); + sortOrder.set_id(d.getId()); + sortOrder.set_rev(d.getRev()); - return sotOrder; + return sortOrder; } catch (IOException e) { - LOGGER.error("Could not save user {}", user); + LOGGER.error("Could not save user {}", sortOrder); } return null; } + + public List<Question> getQuestionsBySortOrder(SortOrder sortOrder, boolean onlyActive) { + List<Question> questions = new ArrayList<Question>(); + String[] questionIds = sortOrder.getSortOrder(); + for (String t : questionIds) { + Question tempQuestion = getQuestion(t); + if (onlyActive) { + if (tempQuestion.isActive()) { + questions.add(tempQuestion); + } + } + else { + questions.add(tempQuestion); + } + } + } } diff --git a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java index 5ae19e9213d8c2d06819c0425b63437a00571fc3..037c3ca0ec25bb6023de87a472bcff51ac1b87c6 100644 --- a/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java +++ b/src/main/java/de/thm/arsnova/dao/IDatabaseDao.java @@ -198,7 +198,7 @@ public interface IDatabaseDao { Statistics getStatistics(); - String getSortOrder(Session session, String questionVariant); + SortOrder getSortOrder(String sessionkey, String questionVariant, String subject); - String createOrUpdateQuestionSortOrder(Session session, SortOrder sortOrder); + SortOrder createOrUpdateQuestionSortOrder(SortOrder sortOrder); } diff --git a/src/main/java/de/thm/arsnova/entities/Question.java b/src/main/java/de/thm/arsnova/entities/Question.java index fe1b0d8ba1a03cdf1bb2c08ff87c5ac2a71c5656..956512a627dfbbf38b1ceac3b98144815d83bca8 100644 --- a/src/main/java/de/thm/arsnova/entities/Question.java +++ b/src/main/java/de/thm/arsnova/entities/Question.java @@ -66,7 +66,6 @@ public class Question { private String gridType; private String scaleFactor; private String gridScaleFactor; - private int sequenceNo; public final String getType() { return type; @@ -411,14 +410,6 @@ public class Question { public String getGridScaleFactor() { return this.gridScaleFactor; } - - public void setSequenceNo(int sequenceNo) { - this.sequenceNo = sequenceNo; - } - - public int getSequenceNo() { - return sequenceNo; - } @Override public final String toString() { diff --git a/src/main/java/de/thm/arsnova/entities/SortOrder.java b/src/main/java/de/thm/arsnova/entities/SortOrder.java index b3aba0cd4bc1e2a5e2a406eade541126b8f5bf41..c69e8552a57e78ab237af077304e3330d209be91 100644 --- a/src/main/java/de/thm/arsnova/entities/SortOrder.java +++ b/src/main/java/de/thm/arsnova/entities/SortOrder.java @@ -19,18 +19,45 @@ package de.thm.arsnova.entities; public class SortOrder { - private String sortVariant; + private String sessionId; + private String sortType; + private String questionVariant; + private String subject; private String[] sortOrder; private String _id; private String _rev; - public void setSortVariant(final String sortVariant) { + public void setSessionId(final String sessionId) { + this.sessionId = sessionId; + } + + public String getSessionId() { + return this.sessionId; + } + + public void setSortType(final String sortType) { + this.sortType = sortType; + } + + public String getSortType() { + return this.SortType; + } + + public void setQuestionVariant(final String questionVariant) { this.sortVariant = sortVariant; } - public String getSortVariant() { - return this.sortVariant; + public String getQuestionVariant() { + return this.questionVariant; + } + + public void setSubject(final String subject) { + this.subject = subject; + } + + public String getSubject() { + return this.subject; } public void setSortOrder(final String[] sortOrder) { diff --git a/src/main/java/de/thm/arsnova/services/IQuestionService.java b/src/main/java/de/thm/arsnova/services/IQuestionService.java index 457b9fc7b2d9e9af938e5ee3011bb4b583181e2e..c37a0813381ad3edb241e3d406f3638022867930 100644 --- a/src/main/java/de/thm/arsnova/services/IQuestionService.java +++ b/src/main/java/de/thm/arsnova/services/IQuestionService.java @@ -128,4 +128,8 @@ public interface IQuestionService { void deleteAllLectureAnswers(String sessionkey); int getAbstentionAnswerCount(String questionId); + + String getSubjectSortType(String sessionkey, String isPreparation); + + String getQuestionSortType(String sessionkey, String isPreparation); } diff --git a/src/main/java/de/thm/arsnova/services/QuestionService.java b/src/main/java/de/thm/arsnova/services/QuestionService.java index dae73c9224e4256cb6404af3654815d86cc7e9b1..a9f9def28db9befb0c8170955f5f33afbe2fea6f 100644 --- a/src/main/java/de/thm/arsnova/services/QuestionService.java +++ b/src/main/java/de/thm/arsnova/services/QuestionService.java @@ -125,15 +125,22 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis LOGGER.error("Could not save file. File is too large with " + fileSize + " Byte."); throw new BadRequestException(); } - } + } + + final Question result = databaseDao.saveQuestion(session, question); - SortOrder sortOrder = databaseDao.getSortOrder(session, question.getQuestionVariant); + SortOrder sortOrder = databaseDao.getSortOrder(session.get_id(), question.getQuestionVariant(), question.getSubject()); if (sortOrder != null) { - + if("alphabet____work".equals(sortOrder.getSortType())) { + + } + else { + String[] tmp = sortOrder.getSortOrder(); + tmp.add(question.get_id()); + sortOrder.setSortOrder(tmp); + } } - - final Question result = databaseDao.saveQuestion(session, question); final NewQuestionEvent event = new NewQuestionEvent(this, session, result); this.publisher.publishEvent(event); @@ -714,4 +721,16 @@ public class QuestionService implements IQuestionService, ApplicationEventPublis public void setApplicationEventPublisher(ApplicationEventPublisher publisher) { this.publisher = publisher; } + + @Override + public String getSubjectSortType(String sessionkey, String isPreparation) { + SortOrder sortOrder = databaseDao.getSortOrder(sessionkey, isPreparation, ""); + return SortOrder.getSortType(); + } + + @Override + public String getQuestionSortType(String session, String subject, String isPreparation) { + SortOrder sortOrder = databaseDao.getSortOrder(sessionkey, isPreparation, subject); + return SortOrder.getSortType(); + } }