Add directive to change the role of a member

stable
David Barragán Merino 2014-07-23 12:54:41 +02:00
parent 88ae4e7122
commit 525063496d
2 changed files with 74 additions and 20 deletions

View File

@ -16,7 +16,7 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# File: modules/admin/project-profile.coffee # File: modules/admin/project-profile.coffee TODO
### ###
taiga = @.taiga taiga = @.taiga
@ -222,22 +222,22 @@ MembershipsMemberAvatarDirective = ($log) ->
</figure> </figure>
""") """)
render = (member) -> render = ($el, member) ->
ctx = { ctx = {
full_name: if member.full_name then member.full_name else "------" full_name: if member.full_name then member.full_name else ""
email: member.email email: member.email
imgurl: if member.photo then member.photo else "http://thecodeplayer.com/u/uifaces/12.jpg" imgurl: if member.photo then member.photo else "http://thecodeplayer.com/u/uifaces/12.jpg"
} }
return template(ctx) html = template(ctx)
$el.html(html)
link = ($scope, $el, $attrs) -> link = ($scope, $el, $attrs) ->
if not $attrs.tgMembershipsMemberAvatar? if not $attrs.tgMembershipsMemberAvatar?
return $log.error "MembershipsMemberAvatarDirective: the directive need a member" return $log.error "MembershipsMemberAvatarDirective: the directive need a member"
member = $scope.$eval($attrs.tgMembershipsMemberAvatar) member = $scope.$eval($attrs.tgMembershipsMemberAvatar)
html = render(member) render($el, member)
$el.html(html)
$scope.$on "$destroy", -> $scope.$on "$destroy", ->
$el.off() $el.off()
@ -271,10 +271,13 @@ MembershipsMemberActionsDirective = ($log, $repo, $confirm) ->
</a> </a>
""") # i18n """) # i18n
render = (member) -> render = ($el, member) ->
if member.user if member.user
return activedTemplate() html = activedTemplate()
return pendingTemplate() else
html = pendingTemplate()
$el.html(html)
link = ($scope, $el, $attrs) -> link = ($scope, $el, $attrs) ->
$ctrl = $el.controller() $ctrl = $el.controller()
@ -283,8 +286,7 @@ MembershipsMemberActionsDirective = ($log, $repo, $confirm) ->
return $log.error "MembershipsMemberActionsDirective: the directive need a member" return $log.error "MembershipsMemberActionsDirective: the directive need a member"
member = $scope.$eval($attrs.tgMembershipsMemberActions) member = $scope.$eval($attrs.tgMembershipsMemberActions)
html = render(member) render($el, member)
$el.html(html)
$el.on "click", ".pending", (event) -> $el.on "click", ".pending", (event) ->
event.preventDefault() event.preventDefault()
@ -322,18 +324,18 @@ MembershipsMemberIsAdminCheckboxDirective = ($log, $repo, $confirm) ->
<label for="<%- inputId %>">Is admin?</label> <label for="<%- inputId %>">Is admin?</label>
""") # i18n """) # i18n
render = (member) -> render = ($el, member) ->
ctx = {inputId: "is-admin-#{member.id}"} ctx = {inputId: "is-admin-#{member.id}"}
return template(ctx) html = template(ctx)
$el.html(html)
link = ($scope, $el, $attrs) -> link = ($scope, $el, $attrs) ->
if not $attrs.tgMembershipsMemberIsAdminCheckbox? if not $attrs.tgMembershipsMemberIsAdminCheckbox?
return $log.error "MembershipsMemberIsAdminCheckboxDirective: the directive need a member" return $log.error "MembershipsMemberIsAdminCheckboxDirective: the directive need a member"
member = $scope.$eval($attrs.tgMembershipsMemberIsAdminCheckbox) member = $scope.$eval($attrs.tgMembershipsMemberIsAdminCheckbox)
html = render(member) html = render($el, member)
$el.html(html)
if member.is_admin if member.is_admin
$el.find(":checkbox").prop("checked", true) $el.find(":checkbox").prop("checked", true)
@ -357,3 +359,59 @@ MembershipsMemberIsAdminCheckboxDirective = ($log, $repo, $confirm) ->
module.directive("tgMembershipsMemberIsAdminCheckbox", ["$log", "$tgRepo", "$tgConfirm", module.directive("tgMembershipsMemberIsAdminCheckbox", ["$log", "$tgRepo", "$tgConfirm",
MembershipsMemberIsAdminCheckboxDirective]) MembershipsMemberIsAdminCheckboxDirective])
#############################################################################
## Member RoleSelector Directive
#############################################################################
MembershipsMemberRoleSelectorDirective = ($log, $repo, $confirm) ->
template = _.template("""
<select>
<% _.each(roleList, function(role) { %>
<option value=<%- role.id %> <% if(selectedRole === role.id){ %>selected="selected"<% } %>>
<%- role.name %>
</option>
<% }); %>
</select>
""")
render = ($el, member, roleList) ->
ctx = {
roleList: roleList,
selectedRole: member.role
}
html = template(ctx)
$el.html(html)
link = ($scope, $el, $attrs) ->
$ctrl = $el.controller()
if not $attrs.tgMembershipsMemberRoleSelector?
return $log.error "MembershipsMemberRoleSelectorDirective: the directive need a member"
member = $scope.$eval($attrs.tgMembershipsMemberRoleSelector)
roleList = $ctrl.scope.project.roles
html = render($el, member, roleList)
$el.on "click", "select", (event) =>
onSuccess = ->
$confirm.notify("success")
onError = ->
$confirm.notify("error")
target = angular.element(event.currentTarget)
newRole = parseInt(target.val(), 10)
if member.role != newRole
member.role = newRole
$repo.save(member).then(onSuccess, onError)
$scope.$on "$destroy", ->
$el.off()
return {link: link}
module.directive("tgMembershipsMemberRoleSelector", ["$log", "$tgRepo", "$tgConfirm",
MembershipsMemberRoleSelectorDirective])

View File

@ -8,9 +8,5 @@ section.admin-membership-table.basic-table
div.row(ng-repeat="member in memberships") div.row(ng-repeat="member in memberships")
div.row-member(tg-memberships-member-avatar="member") div.row-member(tg-memberships-member-avatar="member")
div.row-admin(tg-memberships-member-is-admin-checkbox="member") div.row-admin(tg-memberships-member-is-admin-checkbox="member")
div.row-role div.row-role(tg-memberships-member-role-selector="member")
select(ng-model="member.role")
option UX
option Front
option Back
div.row-status(tg-memberships-member-actions="member") div.row-status(tg-memberships-member-actions="member")