From 78bfc087fb33c1bd0a0413547201d9fa78a79637 Mon Sep 17 00:00:00 2001 From: Shannon Date: Tue, 20 Jun 2017 11:55:21 +1000 Subject: [PATCH] Fixes up all of the user sorting to work properly --- src/Umbraco.Core/ExpressionHelper.cs | 17 ++++++++++++++-- src/Umbraco.Core/Services/UserService.cs | 5 ++++- .../users/views/users/users.controller.js | 20 ++++++++++++++++++- .../src/views/users/views/users/users.html | 10 ++++------ 4 files changed, 42 insertions(+), 10 deletions(-) diff --git a/src/Umbraco.Core/ExpressionHelper.cs b/src/Umbraco.Core/ExpressionHelper.cs index c34c4591b8..75dd63a0df 100644 --- a/src/Umbraco.Core/ExpressionHelper.cs +++ b/src/Umbraco.Core/ExpressionHelper.cs @@ -217,8 +217,21 @@ namespace Umbraco.Core public static MemberInfo GetMemberInfo(Expression> fromExpression) { if (fromExpression == null) return null; - var body = fromExpression.Body as MemberExpression; - return body != null ? body.Member : null; + + MemberExpression me; + switch (fromExpression.Body.NodeType) + { + case ExpressionType.Convert: + case ExpressionType.ConvertChecked: + var ue = fromExpression.Body as UnaryExpression; + me = ((ue != null) ? ue.Operand : null) as MemberExpression; + break; + default: + me = fromExpression.Body as MemberExpression; + break; + } + + return me != null ? me.Member : null; } /// diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs index 2cee874926..99b4b56cdd 100644 --- a/src/Umbraco.Core/Services/UserService.cs +++ b/src/Umbraco.Core/Services/UserService.cs @@ -531,7 +531,10 @@ namespace Umbraco.Core.Services break; case "ISLOCKEDOUT": sort = member => member.IsLockedOut; - break; + break; + case "LASTLOGINDATE": + sort = member => member.LastLoginDate; + break; default: throw new IndexOutOfRangeException("The orderBy parameter " + orderBy + " is not valid"); } diff --git a/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js b/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js index 66fcbc9673..eea36bf43a 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js +++ b/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.controller.js @@ -12,6 +12,13 @@ vm.selection = []; vm.newUser = {}; vm.usersOptions = {}; + vm.userSortData = [ + { label: "Name (A-Z)", key: "Name", direction: "Ascending" }, + { label: "Name (Z-A)", key: "Name", direction: "Descending" }, + { label: "Newest", key: "CreateDate", direction: "Descending" }, + { label: "Oldest", key: "CreateDate", direction: "Ascending" }, + { label: "Last login", key: "LastLoginDate", direction: "Descending" } + ]; vm.newUser.userGroups = []; vm.usersViewState = 'overview'; @@ -74,10 +81,12 @@ vm.changePageNumber = changePageNumber; vm.createUser = createUser; vm.inviteUser = inviteUser; + vm.getSortLabel = getSortLabel; function init() { vm.usersOptions.orderBy = "Name"; + vm.usersOptions.orderDirection = "Ascending"; // Get users getUsers(); @@ -89,6 +98,14 @@ } + function getSortLabel(sortKey, sortDirection) { + var found = _.find(vm.userSortData, + function (i) { + return i.key === sortKey && i.direction === sortDirection; + }); + return found ? found.label : sortKey; + } + function setUsersViewState(state) { vm.usersViewState = state; } @@ -288,8 +305,9 @@ return name; } - function setOrderByFilter(value) { + function setOrderByFilter(value, direction) { vm.usersOptions.orderBy = value; + vm.usersOptions.orderDirection = direction; getUsers(); } diff --git a/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.html b/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.html index ebfb9214cf..ab74908cd1 100644 --- a/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.html +++ b/src/Umbraco.Web.UI.Client/src/views/users/views/users/users.html @@ -138,15 +138,13 @@