Index: lams_central/src/java/org/lamsfoundation/lams/web/qb/EditQbQuestionController.java =================================================================== diff -u -r1f7c5fb422d619e35598ae416565c790d5c76fff -ra2b41bfd7ae2b33847ddbc9d9c46e18b30272905 --- lams_central/src/java/org/lamsfoundation/lams/web/qb/EditQbQuestionController.java (.../EditQbQuestionController.java) (revision 1f7c5fb422d619e35598ae416565c790d5c76fff) +++ lams_central/src/java/org/lamsfoundation/lams/web/qb/EditQbQuestionController.java (.../EditQbQuestionController.java) (revision a2b41bfd7ae2b33847ddbc9d9c46e18b30272905) @@ -271,7 +271,7 @@ : "/" + serverURLContextPath; serverURLContextPath += serverURLContextPath.endsWith("/") ? "" : "/"; applicationcontext.getServletContext().getContext(serverURLContextPath + "tool/laasse10/") - .getRequestDispatcher("/authoring/saveOrUpdateQuestion.do" + params).forward(request, response); + .getRequestDispatcher("/authoring/saveOrUpdateReference.do" + params).forward(request, response); return null; } else { Index: lams_common/src/java/org/lamsfoundation/lams/qb/dao/IQbDAO.java =================================================================== diff -u -r1f7c5fb422d619e35598ae416565c790d5c76fff -ra2b41bfd7ae2b33847ddbc9d9c46e18b30272905 --- lams_common/src/java/org/lamsfoundation/lams/qb/dao/IQbDAO.java (.../IQbDAO.java) (revision 1f7c5fb422d619e35598ae416565c790d5c76fff) +++ lams_common/src/java/org/lamsfoundation/lams/qb/dao/IQbDAO.java (.../IQbDAO.java) (revision a2b41bfd7ae2b33847ddbc9d9c46e18b30272905) @@ -1,5 +1,6 @@ package org.lamsfoundation.lams.qb.dao; +import java.math.BigInteger; import java.util.Collection; import java.util.List; import java.util.Map; @@ -46,10 +47,12 @@ Map getBurningQuestions(long qbQuestionUid); - List getPagedQuestions(Integer questionType, int page, int size, String sortBy, String sortOrder, + List getPagedQuestions(String questionTypes, String collectionUids, int page, int size, String sortBy, String sortOrder, String searchString); + + List getAllQuestionUids(String collectionUids, String sortBy, String sortOrder, String searchString); - int getCountQuestions(Integer questionType, String searchString); + int getCountQuestions(String questionTypes, String collectionUids, String searchString); List getCollectionQuestions(long collectionUid); Index: lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java =================================================================== diff -u -r1f7c5fb422d619e35598ae416565c790d5c76fff -ra2b41bfd7ae2b33847ddbc9d9c46e18b30272905 --- lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java (.../QbDAO.java) (revision 1f7c5fb422d619e35598ae416565c790d5c76fff) +++ lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java (.../QbDAO.java) (revision a2b41bfd7ae2b33847ddbc9d9c46e18b30272905) @@ -177,24 +177,44 @@ } return map; } - + @SuppressWarnings("unchecked") @Override - public List getPagedQuestions(Integer questionType, int page, int size, String sortBy, String sortOrder, - String searchString) { + public List getPagedQuestions(String questionTypes, String collectionUids, int page, int size, + String sortBy, String sortOrder, String searchString) { + return (List) getPagedQuestions(questionTypes, collectionUids, page, size, sortBy, sortOrder, + searchString, false); + } + + @SuppressWarnings("unchecked") + @Override + public List getAllQuestionUids(String collectionUids, String sortBy, String sortOrder, String searchString) { + return (List) getPagedQuestions(null, collectionUids, 0, 100000, sortBy, sortOrder, + searchString, true); + } + + private List getPagedQuestions(String questionTypes, String collectionUids, int page, int size, String sortBy, + String sortOrder, String searchString, boolean onlyUidsRequested) { + String RETURN_VALUE = onlyUidsRequested ? "question.uid" : "question.*"; + //we sort of strip out HTML tags from the search by using REGEXP_REPLACE which skips all the content between < > - final String SELECT_QUESTIONS = "SELECT DISTINCT question.* " + " FROM lams_qb_question question " - + " LEFT OUTER JOIN lams_qb_option qboption " + " ON qboption.qb_question_uid = question.uid " + final String SELECT_QUESTIONS = "SELECT DISTINCT " + RETURN_VALUE + " FROM lams_qb_question question " + + " LEFT OUTER JOIN lams_qb_option qboption ON qboption.qb_question_uid = question.uid " + + " LEFT OUTER JOIN lams_qb_collection_question collection ON question.question_id = collection.qb_question_id " + " LEFT JOIN ("//help finding questions with the max available version + " SELECT biggerQuestion.* FROM lams_qb_question biggerQuestion " + + " LEFT OUTER JOIN lams_qb_collection_question collection ON biggerQuestion.question_id = collection.qb_question_id " + " LEFT OUTER JOIN lams_qb_option qboption1 " - + " ON qboption1.qb_question_uid = biggerQuestion.uid " - + " WHERE biggerQuestion.type = :questionType " - + " AND (REGEXP_REPLACE(biggerQuestion.description, '<[^>]*>+', '') LIKE CONCAT('%', :searchString, '%')" + + " ON qboption1.qb_question_uid = biggerQuestion.uid WHERE " + + (questionTypes == null ? "" : " biggerQuestion.type in (:questionTypes) AND ") + + (collectionUids == null ? "" : " collection.collection_uid in (:collectionUids) AND ") + + " (REGEXP_REPLACE(biggerQuestion.description, '<[^>]*>+', '') LIKE CONCAT('%', :searchString, '%')" + " OR biggerQuestion.name LIKE CONCAT('%', :searchString, '%') " + " OR REGEXP_REPLACE(qboption1.name, '<[^>]*>+', '') LIKE CONCAT('%', :searchString, '%')) " + ") AS biggerQuestion ON question.question_id = biggerQuestion.question_id AND question.version < biggerQuestion.version " - + " WHERE biggerQuestion.version is NULL " + " AND question.type = :questionType " + + " WHERE biggerQuestion.version is NULL " + + (questionTypes == null ? "" : " AND question.type in (:questionTypes) ") + + (collectionUids == null ? "" : " AND collection.collection_uid in (:collectionUids) ") + " AND (REGEXP_REPLACE(question.description, '<[^>]*>+', '') LIKE CONCAT('%', :searchString, '%')" + " OR question.name LIKE CONCAT('%', :searchString, '%') " + " OR REGEXP_REPLACE(qboption.name, '<[^>]*>+', '') LIKE CONCAT('%', :searchString, '%')) "; @@ -224,39 +244,57 @@ bldr.append(sortOrder); NativeQuery query = getSession().createNativeQuery(bldr.toString()); - query.setParameter("questionType", questionType); + if (questionTypes != null) { + query.setParameterList("questionTypes", questionTypes.split(",")); + } + if (collectionUids != null) { + query.setParameterList("collectionUids", collectionUids.split(",")); + } // support for custom search from a toolbar searchString = searchString == null ? "" : searchString; query.setParameter("searchString", searchString); query.setFirstResult(page * size); query.setMaxResults(size); - query.addEntity(QbQuestion.class); - List queryResults = (List) query.list(); + if (!onlyUidsRequested) { + query.addEntity(QbQuestion.class); + } + List queryResults = query.list(); return queryResults; } @Override - public int getCountQuestions(Integer questionType, String searchString) { + public int getCountQuestions(String questionTypes, String collectionUids, String searchString) { final String SELECT_QUESTIONS = "SELECT COUNT(DISTINCT question.uid) count " - + " FROM lams_qb_question question " + " LEFT OUTER JOIN lams_qb_option qboption " - + " ON qboption.qb_question_uid = question.uid " + " LEFT JOIN ("//help finding questions with the max available version + + " FROM lams_qb_question question " + + " LEFT OUTER JOIN lams_qb_collection_question collection ON question.question_id = collection.qb_question_id " + + " LEFT OUTER JOIN lams_qb_option qboption " + + " ON qboption.qb_question_uid = question.uid " + + " LEFT JOIN ("//help finding questions with the max available version + " SELECT biggerQuestion.* FROM lams_qb_question biggerQuestion " + + " LEFT OUTER JOIN lams_qb_collection_question collection ON biggerQuestion.question_id = collection.qb_question_id " + " LEFT OUTER JOIN lams_qb_option qboption1 " + " ON qboption1.qb_question_uid = biggerQuestion.uid " - + " WHERE biggerQuestion.type = :questionType " + + (questionTypes == null ? "" : " WHERE biggerQuestion.type in (:questionTypes) ") + + (collectionUids == null ? "" : " AND collection.collection_uid in (:collectionUids) ") + " AND (REGEXP_REPLACE(biggerQuestion.description, '<[^>]*>+', '') LIKE CONCAT('%', :searchString, '%')" + " OR biggerQuestion.name LIKE CONCAT('%', :searchString, '%') " + " OR REGEXP_REPLACE(qboption1.name, '<[^>]*>+', '') LIKE CONCAT('%', :searchString, '%')) " + ") AS biggerQuestion ON question.question_id = biggerQuestion.question_id AND question.version < biggerQuestion.version " - + " WHERE biggerQuestion.version is NULL " + " AND question.type = :questionType " + + " WHERE biggerQuestion.version is NULL " + + (questionTypes == null ? "" : " AND question.type in (:questionTypes) ") + + (collectionUids == null ? "" : " AND collection.collection_uid in (:collectionUids) ") + " AND (REGEXP_REPLACE(question.description, '<[^>]*>+', '') LIKE CONCAT('%', :searchString, '%')" + " OR question.name LIKE CONCAT('%', :searchString, '%') " + " OR REGEXP_REPLACE(qboption.name, '<[^>]*>+', '') LIKE CONCAT('%', :searchString, '%')) "; - Query query = getSession().createNativeQuery(SELECT_QUESTIONS).addScalar("count", IntegerType.INSTANCE); - ; - query.setParameter("questionType", questionType); + NativeQuery query = getSession().createNativeQuery(SELECT_QUESTIONS).addScalar("count", IntegerType.INSTANCE); + if (questionTypes != null) { + query.setParameterList("questionTypes", questionTypes.split(",")); + } + if (collectionUids != null) { + query.setParameterList("collectionUids", collectionUids.split(",")); + } // support for custom search from a toolbar searchString = searchString == null ? "" : searchString; query.setParameter("searchString", searchString); Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java =================================================================== diff -u -r1f7c5fb422d619e35598ae416565c790d5c76fff -ra2b41bfd7ae2b33847ddbc9d9c46e18b30272905 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision 1f7c5fb422d619e35598ae416565c790d5c76fff) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision a2b41bfd7ae2b33847ddbc9d9c46e18b30272905) @@ -1,5 +1,6 @@ package org.lamsfoundation.lams.qb.service; +import java.math.BigInteger; import java.util.Collection; import java.util.List; @@ -64,10 +65,12 @@ QbStatsActivityDTO getActivityStats(Long activityId, Long qbQuestionUid, Collection correctOptionUids); - List getPagedQuestions(Integer questionType, int page, int size, String sortBy, String sortOrder, + List getPagedQuestions(String questionTypes, String collectionUids, int page, int size, String sortBy, String sortOrder, String searchString); + + List getAllQuestionUids(String collectionUids, String sortBy, String sortOrder, String searchString); - int getCountQuestions(Integer questionType, String searchString); + int getCountQuestions(String questionTypes, String collectionUids, String searchString); QbCollection getCollectionByUid(Long collectionUid); Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java =================================================================== diff -u -r1f7c5fb422d619e35598ae416565c790d5c76fff -ra2b41bfd7ae2b33847ddbc9d9c46e18b30272905 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 1f7c5fb422d619e35598ae416565c790d5c76fff) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision a2b41bfd7ae2b33847ddbc9d9c46e18b30272905) @@ -1,5 +1,6 @@ package org.lamsfoundation.lams.qb.service; +import java.math.BigInteger; import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.Collection; @@ -94,14 +95,19 @@ } @Override - public List getPagedQuestions(Integer questionType, int page, int size, String sortBy, String sortOrder, - String searchString) { - return qbDAO.getPagedQuestions(questionType, page, size, sortBy, sortOrder, searchString); + public List getPagedQuestions(String questionTypes, String collectionUids, int page, int size, + String sortBy, String sortOrder, String searchString) { + return qbDAO.getPagedQuestions(questionTypes, collectionUids, page, size, sortBy, sortOrder, searchString); } + + @Override + public List getAllQuestionUids(String collectionUids, String sortBy, String sortOrder, String searchString) { + return qbDAO.getAllQuestionUids(collectionUids, sortBy, sortOrder, searchString); + } @Override - public int getCountQuestions(Integer questionType, String searchString) { - return qbDAO.getCountQuestions(questionType, searchString); + public int getCountQuestions(String questionTypes, String collectionUids, String searchString) { + return qbDAO.getCountQuestions(questionTypes, collectionUids, searchString); } @Override