Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/User.java =================================================================== diff -u -r60e44b19b8de02a00faa437fba8117928baa3d73 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/User.java (.../User.java) (revision 60e44b19b8de02a00faa437fba8117928baa3d73) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/User.java (.../User.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -504,7 +504,8 @@ (tutorialsDisabled == null ? false : true), // assume tutorials enabled if not set tutorialPages, (firstLogin == null ? true : false), // assume no firstLogin value means they haven't logged in - lastVisitedOrganisationId + lastVisitedOrganisationId, + portraitUuid ); } Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java =================================================================== diff -u -r60e44b19b8de02a00faa437fba8117928baa3d73 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java (.../UserDAO.java) (revision 60e44b19b8de02a00faa437fba8117928baa3d73) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAO.java (.../UserDAO.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -39,7 +39,7 @@ } StringBuilder queryBuilder = new StringBuilder( - "SELECT user.userId, user.login, user.firstName, user.lastName, user.email FROM User user WHERE user.disabledFlag=0 "); + "SELECT user.userId, user.login, user.firstName, user.lastName, user.email, user.portraitUuid FROM User user WHERE user.disabledFlag=0 "); // support for custom search from a toolbar UserDAO.addNameSearch(queryBuilder, "user", searchPhrase); //order by @@ -58,9 +58,10 @@ String firstName = (String) element[2]; String lastName = (String) element[3]; String email = (String) element[4]; + Long portraitUuid = element[5] != null ? ((Number) element[5]).longValue() : null; UserDTO userDto = new UserDTO(userId, firstName, lastName, login, null, null, null, email, null, null, null, - null, true, null, false, null); + null, true, null, false, null, portraitUuid); userDtos.add(userDto); } Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/UserDTO.java =================================================================== diff -u -r60e44b19b8de02a00faa437fba8117928baa3d73 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/UserDTO.java (.../UserDTO.java) (revision 60e44b19b8de02a00faa437fba8117928baa3d73) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/UserDTO.java (.../UserDTO.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -53,11 +53,13 @@ private Set pagesWithDisabledTutorials; private Boolean firstLogin; private Integer lastVisitedOrganisationId; + private Long portraitUuid; public UserDTO(Integer userID, String firstName, String lastName, String login, String localeLanguage, String localeCountry, String direction, String email, ThemeDTO htmlTheme, TimeZone timezone, Integer authenticationMethodId, String fckLanguageMapping, Boolean tutorialsDisabled, - Set pagesWithDisabledTutorials, Boolean firstLogin, Integer lastVisitedOrganisationId) { + Set pagesWithDisabledTutorials, Boolean firstLogin, Integer lastVisitedOrganisationId, + Long portraitUuid) { this.userID = userID; this.firstName = firstName; this.lastName = lastName; @@ -74,6 +76,7 @@ this.pagesWithDisabledTutorials = pagesWithDisabledTutorials; this.firstLogin = firstLogin; this.lastVisitedOrganisationId = lastVisitedOrganisationId; + this.setPortraitUuid(portraitUuid); } /** @@ -202,4 +205,12 @@ public Integer getLastVisitedOrganisationId() { return lastVisitedOrganisationId; } + + public Long getPortraitUuid() { + return portraitUuid; + } + + public void setPortraitUuid(Long portraitUuid) { + this.portraitUuid = portraitUuid; + } } \ No newline at end of file Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieUser.java =================================================================== diff -u -rbeb150b1b726c122ccc5af1ba95083105f9948b8 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieUser.java (.../ScratchieUser.java) (revision beb150b1b726c122ccc5af1ba95083105f9948b8) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/model/ScratchieUser.java (.../ScratchieUser.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -43,6 +43,7 @@ private String lastName; private String loginName; private boolean sessionFinished; + private Long portraitId; private ScratchieSession session; private Scratchie scratchie; @@ -55,6 +56,7 @@ this.firstName = user.getFirstName(); this.lastName = user.getLastName(); this.loginName = user.getLogin(); + this.portraitId = user.getPortraitUuid(); this.session = session; this.scratchie = null; this.sessionFinished = false; @@ -213,4 +215,12 @@ return new HashCodeBuilder().append(uid).append(firstName).append(lastName).append(loginName).toHashCode(); } + public Long getPortraitId() { + return portraitId; + } + + public void setPortraitId(Long portraitId) { + this.portraitId = portraitId; + } + } Index: lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java =================================================================== diff -u -r55ce2e8e7dc351b8d21dcc2c0aa4b79aadc3d73b -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 55ce2e8e7dc351b8d21dcc2c0aa4b79aadc3d73b) +++ lams_tool_scratchie/src/java/org/lamsfoundation/lams/tool/scratchie/service/ScratchieServiceImpl.java (.../ScratchieServiceImpl.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -570,6 +570,9 @@ } @Override + /* If isIncludeOnlyLeaders then include the portrait ids needed for monitoring. If false then it + * is probably the export and that doesn't need portraits. + */ public List getMonitoringSummary(Long contentId, boolean isIncludeOnlyLeaders) { List groupSummaryList = new ArrayList<>(); List sessions = scratchieSessionDao.getByContentId(contentId); @@ -589,8 +592,12 @@ boolean isUserGroupLeader = session.isUserGroupLeader(user.getUid()); // include only leaders in case isUserGroupLeader is ON, include all otherwise - if ((isIncludeOnlyLeaders && isUserGroupLeader) || !isIncludeOnlyLeaders) { + if (isIncludeOnlyLeaders && isUserGroupLeader) { + User systemUser = (User) userManagementService.findById(User.class, user.getUserId().intValue()); + user.setPortraitId(systemUser.getPortraitUuid()); usersToShow.add(user); + } else if (!isIncludeOnlyLeaders) { + usersToShow.add(user); } } Index: lams_tool_scratchie/web/pages/monitoring/monitoring.jsp =================================================================== diff -u -r4583983b64efe1d91fbb47cdde6a759a6a30e859 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_scratchie/web/pages/monitoring/monitoring.jsp (.../monitoring.jsp) (revision 4583983b64efe1d91fbb47cdde6a759a6a30e859) +++ lams_tool_scratchie/web/pages/monitoring/monitoring.jsp (.../monitoring.jsp) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -14,7 +14,7 @@ - + @@ -34,6 +34,8 @@ + + + @@ -92,7 +96,7 @@ - : + : @@ -138,7 +142,7 @@ heading.learner - + @@ -153,19 +157,19 @@ - + - + - + ');" class="btn btn-default btn-sm" > - + Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/SpreadsheetConstants.java =================================================================== diff -u -rca10d5f847158b365d5dec170b298f29a9b2ace7 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/SpreadsheetConstants.java (.../SpreadsheetConstants.java) (revision ca10d5f847158b365d5dec170b298f29a9b2ace7) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/SpreadsheetConstants.java (.../SpreadsheetConstants.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -84,6 +84,7 @@ public static final String ATTR_REFLECT_LIST = "reflectList"; public static final String ATTR_USER_UID = "userUid"; + public static final String ATTR_USER_ID = "userId"; public static final String ATTR_USER_NAME = "userName"; public static final String ATTR_USER_MARK = "mark"; public static final String ATTR_USER_IS_MARKED = "userIsMarked"; Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dao/SpreadsheetUserDAO.java =================================================================== diff -u -r2f725f8ef2aa09a2663b2335bf67213074426d11 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dao/SpreadsheetUserDAO.java (.../SpreadsheetUserDAO.java) (revision 2f725f8ef2aa09a2663b2335bf67213074426d11) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dao/SpreadsheetUserDAO.java (.../SpreadsheetUserDAO.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -27,6 +27,7 @@ import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.spreadsheet.model.SpreadsheetUser; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; public interface SpreadsheetUserDAO extends DAO { @@ -37,7 +38,7 @@ List getBySessionID(Long sessionId); List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString, - boolean getNotebookEntries, ICoreNotebookService coreNotebookService); + boolean getNotebookEntries, ICoreNotebookService coreNotebookService, IUserManagementService userManagementService); int getCountUsersBySession(final Long sessionId, String searchString); } Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dao/hibernate/SpreadsheetUserDAOHibernate.java =================================================================== diff -u -r2f725f8ef2aa09a2663b2335bf67213074426d11 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dao/hibernate/SpreadsheetUserDAOHibernate.java (.../SpreadsheetUserDAOHibernate.java) (revision 2f725f8ef2aa09a2663b2335bf67213074426d11) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/dao/hibernate/SpreadsheetUserDAOHibernate.java (.../SpreadsheetUserDAOHibernate.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -28,12 +28,14 @@ import org.apache.commons.lang.StringEscapeUtils; import org.apache.commons.lang.StringUtils; import org.hibernate.SQLQuery; +import org.hibernate.type.IntegerType; import org.hibernate.type.StringType; import org.lamsfoundation.lams.dao.hibernate.LAMSBaseDAO; import org.lamsfoundation.lams.notebook.service.ICoreNotebookService; import org.lamsfoundation.lams.tool.spreadsheet.SpreadsheetConstants; import org.lamsfoundation.lams.tool.spreadsheet.dao.SpreadsheetUserDAO; import org.lamsfoundation.lams.tool.spreadsheet.model.SpreadsheetUser; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.springframework.stereotype.Repository; @Repository @@ -77,7 +79,8 @@ * where the String is the notebook entry. No notebook entries needed? Will return in their place. */ public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, - String searchString, boolean getNotebookEntries, ICoreNotebookService coreNotebookService) { + String searchString, boolean getNotebookEntries, ICoreNotebookService coreNotebookService, + IUserManagementService userManagementService) { String sortingOrder; switch (sorting) { case SpreadsheetConstants.SORT_BY_USERNAME_ASC: @@ -96,6 +99,8 @@ sortingOrder = "user.last_name, user.first_name"; } + String[] portraitStrings = userManagementService.getPortraitSQL("user.user_id"); + // If the session uses notebook, then get the sql to join across to get the entries String[] notebookEntryStrings = null; if (getNotebookEntries) { @@ -107,10 +112,12 @@ StringBuilder queryText = new StringBuilder(); queryText.append("SELECT user.* "); queryText.append(notebookEntryStrings != null ? notebookEntryStrings[0] : ", NULL notebookEntry"); + queryText.append(portraitStrings[0]); queryText.append(" FROM tl_lasprd10_user user "); queryText.append( " JOIN tl_lasprd10_session session ON user.session_uid = session.uid and session.session_id = :sessionId"); - + queryText.append(portraitStrings[1]); + // If sorting by mark then join to mark if (sorting == SpreadsheetConstants.SORT_BY_MARKED_ASC || sorting == SpreadsheetConstants.SORT_BY_MARKED_DESC) { queryText.append( @@ -131,6 +138,7 @@ SQLQuery query = getSession().createSQLQuery(queryText.toString()); query.addEntity("user", SpreadsheetUser.class).addScalar("notebookEntry", StringType.INSTANCE) + .addScalar("portraitId", IntegerType.INSTANCE) .setLong("sessionId", sessionId.longValue()).setFirstResult(page * size).setMaxResults(size); return query.list(); } Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java =================================================================== diff -u -r2abc3485dc2d24ea02044a64271f3ee0d3b8c11b -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java (.../SpreadsheetServiceImpl.java) (revision 2abc3485dc2d24ea02044a64271f3ee0d3b8c11b) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/service/SpreadsheetServiceImpl.java (.../SpreadsheetServiceImpl.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -214,7 +214,7 @@ public List getUsersForTablesorter(final Long sessionId, int page, int size, int sorting, String searchString, boolean getNotebookEntries) { return spreadsheetUserDao.getUsersForTablesorter(sessionId, page, size, sorting, searchString, - getNotebookEntries, coreNotebookService); + getNotebookEntries, coreNotebookService, userManagementService); } @Override Index: lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/web/action/MonitoringAction.java =================================================================== diff -u -r0acc4ca56f472b81307b4936c0cc797b71d5cf85 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 0acc4ca56f472b81307b4936c0cc797b71d5cf85) +++ lams_tool_spreadsheet/src/java/org/lamsfoundation/lams/tool/spreadsheet/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -169,6 +169,7 @@ SpreadsheetUser user = (SpreadsheetUser) userAndReflection[0]; responseRow.put(SpreadsheetConstants.ATTR_USER_UID, user.getUid()); + responseRow.put(SpreadsheetConstants.ATTR_USER_ID, user.getUserId()); responseRow.put(SpreadsheetConstants.ATTR_USER_NAME, StringEscapeUtils.escapeHtml(user.getFullUsername())); if (user.getUserModifiedSpreadsheet() != null) { responseRow.put("userModifiedSpreadsheet", "true"); @@ -183,6 +184,10 @@ responseRow.put("reflection", userAndReflection[1]); } + if (userAndReflection.length > 2 && userAndReflection[2] != null) { + responseRow.put("portraitId", userAndReflection[2]); + } + rows.put(responseRow); } responsedata.put("rows", rows); Index: lams_tool_spreadsheet/web/pages/monitoring/parts/summarylist.jsp =================================================================== diff -u -r0acc4ca56f472b81307b4936c0cc797b71d5cf85 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_spreadsheet/web/pages/monitoring/parts/summarylist.jsp (.../summarylist.jsp) (revision 0acc4ca56f472b81307b4936c0cc797b71d5cf85) +++ lams_tool_spreadsheet/web/pages/monitoring/parts/summarylist.jsp (.../summarylist.jsp) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -53,11 +53,19 @@ rows += ''; rows += ''; + var portraitURL = definePortraitPopover(userData["portraitId"], userData["userId"], userData["userName"]); if ( ${spreadsheet.learnerAllowedToSave} ) { - var reviewURL = '?userUid='+userData["userUid"]; - rows += '' + userData["userName"] + ''; + var reviewURL = 'href="javascript:launchPopup(\'' + +'?userUid='+userData["userUid"] + +'\')"'; + if ( portraitURL.indexOf("= 0 ) { + reviewURL = portraitURL.replace("class",reviewURL+" class"); + } else { + reviewURL = '' + portraitURL + ''; + } + rows += reviewURL; } else { - rows += userData["userName"]; + rows += portraitURL; } rows += ''; @@ -95,7 +103,9 @@ } }, - }) + }).bind('pagerInitialized pagerComplete', function(event, options){ + initializePortraitPopover('${lams}'); + }) }); }) Index: lams_tool_spreadsheet/web/pages/monitoring/summary.jsp =================================================================== diff -u -rf2c6fdd167bba44e7c7b4fa9c837a3d7d9e05f94 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_spreadsheet/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision f2c6fdd167bba44e7c7b4fa9c837a3d7d9e05f94) +++ lams_tool_spreadsheet/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -5,6 +5,7 @@ + + \ No newline at end of file Index: lams_tool_task/web/pages/monitoring/parts/reflections.jsp =================================================================== diff -u -rd6dcae53cbe27a85aedf62b8545ee3193ec55220 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_task/web/pages/monitoring/parts/reflections.jsp (.../reflections.jsp) (revision d6dcae53cbe27a85aedf62b8545ee3193ec55220) +++ lams_tool_task/web/pages/monitoring/parts/reflections.jsp (.../reflections.jsp) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -1,5 +1,11 @@ <%@ include file="/common/taglibs.jsp"%> + +
@@ -15,7 +21,8 @@ - - + + -
Index: lams_tool_task/web/pages/monitoring/summary.jsp =================================================================== diff -u -rd6dcae53cbe27a85aedf62b8545ee3193ec55220 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_task/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision d6dcae53cbe27a85aedf62b8545ee3193ec55220) +++ lams_tool_task/web/pages/monitoring/summary.jsp (.../summary.jsp) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -29,21 +29,26 @@ ,'' + ,'portraitId' ], colModel:[ {name:'userUid',index:'userUid', width:0, hidden: true} - ,{name:'userName',index:'userName', width:200, searchoptions: { clearSearch: false }} + ,{name:'userName',index:'userName', width:200, searchoptions: { clearSearch: false }, formatter:userNameFormatter} ,{name:'item${status.index}',index:'item${status.index}', width:100, sortable:false, search:false, align:"center"} ,{name:'monitorVerificationRequired',index:'monitorVerificationRequired', width:130, sortable:false, search:false, align:"center"} + ,{name:'portraitId', index:'portraitId', width:0, hidden: true}, ], loadError: function(xhr,st,err) { jQuery("#group${sessionDto.sessionId}").clearGridData(); info_dialog("", "", ""); - } + }, + loadComplete: function () { + initializePortraitPopover(''); + } }) .jqGrid('filterToolbar', { searchOnEnter: false @@ -72,6 +77,10 @@ setTimeout(function(){ window.dispatchEvent(new Event('resize')); }, 300); }); + function userNameFormatter (cellvalue, options, rowObject) { + return definePortraitPopover(rowObject[rowObject.length-1], rowObject[0], rowObject[1]); + } + function summaryTask(itemUid){ var myUrl = "?sessionMapID=${sessionMapID}&toolContentID=${toolContentID}&itemUid=" + itemUid; launchPopup(myUrl,"LearnerView"); Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/VoteAppConstants.java =================================================================== diff -u -r839af8b148458fd7202f178fb52274dca01fc090 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/VoteAppConstants.java (.../VoteAppConstants.java) (revision 839af8b148458fd7202f178fb52274dca01fc090) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/VoteAppConstants.java (.../VoteAppConstants.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -138,6 +138,8 @@ public static final String ATTR_QUESTION_UID = "questionUid"; public static final String ATTR_SESSION_UID = "sessionUid"; // not the tool session id supplied by the core public static final String ATTR_USER_NAME = "userName"; + public static final String ATTR_USER_ID = "userId"; + public static final String ATTR_PORTRAIT_ID = "portraitId"; public static final String ATTR_ATTEMPT_TIME = "attemptTime"; public static final String ATTR_ATTEMPT_TIME_TIMEAGO = "attemptTimeTimeago"; Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/IVoteUsrAttemptDAO.java =================================================================== diff -u -r5773f84ed608838de3521ecde87c52f3c72d478c -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/IVoteUsrAttemptDAO.java (.../IVoteUsrAttemptDAO.java) (revision 5773f84ed608838de3521ecde87c52f3c72d478c) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/IVoteUsrAttemptDAO.java (.../IVoteUsrAttemptDAO.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -29,6 +29,7 @@ import org.lamsfoundation.lams.tool.vote.dto.OpenTextAnswerDTO; import org.lamsfoundation.lams.tool.vote.dto.VoteStatsDTO; import org.lamsfoundation.lams.tool.vote.pojos.VoteUsrAttempt; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; /** * @author Ozgur Demirtas @@ -83,7 +84,7 @@ * Will return List<[login (String), fullname(String), attemptTime(Timestamp]> */ List getUserAttemptsForTablesorter(Long sessionUid, Long questionUid, int page, int size, int sorting, - String searchString); + String searchString, IUserManagementService userManagementService); /** * Get the count of all possible users for getUserAttemptsForTablesorter(). Either sessionUid or questionUid may @@ -92,13 +93,13 @@ int getCountUsersBySession(Long sessionUid, Long questionUid, String searchString); List getUserReflectionsForTablesorter(Long sessionUid, int page, int size, int sorting, - String searchString, ICoreNotebookService coreNotebookService); + String searchString, ICoreNotebookService coreNotebookService, IUserManagementService userManagementService); List getStatisticsBySession(Long toolContentId); /** Gets the details for the open text nominations */ List getUserOpenTextAttemptsForTablesorter(Long sessionUid, Long contentUid, int page, int size, - int sorting, String searchStringVote, String searchStringUsername); + int sorting, String searchStringVote, String searchStringUsername, IUserManagementService userManagementService); int getCountUsersForOpenTextEntries(Long sessionUid, Long contentUid, String searchStringVote, String searchStringUsername); Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/hibernate/VoteUsrAttemptDAO.java =================================================================== diff -u -r1ac047247117455cf3ca4073958e4e2103def960 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/hibernate/VoteUsrAttemptDAO.java (.../VoteUsrAttemptDAO.java) (revision 1ac047247117455cf3ca4073958e4e2103def960) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dao/hibernate/VoteUsrAttemptDAO.java (.../VoteUsrAttemptDAO.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -44,6 +44,7 @@ import org.lamsfoundation.lams.tool.vote.dto.OpenTextAnswerDTO; import org.lamsfoundation.lams.tool.vote.dto.VoteStatsDTO; import org.lamsfoundation.lams.tool.vote.pojos.VoteUsrAttempt; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.springframework.stereotype.Repository; /** @@ -266,8 +267,8 @@ // Used by Monitoring - private static final String FIND_USER_ANSWERS_BY_QUESTION_UID = "SELECT user.username username, user.fullname fullname, attempt.attempt_time attemptTime" - + " FROM tl_lavote11_usr user " + private static final String FIND_USER_ANSWERS_BY_QUESTION_UID_SELECT = "SELECT user.user_id, user.username username, user.fullname fullname, attempt.attempt_time attemptTime "; + private static final String FIND_USER_ANSWERS_BY_QUESTION_UID_FROM = " FROM tl_lavote11_usr user " + " JOIN tl_lavote11_usr_attempt attempt on user.uid = attempt.que_usr_id AND attempt.vote_nomination_content_id = :questionUid "; private static final String FIND_USER_ANSWERS_BY_QUESTION_UID_SESSION_ADDITION = " AND user.vote_session_id = :sessionUid "; @@ -282,7 +283,7 @@ * Will return List<[login (String), fullname(String), attemptTime(Timestamp]> */ public List getUserAttemptsForTablesorter(Long sessionUid, Long questionUid, int page, int size, - int sorting, String searchString) { + int sorting, String searchString, IUserManagementService userManagementService) { String sortingOrder; switch (sorting) { case VoteAppConstants.SORT_BY_NAME_ASC: @@ -301,8 +302,13 @@ sortingOrder = "user.uid"; } + String[] portraitStrings = userManagementService.getPortraitSQL("user.user_id"); + // Basic select for the user records - StringBuilder queryText = new StringBuilder(FIND_USER_ANSWERS_BY_QUESTION_UID); + StringBuilder queryText = new StringBuilder(FIND_USER_ANSWERS_BY_QUESTION_UID_SELECT) + .append(portraitStrings[0]) + .append(FIND_USER_ANSWERS_BY_QUESTION_UID_FROM) + .append(portraitStrings[1]); if (sessionUid != null) { queryText.append(FIND_USER_ANSWERS_BY_QUESTION_UID_SESSION_ADDITION); @@ -315,8 +321,11 @@ queryText.append(" ORDER BY " + sortingOrder); SQLQuery query = getSession().createSQLQuery(queryText.toString()); - query.addScalar("username", StringType.INSTANCE).addScalar("fullname", StringType.INSTANCE) - .addScalar("attemptTime", TimestampType.INSTANCE).setLong("questionUid", questionUid.longValue()) + query.addScalar("user_id", IntegerType.INSTANCE).addScalar("username", StringType.INSTANCE) + .addScalar("fullname", StringType.INSTANCE) + .addScalar("attemptTime", TimestampType.INSTANCE) + .addScalar("portraitId", IntegerType.INSTANCE) + .setLong("questionUid", questionUid.longValue()) .setFirstResult(page * size).setMaxResults(size); if (sessionUid != null) { query.setLong("sessionUid", sessionUid.longValue()); @@ -386,7 +395,7 @@ * Will return List<[login (String), fullname(String), String (notebook entry)]> */ public List getUserReflectionsForTablesorter(final Long sessionUid, int page, int size, int sorting, - String searchString, ICoreNotebookService coreNotebookService) { + String searchString, ICoreNotebookService coreNotebookService, IUserManagementService userManagementService) { String sortingOrder; switch (sorting) { case VoteAppConstants.SORT_BY_NAME_ASC: @@ -403,34 +412,41 @@ String[] notebookEntryStrings = coreNotebookService.getNotebookEntrySQLStrings("session.vote_session_id", VoteAppConstants.MY_SIGNATURE, "user.user_id"); + String[] portraitStrings = userManagementService.getPortraitSQL("user.user_id"); + // Basic select for the user records StringBuilder queryText = new StringBuilder(); - queryText.append("SELECT user.username username, user.fullname fullname "); + queryText.append("SELECT user.user_id user_id, user.username username, user.fullname fullname "); queryText.append(notebookEntryStrings[0]); + queryText.append(portraitStrings[0]); queryText.append(" FROM tl_lavote11_usr user "); queryText.append( " JOIN tl_lavote11_session session ON user.vote_session_id = :sessionUid AND user.vote_session_id = session.uid "); // Add the notebook join queryText.append(notebookEntryStrings[1]); - + queryText.append(portraitStrings[1]); + // If filtering by name add a name based where clause buildNameSearch(searchString, queryText, true); // Now specify the sort based on the switch statement above. queryText.append(" ORDER BY " + sortingOrder); SQLQuery query = getSession().createSQLQuery(queryText.toString()); - query.addScalar("username", StringType.INSTANCE).addScalar("fullname", StringType.INSTANCE) - .addScalar("notebookEntry", StringType.INSTANCE).setLong("sessionUid", sessionUid.longValue()) + query.addScalar("user_id", IntegerType.INSTANCE) + .addScalar("username", StringType.INSTANCE).addScalar("fullname", StringType.INSTANCE) + .addScalar("notebookEntry", StringType.INSTANCE).addScalar("portraitId", IntegerType.INSTANCE) + .setLong("sessionUid", sessionUid.longValue()) .setFirstResult(page * size).setMaxResults(size); return query.list(); } - private static final String FIND_USER_OPEN_TEXT = "SELECT user.uid userUid, user.username login, user.fullname fullName, " - + " attempt.uid userEntryUid, attempt.userEntry userEntry, attempt.attempt_time attemptTime, attempt.visible visible " - + " FROM tl_lavote11_usr user " + private static final String FIND_USER_OPEN_TEXT_SELECT = "SELECT user.uid userUid, user.username login, user.fullname fullName, " + + " attempt.uid userEntryUid, attempt.userEntry userEntry, attempt.attempt_time attemptTime, attempt.visible visible "; + + private static final String FIND_USER_OPEN_TEXT_FROM = " FROM tl_lavote11_usr user " + " JOIN tl_lavote11_usr_attempt attempt ON user.uid = attempt.que_usr_id AND attempt.vote_nomination_content_id = 1 "; private static final String FIND_USER_OPEN_TEXT_SESSION_UID_ADD = "AND user.vote_session_id=:sessionUid"; @@ -447,7 +463,7 @@ * Will return List */ public List getUserOpenTextAttemptsForTablesorter(Long sessionUid, Long toolContentId, int page, - int size, int sorting, String searchStringVote, String searchStringUsername) { + int size, int sorting, String searchStringVote, String searchStringUsername, IUserManagementService userManagementService) { String sortingOrder; switch (sorting) { case VoteAppConstants.SORT_BY_NAME_ASC: @@ -478,14 +494,19 @@ sortingOrder = "user.uid"; } + String[] portraitStrings = userManagementService.getPortraitSQL("user.user_id"); + // Basic select for the user records - StringBuilder queryText = new StringBuilder(FIND_USER_OPEN_TEXT); + StringBuilder queryText = new StringBuilder(FIND_USER_OPEN_TEXT_SELECT) + .append(portraitStrings[0]) + .append(FIND_USER_OPEN_TEXT_FROM); if (sessionUid != null) { queryText.append(FIND_USER_OPEN_TEXT_SESSION_UID_ADD); } else { queryText.append(FIND_USER_OPEN_TEXT_CONTENT_UID_ADD); } + queryText.append(portraitStrings[1]); // If filtering by name/entry add a where clause buildCombinedSearch(searchStringVote, searchStringUsername, queryText); @@ -497,7 +518,8 @@ query.addScalar("userUid", LongType.INSTANCE).addScalar("login", StringType.INSTANCE) .addScalar("fullName", StringType.INSTANCE).addScalar("userEntryUid", LongType.INSTANCE) .addScalar("userEntry", StringType.INSTANCE).addScalar("attemptTime", TimestampType.INSTANCE) - .addScalar("visible", BooleanType.INSTANCE).setFirstResult(page * size).setMaxResults(size) + .addScalar("visible", BooleanType.INSTANCE).addScalar("portraitId", LongType.INSTANCE) + .setFirstResult(page * size).setMaxResults(size) .setResultTransformer(Transformers.aliasToBean(OpenTextAnswerDTO.class)); if (sessionUid != null) { Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dto/OpenTextAnswerDTO.java =================================================================== diff -u -r2f725f8ef2aa09a2663b2335bf67213074426d11 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dto/OpenTextAnswerDTO.java (.../OpenTextAnswerDTO.java) (revision 2f725f8ef2aa09a2663b2335bf67213074426d11) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/dto/OpenTextAnswerDTO.java (.../OpenTextAnswerDTO.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -37,6 +37,7 @@ protected String userEntry; protected Date attemptTime; protected Boolean visible; + protected Long portraitId; @Override public String toString() { @@ -101,4 +102,12 @@ this.visible = visible; } + public Long getPortraitId() { + return portraitId; + } + + public void setPortraitId(Long portraitId) { + this.portraitId = portraitId; + } + } Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteService.java =================================================================== diff -u -r85ef8aca5722a36582117db1e8b988e2c16b6369 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteService.java (.../VoteService.java) (revision 85ef8aca5722a36582117db1e8b988e2c16b6369) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/service/VoteService.java (.../VoteService.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -1678,7 +1678,7 @@ public List getUserAttemptsForTablesorter(Long sessionUid, Long questionUid, int page, int size, int sorting, String searchString) { return voteUsrAttemptDAO.getUserAttemptsForTablesorter(sessionUid, questionUid, page, size, sorting, - searchString); + searchString, userManagementService); } @Override @@ -1690,7 +1690,7 @@ public List getUserReflectionsForTablesorter(Long sessionUid, int page, int size, int sorting, String searchString) { return voteUsrAttemptDAO.getUserReflectionsForTablesorter(sessionUid, page, size, sorting, searchString, - getCoreNotebookService()); + getCoreNotebookService(), userManagementService); } @Override @@ -1708,7 +1708,7 @@ public List getUserOpenTextAttemptsForTablesorter(Long sessionUid, Long contentUid, int page, int size, int sorting, String searchStringVote, String searchStringUsername) { return voteUsrAttemptDAO.getUserOpenTextAttemptsForTablesorter(sessionUid, contentUid, page, size, sorting, - searchStringVote, searchStringUsername); + searchStringVote, searchStringUsername, userManagementService); } @Override Index: lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/action/MonitoringAction.java =================================================================== diff -u -r571d64337ed3fb6a9733a5214180fd4a5c6d6292 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 571d64337ed3fb6a9733a5214180fd4a5c6d6292) +++ lams_tool_vote/src/java/org/lamsfoundation/lams/tool/vote/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -190,11 +190,13 @@ for (Object[] userAndAnswers : users) { JSONObject responseRow = new JSONObject(); - responseRow.put(VoteAppConstants.ATTR_USER_NAME, StringEscapeUtils.escapeHtml((String) userAndAnswers[1])); + responseRow.put(VoteAppConstants.ATTR_USER_ID, userAndAnswers[0]); + responseRow.put(VoteAppConstants.ATTR_USER_NAME, StringEscapeUtils.escapeHtml((String) userAndAnswers[2])); responseRow.put(VoteAppConstants.ATTR_ATTEMPT_TIME, - DateUtil.convertToStringForJSON((Date) userAndAnswers[2], request.getLocale())); + DateUtil.convertToStringForJSON((Date) userAndAnswers[3], request.getLocale())); responseRow.put(VoteAppConstants.ATTR_ATTEMPT_TIME_TIMEAGO, - DateUtil.convertToStringForTimeagoJSON((Date) userAndAnswers[2])); + DateUtil.convertToStringForTimeagoJSON((Date) userAndAnswers[3])); + responseRow.put(VoteAppConstants.ATTR_PORTRAIT_ID, userAndAnswers[4]); rows.put(responseRow); } responsedata.put("rows", rows); @@ -230,12 +232,16 @@ for (Object[] userAndReflection : users) { JSONObject responseRow = new JSONObject(); + responseRow.put(VoteAppConstants.ATTR_USER_ID, userAndReflection[0]); responseRow.put(VoteAppConstants.ATTR_USER_NAME, - StringEscapeUtils.escapeHtml((String) userAndReflection[1])); - if (userAndReflection.length > 2 && userAndReflection[2] != null) { - String reflection = StringEscapeUtils.escapeHtml((String) userAndReflection[2]); + StringEscapeUtils.escapeHtml((String) userAndReflection[2])); + if (userAndReflection.length > 3 && userAndReflection[3] != null) { + String reflection = StringEscapeUtils.escapeHtml((String) userAndReflection[3]); responseRow.put(VoteAppConstants.NOTEBOOK, reflection.replaceAll("\n", "
")); } + if (userAndReflection.length > 4) { + responseRow.put(VoteAppConstants.ATTR_PORTRAIT_ID, userAndReflection[4]); + } rows.put(responseRow); } responsedata.put("rows", rows); @@ -313,6 +319,7 @@ responseRow.put(VoteAppConstants.ATTR_ATTEMPT_TIME_TIMEAGO, DateUtil.convertToStringForTimeagoJSON(userAndAttempt.getAttemptTime())); responseRow.put("visible", userAndAttempt.isVisible()); + responseRow.put("portraitId", userAndAttempt.getPortraitId()); rows.put(responseRow); } Index: lams_tool_vote/web/common/monitorheader.jsp =================================================================== diff -u -r193c54c077ee7076e1e76ebc4f51bde6d67ea8b8 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_vote/web/common/monitorheader.jsp (.../monitorheader.jsp) (revision 193c54c077ee7076e1e76ebc4f51bde6d67ea8b8) +++ lams_tool_vote/web/common/monitorheader.jsp (.../monitorheader.jsp) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -26,6 +26,7 @@ + Index: lams_tool_vote/web/monitoring/OtherTextNominationViewer.jsp =================================================================== diff -u -rc00d4f7e506c90755c2bbbf106cdfdb44c802640 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_vote/web/monitoring/OtherTextNominationViewer.jsp (.../OtherTextNominationViewer.jsp) (revision c00d4f7e506c90755c2bbbf106cdfdb44c802640) +++ lams_tool_vote/web/monitoring/OtherTextNominationViewer.jsp (.../OtherTextNominationViewer.jsp) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -89,7 +89,7 @@ rows += ''; rows += ''; - rows += userData["userName"]; + rows += definePortraitPopover(userData["portraitId"], userData["userId"], userData["userName"], userData["userName"]); rows += ''; rows += ''; @@ -120,6 +120,7 @@ // bind to pager events .bind('pagerInitialized pagerComplete', function(event, options){ $("time.timeago").timeago(); + initializePortraitPopover(''); }) }); }) Index: lams_tool_vote/web/monitoring/ReflectionViewer.jsp =================================================================== diff -u -rff7583ba24a271222b91ab3ecc460b931fe20e37 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_vote/web/monitoring/ReflectionViewer.jsp (.../ReflectionViewer.jsp) (revision ff7583ba24a271222b91ab3ecc460b931fe20e37) +++ lams_tool_vote/web/monitoring/ReflectionViewer.jsp (.../ReflectionViewer.jsp) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -47,7 +47,7 @@ rows += ''; rows += ''; - rows += userData["userName"]; + rows += definePortraitPopover(userData["portraitId"], userData["userId"], userData["userName"], userData["userName"]); rows += ''; rows += ''; @@ -68,6 +68,10 @@ } } }) + // bind to pager events + .bind('pagerInitialized pagerComplete', function(event, options){ + initializePortraitPopover(''); + }) }); }) Index: lams_tool_vote/web/monitoring/VoteNominationViewer.jsp =================================================================== diff -u -rc00d4f7e506c90755c2bbbf106cdfdb44c802640 -r83ca314c18ea866bb79570b6e7da25eb8729b3b4 --- lams_tool_vote/web/monitoring/VoteNominationViewer.jsp (.../VoteNominationViewer.jsp) (revision c00d4f7e506c90755c2bbbf106cdfdb44c802640) +++ lams_tool_vote/web/monitoring/VoteNominationViewer.jsp (.../VoteNominationViewer.jsp) (revision 83ca314c18ea866bb79570b6e7da25eb8729b3b4) @@ -47,7 +47,7 @@ rows += ''; rows += ''; - rows += userData["userName"]; + rows += definePortraitPopover(userData["portraitId"], userData["userId"], userData["userName"], userData["userName"]); rows += ''; rows += ''; @@ -72,11 +72,13 @@ // bind to pager events .bind('pagerInitialized pagerComplete', function(event, options){ $("time.timeago").timeago(); + initializePortraitPopover(''); }) }); }) + - +