From e889e5694f6f44545aff9c02b3a5f57a0d7c0630 Mon Sep 17 00:00:00 2001 From: Daniel Date: Wed, 5 Jul 2023 18:02:42 +0200 Subject: [PATCH] wip new member management --- src/client/app/js/app/core/Controller.js | 6 +- src/client/app/js/app/core/Dict.js | 4 + .../app/js/app/state/GroupMemberManagement.js | 283 ++------------ .../app/state/GroupMemberManagementMember.js | 348 ++++++++++++++++++ ...mber-management-member-body-adminnote.html | 3 + ...anagement-member-body-appointment-log.html | 62 ++++ .../group-member-management-member-body.html | 283 ++++++++++++++ .../tmpl/group-member-management-member.html | 20 + .../app/tmpl/group-member-management-row.html | 34 ++ .../app/tmpl/group-member-management.html | 80 ++-- src/client/app/tmpl/group-members.html | 6 - 11 files changed, 844 insertions(+), 285 deletions(-) create mode 100644 src/client/app/js/app/state/GroupMemberManagementMember.js create mode 100644 src/client/app/tmpl/group-member-management-member-body-adminnote.html create mode 100644 src/client/app/tmpl/group-member-management-member-body-appointment-log.html create mode 100644 src/client/app/tmpl/group-member-management-member-body.html create mode 100644 src/client/app/tmpl/group-member-management-member.html create mode 100644 src/client/app/tmpl/group-member-management-row.html diff --git a/src/client/app/js/app/core/Controller.js b/src/client/app/js/app/core/Controller.js index 71ec91b..3d1defe 100644 --- a/src/client/app/js/app/core/Controller.js +++ b/src/client/app/js/app/core/Controller.js @@ -228,9 +228,13 @@ app.core.Controller = (function(){ { app.core.StateManager.switchTo( new app.state.GroupMemberManagement(), r.params ); }); + // rlite.add( 'group/:groupId/membermanagement/:memberId', function( r ) + // { + // app.core.StateManager.switchTo( new app.state.GroupMemberManagement(), r.params ); + // }); rlite.add( 'group/:groupId/membermanagement/:memberId', function( r ) { - app.core.StateManager.switchTo( new app.state.GroupMemberManagement(), r.params ); + app.core.StateManager.switchTo( new app.state.GroupMemberManagementMember(), r.params ); }); rlite.add( 'group/:groupId/members', function( r ) { diff --git a/src/client/app/js/app/core/Dict.js b/src/client/app/js/app/core/Dict.js index 006fb8b..25d8c93 100644 --- a/src/client/app/js/app/core/Dict.js +++ b/src/client/app/js/app/core/Dict.js @@ -544,6 +544,10 @@ app.core.Dict = { "STATS_REPORTING" : 'Reporting', 'STATS_PLANNING' : 'Planung', "DO_YOU_REALLY_WANT_TO_DELETE_THIS_CONTRACT" : "Möchtest Du diesen Vertrag wirklich löschen?", + "GROUP_MANAGEMENT_MEMBERS_ACTIVE" : "Aktiv", + "GROUP_MANAGEMENT_MEMBERS_INACTIVE" : "Inaktiv", + "GROUP_MANAGEMENT_MEMBERS_NOT_APPROVED" : "Unbestätigt", + "GROUP_MANAGEMENT_MEMBERS_CHANGE_STATUS" : "Gruppenstatus ändern" }, "en" : { } diff --git a/src/client/app/js/app/state/GroupMemberManagement.js b/src/client/app/js/app/state/GroupMemberManagement.js index 80e18cd..4d69a78 100644 --- a/src/client/app/js/app/state/GroupMemberManagement.js +++ b/src/client/app/js/app/state/GroupMemberManagement.js @@ -12,135 +12,15 @@ app.state.GroupMemberManagement = function() state.onEnter = function( p ) { let $content = app.core.View.getContent(), - fnRenderMemberForm = null, - fnGetMemberById = null, - fnUpdateMemberById = null, group = null, - adminNoteXhr = null, - playerHistoryXhr = null, memberToEdit = null, - currentMember, members = [], + membersActive = [], + membersInactive = [], + membersNotApproved = [], groupId = p.groupId, - memberId = p.hasOwnProperty( 'memberId' ) ? p.memberId : null; - - fnRenderMemberForm = function( profile ) - { - $memberContainer = $content.find( '[data-id="member-container"]' ).first(); - $memberContainer.html( - app.core.View.getTemplate( - 'group-member-management-body', - { - p : profile, - g : group - } - ) - ); - }; - - fnUpdateAppointmentLog = function() - { - if ( !memberToEdit ) - { - return; - } - - if ( playerHistoryXhr ) - { - playerHistoryXhr.abort(); - } - - playerHistoryXhr = app.core.Rpc.call( - 'Team', - 'getProfileAppointmentLog', - { - groupId : group.getId(), - profileId : memberToEdit.getId(), - startDt : $content.find( '[data-id="input-appointment-log-from"]' ).first().val(), - endDt : $content.find( '[data-id="input-appointment-log-until"]' ).first().val() - }, - function( res) - { - $content.find( '[data-id="container-appointment-log"]' ).first().html( - app.core.View.getTemplate( - 'group-member-management-body-appointment-log', - { - logs : res.appointmentLog - } - ) - ); - }, - function() - { - // Do nothing. - } - ); - }; - - fnGetMemberById = function( profileId ) - { - var p = null; - - for ( var mi = 0; mi < members.length; mi++ ) - { - if ( members[ mi ].getId() == profileId ) - { - p = members[ mi ]; - break; - } - } - - return p; - }; - - fnUpdateMemberById = function( newMember ) - { - for ( var mi = 0; mi < members.length; mi++ ) - { - if ( members[ mi ].getId() == newMember.getId() ) - { - members[ mi ] = newMember; - break; - } - } - }; - - fnUpdateMemberToEdit = function( mmid ) - { - memberToEdit = fnGetMemberById( mmid ); - fnRenderMemberForm( memberToEdit ); - if ( memberToEdit ) - { - if ( adminNoteXhr ) - { - adminNoteXhr.abort(); - } - adminNoteXhr = app.core.Rpc.call( - 'Team', - 'getAdminNote', - { - groupId : group.getId(), - profileId : memberToEdit.getId() - }, - function( res ) - { - $content.find( '[data-id="admin-note"]' ).first().html( - app.core.View.getTemplate( - 'group-member-management-body-adminnote', - { - adminNote : res.adminNote ? res.adminNote : '' - } - ) - ); - }, - function() - { - // Do nothing - } - ); - } - fnUpdateAppointmentLog(); - }; + memberId = p.hasOwnProperty( 'memberId' ) ? p.memberId : null, + activeTab = 'inactive'; app.gui.PageLoader.show(); @@ -150,7 +30,7 @@ app.state.GroupMemberManagement = function() { teamId : groupId, includeEmails : true, includeMembers: true }, function( res ) { - + members.push( res ); var member = null, $memberContainer = null, emails = res.emails ? res.emails : []; @@ -168,11 +48,23 @@ app.state.GroupMemberManagement = function() break; } } - members.push( member ); + if ( member.getId() == app.model.SessionUser.getProfileId() ) { currentProfile = member; } + + switch (member.getGroupData(groupId).status) { + case 'active': + membersActive.push(member); + break; + case 'inactive': + membersInactive.push(member); + break; + case 'not_approved': + membersNotApproved.push(member); + break; + } } app.core.View.setContent( @@ -180,9 +72,13 @@ app.state.GroupMemberManagement = function() 'group-member-management', { members : members, + membersActive: membersActive, + membersInactive: membersInactive, + membersNotApproved: membersNotApproved, group : group, groups : app.model.SessionUser.getAdminGroups(), - currentProfile : currentProfile + currentProfile : currentProfile, + activeTab: activeTab } ) ); @@ -191,142 +87,17 @@ app.state.GroupMemberManagement = function() app.core.Controller.redirect( '#/group/' + $(this).val() + '/membermanagement' ); }); - $content.on( 'click', '[data-id="btn-update-role"]', function() - { - var newRole = $content.find( '[data-id="select-member-role"]' ).first().val(); - if ( memberToEdit.getRoleInGroup( group.getId() ) === newRole ) - { - return; - } - app.gui.PageLoader.show(); - app.core.Rpc.call( - 'Team', - 'changeMemberRole', - { - groupId : group.getId(), - memberId : memberToEdit.getId(), - newRole : newRole - }, - function( res ) - { - app.core.View.toastSuccess( _lc( 'MEMBER_ROLE_CHANGED' ) ); - if ( app.model.SessionUser.isOwnProfile( memberToEdit ) ) - { - app.core.Controller.redirect( '#/group/' + group.getId() ); - } - app.gui.PageLoader.hide(); - } - ); - }); - - $content.on( 'click', '[data-id="btn-update-contract"]', function() - { - var contractUnix = null; - - if ( $content.find( '[data-id="input-contract-moment"]' ).first().val().length ) - { - contractUnix = app.util.Helper.getMomentFromInputDate( $content.find( '[data-id="input-contract-moment"]' ).first() ).unix(); - } - - app.gui.PageLoader.show(); - app.core.Rpc.call( - 'Team', - 'changeMemberContract', - { - groupId : group.getId(), - memberId : memberToEdit.getId(), - contract : $content.find( '[data-id="input-contract"]' ).first().val(), - contractDate : contractUnix - }, - function( res ) - { - app.core.View.toastSuccess( _lc( 'MEMBER_CONTRACT_UPDATED' ) ); - app.gui.PageLoader.hide(); - if ( res && res.hasOwnProperty( 'updated_member' ) ) - { - memberToEdit.setGroupData( res.updated_member.teams_js ); - } - } - ); - }); - - $content.on( 'click', '[data-type="appointment-log-item"]', function() - { - app.core.Controller.redirect( '#/appointment/' + $(this).attr( 'data-appointment-id' ) ); - }); - - $content.on( 'click', '[data-id="btn-update-appointment-log"]', function() - { - app.core.View.setContentLoader( - $content.find( '[data-id="container-appointment-log"]' ).first() - ); - fnUpdateAppointmentLog(); - }); - - $content.on( 'click', '[data-id="btn-save-admin-note"]', function() - { - app.gui.PageLoader.show(); - app.core.Rpc.call( - 'Team', - 'updateAdminNote', - { - groupId : group.getId(), - profileId : memberToEdit.getId(), - adminNote : $content.find( '[data-id="textarea-admin-note"]' ).first().val() - }, - function() - { - app.core.View.toastSuccess( _lc( 'ADMIN_NOTE_SAVED' ) ); - app.gui.PageLoader.hide(); - } - ); - - $content.find( '[data-id=""]' ).first().val() - }); - $content.find( '[data-id="select-profil-id"]' ).first().change( function() { app.core.Controller.redirect( '#/group/' + group.getId() + '/membermanagement/' + $(this).val() ); }); - $content.find( '[data-id="btn-remove-member"]' ).first().click( function() + $content.on( 'click', '[data-type="member-link"]', function() { - if ( !memberToEdit ) - { - app.core.View.toastInfo( _lc( 'PLEASE_SELECT_MEMBER' ) ); - return; - } - - if ( 'trainer' == memberToEdit.getRoleInGroup( group.getId() ) ) - { - app.core.View.toastInfo( _lc( 'GROUP_OWNER_CANNOT_BE_REMOVED_FROM_GROUP' ) ); - return; - } - - app.core.View.confirm( - _lc( 'DO_YOU_REALLY_WANT_TO_REMOVE_THIS_MEMBER_FROM_TEAM' ), - function() - { - app.gui.PageLoader.show(); - app.core.Rpc.call( - 'Team', - 'removeMember', - { - groupId : group.getId(), - profileId : memberToEdit.getId() - }, - function( res ) - { - app.core.Controller.redirect( '#/group/' + group.getId() + '/members' ); - app.core.View.toastSuccess( _lc( 'MEMBER_REMOVED' ) ); - } - ); - }, - _lc( 'YES_REMOVE' ) - ); + var memberId = $(this).attr( 'data-member-id' ); + app.core.Controller.redirect( '#/group/' + group.getId() + '/membermanagement/' + memberId ); }); - fnRenderMemberForm( null ); if ( memberId ) { diff --git a/src/client/app/js/app/state/GroupMemberManagementMember.js b/src/client/app/js/app/state/GroupMemberManagementMember.js new file mode 100644 index 0000000..5cc2ddf --- /dev/null +++ b/src/client/app/js/app/state/GroupMemberManagementMember.js @@ -0,0 +1,348 @@ +/** + * (c) by aheadware.com + */ + +var app = app || {}; +app.state = app.state || {}; + +app.state.GroupMemberManagementMember = function() +{ + var state = app.core.StateManager.createState( 'group-member-management-member' ); + + state.onEnter = function( p ) + { + let $content = app.core.View.getContent(), + fnRenderMemberForm = null, + fnGetMemberById = null, + fnUpdateMemberById = null, + group = null, + adminNoteXhr = null, + playerHistoryXhr = null, + memberToEdit = null, + currentMember, + members = [], + groupId = p.groupId, + memberId = p.hasOwnProperty( 'memberId' ) ? p.memberId : null; + + fnRenderMemberForm = function( profile ) + { + console.log(profile); + //console.log(profile.getGroupData(groupId)); + // console.log(group); + //console.log(profile.getGroupData(groupId).status); + $memberContainer = $content.find( '[data-id="member-container"]' ).first(); + $memberContainer.html( + app.core.View.getTemplate( + 'group-member-management-member-body', + { + p : profile, + g : group, + } + ) + ); + }; + + fnUpdateAppointmentLog = function() + { + if ( !memberToEdit ) + { + return; + } + + if ( playerHistoryXhr ) + { + playerHistoryXhr.abort(); + } + + playerHistoryXhr = app.core.Rpc.call( + 'Team', + 'getProfileAppointmentLog', + { + groupId : group.getId(), + profileId : memberToEdit.getId(), + startDt : $content.find( '[data-id="input-appointment-log-from"]' ).first().val(), + endDt : $content.find( '[data-id="input-appointment-log-until"]' ).first().val() + }, + function( res) + { + $content.find( '[data-id="container-appointment-log"]' ).first().html( + app.core.View.getTemplate( + 'group-member-management-member-body-appointment-log', + { + logs : res.appointmentLog + } + ) + ); + }, + function() + { + // Do nothing. + } + ); + }; + + fnGetMemberById = function( profileId ) + { + var p = null; + + for ( var mi = 0; mi < members.length; mi++ ) + { + if ( members[ mi ].getId() == profileId ) + { + p = members[ mi ]; + break; + } + } + + return p; + }; + + fnUpdateMemberById = function( newMember ) + { + for ( var mi = 0; mi < members.length; mi++ ) + { + if ( members[ mi ].getId() == newMember.getId() ) + { + members[ mi ] = newMember; + break; + } + } + }; + + fnUpdateMemberToEdit = function( mmid ) + { + memberToEdit = fnGetMemberById( mmid ); + fnRenderMemberForm( memberToEdit ); + if ( memberToEdit ) + { + if ( adminNoteXhr ) + { + adminNoteXhr.abort(); + } + adminNoteXhr = app.core.Rpc.call( + 'Team', + 'getAdminNote', + { + groupId : group.getId(), + profileId : memberToEdit.getId() + }, + function( res ) + { + $content.find( '[data-id="admin-note"]' ).first().html( + app.core.View.getTemplate( + 'group-member-management-member-body-adminnote', + { + adminNote : res.adminNote ? res.adminNote : '' + } + ) + ); + }, + function() + { + // Do nothing + } + ); + } + fnUpdateAppointmentLog(); + }; + + app.gui.PageLoader.show(); + + app.core.Rpc.call( + 'Team', + 'getDetails', + { teamId : groupId, includeEmails : true, includeMembers: true }, + function( res ) + { + + var member = null, + $memberContainer = null, + emails = res.emails ? res.emails : []; + + group = new app.model.Group( res.team ); + + for ( var mi = 0; mi < res.members.length; mi++ ) + { + member = new app.model.Profile( res.members[ mi ] ); + for ( var ei = 0; ei < emails.length; ei++ ) + { + if ( member.getAccountId() == emails[ ei ].id ) + { + member.setEmail( emails[ ei ].email ); + break; + } + } + members.push( member ); + if ( member.getId() == app.model.SessionUser.getProfileId() ) + { + currentProfile = member; + } + } + + app.core.View.setContent( + app.core.View.getTemplate( + 'group-member-management-member', + { + members : members, + group : group, + groups : app.model.SessionUser.getAdminGroups(), + currentProfile : currentProfile + } ) + ); + + $content.find( '[data-id="select-group-id"]' ).first().change( function() + { + app.core.Controller.redirect( '#/group/' + $(this).val() + '/membermanagement' ); + }); + + $content.on( 'click', '[data-id="btn-update-role"]', function() + { + var newRole = $content.find( '[data-id="select-member-role"]' ).first().val(); + if ( memberToEdit.getRoleInGroup( group.getId() ) === newRole ) + { + return; + } + app.gui.PageLoader.show(); + app.core.Rpc.call( + 'Team', + 'changeMemberRole', + { + groupId : group.getId(), + memberId : memberToEdit.getId(), + newRole : newRole + }, + function( res ) + { + app.core.View.toastSuccess( _lc( 'MEMBER_ROLE_CHANGED' ) ); + if ( app.model.SessionUser.isOwnProfile( memberToEdit ) ) + { + app.core.Controller.redirect( '#/group/' + group.getId() ); + } + app.gui.PageLoader.hide(); + } + ); + }); + + $content.on( 'click', '[data-id="btn-update-contract"]', function() + { + var contractUnix = null; + + if ( $content.find( '[data-id="input-contract-moment"]' ).first().val().length ) + { + contractUnix = app.util.Helper.getMomentFromInputDate( $content.find( '[data-id="input-contract-moment"]' ).first() ).unix(); + } + + app.gui.PageLoader.show(); + app.core.Rpc.call( + 'Team', + 'changeMemberContract', + { + groupId : group.getId(), + memberId : memberToEdit.getId(), + contract : $content.find( '[data-id="input-contract"]' ).first().val(), + contractDate : contractUnix + }, + function( res ) + { + app.core.View.toastSuccess( _lc( 'MEMBER_CONTRACT_UPDATED' ) ); + app.gui.PageLoader.hide(); + if ( res && res.hasOwnProperty( 'updated_member' ) ) + { + memberToEdit.setGroupData( res.updated_member.teams_js ); + } + } + ); + }); + + $content.on( 'click', '[data-type="appointment-log-item"]', function() + { + app.core.Controller.redirect( '#/appointment/' + $(this).attr( 'data-appointment-id' ) ); + }); + + $content.on( 'click', '[data-id="btn-update-appointment-log"]', function() + { + app.core.View.setContentLoader( + $content.find( '[data-id="container-appointment-log"]' ).first() + ); + fnUpdateAppointmentLog(); + }); + + $content.on( 'click', '[data-id="btn-save-admin-note"]', function() + { + app.gui.PageLoader.show(); + app.core.Rpc.call( + 'Team', + 'updateAdminNote', + { + groupId : group.getId(), + profileId : memberToEdit.getId(), + adminNote : $content.find( '[data-id="textarea-admin-note"]' ).first().val() + }, + function() + { + app.core.View.toastSuccess( _lc( 'ADMIN_NOTE_SAVED' ) ); + app.gui.PageLoader.hide(); + } + ); + + $content.find( '[data-id=""]' ).first().val() + }); + + $content.find( '[data-id="select-profil-id"]' ).first().change( function() + { + app.core.Controller.redirect( '#/group/' + group.getId() + '/membermanagement/' + $(this).val() ); + }); + + $content.find( '[data-id="btn-remove-member"]' ).first().click( function() + { + if ( !memberToEdit ) + { + app.core.View.toastInfo( _lc( 'PLEASE_SELECT_MEMBER' ) ); + return; + } + + if ( 'trainer' == memberToEdit.getRoleInGroup( group.getId() ) ) + { + app.core.View.toastInfo( _lc( 'GROUP_OWNER_CANNOT_BE_REMOVED_FROM_GROUP' ) ); + return; + } + + app.core.View.confirm( + _lc( 'DO_YOU_REALLY_WANT_TO_REMOVE_THIS_MEMBER_FROM_TEAM' ), + function() + { + app.gui.PageLoader.show(); + app.core.Rpc.call( + 'Team', + 'removeMember', + { + groupId : group.getId(), + profileId : memberToEdit.getId() + }, + function( res ) + { + app.core.Controller.redirect( '#/group/' + group.getId() + '/members' ); + app.core.View.toastSuccess( _lc( 'MEMBER_REMOVED' ) ); + } + ); + }, + _lc( 'YES_REMOVE' ) + ); + }); + + fnRenderMemberForm( null ); + + if ( memberId ) + { + $content.find( '[data-id="select-profil-id"]' ).first().val( memberId ); + $content.find( '[data-id="select-profil-id"]' ).first().trigger( 'change' ); + fnUpdateMemberToEdit( memberId ) + } + + app.gui.PageLoader.hide(); + } + ); + }; + + return state; +}; \ No newline at end of file diff --git a/src/client/app/tmpl/group-member-management-member-body-adminnote.html b/src/client/app/tmpl/group-member-management-member-body-adminnote.html new file mode 100644 index 0000000..ad329bb --- /dev/null +++ b/src/client/app/tmpl/group-member-management-member-body-adminnote.html @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/src/client/app/tmpl/group-member-management-member-body-appointment-log.html b/src/client/app/tmpl/group-member-management-member-body-appointment-log.html new file mode 100644 index 0000000..e9f06fe --- /dev/null +++ b/src/client/app/tmpl/group-member-management-member-body-appointment-log.html @@ -0,0 +1,62 @@ +
+ + + + + + + + + + + <% if ( logs && logs.length > 0 ) { %> + + <% for ( var li = 0; li < logs.length; li++ ) { %> + + + + + + + + + <% } %> + + <% } else { %> + + + + + + <% } %> + +
+ <%= _lc( 'COURSE' ) %> + + <%= _lc( 'STARTTIME' ) %> + + <%= _lc( 'ENDTIME' ) %> + +   +
+ <%= logs[ li ].subject %>
+ + <%= _lc( 'ATTENDANCE' ) %> + <% if ( 'accepted' === logs[ li ].status ) { %> + (<%= _lc( 'WITH_ACCEPTED_FEEDBACK' ) %>) + <% } else { %> + (<%= _lc( 'WITHOUT_ACCEPTED_FEEDBACK' ) %>) + <% } %> + +
+ <%= app.util.Helper.getMomentFromUTCTime( logs[ li ].start_dt ).format( 'DD.MM.YYYY [-] HH:mm' ) %> + + <%= app.util.Helper.getMomentFromUTCTime( logs[ li ].end_dt ).format( 'DD.MM.YYYY [-] HH:mm' ) %> + + +
+ <%= _lc( 'NO_LOG_ENTRIES_FOUND' ) %> +
+
\ No newline at end of file diff --git a/src/client/app/tmpl/group-member-management-member-body.html b/src/client/app/tmpl/group-member-management-member-body.html new file mode 100644 index 0000000..522d042 --- /dev/null +++ b/src/client/app/tmpl/group-member-management-member-body.html @@ -0,0 +1,283 @@ +<% if ( p ) { %> + +
+
+ +
+
+
+
+
+ <%=raw p.getName() %> +
+ <% if ( p.isInGroupCategory( 'DOGSCHOOL' ) ) { %> +
+ <%= _lc( 'PROFILE_DOGNAME' ) %> +
+
+ <%= p.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) ? p.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) : '---' %> +
+ <% } %> +
+ <%= _lc( 'PROFILE_STATUS' ) %> +
+
+ <%= p.getStatus() %> +
+
+ <%= _lc( 'ADDRESS' ) %> +
+
+ <%= p.getStreet() ? p.getStreet() : '---' %>
+ + <%= p.getZipCode() ? p.getZipCode() : '' %> <%= p.getCity() ? p.getCity() : '' %> +
+
+ <%= _lc( 'PHONE' ) %> +
+
+ <% if ( p.getMobile() ) { %> + <%= p.getMobile() %> + <% } else { %> + --- + <% } %> +
+ <% if ( p.getPhone() ) { %> + <%= p.getPhone() %> + <% } else { %> + --- + <% } %> +
+
+ <%= _lc( 'EMAIL' ) %> +
+
+ <% if ( p.getEmail() ) { %> + <%= p.getEmail() %> + <% } else { %> + --- + <% } %> +
+
+ <%= _lc( 'BIRTHDAY' ) %> +
+
+ <%= ( null != p.getMomentBirthday() ) ? p.getMomentBirthday().format( 'DD.MM.YYYY' ) : '---' %> +
+
+ <%= _lc( 'JOIN_DT' ) %> +
+
+ <% var momentJoin = p.getMomentJoinInGroup( g.getId() ); %> + <%= ( null != momentJoin ) ? momentJoin.format( 'DD.MM.YYYY' ) : '---' %> +
+
+
+
+
+
+ <%= _lc( 'CHANGE_ROLE' ) %> +
+
+
+
+ +
+
+ +
+ <% if ( 'trainer' === p.getRoleInGroup( g.getId() ) ) { %> +
+ <%= _lc( 'CANNOT_CHANGE_GROUP_OWNER_ROLE_INFO' ) %> +
+ <% } %> +
+
+
+
+ <%= _lc( 'GROUP_MANAGEMENT_MEMBERS_CHANGE_STATUS' ) %> +
+
+
+
+ +
+
+ +
+ <% if ( 'trainer' === p.getRoleInGroup( g.getId() ) ) { %> +
+ <%= _lc( 'CANNOT_CHANGE_GROUP_OWNER_ROLE_INFO' ) %> +
+ <% } %> +
+
+
+
+ <%= _lc( 'ASSIGNED_MEMBER_GROUP_CATEGORIES' ) %> +
+
+
+
+ <% var cgs = g.getCourseCategoriesForProfile( p ); %> + <% for ( var cgsi = 0; cgsi < cgs.length; cgsi++ ) { %> + <% if ( cgsi > 0 ) { %> + <%= ' ' %> + <% } %> + <%= cgs[ cgsi ].name %> + <% } %> +
+
+ <%= _lc( 'ASSIGNED_MEMBER_CATEOGORY_INFO' ) %> +
+ +
+
+
+
+ <%= _lc( 'MEMBER_CONTRACT' ) %> +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+
+
+
+ <%= _lc( 'APPOINTMENT_LOG' ) %> +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+
+
+
+ +
+
+
+
+
+ <%= _lc( 'ADMIN_NOTES' ) %> - <%= _lc( 'ADMIN_NOTES_INFO' ) %> +
+
+
+
+ +
+
+
+
+ +
+
+ +<% } else { %> + +
+
+ <%= _lc( 'SELECT_MEMBER_TO_EDIT' ) %> +
+
+ +<% } %> \ No newline at end of file diff --git a/src/client/app/tmpl/group-member-management-member.html b/src/client/app/tmpl/group-member-management-member.html new file mode 100644 index 0000000..ce9b383 --- /dev/null +++ b/src/client/app/tmpl/group-member-management-member.html @@ -0,0 +1,20 @@ +

 <%= _lc( 'GROUP_EDIT_MEMBERS' ) %>

+
+
+
+
+
+ +
+ +
+
+
\ No newline at end of file diff --git a/src/client/app/tmpl/group-member-management-row.html b/src/client/app/tmpl/group-member-management-row.html new file mode 100644 index 0000000..fad864c --- /dev/null +++ b/src/client/app/tmpl/group-member-management-row.html @@ -0,0 +1,34 @@ + + + + + +
+ <% if ( m.isOwnerOfGroup( g.getId() ) ) { %> + <%= _lc( 'GROUP_OWNER' ) %> + <% } else if ( m.isAdminOfGroup( g.getId() ) ) { %> + <%= _lc( 'GROUP_ADMIN' ) %> + <% } %> + <% if ( m.isOwn() ) { %> + <%=raw m.getName( g.getId() ) %> + <% } else { %> + <%=raw m.getName( g.getId() ) %> + <% } %> +
+
+ + <% if ( g.getCategory() === "DOGSCHOOL" && !m.isAnonymousInGroup( g.getId() ) ) { %> + <%= m.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) ? m.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) : '---' %> + <% } %> + +
+ + + <% if ( m.isAccessible() ) { %> + + <% } else { %> +   + <% } %> + + \ No newline at end of file diff --git a/src/client/app/tmpl/group-member-management.html b/src/client/app/tmpl/group-member-management.html index 672eefc..674daaf 100644 --- a/src/client/app/tmpl/group-member-management.html +++ b/src/client/app/tmpl/group-member-management.html @@ -1,4 +1,4 @@ -

 <%= _lc( 'GROUP_EDIT_MEMBERS' ) %>

+

 <%= _lc( 'BTN_BACK_TO_HOME' ) %>

@@ -17,33 +17,69 @@ <% } %>
-
- - + + +
+
+ +
+
+ + + <% for ( var mi = 0; mi < membersInactive.length; mi++ ) { %> + <%=raw app.core.View.getTemplate( 'group-member-management-row', { m : membersInactive[ mi ], g : group } ) %> + <% } %> + +
+
+
+ +
+
+ + + <% for ( var mi = 0; mi < membersNotApproved.length; mi++ ) { %> + <%=raw app.core.View.getTemplate( 'group-member-management-row', { m : membersNotApproved[ mi ], g : group } ) %> + <% } %> + +
-
-
diff --git a/src/client/app/tmpl/group-members.html b/src/client/app/tmpl/group-members.html index 8385270..6858590 100644 --- a/src/client/app/tmpl/group-members.html +++ b/src/client/app/tmpl/group-members.html @@ -34,12 +34,6 @@