diff --git a/app/coffee/modules/backlog/main.coffee b/app/coffee/modules/backlog/main.coffee index bdafb0fd..3dac4387 100644 --- a/app/coffee/modules/backlog/main.coffee +++ b/app/coffee/modules/backlog/main.coffee @@ -243,7 +243,7 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.F loadInitialData: -> promise = @.loadProject() promise.then (project) => - @.fillUsersAndRoles(project.users, project.roles) + @.fillUsersAndRoles(project.members, project.roles) @.initializeSubscription() return promise.then(=> @.loadBacklog()) diff --git a/app/coffee/modules/common/components.coffee b/app/coffee/modules/common/components.coffee index 9de5b456..fe42c1d8 100644 --- a/app/coffee/modules/common/components.coffee +++ b/app/coffee/modules/common/components.coffee @@ -663,14 +663,14 @@ ListItemAssignedtoDirective = ($template) -> template = $template.get("common/components/list-item-assigned-to-avatar.html", true) link = ($scope, $el, $attrs) -> - bindOnce $scope, "membersById", (membersById) -> + bindOnce $scope, "usersById", (usersById) -> item = $scope.$eval($attrs.tgListitemAssignedto) ctx = {name: "Unassigned", imgurl: "/images/unnamed.png"} - member = membersById[item.assigned_to] + member = usersById[item.assigned_to] if member ctx.imgurl = member.photo - ctx.name = member.full_name + ctx.name = member.full_name_display $el.html(template(ctx)) diff --git a/app/coffee/modules/controllerMixins.coffee b/app/coffee/modules/controllerMixins.coffee index 34b5adb6..81d84536 100644 --- a/app/coffee/modules/controllerMixins.coffee +++ b/app/coffee/modules/controllerMixins.coffee @@ -41,9 +41,9 @@ class PageMixin @scope.usersById = groupBy(@scope.users, (e) -> e.id) @scope.roles = _.sortBy(roles, "order") - availableRoles = _(@scope.project.memberships).map("role").uniq().value() + computableRoles = _(@scope.project.members).map("role").uniq().value() @scope.computableRoles = _(roles).filter("computable") - .filter((x) -> _.contains(availableRoles, x.id)) + .filter((x) -> _.contains(computableRoles, x.id)) .value() loadUsersAndRoles: -> promise = @q.all([ diff --git a/app/coffee/modules/issues/detail.coffee b/app/coffee/modules/issues/detail.coffee index 36bb542e..7fd33d1a 100644 --- a/app/coffee/modules/issues/detail.coffee +++ b/app/coffee/modules/issues/detail.coffee @@ -120,7 +120,6 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.severityById = groupBy(project.severities, (x) -> x.id) @scope.priorityList = project.priorities @scope.priorityById = groupBy(project.priorities, (x) -> x.id) - @scope.membersById = groupBy(project.memberships, (x) -> x.user) return project loadIssue: -> @@ -146,7 +145,7 @@ class IssueDetailController extends mixOf(taiga.Controller, taiga.PageMixin) loadInitialData: -> promise = @.loadProject() return promise.then (project) => - @.fillUsersAndRoles(project.users, project.roles) + @.fillUsersAndRoles(project.members, project.roles) @.loadIssue() diff --git a/app/coffee/modules/issues/list.coffee b/app/coffee/modules/issues/list.coffee index 607d2b29..d6fbf588 100644 --- a/app/coffee/modules/issues/list.coffee +++ b/app/coffee/modules/issues/list.coffee @@ -112,7 +112,6 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi @scope.issueTypes = _.sortBy(project.issue_types, "order") @scope.issueTypeById = groupBy(project.issue_types, (x) -> x.id) - @scope.membersById = groupBy(project.memberships, (x) -> x.user) return project getUrlFilters: -> @@ -278,7 +277,7 @@ class IssuesController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi loadInitialData: -> promise = @.loadProject() return promise.then (project) => - @.fillUsersAndRoles(project.users, project.roles) + @.fillUsersAndRoles(project.members, project.roles) @.initializeSubscription() return @q.all([@.loadFilters(), @.loadIssues()]) diff --git a/app/coffee/modules/kanban/main.coffee b/app/coffee/modules/kanban/main.coffee index 137521c6..66935eb8 100644 --- a/app/coffee/modules/kanban/main.coffee +++ b/app/coffee/modules/kanban/main.coffee @@ -209,7 +209,7 @@ class KanbanController extends mixOf(taiga.Controller, taiga.PageMixin, taiga.Fi loadInitialData: -> promise = @.loadProject() return promise.then (project) => - @.fillUsersAndRoles(project.users, project.roles) + @.fillUsersAndRoles(project.members, project.roles) @.initializeSubscription() @.loadKanban().then( => @scope.$broadcast("redraw:wip")) diff --git a/app/coffee/modules/search.coffee b/app/coffee/modules/search.coffee index 91a974a5..71f2f311 100644 --- a/app/coffee/modules/search.coffee +++ b/app/coffee/modules/search.coffee @@ -84,7 +84,6 @@ class SearchController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.taskStatusById = groupBy(project.task_statuses, (x) -> x.id) @scope.severityById = groupBy(project.severities, (x) -> x.id) @scope.priorityById = groupBy(project.priorities, (x) -> x.id) - @scope.membersById = groupBy(project.memberships, (x) -> x.user) @scope.usStatusById = groupBy(project.us_statuses, (x) -> x.id) return project @@ -98,7 +97,7 @@ class SearchController extends mixOf(taiga.Controller, taiga.PageMixin) loadInitialData: -> return @.loadProject().then (project) => @scope.projectId = project.id - @.fillUsersAndRoles(project.users, project.roles) + @.fillUsersAndRoles(project.members, project.roles) module.controller("SearchController", SearchController) diff --git a/app/coffee/modules/taskboard/main.coffee b/app/coffee/modules/taskboard/main.coffee index f4e82d92..b8a17671 100644 --- a/app/coffee/modules/taskboard/main.coffee +++ b/app/coffee/modules/taskboard/main.coffee @@ -135,7 +135,7 @@ class TaskboardController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.$emit('project:loaded', project) - @.fillUsersAndRoles(project.users, project.roles) + @.fillUsersAndRoles(project.members, project.roles) return project diff --git a/app/coffee/modules/tasks/detail.coffee b/app/coffee/modules/tasks/detail.coffee index 228c4aff..5188f767 100644 --- a/app/coffee/modules/tasks/detail.coffee +++ b/app/coffee/modules/tasks/detail.coffee @@ -107,7 +107,6 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.$emit('project:loaded', project) @scope.statusList = project.task_statuses @scope.statusById = groupBy(project.task_statuses, (x) -> x.id) - @scope.membersById = groupBy(project.memberships, (x) -> x.user) return project loadTask: -> @@ -146,7 +145,7 @@ class TaskDetailController extends mixOf(taiga.Controller, taiga.PageMixin) loadInitialData: -> promise = @.loadProject() return promise.then (project) => - @.fillUsersAndRoles(project.users, project.roles) + @.fillUsersAndRoles(project.members, project.roles) @.loadTask().then(=> @q.all([@.loadSprint(), @.loadUserStory()])) module.controller("TaskDetailController", TaskDetailController) diff --git a/app/coffee/modules/team/main.coffee b/app/coffee/modules/team/main.coffee index 6175b035..f4985c3a 100644 --- a/app/coffee/modules/team/main.coffee +++ b/app/coffee/modules/team/main.coffee @@ -70,30 +70,18 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.filtersRole = null loadMembers: -> - currentUser = @auth.getUser() - - if currentUser? and not currentUser.photo? - currentUser.photo = "/images/unnamed.png" - - memberships = @projectService.project.toJS().memberships - - @scope.currentUser = _.find memberships, (membership) => - return currentUser? and membership.user == currentUser.id + user = @auth.getUser() + # Calculate totals @scope.totals = {} + for member in @scope.activeUsers + @scope.totals[member.id] = 0 - _.forEach memberships, (membership) => - @scope.totals[membership.user] = 0 + # Get current user + @scope.currentUser = _.find(@scope.activeUsers, {id: user?.id}) - @scope.memberships = _.filter memberships, (membership) => - if membership.user && (not currentUser? or membership.user != currentUser.id) - return membership - - @scope.memberships = _.filter memberships, (membership) => return membership.is_active - - for membership in @scope.memberships - if not membership.photo? - membership.photo = "/images/unnamed.png" + # Get member list without current user + @scope.memberships = _.reject(@scope.activeUsers, {id: user?.id}) loadProject: -> return @rs.projects.getBySlug(@params.pslug).then (project) => @@ -115,10 +103,10 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin) total = _.reduce(vals, (sum, el) -> sum + el) @scope.totals[userId] = total - @scope.stats = @.processStats(stats) + @scope.stats = @._processStats(stats) @scope.stats.totals = @scope.totals - processStat: (stat) -> + _processStat: (stat) -> max = _.max(stat) min = _.min(stat) singleStat = _.map stat, (value, key) -> @@ -130,17 +118,16 @@ class TeamController extends mixOf(taiga.Controller, taiga.PageMixin) singleStat = _.object(singleStat) return singleStat - processStats: (stats) -> + _processStats: (stats) -> for key,value of stats - stats[key] = @.processStat(value) + stats[key] = @._processStat(value) return stats loadInitialData: -> promise = @.loadProject() return promise.then (project) => - @.fillUsersAndRoles(project.users, project.roles) + @.fillUsersAndRoles(project.members, project.roles) @.loadMembers() - return @.loadMemberStats() module.controller("TeamController", TeamController) diff --git a/app/coffee/modules/userstories/detail.coffee b/app/coffee/modules/userstories/detail.coffee index 935f43f3..4e0725e8 100644 --- a/app/coffee/modules/userstories/detail.coffee +++ b/app/coffee/modules/userstories/detail.coffee @@ -123,7 +123,6 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.statusList = project.us_statuses @scope.statusById = groupBy(project.us_statuses, (x) -> x.id) @scope.taskStatusById = groupBy(project.task_statuses, (x) -> x.id) - @scope.membersById = groupBy(project.memberships, (x) -> x.user) @scope.pointsList = _.sortBy(project.points, "order") @scope.pointsById = groupBy(@scope.pointsList, (e) -> e.id) return project @@ -188,7 +187,7 @@ class UserStoryDetailController extends mixOf(taiga.Controller, taiga.PageMixin) loadInitialData: -> promise = @.loadProject() return promise.then (project) => - @.fillUsersAndRoles(project.users, project.roles) + @.fillUsersAndRoles(project.members, project.roles) @.loadUs().then(=> @q.all([@.loadSprint(), @.loadTasks()])) module.controller("UserStoryDetailController", UserStoryDetailController) diff --git a/app/coffee/modules/wiki/main.coffee b/app/coffee/modules/wiki/main.coffee index 7316ba5c..2d2a203a 100644 --- a/app/coffee/modules/wiki/main.coffee +++ b/app/coffee/modules/wiki/main.coffee @@ -86,7 +86,6 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) @scope.projectId = project.id @scope.project = project @scope.$emit('project:loaded', project) - @scope.membersById = groupBy(project.memberships, (x) -> x.user) return project loadWiki: -> @@ -117,7 +116,7 @@ class WikiDetailController extends mixOf(taiga.Controller, taiga.PageMixin) loadInitialData: -> promise = @.loadProject() return promise.then (project) => - @.fillUsersAndRoles(project.users, project.roles) + @.fillUsersAndRoles(project.members, project.roles) @q.all([@.loadWikiLinks(), @.loadWiki()]).then () => diff --git a/app/modules/projects/project/project.jade b/app/modules/projects/project/project.jade index 9cf43a78..24017598 100644 --- a/app/modules/projects/project/project.jade +++ b/app/modules/projects/project/project.jade @@ -9,7 +9,8 @@ div.wrapper p.description {{vm.project.get('description')}} div.single-project-tags.tags-container(ng-if="::vm.project.get('tags').size") - span.tag(style='border-left: 5px solid {{::tag.get("color")}};', tg-repeat="tag in ::vm.project.get('colorized_tags')") + span.tag(style='border-left: 5px solid {{::tag.get("color")}};', + tg-repeat="tag in ::vm.project.get('colorized_tags')") span.tag-name {{::tag.get('name')}} div.project-data @@ -18,7 +19,9 @@ div.wrapper section.involved-data h2.title {{"PROJECT.SECTION.TEAM" | translate}} ul.involved-team - a(tg-nav="user-profile:username=member.get('username')", title="{{::member.get('full_name')}}", tg-repeat="member in ::vm.project.get('memberships')") + a(tg-repeat="member in ::vm.project.get('members')", + tg-nav="user-profile:username=member.get('username')", + title="{{::member.get('full_name')}}") img(ng-src="{{::member.get('photo')}}", alt="{{::member.get('full_name')}}") // h2.title Organizations diff --git a/app/partials/team/team-member-current-user.jade b/app/partials/team/team-member-current-user.jade index 698c2f7f..b5d81ce1 100644 --- a/app/partials/team/team-member-current-user.jade +++ b/app/partials/team/team-member-current-user.jade @@ -1,10 +1,10 @@ .row .username figure.avatar - img(tg-bo-src="currentUser.photo", tg-bo-alt="currentUser.full_name") + img(tg-bo-src="currentUser.photo", tg-bo-alt="currentUser.full_name_display") figcaption - span.name(tg-bo-bind="currentUser.full_name") + span.name(tg-bo-bind="currentUser.full_name_display") span.position(tg-bo-bind="currentUser.role_name") diff --git a/app/partials/team/team-members.jade b/app/partials/team/team-members.jade index b941b9d7..55df4055 100644 --- a/app/partials/team/team-members.jade +++ b/app/partials/team/team-members.jade @@ -1,10 +1,11 @@ .row.member(ng-repeat="user in memberships | membersFilter:filtersQ:filtersRole") .username figure.avatar - img(tg-bo-src="user.photo", tg-bo-alt="user.full_name") + img(tg-bo-src="user.photo", tg-bo-alt="user.full_name_display") figcaption - a.name(tg-nav="user-profile:username=user.username", title="{{::user.full_name }}") {{::user.full_name}} + a.name(tg-nav="user-profile:username=user.username", + title="{{::user.full_name_display}}") {{::user.full_name_display}} span.position {{::user.role_name}} .member-stats(tg-team-member-stats, stats="stats",