Index: lams_central/src/java/org/lamsfoundation/lams/gradebook/service/GradeBookService.java =================================================================== diff -u -rfc2b6751efa103ff475378442632b752c01c2736 -r2ae6299d000baa190344632f261958349730b440 --- lams_central/src/java/org/lamsfoundation/lams/gradebook/service/GradeBookService.java (.../GradeBookService.java) (revision fc2b6751efa103ff475378442632b752c01c2736) +++ lams_central/src/java/org/lamsfoundation/lams/gradebook/service/GradeBookService.java (.../GradeBookService.java) (revision 2ae6299d000baa190344632f261958349730b440) @@ -163,9 +163,8 @@ if (learners != null) { for (User learner : learners) { GBUserGridRowDTO gUserDTO = new GBUserGridRowDTO(); - gUserDTO.setFirstName(learner.getFirstName()); - gUserDTO.setLastName(learner.getLastName()); - gUserDTO.setLogin(learner.getLogin()); + gUserDTO.setRowName(learner.getLastName() + " " + learner.getFirstName()); + gUserDTO.setId(new Long(learner.getUserId())); GradeBookUserActivity gradeBookUserActivity = gradeBookDAO.getGradeBookUserDataForActivity(activity .getActivityId(), learner.getUserId()); @@ -260,9 +259,8 @@ for (User learner : learners) { GBUserGridRowDTO gradeBookUserDTO = new GBUserGridRowDTO(); - gradeBookUserDTO.setLogin(learner.getLogin()); - gradeBookUserDTO.setFirstName(learner.getFirstName()); - gradeBookUserDTO.setLastName(learner.getLastName()); + gradeBookUserDTO.setId(new Long(learner.getUserId())); + gradeBookUserDTO.setRowName(learner.getLastName() + " " + learner.getFirstName()); // Setting the status and time taken for the user's lesson LearnerProgress learnerProgress = monitoringService.getLearnerProgress(learner.getUserId(), lesson @@ -391,9 +389,11 @@ if (lesson.getLessonClass().isStaffMember(user)) { GBLessonGridRowDTO lessonRow = new GBLessonGridRowDTO(); lessonRow.setLessonName(lesson.getLessonName()); - lessonRow.setLessonId(lesson.getLessonId()); + lessonRow.setId(lesson.getLessonId()); lessonRow.setStartDate(getLocaleDateString(user, lesson.getStartDateTime())); - lessonRow.setAverageTime(gradeBookDAO.getAverageDurationLesson(lesson.getLessonId())); + + // Setting the timeTaken value as the average for the lesson, as this is not a specific user view + lessonRow.setTimeTaken(gradeBookDAO.getAverageDurationLesson(lesson.getLessonId())); lessonRow.setLessonDescription(lesson.getLessonDescription()); lessonRow.setMark(gradeBookDAO.getAverageMarkForLesson(lesson.getLessonId())); @@ -448,8 +448,8 @@ */ private GBActivityGridRowDTO getGradeBookActivityDTO(Activity activity, Lesson lesson) { GBActivityGridRowDTO gactivityDTO = new GBActivityGridRowDTO(); - gactivityDTO.setActivityId(activity.getActivityId()); - gactivityDTO.setActivityTitle(activity.getTitle()); + gactivityDTO.setId(activity.getActivityId()); + gactivityDTO.setRowName(activity.getTitle()); if (activity.isToolActivity() && activity instanceof ToolActivity) { ToolActivity toolAct = (ToolActivity) activity; @@ -489,8 +489,9 @@ } } + // Settting the mark as an average for the class as this is not a specific user view if (count != 0) { - gactivityDTO.setAverage(sum / count); + gactivityDTO.setMark(sum / count); } } @@ -514,8 +515,8 @@ + learner.getUserId()); GBActivityGridRowDTO gactivityDTO = new GBActivityGridRowDTO(); - gactivityDTO.setActivityId(activity.getActivityId()); - gactivityDTO.setActivityTitle(activity.getTitle()); + gactivityDTO.setId(activity.getActivityId()); + gactivityDTO.setRowName(activity.getTitle()); gactivityDTO.setTimeTaken(activityTime); GradeBookUserActivity gradeBookActivity = gradeBookDAO.getGradeBookUserDataForActivity( Index: lams_central/src/java/org/lamsfoundation/lams/gradebook/util/GradeBookUtil.java =================================================================== diff -u -r662af4c9490c6c67127cda6c29d7d806a9e9eaca -r2ae6299d000baa190344632f261958349730b440 --- lams_central/src/java/org/lamsfoundation/lams/gradebook/util/GradeBookUtil.java (.../GradeBookUtil.java) (revision 662af4c9490c6c67127cda6c29d7d806a9e9eaca) +++ lams_central/src/java/org/lamsfoundation/lams/gradebook/util/GradeBookUtil.java (.../GradeBookUtil.java) (revision 2ae6299d000baa190344632f261958349730b440) @@ -25,8 +25,9 @@ import java.io.StringWriter; import java.util.ArrayList; -import java.util.Collection; +import java.util.Collections; import java.util.Iterator; +import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -38,13 +39,72 @@ import javax.xml.transform.stream.StreamResult; import org.lamsfoundation.lams.gradebook.dto.GradeBookGridRowDTO; +import org.lamsfoundation.lams.gradebook.dto.comparators.GBIDComparator; +import org.lamsfoundation.lams.gradebook.dto.comparators.GBMarkComparator; +import org.lamsfoundation.lams.gradebook.dto.comparators.GBRowNameComparator; +import org.lamsfoundation.lams.gradebook.dto.comparators.GBTimeTakenComparator; import org.w3c.dom.Document; import org.w3c.dom.Element; public class GradeBookUtil { + /** + * Wrapper method for printing the xml for grid rows + * + * It takes the list of rows along with the grid parameter and returns the + * xml for the altered set + * + * + * @param gridRows + * @param view + * @param sortBy + * @param isSearch + * @param searchField + * @param searchOper + * @param searchString + * @param sortOrder + * @param rowLimit + * @param page + * @return + */ @SuppressWarnings("unchecked") - public static String toGridXML(Collection gridRows, int page, int totalPages, String view) { + public static String toGridXML(List gridRows, String view, String sortBy, boolean isSearch, String searchField, + String searchOper, String searchString, String sortOrder, int rowLimit, int page) { + + // Alter the set based on the parameters + gridRows = makeGridRowAlterations(gridRows, sortBy, isSearch, searchField, searchOper, searchString, sortOrder, + rowLimit, page); + // Work out the sublist to fetch based on rowlimit and current page. + int totalPages = 1; + if (rowLimit < gridRows.size()) { + + totalPages = new Double(Math.ceil(new Integer(gridRows.size()).doubleValue() + / new Integer(rowLimit).doubleValue())).intValue(); + int firstRow = (page - 1) * rowLimit; + int lastRow = firstRow + rowLimit; + + if (lastRow > gridRows.size()) { + gridRows = gridRows.subList(firstRow, gridRows.size()); + } else { + gridRows = gridRows.subList(firstRow, lastRow); + } + + } + + return toGridXML(gridRows, page, totalPages, view); + } + + /** + * Tranlates a list of grid rows into the required jqGrid xml + * + * @param gridRows + * @param page + * @param totalPages + * @param view + * @return + */ + @SuppressWarnings("unchecked") + public static String toGridXML(List gridRows, int page, int totalPages, String view) { String xml = ""; try { Document document = getDocument(); @@ -68,13 +128,13 @@ while (iter.hasNext()) { GradeBookGridRowDTO gridRow = (GradeBookGridRowDTO) iter.next(); Element rowElement = document.createElement("row"); - rowElement.setAttribute("id", gridRow.getRowId()); + rowElement.setAttribute("id", gridRow.getId().toString()); // Work out which grid we want to put the data into ArrayList gridRowStringArray = new ArrayList(); gridRowStringArray = gridRow.toStringArray(view); - + for (String gradeBookItem : gridRowStringArray) { Element cellElement = document.createElement("cell"); gradeBookItem = (gradeBookItem != null) ? gradeBookItem : ""; @@ -116,4 +176,103 @@ return writer.toString(); } + /** + * Alters a grid row for sorting and searching + * + * @param gridRows + * @param sortBy + * @param isSearch + * @param searchField + * @param searchOper + * @param searchString + * @param sortOrder + * @param rowLimit + * @param page + * @return + */ + @SuppressWarnings("unchecked") + private static List makeGridRowAlterations(List gridRows, String sortBy, boolean isSearch, String searchField, + String searchOper, String searchString, String sortOrder, int rowLimit, int page) { + + // Sort the list appropriately + if (sortBy != null) { + if (sortBy.equals("rowName")) { + Collections.sort(gridRows, new GBRowNameComparator()); + } else if (sortBy.equals("mark")) { + Collections.sort(gridRows, new GBMarkComparator()); + } else if (sortBy.equals("id")) { + Collections.sort(gridRows, new GBIDComparator()); + } else if (sortBy.equals("timeTaken")) { + Collections.sort(gridRows, new GBTimeTakenComparator()); + } else { + Collections.sort(gridRows, new GBRowNameComparator()); + } + } else { + Collections.sort(gridRows, new GBRowNameComparator()); + } + + // if it is a search fix up the set + if (isSearch && searchField != null && searchOper != null && searchString != null) { + gridRows = (List) doRowNameSearch(gridRows, searchField, searchOper, searchString + .toLowerCase()); + } + + // Reverse the order if requested + if (sortOrder != null && sortOrder.equals("desc")) { + Collections.reverse(gridRows); + } + + return gridRows; + + } + + /** + * Does the search operation on the set for row names + * + * @param gradeBookRows + * @param searchField + * @param searchOper + * @param searchString + * @return + */ + @SuppressWarnings("unchecked") + private static List doRowNameSearch(List gradeBookRows, String searchField, String searchOper, String searchString) { + List ret = new ArrayList(); + + if (searchField.equals("rowName")) { + Iterator it = gradeBookRows.iterator(); + + while (it.hasNext()) { + GradeBookGridRowDTO userRow = (GradeBookGridRowDTO) it.next(); + + String rowName = userRow.getRowName(); + rowName = rowName.toLowerCase(); + + if (searchOper.equals("eq")) { + if (rowName.equals(searchString)) { + ret.add(userRow); + } + } else if (searchOper.equals("ne")) { + if (!rowName.equals(searchString)) { + ret.add(userRow); + } + } else if (searchOper.equals("bw")) { + if (rowName.startsWith(searchString)) { + ret.add(userRow); + } + } else if (searchOper.equals("ew")) { + if (rowName.endsWith(searchString)) { + ret.add(userRow); + } + } else if (searchOper.equals("cn")) { + if (rowName.contains(searchString)) { + ret.add(userRow); + } + } + } + + } + return ret; + } + } Index: lams_central/src/java/org/lamsfoundation/lams/gradebook/web/action/GradeBookAction.java =================================================================== diff -u -rfc2b6751efa103ff475378442632b752c01c2736 -r2ae6299d000baa190344632f261958349730b440 --- lams_central/src/java/org/lamsfoundation/lams/gradebook/web/action/GradeBookAction.java (.../GradeBookAction.java) (revision fc2b6751efa103ff475378442632b752c01c2736) +++ lams_central/src/java/org/lamsfoundation/lams/gradebook/web/action/GradeBookAction.java (.../GradeBookAction.java) (revision 2ae6299d000baa190344632f261958349730b440) @@ -26,6 +26,7 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.Set; @@ -40,11 +41,9 @@ import org.lamsfoundation.lams.gradebook.dto.GBLessonGridRowDTO; import org.lamsfoundation.lams.gradebook.dto.GBUserGridRowDTO; import org.lamsfoundation.lams.gradebook.dto.GradeBookGridRowDTO; -import org.lamsfoundation.lams.gradebook.dto.comparators.GBLessonIDComparator; -import org.lamsfoundation.lams.gradebook.dto.comparators.GBLessonMarkComparator; -import org.lamsfoundation.lams.gradebook.dto.comparators.GBLessonNameComparator; -import org.lamsfoundation.lams.gradebook.dto.comparators.GBUserFullNameComparator; -import org.lamsfoundation.lams.gradebook.dto.comparators.GBUserMarkComparator; +import org.lamsfoundation.lams.gradebook.dto.comparators.GBIDComparator; +import org.lamsfoundation.lams.gradebook.dto.comparators.GBMarkComparator; +import org.lamsfoundation.lams.gradebook.dto.comparators.GBRowNameComparator; import org.lamsfoundation.lams.gradebook.service.IGradeBookService; import org.lamsfoundation.lams.gradebook.util.GradeBookConstants; import org.lamsfoundation.lams.gradebook.util.GradeBookUtil; @@ -111,15 +110,20 @@ public ActionForward getActivityGridData(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { initServices(); + + // Getting the params passed in from the jqGrid int page = WebUtil.readIntParam(request, GradeBookConstants.PARAM_PAGE); int rowLimit = WebUtil.readIntParam(request, GradeBookConstants.PARAM_ROWS); - - // Leaving the sorting params here if we decide to sort the activities in some way String sortOrder = WebUtil.readStrParam(request, GradeBookConstants.PARAM_SORD); String sortBy = WebUtil.readStrParam(request, GradeBookConstants.PARAM_SIDX, true); + Boolean isSearch = WebUtil.readBooleanParam(request, "_search"); + String searchField = WebUtil.readStrParam(request, "searchField", true); + String searchOper = WebUtil.readStrParam(request, "searchOper", true); + String searchString = WebUtil.readStrParam(request, "searchString", true); + String view = WebUtil.readStrParam(request, "method"); + // Getting the lesson id Long lessonID = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); - String method = WebUtil.readStrParam(request, "method"); Lesson lesson = lessonService.getLesson(lessonID); @@ -129,38 +133,48 @@ // Get the user gradebook list from the db // A slightly different list is needed for userview or activity view - if (method.equals("userView")) { - String login = WebUtil.readStrParam(request, GradeBookConstants.PARAM_LOGIN); - User learner = userService.getUserByLogin(login); + if (view.equals("userView")) { + Integer userID = WebUtil.readIntParam(request, GradeBookConstants.PARAM_LOGIN); + User learner = (User) userService.findById(User.class, userID); if (learner != null) { gradeBookActivityDTOs = gradeBookService.getGBActivityRowsForLearner(lesson, learner); } else { // return null and the grid will report the error - logger.error("No learner found for: " + login); + logger.error("No learner found for: " + userID); return null; } - } else if (method.equals("activityView")) { + } else if (view.equals("activityView")) { gradeBookActivityDTOs = gradeBookService.getGBActivityRowsForLesson(lesson); } - // Work out the sublist to fetch based on rowlimit and current page. - int totalPages = 1; - if (rowLimit < gradeBookActivityDTOs.size()) { + // // Work out the sublist to fetch based on rowlimit and current page. + // int totalPages = 1; + // if (rowLimit < gradeBookActivityDTOs.size()) { + // + // totalPages = new Double(Math.ceil(new Integer(gradeBookActivityDTOs.size()).doubleValue() + // / new Integer(rowLimit).doubleValue())).intValue(); + // int firstRow = (page - 1) * rowLimit; + // int lastRow = firstRow + rowLimit; + // + // if (lastRow > gradeBookActivityDTOs.size()) { + // gradeBookActivityDTOs = gradeBookActivityDTOs.subList(firstRow, gradeBookActivityDTOs.size()); + // } else { + // gradeBookActivityDTOs = gradeBookActivityDTOs.subList(firstRow, lastRow); + // } + // + // } - totalPages = new Double(Math.ceil(new Integer(gradeBookActivityDTOs.size()).doubleValue() - / new Integer(rowLimit).doubleValue())).intValue(); - int firstRow = (page - 1) * rowLimit; - int lastRow = firstRow + rowLimit; + // String ret = GradeBookUtil.toGridXML(gradeBookActivityDTOs, page, totalPages, method); - if (lastRow > gradeBookActivityDTOs.size()) { - gradeBookActivityDTOs = gradeBookActivityDTOs.subList(firstRow, gradeBookActivityDTOs.size()); - } else { - gradeBookActivityDTOs = gradeBookActivityDTOs.subList(firstRow, lastRow); - } + // public static String toGridXML(List gridRows, String view, String sortBy, boolean isSearch, String searchField, + // String searchOper, String searchString, String sortOrder, int rowLimit, int page) + if (sortBy == null) { + sortBy = "id"; } - String ret = GradeBookUtil.toGridXML(gradeBookActivityDTOs, page, totalPages, method); + String ret = GradeBookUtil.toGridXML(gradeBookActivityDTOs, view, sortBy, isSearch, searchField, + searchOper, searchString, sortOrder, rowLimit, page); response.setContentType("text/xml"); PrintWriter out = response.getWriter(); @@ -197,24 +211,30 @@ public ActionForward getUserGridData(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { initServices(); + + // Getting the params passed in from the jqGrid int page = WebUtil.readIntParam(request, GradeBookConstants.PARAM_PAGE); int rowLimit = WebUtil.readIntParam(request, GradeBookConstants.PARAM_ROWS); String sortOrder = WebUtil.readStrParam(request, GradeBookConstants.PARAM_SORD); String sortBy = WebUtil.readStrParam(request, GradeBookConstants.PARAM_SIDX, true); - Long lessonID = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); Boolean isSearch = WebUtil.readBooleanParam(request, "_search"); - String method = WebUtil.readStrParam(request, "method"); + String searchField = WebUtil.readStrParam(request, "searchField", true); + String searchOper = WebUtil.readStrParam(request, "searchOper", true); + String searchString = WebUtil.readStrParam(request, "searchString", true); + String view = WebUtil.readStrParam(request, "method"); + Long lessonID = WebUtil.readLongParam(request, AttributeNames.PARAM_LESSON_ID); + Lesson lesson = lessonService.getLesson(lessonID); if (lesson != null) { // Get the user gradebook list from the db List gradeBookUserDTOs = new ArrayList(); - if (method.equals("userView") || method.equals("courseMonitorView")) { + if (view.equals("userView") || view.equals("courseMonitorView")) { gradeBookUserDTOs = gradeBookService.getGBUserRowsForLesson(lesson); - } else if (method.equals("activityView")) { + } else if (view.equals("activityView")) { Long activityID = WebUtil.readLongParam(request, AttributeNames.PARAM_ACTIVITY_ID); Activity activity = monitoringService.getActivityById(activityID); @@ -227,51 +247,53 @@ } } - // Sort the list appropriately - if (sortBy != null) { - if (sortBy.equals("fullName")) { - Collections.sort(gradeBookUserDTOs, new GBUserFullNameComparator()); - } else if (sortBy.equals("mark")) { - Collections.sort(gradeBookUserDTOs, new GBUserMarkComparator()); - } else { - Collections.sort(gradeBookUserDTOs, new GBUserFullNameComparator()); - } - } else { - Collections.sort(gradeBookUserDTOs, new GBUserFullNameComparator()); - } + // // Sort the list appropriately + // if (sortBy != null) { + // if (sortBy.equals("rowName")) { + // Collections.sort(gradeBookUserDTOs, new GBRowNameComparator()); + // } else if (sortBy.equals("mark")) { + // Collections.sort(gradeBookUserDTOs, new GBMarkComparator()); + // } else { + // Collections.sort(gradeBookUserDTOs, new GBRowNameComparator()); + // } + // } else { + // Collections.sort(gradeBookUserDTOs, new GBRowNameComparator()); + // } + // + // // if it is a search fix up the set + // if (isSearch) { + // String searchField = WebUtil.readStrParam(request, "searchField"); + // String searchOper = WebUtil.readStrParam(request, "searchOper"); + // String searchString = WebUtil.readStrParam(request, "searchString"); + // gradeBookUserDTOs = (List)doRowNameSearch(gradeBookUserDTOs, searchField, searchOper, searchString.toLowerCase()); + // } + // + // // Reverse the order if requested + // if (sortOrder != null && sortOrder.equals("desc")) { + // Collections.reverse(gradeBookUserDTOs); + // } + // + // // Work out the sublist to fetch based on rowlimit and current page. + // int totalPages = 1; + // if (rowLimit < gradeBookUserDTOs.size()) { + // + // totalPages = new Double(Math.ceil(new Integer(gradeBookUserDTOs.size()).doubleValue() + // / new Integer(rowLimit).doubleValue())).intValue(); + // int firstRow = (page - 1) * rowLimit; + // int lastRow = firstRow + rowLimit; + // + // if (lastRow > gradeBookUserDTOs.size()) { + // gradeBookUserDTOs = gradeBookUserDTOs.subList(firstRow, gradeBookUserDTOs.size()); + // } else { + // gradeBookUserDTOs = gradeBookUserDTOs.subList(firstRow, lastRow); + // } + // + // } - // if it is a search fix up the set - if (isSearch) { - String searchField = WebUtil.readStrParam(request, "searchField"); - String searchOper = WebUtil.readStrParam(request, "searchOper"); - String searchString = WebUtil.readStrParam(request, "searchString"); - gradeBookUserDTOs = doUserSearch(gradeBookUserDTOs, searchField, searchOper, searchString.toLowerCase()); - } + //String ret = GradeBookUtil.toGridXML(gradeBookUserDTOs, page, totalPages, method); + String ret = GradeBookUtil.toGridXML(gradeBookUserDTOs, view, sortBy, isSearch, searchField, searchOper, + searchString, sortOrder, rowLimit, page); - // Reverse the order if requested - if (sortOrder != null && sortOrder.equals("desc")) { - Collections.reverse(gradeBookUserDTOs); - } - - // Work out the sublist to fetch based on rowlimit and current page. - int totalPages = 1; - if (rowLimit < gradeBookUserDTOs.size()) { - - totalPages = new Double(Math.ceil(new Integer(gradeBookUserDTOs.size()).doubleValue() - / new Integer(rowLimit).doubleValue())).intValue(); - int firstRow = (page - 1) * rowLimit; - int lastRow = firstRow + rowLimit; - - if (lastRow > gradeBookUserDTOs.size()) { - gradeBookUserDTOs = gradeBookUserDTOs.subList(firstRow, gradeBookUserDTOs.size()); - } else { - gradeBookUserDTOs = gradeBookUserDTOs.subList(firstRow, lastRow); - } - - } - - String ret = GradeBookUtil.toGridXML(gradeBookUserDTOs, page, totalPages, method); - response.setContentType("text/xml"); PrintWriter out = response.getWriter(); out.print(ret); @@ -303,12 +325,17 @@ public ActionForward getCourseGridData(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { initServices(); + + // Getting the params passed in from the jqGrid int page = WebUtil.readIntParam(request, GradeBookConstants.PARAM_PAGE); int rowLimit = WebUtil.readIntParam(request, GradeBookConstants.PARAM_ROWS); String sortOrder = WebUtil.readStrParam(request, GradeBookConstants.PARAM_SORD); String sortBy = WebUtil.readStrParam(request, GradeBookConstants.PARAM_SIDX, true); Boolean isSearch = WebUtil.readBooleanParam(request, "_search"); - String method = WebUtil.readStrParam(request, "method"); + String searchField = WebUtil.readStrParam(request, "searchField", true); + String searchOper = WebUtil.readStrParam(request, "searchOper", true); + String searchString = WebUtil.readStrParam(request, "searchString", true); + String view = WebUtil.readStrParam(request, "method"); User user = getRealUser(); @@ -324,53 +351,59 @@ gradeBookLessonDTOs = gradeBookService.getGBLessonRows(organisation, user); - // if it is a search fix up the set - if (isSearch) { - String searchField = WebUtil.readStrParam(request, "searchField"); - String searchOper = WebUtil.readStrParam(request, "searchOper"); - String searchString = WebUtil.readStrParam(request, "searchString"); - gradeBookLessonDTOs = doLessonSearch(gradeBookLessonDTOs, searchField, searchOper, searchString - .toLowerCase()); - } + // // if it is a search fix up the set + // if (isSearch) { + // String searchField = WebUtil.readStrParam(request, "searchField"); + // String searchOper = WebUtil.readStrParam(request, "searchOper"); + // String searchString = WebUtil.readStrParam(request, "searchString"); + // gradeBookLessonDTOs = (List)doRowNameSearch(gradeBookLessonDTOs, searchField, searchOper, searchString + // .toLowerCase()); + // } + // + // // Sort the list appropriately + // if (sortBy != null) { + // if (sortBy.equals("lessonName")) { + // Collections.sort(gradeBookLessonDTOs, new GBRowNameComparator()); + // } else if (sortBy.equals("mark")) { + // Collections.sort(gradeBookLessonDTOs, new GBMarkComparator()); + // } else { + // Collections.sort(gradeBookLessonDTOs, new GBIDComparator()); + // } + // } else { + // Collections.sort(gradeBookLessonDTOs, new GBIDComparator()); + // } + // + // // Reverse the order if requested + // if (sortOrder != null && sortOrder.equals("desc")) { + // Collections.reverse(gradeBookLessonDTOs); + // } + // + // // Work out the sublist to fetch based on rowlimit and current page. + // int totalPages = 1; + // if (rowLimit < gradeBookLessonDTOs.size()) { + // + // totalPages = new Double(Math.ceil(new Integer(gradeBookLessonDTOs.size()).doubleValue() + // / new Integer(rowLimit).doubleValue())).intValue(); + // + // int firstRow = (page - 1) * rowLimit; + // int lastRow = firstRow + rowLimit; + // + // if (lastRow > gradeBookLessonDTOs.size()) { + // gradeBookLessonDTOs = gradeBookLessonDTOs.subList(firstRow, gradeBookLessonDTOs.size()); + // } else { + // gradeBookLessonDTOs = gradeBookLessonDTOs.subList(firstRow, lastRow); + // } + // + // } - // Sort the list appropriately - if (sortBy != null) { - if (sortBy.equals("lessonName")) { - Collections.sort(gradeBookLessonDTOs, new GBLessonNameComparator()); - } else if (sortBy.equals("mark")) { - Collections.sort(gradeBookLessonDTOs, new GBLessonMarkComparator()); - } else { - Collections.sort(gradeBookLessonDTOs, new GBLessonIDComparator()); - } - } else { - Collections.sort(gradeBookLessonDTOs, new GBLessonIDComparator()); + if (sortBy == null) { + sortBy = "id"; } - // Reverse the order if requested - if (sortOrder != null && sortOrder.equals("desc")) { - Collections.reverse(gradeBookLessonDTOs); - } + // String ret = GradeBookUtil.toGridXML(gradeBookLessonDTOs, page, totalPages, method); + String ret = GradeBookUtil.toGridXML(gradeBookLessonDTOs, view, sortBy, isSearch, searchField, + searchOper, searchString, sortOrder, rowLimit, page); - // Work out the sublist to fetch based on rowlimit and current page. - int totalPages = 1; - if (rowLimit < gradeBookLessonDTOs.size()) { - - totalPages = new Double(Math.ceil(new Integer(gradeBookLessonDTOs.size()).doubleValue() - / new Integer(rowLimit).doubleValue())).intValue(); - - int firstRow = (page - 1) * rowLimit; - int lastRow = firstRow + rowLimit; - - if (lastRow > gradeBookLessonDTOs.size()) { - gradeBookLessonDTOs = gradeBookLessonDTOs.subList(firstRow, gradeBookLessonDTOs.size()); - } else { - gradeBookLessonDTOs = gradeBookLessonDTOs.subList(firstRow, lastRow); - } - - } - - String ret = GradeBookUtil.toGridXML(gradeBookLessonDTOs, page, totalPages, method); - response.setContentType("text/xml"); PrintWriter out = response.getWriter(); out.print(ret); @@ -385,78 +418,118 @@ return null; } - private List doUserSearch(List gradeBookUserDTOs, String searchField, - String searchOper, String searchString) { - List ret = new ArrayList(); + @SuppressWarnings("unchecked") + private List doRowNameSearch(List gradeBookRows, String searchField, String searchOper, String searchString) { + List ret = new ArrayList(); - if (searchField.equals("fullName")) { - for (GBUserGridRowDTO userRow : gradeBookUserDTOs) { + if (searchField.equals("rowName")) { + Iterator it = gradeBookRows.iterator(); - String fullName = userRow.getLastName() + " " + userRow.getFirstName(); - fullName = fullName.toLowerCase(); + while (it.hasNext()) { + GradeBookGridRowDTO userRow = (GradeBookGridRowDTO) it.next(); + String rowName = userRow.getRowName(); + rowName = rowName.toLowerCase(); + if (searchOper.equals("eq")) { - if (fullName.equals(searchString)) { + if (rowName.equals(searchString)) { ret.add(userRow); } } else if (searchOper.equals("ne")) { - if (!fullName.equals(searchString)) { + if (!rowName.equals(searchString)) { ret.add(userRow); } } else if (searchOper.equals("bw")) { - if (fullName.startsWith(searchString)) { + if (rowName.startsWith(searchString)) { ret.add(userRow); } } else if (searchOper.equals("ew")) { - if (fullName.endsWith(searchString)) { + if (rowName.endsWith(searchString)) { ret.add(userRow); } } else if (searchOper.equals("cn")) { - if (fullName.contains(searchString)) { + if (rowName.contains(searchString)) { ret.add(userRow); } } } - } - return ret; - } - - private List doLessonSearch(List gradeBookLessonDTOs , String searchField, - String searchOper, String searchString) { - List ret = new ArrayList(); - if (searchField.equals("lessonName")) { - for (GBLessonGridRowDTO lessonRow : gradeBookLessonDTOs) { - - String lessonName = lessonRow.getLessonName(); - lessonName = lessonName.toLowerCase(); - - if (searchOper.equals("eq")) { - if (lessonName.equals(searchString)) { - ret.add(lessonRow); - } - } else if (searchOper.equals("ne")) { - if (!lessonName.equals(searchString)) { - ret.add(lessonRow); - } - } else if (searchOper.equals("bw")) { - if (lessonName.startsWith(searchString)) { - ret.add(lessonRow); - } - } else if (searchOper.equals("ew")) { - if (lessonName.endsWith(searchString)) { - ret.add(lessonRow); - } - } else if (searchOper.equals("cn")) { - if (lessonName.contains(searchString)) { - ret.add(lessonRow); - } - } - } } return ret; } + // private List doUserSearch(List gradeBookUserDTOs, String searchField, + // String searchOper, String searchString) { + // List ret = new ArrayList(); + // + // if (searchField.equals("fullName")) { + // for (GBUserGridRowDTO userRow : gradeBookUserDTOs) { + // + // String fullName = userRow.getRowName(); + // fullName = fullName.toLowerCase(); + // + // if (searchOper.equals("eq")) { + // if (fullName.equals(searchString)) { + // ret.add(userRow); + // } + // } else if (searchOper.equals("ne")) { + // if (!fullName.equals(searchString)) { + // ret.add(userRow); + // } + // } else if (searchOper.equals("bw")) { + // if (fullName.startsWith(searchString)) { + // ret.add(userRow); + // } + // } else if (searchOper.equals("ew")) { + // if (fullName.endsWith(searchString)) { + // ret.add(userRow); + // } + // } else if (searchOper.equals("cn")) { + // if (fullName.contains(searchString)) { + // ret.add(userRow); + // } + // } + // } + // } + // return ret; + // } + // + // private List doLessonSearch(List gradeBookLessonDTOs , String searchField, + // String searchOper, String searchString) { + // List ret = new ArrayList(); + // + // if (searchField.equals("lessonName")) { + // for (GBLessonGridRowDTO lessonRow : gradeBookLessonDTOs) { + // + // String lessonName = lessonRow.getLessonName(); + // lessonName = lessonName.toLowerCase(); + // + // if (searchOper.equals("eq")) { + // if (lessonName.equals(searchString)) { + // ret.add(lessonRow); + // } + // } else if (searchOper.equals("ne")) { + // if (!lessonName.equals(searchString)) { + // ret.add(lessonRow); + // } + // } else if (searchOper.equals("bw")) { + // if (lessonName.startsWith(searchString)) { + // ret.add(lessonRow); + // } + // } else if (searchOper.equals("ew")) { + // if (lessonName.endsWith(searchString)) { + // ret.add(lessonRow); + // } + // } else if (searchOper.equals("cn")) { + // if (lessonName.contains(searchString)) { + // ret.add(lessonRow); + // } + // } + // } + // } + // return ret; + // } + private UserDTO getUser() { HttpSession ss = SessionManager.getSession(); return (UserDTO) ss.getAttribute(AttributeNames.USER); Index: lams_central/web/gradebook/gradeBookCourseMonitor.jsp =================================================================== diff -u -r8e0af661d84b765d167c4b982f2f1f7d3c34e78f -r2ae6299d000baa190344632f261958349730b440 --- lams_central/web/gradebook/gradeBookCourseMonitor.jsp (.../gradeBookCourseMonitor.jsp) (revision 8e0af661d84b765d167c4b982f2f1f7d3c34e78f) +++ lams_central/web/gradebook/gradeBookCourseMonitor.jsp (.../gradeBookCourseMonitor.jsp) (revision 2ae6299d000baa190344632f261958349730b440) @@ -26,16 +26,18 @@ imgpath: 'includes/javascript/jqgrid/themes/basic/images', cellEdit: true, sortorder: "asc", - sortname: "lessonName", + sortname: "id", pager: 'organisationGridPager', rowList:[5,10,20,30], rowNum:10, - cellurl: "/gradebook/gradebookMonitoring.do?dispatch=updateUserLessonGradeBookData&lessonID=${lessonDetails.lessonID}&login=test1", - colNames:["", 'Lesson Name', 'Sub-Group', 'Description', 'Average Mark'], + cellurl: "/gradebook/gradebookMonitoring.do?dispatch=updateUserLessonGradeBookData&lessonID=${lessonDetails.lessonID}", + colNames:["", 'Lesson Name', 'Sub-Group', 'Start Date', 'Average Time Taken', 'Description', 'Average Mark'], colModel:[ - {name:'lessonID', index:'lessonID', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, - {name:'lessonName',index:'lessonName', sortable:true, editable:false}, - {name:'subGroup',index:'subGroup', sortable:true, editable:false, search:false}, + {name:'id', index:'id', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, + {name:'rowName',index:'rowName', sortable:true, editable:false}, + {name:'subGroup',index:'subGroup', sortable:false, editable:false, search:false}, + {name:'startDate',index:'startDate', sortable:false, editable:false, search:false}, + {name:'timeTaken',index:'timeTaken', sortable:true, editable:false, search:false}, {name:'description',index:'description', sortable:false, editable:false, search:false}, {name:'mark',index:'mark', sortable:true, editable:false, search:false} ], @@ -58,15 +60,16 @@ cellEdit:true, cellurl: "/gradebook/gradebookMonitoring.do?dispatch=updateUserLessonGradeBookData&lessonID=" + lessonID, sortorder: "asc", - sortname: "fullName", + sortname: "rowName", pager: subgrid_table_id + "_pager", rowList:[5,10,20,30], rowNum:10, - colNames: ['','Full Name','Progress', 'Lesson Feedback', 'Lesson Mark'], + colNames: ['','Full Name','Progress', 'Time Taken', 'Lesson Feedback', 'Lesson Mark'], colModel:[ - {name:'login', index:'login', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, - {name:'fullName',index:'fullName', sortable:true, editable:false}, + {name:'id', index:'id', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, + {name:'rowName',index:'rowName', sortable:true, editable:false}, {name:'status', align:'center', width:30, index:'status', sortable:false, editable:false, search:false}, + {name:'timeTaken', index:'timeTaken', sortable:true, editable:false, search:false}, {name:'feedback',index:'feedback', sortable:false, editable:true, edittype:'textarea', editoptions:{rows:'4',cols:'20'} , search:false}, {name:'mark',index:'mark', sortable:true, editable:true, editrules:{number:true}, search:false} ], @@ -155,17 +158,6 @@ } }); }); - - - - function launchPopup(url,title) { - var wd = null; - if(wd && wd.open && !wd.closed){ - wd.close(); - } - wd = window.open(url,title,'resizable,width=1220,height=600,scrollbars'); - wd.window.focus(); - } Index: lams_central/web/gradebook/gradeBookMonitor.jsp =================================================================== diff -u -r8e0af661d84b765d167c4b982f2f1f7d3c34e78f -r2ae6299d000baa190344632f261958349730b440 --- lams_central/web/gradebook/gradeBookMonitor.jsp (.../gradeBookMonitor.jsp) (revision 8e0af661d84b765d167c4b982f2f1f7d3c34e78f) +++ lams_central/web/gradebook/gradeBookMonitor.jsp (.../gradeBookMonitor.jsp) (revision 2ae6299d000baa190344632f261958349730b440) @@ -30,16 +30,17 @@ cellEdit: true, viewrecords: true, sortorder: "asc", - sortname: "fullName", + sortname: "rowName", pager: 'userViewPager', rowList:[5,10,20,30], rowNum:10, cellurl: "/gradebook/gradebookMonitoring.do?dispatch=updateUserLessonGradeBookData&lessonID=${lessonDetails.lessonID}", - colNames:["", 'Name', 'Progress', 'Lesson FeedBack', 'Lesson Mark'], + colNames:["", 'Name', 'Progress', 'Time Taken', 'Lesson FeedBack', 'Lesson Mark'], colModel:[ - {name:'login', index:'login', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, - {name:'fullName',index:'fullName', sortable:true, editable:false}, + {name:'id', index:'id', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, + {name:'rowName',index:'rowName', sortable:true, editable:false}, {name:'status',index:'status', align:'center', width:30, sortable:false, editable:false, search:false}, + {name:'timeTaken',index:'timeTaken', sortable:true, editable:false, search:false}, {name:'feedback',index:'feedback', sortable:false, editable:true, edittype:'textarea', editoptions:{rows:'4',cols:'20'}, search:false }, {name:'mark',index:'mark', sortable:true, editable:true, editrules:{number:true}, search:false} ], @@ -59,21 +60,22 @@ height: "100%", width: 920, cellEdit:true, + sortname: "id", imgpath: 'includes/javascript/jqgrid/themes/basic/images', pager: subgrid_table_id + "_pager", rowList:[5,10,20,30], rowNum:10, cellurl: "/gradebook/gradebookMonitoring.do?dispatch=updateUserActivityGradeBookData&lessonID=${lessonDetails.lessonID}&method=userView&login=" + userName, colNames: ['Id','Activity','Progress','Outputs', 'Competences', 'Time Taken', 'Activity FeedBack', 'Mark'], colModel: [ - {name:'activityId', width:10, index:'activityId', sortable:false, hidden:true, hidedlg:true}, - {name:'activityTitle', width:60, index:'activityTitle', sortable:false, editable: false}, + {name:'id', width:10, index:'id', sortable:false, hidden:true, hidedlg:true}, + {name:'rowName', width:60, index:'rowName', sortable:false, editable: false}, {name:'status', align:'center', width:30, index:'status', sortable:false, editable:false}, {name:'output', width:250, index:'output', sortable:false, editable: false}, {name:'competences', width:250, index:'competences', sortable:false, editable: false, hidden:true}, - {name:'timeTaken', width:50, index:'timeTaken', sortable:false, editable: false}, + {name:'timeTaken', width:50, index:'timeTaken', sortable:true, editable: false}, {name:'feedback', width:250, index:'feedback', sortable:false, editable: true, edittype:'textarea', editoptions:{rows:'4',cols:'20'}}, - {name:'mark', width:100, index:'mark', sortable:false, editable: true, editrules:{number:true} } + {name:'mark', width:100, index:'mark', sortable:true, editable: true, editrules:{number:true} } ], loadError: function(xhr,st,err) { jQuery("#"+subgrid_table_id).clearGridData(); @@ -158,10 +160,10 @@ sortname: "activityId", colNames:["", 'Activity Name', 'Competences', 'Average Mark'], colModel:[ - {name:'activityId', width:10, index:'activityId', sortable:false, hidden:true, hidedlg:true}, - {name:'activityTitle', width:60, index:'activityTitle', sortable:false, editable: false}, + {name:'id', width:10, index:'id', sortable:false, hidden:true, hidedlg:true}, + {name:'rowName', width:60, index:'rowName', sortable:true, editable: false}, {name:'competences', width:250, index:'competences', sortable:false, editable: false, hidden:true}, - {name:'average',index:'average', sortable:false, editable:false} + {name:'mark',index:'mark', sortable:true, editable:false} ], loadError: function(xhr,st,err) { jQuery("#activityView").clearGridData(); @@ -189,8 +191,8 @@ rowNum:10, colNames: ['','Full Name','Progress','Outputs', 'Activity Feedback', 'Mark'], colModel:[ - {name:'login', index:'login', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, - {name:'fullName',index:'fullName', sortable:true, editable:false}, + {name:'id', index:'id', sortable:false, editable:false, hidden:true, search:false, hidedlg:true}, + {name:'rowName',index:'rowName', sortable:true, editable:false}, {name:'status', align:'center', width:30, index:'status', sortable:false, editable:false, search:false}, {name:'output', width:220, index:'output', sortable:false, editable: false, search:false}, {name:'feedback',index:'feedback', sortable:false, editable:true, edittype:'textarea', editoptions:{rows:'4',cols:'20'} , search:false},