Index: lams_admin/web/WEB-INF/tlds/lams/lams.tld =================================================================== diff -u -r839af8b148458fd7202f178fb52274dca01fc090 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_admin/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 839af8b148458fd7202f178fb52274dca01fc090) +++ lams_admin/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -404,7 +404,7 @@ Portrait org.lamsfoundation.lams.web.tag.PortraitTag - empty + JSP userId true @@ -421,6 +421,12 @@ true If true shows the portrait as a round dot. Defaults to true. + + hover + false + true + If true then display as a hover box. Uses the body of the tag as the link text. + Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -r953f62a7fc515e2dc5c4ad983df233070cf7a82c -r60d9a173d5590295376322fc3e857ae2dca37717 Binary files differ Index: lams_central/src/java/org/lamsfoundation/lams/web/tag/PortraitTag.java =================================================================== diff -u -r16a3de6463b235e8b8f91ebada6aac7db8172436 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_central/src/java/org/lamsfoundation/lams/web/tag/PortraitTag.java (.../PortraitTag.java) (revision 16a3de6463b235e8b8f91ebada6aac7db8172436) +++ lams_central/src/java/org/lamsfoundation/lams/web/tag/PortraitTag.java (.../PortraitTag.java) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -26,8 +26,8 @@ import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspWriter; +import javax.servlet.jsp.tagext.BodyTagSupport; import javax.servlet.jsp.tagext.Tag; -import javax.servlet.jsp.tagext.TagSupport; import org.apache.log4j.Logger; import org.lamsfoundation.lams.usermanagement.User; @@ -40,7 +40,7 @@ /** * Output a URL to display a user's portrait. If you modify the logic here, change portrait.js too! */ -public class PortraitTag extends TagSupport { +public class PortraitTag extends BodyTagSupport { private static final long serialVersionUID = -3143529984657965761L; private static final Logger log = Logger.getLogger(PortraitTag.class); private static final int NUM_COLORS = 7; @@ -66,6 +66,7 @@ private String userId = null; private String size = null; private String round = null; + private String hover = null; public PortraitTag() { super(); @@ -74,47 +75,37 @@ @Override public int doStartTag() throws JspException { + return super.doStartTag(); + } + + @Override + public int doEndTag() throws JspException { + String serverURL = Configuration.get(ConfigurationKeys.SERVER_URL); serverURL = serverURL == null ? null : serverURL.trim(); try { - String code = null; - boolean isRound = (getRound() != null ? Boolean.getBoolean(getRound()) : true); if (userId != null && userId.length() > 0) { + String code = null; HashMap cache = getPortraitCache(); code = cache.get(userId); + if (code == null) { - Integer userIdLong = Integer.decode(userId); - User user = (User) getUserManagementService().findById(User.class, userIdLong); - Long portraitId = user != null ? user.getPortraitUuid() : null; - if (portraitId != null) { - String[] sizes = getSizeClass(); - StringBuilder bldr = new StringBuilder(""); - code = bldr.toString(); + Integer userIdInt = Integer.decode(userId); + User user = (User) getUserManagementService().findById(User.class, userIdInt); + boolean isHover = (hover != null ? Boolean.valueOf(hover) : false); + if ( isHover ) { + code = buildHoverUrl(user); } else { - code = new StringBuilder("
") - .toString(); + code = buildDivUrl(user); } cache.put(userId, code); } - } else { - code = "
"; + + JspWriter writer = pageContext.getOut(); + writer.println(code); } - JspWriter writer = pageContext.getOut(); - writer.println(code); - } catch (NumberFormatException nfe) { PortraitTag.log.error("PortraitId unable to write out portrait details as userId is invalid. " + userId, nfe); @@ -128,6 +119,45 @@ return Tag.SKIP_BODY; } + private String buildDivUrl(User user) { + Long portraitId = user != null ? user.getPortraitUuid() : null; + if (portraitId != null) { + boolean isRound = (round != null ? Boolean.valueOf(round) : true); + String[] sizes = getSizeClass(); + StringBuilder bldr = new StringBuilder(""); + return bldr.toString(); + } else { + return new StringBuilder("
").toString(); + } + } + + private String buildHoverUrl(User user) { + Long portraitId = user != null ? user.getPortraitUuid() : null; + String linkText = getBodyContent() != null ? getBodyContent().getString() : null; + if (portraitId != null) { + String fullName = user.getFullName(); + if ( linkText == null || linkText.length() == 0) + linkText = fullName; + return new StringBuilder( + "") + .append(linkText).append("").toString(); + } else { + return linkText != null ? linkText : ""; + } + } + private IUserManagementService getUserManagementService() { if (userManagementService == null) { WebApplicationContext ctx = WebApplicationContextUtils @@ -137,7 +167,6 @@ return userManagementService; } - @SuppressWarnings("unchecked") private HashMap getPortraitCache() { HashMap cache = (HashMap) pageContext.getAttribute("portraitCache"); if (cache == null) { @@ -195,4 +224,12 @@ public void setRound(String round) { this.round = round; } + + public String getHover() { + return hover; + } + + public void setHover(String hover) { + this.hover = hover; + } } \ No newline at end of file Index: lams_central/web/WEB-INF/tlds/lams/lams.tld =================================================================== diff -u -r839af8b148458fd7202f178fb52274dca01fc090 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_central/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 839af8b148458fd7202f178fb52274dca01fc090) +++ lams_central/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -404,7 +404,7 @@ Portrait org.lamsfoundation.lams.web.tag.PortraitTag - empty + JSP userId true @@ -421,6 +421,12 @@ true If true shows the portrait as a round dot. Defaults to true. + + hover + false + true + If true then display as a hover box. Uses the body of the tag as the link text. + Index: lams_central/web/css/_learner_base.scss =================================================================== diff -u -r803ad5cf3ae124a5dc6615238a401847094679af -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_central/web/css/_learner_base.scss (.../_learner_base.scss) (revision 803ad5cf3ae124a5dc6615238a401847094679af) +++ lams_central/web/css/_learner_base.scss (.../_learner_base.scss) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -71,7 +71,6 @@ color: $a-link-default; } - a:hover { color: $a-link-default-hover; } @@ -80,6 +79,20 @@ color: $a-link-default-focus; } +// popover links forced to be the usual link color or jqgrid interferes +.popover-link { + color: $a-link-default !important; +} + +.popover-link:hover { + color: $a-link-default-hover !important; +} + +.popover-link:focus { + color: $a-link-default-focus !important; +} + + @if variable-exists(panel-default-heading-background) { .panel-default>.panel-heading { background-color: $panel-default-heading-background; Index: lams_central/web/includes/javascript/portrait.js =================================================================== diff -u -r16a3de6463b235e8b8f91ebada6aac7db8172436 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_central/web/includes/javascript/portrait.js (.../portrait.js) (revision 16a3de6463b235e8b8f91ebada6aac7db8172436) +++ lams_central/web/includes/javascript/portrait.js (.../portrait.js) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -20,21 +20,64 @@ STYLE_LARGE = 'large', STYLE_XLARGE = 'xlarge'; +// Add a portrait to an existing div as specified by selector function addPortrait( selector, portraitId, userId, size, round, LAMS_URL ) { var isRound = round == null ? true : round; if ( portraitId && portraitId > 0) { - selector.css('background-image', 'url(' + LAMS_URL + 'download?preferDownload=false&uuid=' + portraitId + getSizeVersion(size) + ')'); - selector.addClass(getSizeCSS(size)); + selector.css('background-image', 'url(' + LAMS_URL + 'download?preferDownload=false&uuid=' + portraitId + _getSizeVersion(size) + ')'); + selector.addClass(_getSizeCSS(size)); if ( isRound ) { selector.addClass(CSS_ROUND); } } else { - selector.addClass(getGenericSizeClass( size )); - selector.addClass(PORTRAIT_VERSION_SUFFIX + userId % NUM_COLORS ); + selector.addClass(_getGenericSizeClass( size )); + selector.addClass(getPortraitColourClass(userId)); } } -function getSizeCSS(size) { +// Get the colour that would be used for the generic portrait. Useful when you need a consistent colour for a user. +function getPortraitColourClass(userId) { + return PORTRAIT_VERSION_SUFFIX + userId % NUM_COLORS; +} + +// Create a popover/tooltip to display the learner's portrait. Put it in bind('pagerInitialized pagerComplete', function(event, options){}) +// (tablesorter) or within loadComplete (jqgrid). Elements to be processed should have class new-popover and dataset values for 'portrait' +// and 'fullname'. Use with definePortraitPopover. Size is optional. +function initializePortraitPopover(LAMS_URL, size) { + if ( ! size ) + size = STYLE_LARGE; + + $('.new-popover').each(function( index, element ) { + var idString = element.dataset.id; + var url = LAMS_URL + '/download?preferDownload=false&uuid='+element.dataset.portrait+_getSizeVersion(size); + $(element).popover({ + content: '', + html: true, + trigger: 'hover focus', + title: element.dataset.fullname, + container: 'body' // ensures popovers are not clipped within jqgrid tables + }); + element.classList.remove('new-popover'); + }); + } + + +// Define the element to have a popover/tooltip to display the learner's portrait. Call in the ajaxProcessing (tablesorter) or +// in a formatter function (jqgrid). Use with initializePortraitPopover. Displays the fullName and portrait in the popover when the +// user hovers on linkText. Usually linkText === fullName +function definePortraitPopover(portraitId, userId, fullName, linkText) { + if ( ! linkText ) + linkText = fullName; + + if ( portraitId ) { + return ''+linkText+''; + } else { + return linkText; + } +} + +function _getSizeCSS(size) { if ( size ) { if (size == STYLE_MEDIUM) return CSS_MEDIUM; @@ -46,7 +89,7 @@ return CSS_SMALL; } -function getSizeVersion(size) { +function _getSizeVersion(size) { if ( size ) { if (size == STYLE_MEDIUM) return VERSION_MEDIUM; @@ -58,7 +101,7 @@ return VERSION_SMALL; } -function getGenericSizeClass(size) { +function _getGenericSizeClass(size) { if ( size ) { if (size == STYLE_MEDIUM) return CSS_GENERIC_MEDIUM; Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java =================================================================== diff -u -r5bf2d3b201efb46864182d72901e497d0acb253f -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 5bf2d3b201efb46864182d72901e497d0acb253f) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -518,4 +518,10 @@ * Stores organisation (course) groups and removes the unnecessary ones. */ void saveOrganisationGrouping(OrganisationGrouping grouping, Collection newGroups); + + /** + * Returns the SQL needed to look up portrait details for a given user. This is an efficient way to get the entries + * at the same time as retrieving the tool data, rather than making a separate lookup. + */ + String[] getPortraitSQL(String userIdString); } \ No newline at end of file Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -r5bf2d3b201efb46864182d72901e497d0acb253f -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 5bf2d3b201efb46864182d72901e497d0acb253f) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -39,8 +39,10 @@ import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; +import org.hibernate.type.IntegerType; import org.lamsfoundation.lams.dao.IBaseDAO; import org.lamsfoundation.lams.learningdesign.dao.IGroupDAO; +import org.lamsfoundation.lams.notebook.service.CoreNotebookConstants; import org.lamsfoundation.lams.themes.Theme; import org.lamsfoundation.lams.usermanagement.FavoriteOrganisation; import org.lamsfoundation.lams.usermanagement.ForgotPasswordRequest; @@ -1006,7 +1008,31 @@ List results = baseDAO.findByProperty(User.class, "openidURL", openidURL); return results.isEmpty() ? null : (User) results.get(0); } + + /** + * Returns the SQL needed to look up portrait details for a given user. This is an efficient way to get the entries + * at the same time as retrieving the tool data, rather than making a separate lookup. + * + * The return values are the entry for the select clause (will always have a leading space but no trailing comma and an + * alias of luser) and the sql join clause, which should go with any other join clauses. + * + * To convert the portrait id set up the sql -> java object translation using + * addScalar("portraitId", IntegerType.INSTANCE) + * + * @param userIdString + * User identifier field string e.g. user.user_id + * @return String[] { partial select string, join clause } + * + */ + @Override + public String[] getPortraitSQL(String userIdString) { + String[] retValue = new String[2]; + retValue[0] = ", luser.portrait_uuid portraitId "; + retValue[1] = " JOIN lams_user luser ON luser.user_id = " + userIdString; + return retValue; + } + // --------------------------------------------------------------------- // Inversion of Control Methods - Method injection // --------------------------------------------------------------------- Index: lams_gradebook/web/WEB-INF/tlds/lams/lams.tld =================================================================== diff -u -r839af8b148458fd7202f178fb52274dca01fc090 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_gradebook/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 839af8b148458fd7202f178fb52274dca01fc090) +++ lams_gradebook/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -404,7 +404,7 @@ Portrait org.lamsfoundation.lams.web.tag.PortraitTag - empty + JSP userId true @@ -421,6 +421,12 @@ true If true shows the portrait as a round dot. Defaults to true. + + hover + false + true + If true then display as a hover box. Uses the body of the tag as the link text. + Index: lams_learning/web/WEB-INF/tlds/lams/lams.tld =================================================================== diff -u -r839af8b148458fd7202f178fb52274dca01fc090 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_learning/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 839af8b148458fd7202f178fb52274dca01fc090) +++ lams_learning/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -404,7 +404,7 @@ Portrait org.lamsfoundation.lams.web.tag.PortraitTag - empty + JSP userId true @@ -421,6 +421,12 @@ true If true shows the portrait as a round dot. Defaults to true. + + hover + false + true + If true then display as a hover box. Uses the body of the tag as the link text. + Index: lams_monitoring/web/WEB-INF/tlds/lams/lams.tld =================================================================== diff -u -r839af8b148458fd7202f178fb52274dca01fc090 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_monitoring/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 839af8b148458fd7202f178fb52274dca01fc090) +++ lams_monitoring/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -404,7 +404,7 @@ Portrait org.lamsfoundation.lams.web.tag.PortraitTag - empty + JSP userId true @@ -421,6 +421,12 @@ true If true shows the portrait as a round dot. Defaults to true. + + hover + false + true + If true then display as a hover box. Uses the body of the tag as the link text. + Index: lams_tool_assessment/conf/language/lams/ApplicationResources.properties =================================================================== diff -u -r90136820195d7768c6dbd79b3716d595476ecb31 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 90136820195d7768c6dbd79b3716d595476ecb31) +++ lams_tool_assessment/conf/language/lams/ApplicationResources.properties (.../ApplicationResources.properties) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -314,5 +314,9 @@ label.number.groups.in.mark.range =Number of groups in mark range label.average.mark =Average mark +label.error =Error +error.loaderror =There was an error loading the grid. If this problem persists, please contact your system administrator. +label.ok =OK + #======= End labels: Exported 307 labels for en AU ===== Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentUserDAO.java =================================================================== diff -u -r7cacaf3ab86dd7b0e794e7b4c710fb73ecb61344 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentUserDAO.java (.../AssessmentUserDAO.java) (revision 7cacaf3ab86dd7b0e794e7b4c710fb73ecb61344) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/AssessmentUserDAO.java (.../AssessmentUserDAO.java) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -27,6 +27,7 @@ import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; public interface AssessmentUserDAO extends DAO { @@ -37,7 +38,7 @@ List getBySessionID(Long sessionId); List getPagedUsersBySession(Long sessionId, int page, int size, String sortBy, String sortOrder, - String searchString); + String searchString, IUserManagementService userManagementService); int getCountUsersBySession(Long sessionId, String searchString); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java =================================================================== diff -u -r7cacaf3ab86dd7b0e794e7b4c710fb73ecb61344 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java (.../AssessmentUserDAOHibernate.java) (revision 7cacaf3ab86dd7b0e794e7b4c710fb73ecb61344) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dao/hibernate/AssessmentUserDAOHibernate.java (.../AssessmentUserDAOHibernate.java) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -34,6 +34,7 @@ import org.lamsfoundation.lams.tool.assessment.dao.AssessmentUserDAO; import org.lamsfoundation.lams.tool.assessment.dto.AssessmentUserDTO; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.springframework.stereotype.Repository; @Repository @@ -89,8 +90,9 @@ return (List) this.doFind(FIND_BY_SESSION_ID, sessionId); } - private static String LOAD_USERS_ORDERED_BY_SESSION = "SELECT DISTINCT user.user_id, user.last_name, user.first_name, user.login_name, result.grade" - + " FROM tl_laasse10_user user INNER JOIN tl_laasse10_session session" + private static String LOAD_USERS_ORDERED_BY_SESSION_SELECT = "SELECT DISTINCT user.user_id, user.last_name, user.first_name, user.login_name, result.grade "; + private static String LOAD_USERS_ORDERED_BY_SESSION_FROM = " FROM tl_laasse10_user user "; + private static String LOAD_USERS_ORDERED_BY_SESSION_JOIN = " INNER JOIN tl_laasse10_session session" + " ON user.session_uid=session.uid LEFT OUTER JOIN tl_laasse10_assessment_result result " + " ON result.user_uid = user.uid AND result.finish_date IS NOT NULL" + " AND result.latest = 1 WHERE session.session_id = :sessionId " @@ -101,9 +103,15 @@ @SuppressWarnings("unchecked") @Override public List getPagedUsersBySession(Long sessionId, int page, int size, String sortBy, - String sortOrder, String searchString) { + String sortOrder, String searchString, IUserManagementService userManagementService) { - StringBuilder bldr = new StringBuilder(LOAD_USERS_ORDERED_BY_SESSION); + String[] portraitStrings = userManagementService.getPortraitSQL("user.user_id"); + + StringBuilder bldr = new StringBuilder(LOAD_USERS_ORDERED_BY_SESSION_SELECT) + .append(portraitStrings[0]) + .append(LOAD_USERS_ORDERED_BY_SESSION_FROM) + .append(portraitStrings[1]) + .append(LOAD_USERS_ORDERED_BY_SESSION_JOIN); if ( "total".equalsIgnoreCase(sortBy) ) bldr.append(LOAD_USERS_ORDERED_ORDER_BY_TOTAL); else @@ -128,13 +136,15 @@ String lastName = (String) element[2]; String login = (String) element[3]; float grade = element[4] == null ? 0 : ((Number) element[4]).floatValue(); + Long portraitId = element[5] == null ? null : ((Number) element[5]).longValue(); AssessmentUserDTO userDto = new AssessmentUserDTO(); userDto.setUserId(userId); userDto.setFirstName(firstName); userDto.setLastName(lastName); userDto.setLogin(login); userDto.setGrade(grade); + userDto.setPortraitId(portraitId); userDtos.add(userDto); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java =================================================================== diff -u -re8b8331273b3d6dd4456138dbd45f9dba3b63148 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java (.../AssessmentUserDTO.java) (revision e8b8331273b3d6dd4456138dbd45f9dba3b63148) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/AssessmentUserDTO.java (.../AssessmentUserDTO.java) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -31,6 +31,7 @@ private float grade; private Long questionResultUid; + private Long portraitId; public String getFirstName() { return firstName; @@ -80,4 +81,12 @@ this.questionResultUid = questionResultUid; } + public Long getPortraitId() { + return portraitId; + } + + public void setPortraitId(Long portraitId) { + this.portraitId = portraitId; + } + } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/ReflectDTO.java =================================================================== diff -u -r3399163940c61c9132223c758d274486e57ff9b7 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/ReflectDTO.java (.../ReflectDTO.java) (revision 3399163940c61c9132223c758d274486e57ff9b7) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/dto/ReflectDTO.java (.../ReflectDTO.java) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -29,6 +29,7 @@ public class ReflectDTO { private Long userUid; + private Long userId; private String fullName; private String loginName; private String reflect; @@ -38,6 +39,7 @@ this.setLoginName(user.getLoginName()); this.setFullName(user.getFirstName() + " " + user.getLastName()); this.setUserUid(user.getUid()); + this.setUserId(user.getUserId()); } public String getFullName() { @@ -79,4 +81,12 @@ public void setDate(Date date) { this.date = date; } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java =================================================================== diff -u -re34e0b7a8ed604692164d998b9a7d6944adfc487 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision e34e0b7a8ed604692164d998b9a7d6944adfc487) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/AssessmentServiceImpl.java (.../AssessmentServiceImpl.java) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -331,7 +331,8 @@ @Override public List getPagedUsersBySession(Long sessionId, int page, int size, String sortBy, String sortOrder, String searchString) { - return assessmentUserDao.getPagedUsersBySession(sessionId, page, size, sortBy, sortOrder, searchString); + return assessmentUserDao.getPagedUsersBySession(sessionId, page, size, sortBy, sortOrder, + searchString, userManagementService); } @Override @@ -347,6 +348,15 @@ } @Override + public Long getPortraitId(Long userId) { + if ( userId != null ) { + User user = (User) userManagementService.findById(User.class, userId.intValue()); + return user != null ? user.getPortraitUuid() : null; + } + return null; + } + + @Override public Assessment getAssessmentByContentId(Long contentId) { Assessment rs = assessmentDao.getByContentId(contentId); return rs; Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r06bf1c491a054104ea4e5cc55fc867af5519c200 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 06bf1c491a054104ea4e5cc55fc867af5519c200) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -46,6 +46,7 @@ import org.lamsfoundation.lams.tool.assessment.model.AssessmentSession; import org.lamsfoundation.lams.tool.assessment.model.AssessmentUser; import org.lamsfoundation.lams.tool.assessment.model.QuestionReference; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; import org.lamsfoundation.lams.util.ExcelCell; /** @@ -496,4 +497,6 @@ List deletedReferences); void releaseFromCache(Object object); + + Long getPortraitId(Long userId); } Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java =================================================================== diff -u -r06bf1c491a054104ea4e5cc55fc867af5519c200 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 06bf1c491a054104ea4e5cc55fc867af5519c200) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/MonitoringAction.java (.../MonitoringAction.java) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -365,12 +365,14 @@ if (groupLeader != null) { float assessmentResult = service.getLastTotalScoreByUser(assessment.getUid(), groupLeader.getUserId()); + Long portraitId = service.getPortraitId(groupLeader.getUserId()); AssessmentUserDTO userDto = new AssessmentUserDTO(); userDto.setUserId(groupLeader.getUserId()); userDto.setFirstName(groupLeader.getFirstName()); userDto.setLastName(groupLeader.getLastName()); userDto.setGrade(assessmentResult); + userDto.setPortraitId(portraitId); userDtos.add(userDto); countSessionUsers = 1; } @@ -395,6 +397,8 @@ String fullName = StringEscapeUtils.escapeHtml(userDto.getFirstName() + " " + userDto.getLastName()); userData.put(fullName); userData.put(userDto.getGrade()); + if (userDto.getPortraitId() != null ) + userData.put(userDto.getPortraitId()); JSONObject userRow = new JSONObject(); userRow.put("id", i++); Index: lams_tool_assessment/web/WEB-INF/tlds/lams/lams.tld =================================================================== diff -u -r839af8b148458fd7202f178fb52274dca01fc090 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_tool_assessment/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 839af8b148458fd7202f178fb52274dca01fc090) +++ lams_tool_assessment/web/WEB-INF/tlds/lams/lams.tld (.../lams.tld) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -404,7 +404,7 @@ Portrait org.lamsfoundation.lams.web.tag.PortraitTag - empty + JSP userId true @@ -421,6 +421,12 @@ true If true shows the portrait as a round dot. Defaults to true. + + hover + false + true + If true then display as a hover box. Uses the body of the tag as the link text. + Index: lams_tool_assessment/web/pages/monitoring/monitoring.jsp =================================================================== diff -u -r4583983b64efe1d91fbb47cdde6a759a6a30e859 -r60d9a173d5590295376322fc3e857ae2dca37717 --- lams_tool_assessment/web/pages/monitoring/monitoring.jsp (.../monitoring.jsp) (revision 4583983b64efe1d91fbb47cdde6a759a6a30e859) +++ lams_tool_assessment/web/pages/monitoring/monitoring.jsp (.../monitoring.jsp) (revision 60d9a173d5590295376322fc3e857ae2dca37717) @@ -10,8 +10,10 @@ - - + + + +