Index: lams_central/src/java/org/lamsfoundation/lams/web/qb/QbCollectionController.java =================================================================== diff -u -r80ab947256f1314103a88c68432755741615271b -r289d71a2af5137360ca926e9b03ca4bfccc4fe86 --- lams_central/src/java/org/lamsfoundation/lams/web/qb/QbCollectionController.java (.../QbCollectionController.java) (revision 80ab947256f1314103a88c68432755741615271b) +++ lams_central/src/java/org/lamsfoundation/lams/web/qb/QbCollectionController.java (.../QbCollectionController.java) (revision 289d71a2af5137360ca926e9b03ca4bfccc4fe86) @@ -111,10 +111,22 @@ sortOrder, searchString); int total = qbService.getCountCollectionQuestions(collectionUid, searchString); int maxPages = total / rowLimit + 1; - return toGridXML(questions, page, maxPages, total, showUsage); + return toGridXML(questions, page, maxPages, total, showUsage, false); } - private String toGridXML(List questions, int page, int maxPages, int totalCount, boolean showUsage) { + @RequestMapping("/getQuestionVersionGridData") + @ResponseBody + public String getQuestionVersionGridData(@RequestParam int qbQuestionId, HttpServletRequest request, + HttpServletResponse response) { + response.setContentType("text/xml; charset=utf-8"); + + List questions = qbService.getQbQuestionsByQuestionId(qbQuestionId); + questions = questions.subList(1, questions.size()); + return toGridXML(questions, 1, 1, questions.size(), true, true); + } + + private String toGridXML(List questions, int page, int maxPages, int totalCount, boolean showUsage, + boolean isVersionGrid) { try { Document document = WebUtil.getDocument(); @@ -140,11 +152,14 @@ // the last cell is for creating stats button String usage = showUsage - ? String.valueOf(qbService.getCountQuestionActivitiesByQuestionId(question.getQuestionId())) + ? String.valueOf(isVersionGrid ? qbService.getCountQuestionActivitiesByUid(question.getUid()) + : qbService.getCountQuestionActivitiesByQuestionId(question.getQuestionId())) : null; + boolean hasVersions = qbService.countQuestionVersions(question.getQuestionId()) > 1; String[] data = { question.getQuestionId().toString(), - WebUtil.removeHTMLtags(question.getName()).trim(), question.getType().toString(), - question.getVersion().toString(), usage, uid }; + WebUtil.removeHTMLtags(question.getName()).trim(), + isVersionGrid ? null : question.getType().toString(), question.getVersion().toString(), usage, + uid, String.valueOf(hasVersions) }; for (String cell : data) { Element cellElement = document.createElement(CommonConstants.ELEMENT_CELL); Index: lams_central/web/qb/collection.jsp =================================================================== diff -u -r80ab947256f1314103a88c68432755741615271b -r289d71a2af5137360ca926e9b03ca4bfccc4fe86 --- lams_central/web/qb/collection.jsp (.../collection.jsp) (revision 80ab947256f1314103a88c68432755741615271b) +++ lams_central/web/qb/collection.jsp (.../collection.jsp) (revision 289d71a2af5137360ca926e9b03ca4bfccc4fe86) @@ -108,7 +108,8 @@ "questionType", "questionVersion", "Used in
lessons", - "Actions" + "Actions", + "hasVersions" ], colModel:[ {name:'id', index:'uid', sortable:true, hidden:false, width: 10}, @@ -117,7 +118,8 @@ {name:'questionVersion', index:'questionVersion', width:0, hidden: true}, {name: 'usage', index: 'usage', sortable:false, width: 10, align: "center"}, // formatter gets just question uid and creates a button - {name:'actions', index:'actions', classes: "stats-cell", sortable:false, width: 13, align: "center", formatter: actionsFormatter} + {name:'actions', index:'actions', classes: "stats-cell", sortable:false, width: 13, align: "center", formatter: actionsFormatter}, + {name:'hasVersions', index:'hasVersions', width:0, hidden: true} ], beforeSelectRow: function(rowid, e) { // do not select rows at all @@ -130,7 +132,52 @@ loadError: function(xhr,st,err) { collectionGrid.clearGridData(); alert("Error!"); - } + }, + subGrid : true, + subGridOptions: { + hasSubgrid: function (options) { + return options.data.hasVersions == 'true'; + } + }, + subGridRowExpanded: function(subgrid_id, row_id) { + var subgrid_table_id = subgrid_id + "_t", + rowData = jQuery("#" + subgrid_id.substring(0, subgrid_id.lastIndexOf('_'))).getRowData(row_id), + questionId = rowData["id"].split("_")[0]; + jQuery("#"+subgrid_id).html("
"); + jQuery("#"+subgrid_table_id).jqGrid({ + guiStyle: "bootstrap", + iconSet: 'fontAwesome', + autoencode:false, + autowidth: true, + datatype: "xml", + url: "qb/collection/getQuestionVersionGridData.do?qbQuestionId=" + questionId, + height: "100%", + cmTemplate: { title: false }, + cellEdit:false, + pager: false, + colNames: [ + "ID", + "Name", + "questionType", + "questionVersion", + "Used in
lessons", + "Actions" + ], + colModel: [ + {name:'id', index:'uid', sortable:false, hidden:true, width: 10}, + {name:'name', index:'name', sortable:false, search:false, autoencode:true, formatter: questionNameFormatter}, + {name:'questionType', index:'questionType', width:0, hidden: true}, + {name:'questionVersion', index:'questionVersion', width:0, hidden: true}, + {name: 'usage', index: 'usage', sortable:false, width: 9, align: "center"}, + // formatter gets just question uid and creates a button + {name:'actions', index:'actions', classes: "stats-cell", sortable:false, width: 12, align: "center", formatter: actionsFormatter} + ], + loadError: function(xhr,st,err) { + jQuery("#"+subgrid_table_id).clearGridData(); + alert("Error!"); + } + }); + } }).jqGrid('filterToolbar'); if (!isPublicCollection) { @@ -214,9 +261,11 @@ text += ""; text += "v. " + questionVersion; text += ""; - text += ""; - text += questionType; - text += ""; + if (questionType) { + text += ""; + text += questionType; + text += ""; + } return text; } Index: lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java =================================================================== diff -u -r80ab947256f1314103a88c68432755741615271b -r289d71a2af5137360ca926e9b03ca4bfccc4fe86 --- lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java (.../QbDAO.java) (revision 80ab947256f1314103a88c68432755741615271b) +++ lams_common/src/java/org/lamsfoundation/lams/qb/dao/hibernate/QbDAO.java (.../QbDAO.java) (revision 289d71a2af5137360ca926e9b03ca4bfccc4fe86) @@ -60,7 +60,9 @@ + "GROUP BY b.question ORDER BY COUNT(bl.uid) DESC"; private static final String FIND_COLLECTION_QUESTIONS = "SELECT q.* FROM lams_qb_collection_question AS cq " - + "JOIN lams_qb_question AS q ON cq.qb_question_id = q.question_id WHERE cq.collection_uid = :collectionUid"; + + "JOIN lams_qb_question AS q ON cq.qb_question_id = q.question_id WHERE " + + "q.version = (SELECT MAX(version) FROM lams_qb_question WHERE question_id = q.question_id) " + + "AND cq.collection_uid = :collectionUid"; private static final String FIND_QUESTION_COLLECTIONS_BY_UID = "SELECT c.* FROM lams_qb_collection_question AS cq " + "JOIN lams_qb_collection AS c ON cq.collection_uid = c.uid JOIN lams_qb_question AS q ON cq.qb_question_id = q.question_id " Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java =================================================================== diff -u -r80ab947256f1314103a88c68432755741615271b -r289d71a2af5137360ca926e9b03ca4bfccc4fe86 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision 80ab947256f1314103a88c68432755741615271b) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/IQbService.java (.../IQbService.java) (revision 289d71a2af5137360ca926e9b03ca4bfccc4fe86) @@ -56,6 +56,8 @@ QbStatsDTO getQbQuestionStats(long qbQuestionUid); + int countQuestionVersions(int qbQuestionId); + QbStatsActivityDTO getActivityStatsByContentId(Long toolContentId, Long qbQuestionUid); QbStatsActivityDTO getActivityStats(Long activityId, Long qbQuestionUid); Index: lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java =================================================================== diff -u -r80ab947256f1314103a88c68432755741615271b -r289d71a2af5137360ca926e9b03ca4bfccc4fe86 --- lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 80ab947256f1314103a88c68432755741615271b) +++ lams_common/src/java/org/lamsfoundation/lams/qb/service/QbService.java (.../QbService.java) (revision 289d71a2af5137360ca926e9b03ca4bfccc4fe86) @@ -158,6 +158,13 @@ } @Override + public int countQuestionVersions(int qbQuestionId) { + Map properties = new HashMap<>(); + properties.put("questionId", qbQuestionId); + return Long.valueOf(qbDAO.countByProperties(QbQuestion.class, properties)).intValue(); + } + + @Override public QbStatsActivityDTO getActivityStatsByContentId(Long toolContentId, Long qbQuestionUid) { Activity activity = qbDAO.findByProperty(ToolActivity.class, "toolContentId", toolContentId).get(0); return getActivityStats(activity.getActivityId(), qbQuestionUid); @@ -529,7 +536,7 @@ public int getCountQuestionActivitiesByUid(long qbQuestionUid) { return qbDAO.getCountQuestionActivitiesByUid(qbQuestionUid); } - + @Override public int getCountQuestionActivitiesByQuestionId(int qbQuestionId) { return qbDAO.getCountQuestionActivitiesByQuestionId(qbQuestionId);