Skip to content

Commit 3220cf5

Browse files
committed
MOBILE-1506 messages: Show user profile image instead of profile icon
1 parent 2f56a49 commit 3220cf5

File tree

9 files changed

+51
-25
lines changed

9 files changed

+51
-25
lines changed

www/addons/messages/controllers/discussion.js

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ angular.module('mm.addons.messages')
2929
$log = $log.getInstance('mmaMessagesDiscussionCtrl');
3030

3131
var userId = $stateParams.userId,
32-
userFullname = $stateParams.userFullname,
3332
messagesBeingSent = 0,
3433
polling,
3534
fetching,
@@ -41,26 +40,27 @@ angular.module('mm.addons.messages')
4140
$scope.messages = [];
4241
$scope.userId = userId;
4342
$scope.currentUserId = $mmSite.getUserId();
44-
$scope.profileLink = true;
4543

46-
if (userFullname) {
47-
$scope.title = userFullname;
48-
} else if (userId) {
49-
// We don't have the fullname, try to get it.
50-
$mmUser.getProfile(userId).then(function(user) {
44+
// Disable the profile button if we're already coming from a profile.
45+
if (backView && backView.stateName === mmUserProfileState) {
46+
$scope.profileLink = false;
47+
}
48+
49+
if (userId) {
50+
// Get the user profile to retrieve the user fullname and image.
51+
$mmUser.getProfile(userId, undefined, true).then(function(user) {
5152
if (!$scope.title) {
5253
$scope.title = user.fullname;
5354
}
55+
if (typeof $scope.profileLink == 'undefined') {
56+
$scope.profileLink = user.profileimageurl;
57+
}
58+
}).catch(function() {
59+
// Couldn't retrieve the image, use a default icon.
60+
$scope.profileLink = true;
5461
});
5562
}
5663

57-
// Disable the profile button if we're coming from a profile. It is safer to prevent forbid the access
58-
// to the full profile (we do not know the course ID they came from) as some users cannot view the full
59-
// profile of other users.
60-
if (backView && backView.stateName === mmUserProfileState) {
61-
$scope.profileLink = false;
62-
}
63-
6464
$scope.isAppOffline = function() {
6565
return !$mmApp.isOnline();
6666
};
@@ -117,7 +117,7 @@ angular.module('mm.addons.messages')
117117
// Fetch the messages for the first time.
118118
$mmaMessages.getDiscussion(userId).then(function(messages) {
119119
$scope.messages = $mmaMessages.sortMessages(messages);
120-
if (!userFullname && messages && messages.length > 0) {
120+
if (!$scope.title && messages && messages.length > 0) {
121121
// When we did not receive the fullname via argument. Also it is possible that
122122
// we cannot resolve the name when no messages were yet exchanged.
123123
if (messages[0].useridto != $scope.currentUserId) {

www/addons/messages/controllers/index.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,25 @@ angular.module('mm.addons.messages')
2121
* @ngdoc controller
2222
* @name mmaMessagesIndexCtrl
2323
*/
24-
.controller('mmaMessagesIndexCtrl', function($scope, $mmEvents, $ionicPlatform, $ionicTabsDelegate,
24+
.controller('mmaMessagesIndexCtrl', function($scope, $mmEvents, $ionicPlatform, $ionicTabsDelegate, $mmUser,
2525
mmaMessagesDiscussionLoadedEvent, mmaMessagesDiscussionLeftEvent) {
2626
// Listen for discussion loaded event to show user profile link in tablet view.
2727
var obsLoaded = $mmEvents.on(mmaMessagesDiscussionLoadedEvent, function(userId) {
28-
$scope.profileLink = $ionicPlatform.isTablet() && $ionicTabsDelegate.selectedIndex() == 0;
29-
$scope.userId = userId;
28+
if ($ionicPlatform.isTablet() && $ionicTabsDelegate.selectedIndex() === 0) {
29+
// A discussion was loaded in tablet, get the user image and show the button to the profile.
30+
$scope.userId = userId;
31+
$mmUser.getProfile(userId, undefined, true).catch(function() {
32+
// Couldn't retrieve the image, use a default icon.
33+
return {
34+
profileimageurl: true
35+
};
36+
}).then(function(user) {
37+
// Verify that no other user was loaded while the async call was in progress.
38+
if ($scope.userId == userId) {
39+
$scope.profileLink = user.profileimageurl;
40+
}
41+
});
42+
}
3043
});
3144

3245
// Listen for discussion loaded event to show user profile link in tablet view.

www/addons/messages/main.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ angular.module('mm.addons.messages', ['mm.core'])
4141
.state('site.messages-discussion', {
4242
url: '/messages-discussion',
4343
params: {
44-
userId: null,
45-
userFullname: null
44+
userId: null
4645
},
4746
views: {
4847
'site': {

www/addons/messages/services/handlers.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,8 +226,7 @@ angular.module('mm.addons.messages')
226226
$event.preventDefault();
227227
$event.stopPropagation();
228228
$state.go('site.messages-discussion', {
229-
userId: user.id,
230-
userFullname: user.fullname
229+
userId: user.id
231230
});
232231
};
233232
};

www/addons/messages/templates/discussion.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22
<ion-nav-title>{{ title }}</ion-nav-title>
33

44
<ion-nav-buttons side="secondary">
5-
<button ng-if="profileLink" class="button button-icon icon ion-person" mm-user-link userid="{{userId}}" aria-label="{{ 'mm.core.viewprofile' | translate }}"></button>
5+
<a ng-if="profileLink" mm-user-link userid="{{userId}}" aria-label="{{ 'mm.user.viewprofile' | translate }}">
6+
<img ng-if="profileLink && profileLink !== true" class="button mm-bar-button-image" ng-src="{{profileLink}}">
7+
<span ng-if="profileLink === true" class="button button-icon icon ion-person"></span>
8+
</a>
69
</ion-nav-buttons>
710

811
<ion-content class="padding" delegate-handle="mmaMessagesScroll" mm-state-class>

www/addons/messages/templates/discussions.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<mm-loading hide-until="loaded">
44
<ul class="list">
55
<li>
6-
<a class="item item-avatar" ng-repeat="disc in discussions | orderBy:'message.timecreated':true track by $index" mm-split-view-link="site.messages-discussion({userId: disc.message.user, userFullname: disc.fullname})" title="{{disc.fullname}}">
6+
<a class="item item-avatar" ng-repeat="disc in discussions | orderBy:'message.timecreated':true track by $index" mm-split-view-link="site.messages-discussion({userId: disc.message.user})" title="{{disc.fullname}}">
77

88
<img ng-src="{{disc.profileimageurl}}" alt="" role="presentation" mm-external-content ng-if="disc.profileimageurl">
99
<img src="img/user-avatar.png" alt="" role="presentation" ng-if="!disc.profileimageurl">

www/addons/messages/templates/index.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
<ion-view view-title="{{ 'mma.messages.messages' | translate }}">
22
<ion-nav-buttons side="secondary">
3-
<button ng-if="profileLink" class="button button-icon icon ion-person" mm-user-link userid="{{userId}}"></button>
3+
<a ng-if="profileLink" mm-user-link userid="{{userId}}" aria-label="{{ 'mm.user.viewprofile' | translate }}">
4+
<img ng-if="profileLink && profileLink !== true" class="button mm-bar-button-image" ng-src="{{profileLink}}">
5+
<span ng-if="profileLink === true" class="button button-icon icon ion-person"></span>
6+
</a>
47
</ion-nav-buttons>
58

69
<mm-split-view component="mmaMessagesIndex">

www/core/components/user/lang/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@
1616
"roles": "Roles",
1717
"student": "Student",
1818
"teacher": "Non-editing teacher",
19+
"viewprofile": "View profile",
1920
"webpage": "Web page"
2021
}

www/core/scss/styles.scss

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,14 @@ mm-navigation-bar {
308308
}
309309
}
310310

311+
.mm-bar-button-image, .bar .button.mm-bar-button-image {
312+
padding: 0;
313+
width: 100%;
314+
height: 100%;
315+
max-width: $button-bar-button-height - 1;
316+
max-height: $button-bar-button-height - 1;
317+
border-radius: 50%;
318+
}
311319

312320
/**
313321
* This CSS uses adjacent selectors instead of general sibling (~) selectors

0 commit comments

Comments
 (0)