Pārlūkot izejas kodu

delete account

beta
Daniel pirms 1 gada
vecāks
revīzija
02af8cfe64
9 mainītis faili ar 359 papildinājumiem un 353 dzēšanām
  1. +2
    -1
      src/client/app/js/app/core/Dict.js
  2. +6
    -0
      src/client/app/js/app/state/GroupMemberManagement.js
  3. +6
    -0
      src/client/app/js/app/state/GroupMemberManagementMember.js
  4. +277
    -278
      src/client/app/tmpl/group-member-management-member-body.html
  5. +18
    -0
      src/client/app/tmpl/group-member-management.html
  6. +20
    -69
      src/server/server/control/TB_Server_Control_Account.php
  7. +18
    -2
      src/server/server/control/TB_Server_Control_Team.php
  8. +10
    -2
      src/server/shared/ent/teamdata/TB_Shared_Ent_TeamData_Appointment.php
  9. +2
    -1
      src/server/shared/ent/teamdata/TB_Shared_Ent_TeamData_Profile.php

+ 2
- 1
src/client/app/js/app/core/Dict.js Parādīt failu

@@ -433,7 +433,7 @@ app.core.Dict = {
"LOGIN_FIRSTNAME" : "Vorname",
"LOGIN_LASTNAME" : "Nachname",
"DELETION_NOT_POSSIBLE_INFO_HEADLINE" : "Informationen zur Löschung deines Profils",
"DELETION_NOT_POSSIBLE_INFO" : "Du hast noch <strong>{0}</strong> Teilnahme(n) für zukünftige Termine. Bitte sage alle Teilnahmen ab, bevor Du Deinen Account löschen kannst.",
"DELETION_NOT_POSSIBLE_INFO" : "Du hast noch <strong>{0}</strong> Teilnahme(n) für zukünftige Termine, bei denen die Absagefrist noch nicht verstrichen ist. Bitte sage alle Teilnahmen ab, bevor Du Deinen Account löschen kannst.",
"DELETION_GROUP_OWNER_INFO_HEADLINE" : "Informationen zur Löschung deines Profils",
"DELETION_GROUP_OWNER_INFO" : "Bitte schreibe eine Mail an support@probuddy.de um die Löschung deines Profile bei Probuddy zu veranlassen. Da du Gruppeninhaber mindestens einer Gruppe bei ProBuddy bist, wird diese Gruppe/Gruppen automatisch mitgelöscht.",
"BTN_BACK" : "Zurück",
@@ -574,6 +574,7 @@ app.core.Dict = {
"GROUP_MANAGEMENT_MEMBERS_ACTIVE" : "Aktiv",
"GROUP_MANAGEMENT_MEMBERS_INACTIVE" : "Inaktiv",
"GROUP_MANAGEMENT_MEMBERS_NOT_APPROVED" : "Unbestätigt",
"GROUP_MANAGEMENT_MEMBERS_DELETED" : "Gelöscht",
"GROUP_MANAGEMENT_MEMBERS_CHANGE_STATUS" : "Gruppenstatus ändern",
"GROUP_MANAGEMENT_MEMBERS_CHANGE_STATUS_INFO" : "Du kannst deinen eigenen Gruppenstatus nicht verändern.",
"BTN_GROUP_MANAGEMENT_MEMBERS_SAVE_STATUS" : "Status speichern",


+ 6
- 0
src/client/app/js/app/state/GroupMemberManagement.js Parādīt failu

@@ -19,6 +19,7 @@ app.state.GroupMemberManagement = function()
membersActive = [],
membersInactive = [],
membersNotApproved = [],
membersDeleted = [],
groupId = p.groupId,
memberId = p.hasOwnProperty( 'memberId' ) ? p.memberId : null,
activeTab = 'active';
@@ -66,6 +67,10 @@ app.state.GroupMemberManagement = function()
case 'not_approved':
membersNotApproved.push(member);
break;
case 'deleted':
membersDeleted.push(member);
console.log(member.isAccessible())
break;
}
}
@@ -77,6 +82,7 @@ app.state.GroupMemberManagement = function()
membersActive: membersActive,
membersInactive: membersInactive,
membersNotApproved: membersNotApproved,
membersDeleted: membersDeleted,
group : group,
groups : app.model.SessionUser.getAdminGroups(),
currentProfile : currentProfile,


+ 6
- 0
src/client/app/js/app/state/GroupMemberManagementMember.js Parādīt failu

@@ -27,6 +27,11 @@ app.state.GroupMemberManagementMember = function()
fnRenderMemberForm = function( profile )
{
let statusDeleted = false;
if (profile) {
statusDeleted = profile.getGroupData(groupId).status === 'deleted';
}
$memberContainer = $content.find( '[data-id="member-container"]' ).first();
$memberContainer.html(
app.core.View.getTemplate(
@@ -34,6 +39,7 @@ app.state.GroupMemberManagementMember = function()
{
p : profile,
g : group,
statusDeleted: statusDeleted
}
)
);


+ 277
- 278
src/client/app/tmpl/group-member-management-member-body.html Parādīt failu

@@ -1,289 +1,288 @@
<% if ( p ) { %>
<% var currentUser = app.model.SessionUser.getUserProfile(); %>
<div class="row">
<div class="col text-center">
<img class="img-fluid rounded-circle profile-image-big img-thumbnail"
style="margin-bottom: 12px; padding: 6px"
src="<%= p.getProfileImg() %>" />
</div>
</div>
<div class="row">
<div class="col text-center">
<div style="font-size: 1.4rem">
<%=raw p.getName() %>
</div>
<% if ( p.isInGroupCategory( 'DOGSCHOOL' ) ) { %>
<div class="profile-header">
<%= _lc( 'PROFILE_DOGNAME' ) %>
</div>
<div class="profile-content">
<%= p.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) ? p.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) : '---' %>
</div>
<% } %>
<div class="profile-header">
<%= _lc( 'PROFILE_STATUS' ) %>
</div>
<div class="profile-content">
<%= p.getStatus() %>
<% var currentUser = app.model.SessionUser.getUserProfile(); %>
<div class="row">
<div class="col text-center">
<img class="img-fluid rounded-circle profile-image-big img-thumbnail"
style="margin-bottom: 12px; padding: 6px"
src="<%= p.getProfileImg() %>" />
</div>
<div class="profile-header">
<%= _lc( 'ADDRESS' ) %>
</div>
<div class="profile-content">
<%= p.getStreet() ? p.getStreet() : '---' %><br />
<%= p.getZipCode() ? p.getZipCode() : '' %>&nbsp;<%= p.getCity() ? p.getCity() : '' %>
</div>
<div class="profile-header">
<%= _lc( 'PHONE' ) %>
</div>
<div class="profile-content">
<% if ( p.getMobile() ) { %>
<a href="tel:<%= p.getMobile() %>"><%= p.getMobile() %></a>
<% } else { %>
---
<% } %>
<br />
<% if ( p.getPhone() ) { %>
<a href="tel:<%= p.getPhone() %>"><%= p.getPhone() %></a>
<% } else { %>
---
</div>
<div class="row">
<div class="col text-center">
<div style="font-size: 1.4rem">
<%=raw p.getName() %>
</div>
<% if ( p.isInGroupCategory( 'DOGSCHOOL' ) ) { %>
<div class="profile-header">
<%= _lc( 'PROFILE_DOGNAME' ) %>
</div>
<div class="profile-content">
<%= p.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) ? p.getCustomGroupProperty( 'DOGSCHOOL', 'dogname' ) : '---' %>
</div>
<% } %>
</div>
<div class="profile-header">
<%= _lc( 'EMAIL' ) %>
</div>
<div class="profile-content">
<% if ( p.getEmail() ) { %>
<a href="mailto:<%= p.getEmail() %>"><%= p.getEmail() %></a>
<% if ( p.getEmailValidated() === true ) { %>
<div> ( <i class="far fa-check-circle text-success"></i> <%= _lc( 'GROUP_MANAGEMENT_MEMBERS_EMAIL_VALIDATED' ) %> )</div>
<div class="profile-header">
<%= _lc( 'PROFILE_STATUS' ) %>
</div>
<div class="profile-content">
<%= p.getStatus() %>
</div>
<div class="profile-header">
<%= _lc( 'ADDRESS' ) %>
</div>
<div class="profile-content">
<%= p.getStreet() ? p.getStreet() : '---' %><br />
<%= p.getZipCode() ? p.getZipCode() : '' %>&nbsp;<%= p.getCity() ? p.getCity() : '' %>
</div>
<div class="profile-header">
<%= _lc( 'PHONE' ) %>
</div>
<div class="profile-content">
<% if ( p.getMobile() ) { %>
<a href="tel:<%= p.getMobile() %>"><%= p.getMobile() %></a>
<% } else { %>
---
<% } %>
<br />
<% if ( p.getPhone() ) { %>
<a href="tel:<%= p.getPhone() %>"><%= p.getPhone() %></a>
<% } else { %>
---
<% } %>
</div>
<div class="profile-header">
<%= _lc( 'EMAIL' ) %>
</div>
<div class="profile-content">
<% if ( p.getEmail() ) { %>
<a href="mailto:<%= p.getEmail() %>"><%= p.getEmail() %></a>
<% if ( p.getEmailValidated() === true ) { %>
<div> ( <i class="far fa-check-circle text-success"></i> <%= _lc( 'GROUP_MANAGEMENT_MEMBERS_EMAIL_VALIDATED' ) %> )</div>
<% } else { %>
<div> ( <i class="far fa-window-close text-danger"></i> <%= _lc( 'GROUP_MANAGEMENT_MEMBERS_EMAIL_NOT_VALIDATED' ) %> )</div>
<% } %>
<% } else { %>
<div> ( <i class="far fa-window-close text-danger"></i> <%= _lc( 'GROUP_MANAGEMENT_MEMBERS_EMAIL_NOT_VALIDATED' ) %> )</div>
---
<% } %>
<% } else { %>
---
<% } %>
</div>
<div class="profile-header">
<%= _lc( 'BIRTHDAY' ) %>
</div>
<div class="profile-content">
<%= ( null != p.getMomentBirthday() ) ? p.getMomentBirthday().format( 'DD.MM.YYYY' ) : '---' %>
</div>
<div class="profile-header">
<%= _lc( 'JOIN_DT' ) %>
</div>
<div class="profile-content">
<% var momentJoin = p.getMomentJoinInGroup( g.getId() ); %>
<%= ( null != momentJoin ) ? momentJoin.format( 'DD.MM.YYYY' ) : '---' %>
</div>
<div class="profile-header">
<%= _lc( 'BIRTHDAY' ) %>
</div>
<div class="profile-content">
<%= ( null != p.getMomentBirthday() ) ? p.getMomentBirthday().format( 'DD.MM.YYYY' ) : '---' %>
</div>
<div class="profile-header">
<%= _lc( 'JOIN_DT' ) %>
</div>
<div class="profile-content">
<% var momentJoin = p.getMomentJoinInGroup( g.getId() ); %>
<%= ( null != momentJoin ) ? momentJoin.format( 'DD.MM.YYYY' ) : '---' %>
</div>
</div>
</div>
</div>
<hr />
<div class="row">
<div class="col">
<strong><%= _lc( 'CHANGE_ROLE' ) %></strong>
</div>
</div>
<div class="row">
<div class="col-6">
<select class="form-control form-control-sm"
<%= ( 'trainer' === p.getRoleInGroup( g.getId() ) ) ? 'disabled="disabled"' : '' %>
data-id="select-member-role">
<option value="player" <%= ( 'player' === p.getRoleInGroup( g.getId() ) ) ? 'selected="selected"' : '' %> >
<%= _lc( 'GROUP_MEMBER' ) %>
</option>
<option value="cotrainer" <%= ( 'cotrainer' === p.getRoleInGroup( g.getId() ) ) ? 'selected="selected"' : '' %> >
<%= _lc( 'GROUP_ADMIN' ) %>
</option>
<% if ( 'trainer' === p.getRoleInGroup( g.getId() ) ) { %>
<option value="trainer" <%= ( 'trainer' === p.getRoleInGroup( g.getId() ) ) ? 'selected="selected"' : '' %> >
<%= _lc( 'GROUP_OWNER' ) %>
</option>
<% } %>
</select>
</div>
<div class="col">
<button class="btn btn-primary btn-sm"
data-id="btn-update-role">
<%= _lc( 'BTN_SAVE_NEW_ROLE' ) %>
</button>
</div>
<% if ( 'trainer' === p.getRoleInGroup( g.getId() ) ) { %>
<div class="col-sm-12">
<small><i><%= _lc( 'CANNOT_CHANGE_GROUP_OWNER_ROLE_INFO' ) %></i></small>
</div>
<% } %>
</div>
<hr />
<div class="row">
<div class="col">
<strong><%= _lc( 'GROUP_MANAGEMENT_MEMBERS_CHANGE_STATUS' ) %></strong>
</div>
</div>
<div class="row">
<div class="col-6">
<select class="form-control form-control-sm" data-id="select-member-status"
<%= ( p.getId() === currentUser.getId() ) ? 'disabled="disabled"' : '' %>
>
<option value="active" <%= ( 'active' === p.getGroupData( g.getId() ).status ) ? 'selected="selected"' : '' %> >
<%= _lc( 'GROUP_MANAGEMENT_MEMBERS_ACTIVE' ) %>
</option>
<option value="inactive" <%= ( 'inactive' === p.getGroupData( g.getId() ).status ) ? 'selected="selected"' : '' %> >
<%= _lc( 'GROUP_MANAGEMENT_MEMBERS_INACTIVE' ) %>
</option>
<option value="not_approved" <%= ( 'not_approved' === p.getGroupData( g.getId() ).status ) ? 'selected="selected"' : '' %> >
<%= _lc( 'GROUP_MANAGEMENT_MEMBERS_NOT_APPROVED' ) %>
</option>
</select>
</div>
<div class="col">
<button class="btn btn-primary btn-sm" data-id="btn-update-status">
<%= _lc( 'BTN_GROUP_MANAGEMENT_MEMBERS_SAVE_STATUS' ) %>
</button>
</div>
<% if ( p.getId() === currentUser.getId() ) { %>
<div class="col-sm-12">
<small><i><%= _lc( 'GROUP_MANAGEMENT_MEMBERS_CHANGE_STATUS_INFO' ) %></i></small>
</div>
<% } %>
</div>
<hr />
<div class="row">
<div class="col">
<strong><%= _lc( 'ASSIGNED_MEMBER_GROUP_CATEGORIES' ) %></strong>
</div>
</div>
<div class="row">
<div class="col">
<% var cgs = g.getCourseCategoriesForProfile( p ); %>
<% for ( var cgsi = 0; cgsi < cgs.length; cgsi++ ) { %>
<% if ( cgsi > 0 ) { %>
<%= ' ' %>
<% } %>
<span class="badge badge-pill badge-primary"><%= cgs[ cgsi ].name %></span>
<hr />
<% if ( statusDeleted === false ) { %>
<div class="row">
<div class="col">
<strong><%= _lc( 'CHANGE_ROLE' ) %></strong>
</div>
</div>
<div class="row">
<div class="col-6">
<select class="form-control form-control-sm"
<%= ( 'trainer' === p.getRoleInGroup( g.getId() ) ) ? 'disabled="disabled"' : '' %>
data-id="select-member-role">
<option value="player" <%= ( 'player' === p.getRoleInGroup( g.getId() ) ) ? 'selected="selected"' : '' %> >
<%= _lc( 'GROUP_MEMBER' ) %>
</option>
<option value="cotrainer" <%= ( 'cotrainer' === p.getRoleInGroup( g.getId() ) ) ? 'selected="selected"' : '' %> >
<%= _lc( 'GROUP_ADMIN' ) %>
</option>
<% if ( 'trainer' === p.getRoleInGroup( g.getId() ) ) { %>
<option value="trainer" <%= ( 'trainer' === p.getRoleInGroup( g.getId() ) ) ? 'selected="selected"' : '' %> >
<%= _lc( 'GROUP_OWNER' ) %>
</option>
<% } %>
</select>
</div>
<div class="col">
<button class="btn btn-primary btn-sm"
data-id="btn-update-role">
<%= _lc( 'BTN_SAVE_NEW_ROLE' ) %>
</button>
</div>
<% if ( 'trainer' === p.getRoleInGroup( g.getId() ) ) { %>
<div class="col-sm-12">
<small><i><%= _lc( 'CANNOT_CHANGE_GROUP_OWNER_ROLE_INFO' ) %></i></small>
</div>
<% } %>
</div>
<hr />
<div class="row">
<div class="col">
<strong><%= _lc( 'GROUP_MANAGEMENT_MEMBERS_CHANGE_STATUS' ) %></strong>
</div>
</div>
<div class="row">
<div class="col-6">
<select class="form-control form-control-sm" data-id="select-member-status"
<%= ( p.getId() === currentUser.getId() ) ? 'disabled="disabled"' : '' %>
>
<option value="active" <%= ( 'active' === p.getGroupData( g.getId() ).status ) ? 'selected="selected"' : '' %> >
<%= _lc( 'GROUP_MANAGEMENT_MEMBERS_ACTIVE' ) %>
</option>
<option value="inactive" <%= ( 'inactive' === p.getGroupData( g.getId() ).status ) ? 'selected="selected"' : '' %> >
<%= _lc( 'GROUP_MANAGEMENT_MEMBERS_INACTIVE' ) %>
</option>
<option value="not_approved" <%= ( 'not_approved' === p.getGroupData( g.getId() ).status ) ? 'selected="selected"' : '' %> >
<%= _lc( 'GROUP_MANAGEMENT_MEMBERS_NOT_APPROVED' ) %>
</option>
</select>
</div>
<div class="col">
<button class="btn btn-primary btn-sm" data-id="btn-update-status">
<%= _lc( 'BTN_GROUP_MANAGEMENT_MEMBERS_SAVE_STATUS' ) %>
</button>
</div>
<% if ( p.getId() === currentUser.getId() ) { %>
<div class="col-sm-12">
<small><i><%= _lc( 'GROUP_MANAGEMENT_MEMBERS_CHANGE_STATUS_INFO' ) %></i></small>
</div>
<% } %>
</div>
<hr />
<div class="row">
<div class="col">
<strong><%= _lc( 'ASSIGNED_MEMBER_GROUP_CATEGORIES' ) %></strong>
</div>
</div>
<div class="row">
<div class="col">
<% var cgs = g.getCourseCategoriesForProfile( p ); %>
<% for ( var cgsi = 0; cgsi < cgs.length; cgsi++ ) { %>
<% if ( cgsi > 0 ) { %>
<%= ' ' %>
<% } %>
<span class="badge badge-pill badge-primary"><%= cgs[ cgsi ].name %></span>
<% } %>
</div>
<div class="col-sm-12">
<small><i><%= _lc( 'ASSIGNED_MEMBER_CATEOGORY_INFO' ) %></i></small>
</div>
<div class="col">
<a href="#/course/categories/<%= g.getId() %>"
class="btn btn-primary btn-sm">
<%= _lc( 'BTN_NAVIGATE_TO_CATEGORY_MANAGEMENT' ) %>
</a>
</div>
</div>
<hr />
<div class="row">
<div class="col">
<strong><%= _lc( 'MEMBER_CONTRACT' ) %></strong>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="form-group" style="margin-bottom:0;">
<label for="appointment-log-until">
<%= _lc( 'CONTRACT_NAME' ) %>
</label>
<input type="text"
class="form-control"
maxlength="128"
value="<%= p.getContractInGroup( g.getId() ) ? p.getContractInGroup( g.getId() ) : '' %>"
data-id="input-contract" />
</div>
</div>
<div class="col-6">
<div class="form-group" style="margin-bottom:0;">
<label for="contract-date">
<%= _lc( 'CONTRACT_DATE' ) %>
</label>
<input type="date"
id="contract-date"
value="<%= p.getContractMomentInGroup( g.getId() ) ? p.getContractMomentInGroup( g.getId() ).format( 'YYYY-MM-DD' ) : '' %>"
data-id="input-contract-moment"
class="form-control" />
</div>
</div>
<div class="col">
<button class="btn btn-primary btn-sm"
data-id="btn-update-contract">
<%= _lc( 'BTN_SAVE_MEMBER_CONTRACT' ) %>
</button>
</div>
</div>
<hr />
<div class="row">
<div class="col">
<strong><%= _lc( 'APPOINTMENT_LOG' ) %></strong>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-12">
<div class="form-group" style="margin-bottom:0;">
<label for="appointment-log-from">
<%= _lc( 'FROM' ) %>
</label>
<input type="date"
id="appointment-log-from"
value="<%= p.getContractMomentInGroup( g.getId() ) ? p.getContractMomentInGroup( g.getId() ).format( 'YYYY-MM-DD' ) : moment().subtract( 30, 'days' ).format( 'YYYY-MM-DD' ) %>"
data-id="input-appointment-log-from"
class="form-control" />
</div>
</div>
<div class="col-lg-6 col-md-12">
<div class="form-group" style="margin-bottom:0;">
<label for="appointment-log-until">
<%= _lc( 'UNTIL' ) %>
</label>
<input type="date"
id="appointment-log-until"
value="<%= moment().format( 'YYYY-MM-DD' ) %>"
data-id="input-appointment-log-until"
class="form-control" />
</div>
</div>
<div class="col">
<button class="btn btn-primary btn-sm"
data-id="btn-update-appointment-log">
<%= _lc( 'BTN_UPDATE_APPOINTMENT_LOG' ) %>
</button>
</div>
</div>
<div class="row">
<div class="col"
data-id="container-appointment-log">
<i class="fas fa-spinner fa-spin"></i>
</div>
</div>
<hr />
<div class="row">
<div class="col">
<strong><%= _lc( 'ADMIN_NOTES' ) %></strong><small> - <%= _lc( 'ADMIN_NOTES_INFO' ) %></small>
</div>
</div>
<div class="row">
<div class="col"
data-id="admin-note">
<i class="fas fa-spinner fa-spin"></i>
</div>
</div>
<div class="row">
<div class="col">
<button class="btn btn-primary btn-sm"
data-id="btn-save-admin-note">
<%= _lc( 'BTN_SAVE_ADMIN_NOTE' ) %>
</button>
</div>
</div>
<% } %>
</div>
<div class="col-sm-12">
<small><i><%= _lc( 'ASSIGNED_MEMBER_CATEOGORY_INFO' ) %></i></small>
</div>
<div class="col">
<a href="#/course/categories/<%= g.getId() %>"
class="btn btn-primary btn-sm">
<%= _lc( 'BTN_NAVIGATE_TO_CATEGORY_MANAGEMENT' ) %>
</a>
</div>
</div>
<hr />
<div class="row">
<div class="col">
<strong><%= _lc( 'MEMBER_CONTRACT' ) %></strong>
</div>
</div>
<div class="row">
<div class="col-6">
<div class="form-group" style="margin-bottom:0;">
<label for="appointment-log-until">
<%= _lc( 'CONTRACT_NAME' ) %>
</label>
<input type="text"
class="form-control"
maxlength="128"
value="<%= p.getContractInGroup( g.getId() ) ? p.getContractInGroup( g.getId() ) : '' %>"
data-id="input-contract" />
</div>
</div>
<div class="col-6">
<div class="form-group" style="margin-bottom:0;">
<label for="contract-date">
<%= _lc( 'CONTRACT_DATE' ) %>
</label>
<input type="date"
id="contract-date"
value="<%= p.getContractMomentInGroup( g.getId() ) ? p.getContractMomentInGroup( g.getId() ).format( 'YYYY-MM-DD' ) : '' %>"
data-id="input-contract-moment"
class="form-control" />
</div>
</div>
<div class="col">
<button class="btn btn-primary btn-sm"
data-id="btn-update-contract">
<%= _lc( 'BTN_SAVE_MEMBER_CONTRACT' ) %>
</button>
</div>
</div>
<hr />
<div class="row">
<div class="col">
<strong><%= _lc( 'APPOINTMENT_LOG' ) %></strong>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-md-12">
<div class="form-group" style="margin-bottom:0;">
<label for="appointment-log-from">
<%= _lc( 'FROM' ) %>
</label>
<input type="date"
id="appointment-log-from"
value="<%= p.getContractMomentInGroup( g.getId() ) ? p.getContractMomentInGroup( g.getId() ).format( 'YYYY-MM-DD' ) : moment().subtract( 30, 'days' ).format( 'YYYY-MM-DD' ) %>"
data-id="input-appointment-log-from"
class="form-control" />
</div>
</div>
<div class="col-lg-6 col-md-12">
<div class="form-group" style="margin-bottom:0;">
<label for="appointment-log-until">
<%= _lc( 'UNTIL' ) %>
</label>
<input type="date"
id="appointment-log-until"
value="<%= moment().format( 'YYYY-MM-DD' ) %>"
data-id="input-appointment-log-until"
class="form-control" />
</div>
</div>
<div class="col">
<button class="btn btn-primary btn-sm"
data-id="btn-update-appointment-log">
<%= _lc( 'BTN_UPDATE_APPOINTMENT_LOG' ) %>
</button>
</div>
</div>
<div class="row">
<div class="col"
data-id="container-appointment-log">
<i class="fas fa-spinner fa-spin"></i>
</div>
</div>
<hr />
<div class="row">
<div class="col">
<strong><%= _lc( 'ADMIN_NOTES' ) %></strong><small> - <%= _lc( 'ADMIN_NOTES_INFO' ) %></small>
</div>
</div>
<div class="row">
<div class="col"
data-id="admin-note">
<i class="fas fa-spinner fa-spin"></i>
</div>
</div>
<div class="row">
<div class="col">
<button class="btn btn-primary btn-sm"
data-id="btn-save-admin-note">
<%= _lc( 'BTN_SAVE_ADMIN_NOTE' ) %>
</button>
</div>
</div>
<% } else { %>
<div class="row">
<div class="col">
<%= _lc( 'SELECT_MEMBER_TO_EDIT' ) %>
<div class="row">
<div class="col">
<%= _lc( 'SELECT_MEMBER_TO_EDIT' ) %>
</div>
</div>
</div>
<% } %>

+ 18
- 0
src/client/app/tmpl/group-member-management.html Parādīt failu

@@ -46,6 +46,12 @@
<%= _lc( 'GROUP_MANAGEMENT_MEMBERS_NOT_APPROVED' ) %> (<%= membersNotApproved.length %>)
</a>
</li>
<li class="nav-item">
<a class="nav-link <%= ( activeTab == 'deleted' ) ? 'active' : '' %>" data-content="group-members-deleted">
<i class="fas fa-users"></i>
<%= _lc( 'GROUP_MANAGEMENT_MEMBERS_DELETED' ) %> (<%= membersDeleted.length %>)
</a>
</li>
</ul>
</div>
<div class="card-body" data-id="member-container">
@@ -86,6 +92,18 @@
</div>
</div>
<div id="group-members-deleted" class="group-members-content group-members-tab-content <%= ( activeTab == 'deleted' ) ? 'active' : '' %>">
<div class="table-responsive">
<table class="table table-profiles">
<tbody>
<% for ( var mi = 0; mi < membersDeleted.length; mi++ ) { %>
<%=raw app.core.View.getTemplate( 'group-member-management-row', { m : membersDeleted[ mi ], g : group } ) %>
<% } %>
</tbody>
</table>
</div>
</div>
</div>
<div class="card-footer">
</div>


+ 20
- 69
src/server/server/control/TB_Server_Control_Account.php Parādīt failu

@@ -29,7 +29,11 @@ class TB_Server_Control_Account
$resp->addData( 'own_teams', TB_Shared_Ent_TeamData_Team::getByProfile( $session->getProfile() ) );
if ($params->get('includeNumFutureAttendances')) {
$appointmentsAccepted = TB_Shared_Ent_TeamData_Appointment::getAcceptedByProfile( $session->getProfile()->id );
$appointmentsAccepted = TB_Shared_Ent_TeamData_Appointment::getAcceptedByProfile(
$session->getProfile()->id,
false,
true
);
$resp->addData( 'numFutureAttendances', count($appointmentsAccepted) );
}
@@ -60,84 +64,31 @@ class TB_Server_Control_Account
throw new \Exception( 'Cannot delete a profile who owns a team' );
}
$appointmentsAccepted = TB_Shared_Ent_TeamData_Appointment::getAcceptedByProfile( $profile->id );
$appointmentsAccepted =
TB_Shared_Ent_TeamData_Appointment::getAcceptedByProfile(
$profile->id, false, true
);
if ( $appointmentsAccepted && count( $appointmentsAccepted ) > 0 )
{
throw new \Exception( 'User has accepted appointments in the future' );
}
$uuid = \Ramsey\Uuid\Uuid::uuid4()->toString();
throw new \Exception( 'Does not work anymore.' );
return $resp;
// $dbCore = TB_Shared_Db_Core::get();
// $dbTeam = TB_Shared_Db_TeamData::get();
//
//
// if ( $appointmentsAccepted && count( $appointmentsAccepted ) > 0 )
// {
//
// foreach( $appointmentsAccepted as $app )
// {
// TB_Server_Control_Appointment::processWaitingList( $app );
// }
// }
//
// return $resp;
/*
$resp = new TB_Server_Core_Response();
$session = TB_Server_Core_Session::get();
$account = $session->getAccount();
if ( is_null( $account ) ) throw new Exception( "No account in session. Deletion failed." );
$profile = $session->getProfile();
$appointmentsToUpdate = TB_Shared_Ent_TeamData_Appointment::getAcceptedByProfile( $profile->id );
$dbCore = TB_Shared_Db_Core::get();
$dbTeam = TB_Shared_Db_TeamData::get();
$a = $profile->teams_js;
if ( $profile->ownsATeam() )
{
throw new \Exception( 'Cannot delete a profile who owns a team' );
}
try
{
$dbCore->beginTransaction();
$dbTeam->beginTransaction();
$account->delete();
$profile->delete();
$dbCore->commit();
$dbTeam->commit();
$resTeam = [];
foreach ($profile->teams_js as $team) {
$tmpTeam = $team;
$tmpTeam['status'] = TB_Shared_Ent_TeamData_Profile::STATUS_DELETED;
$resTeam[] = $tmpTeam;
}
catch( Exception $e )
{
$dbCore->rollBack();
$dbTeam->rollBack();
throw $e;
}
if ( $appointmentsToUpdate && count( $appointmentsToUpdate ) > 0 )
{
$profile->teams_js = $resTeam;
foreach( $appointmentsToUpdate as $app )
{
TB_Server_Control_Appointment::processWaitingList( $app );
}
}
$uuid = \Ramsey\Uuid\Uuid::uuid4()->toString();
$account->email = $account->email . $uuid;
$account->save();
$profile->save();
return $resp;
*/
}
/**


+ 18
- 2
src/server/server/control/TB_Server_Control_Team.php Parādīt failu

@@ -114,12 +114,25 @@ class TB_Server_Control_Team {
$filteredMembers[] = $member;
}
} else {
$teamData = $member->getTeamsData($teamId);
if ($activeOnly === true) {
$teamData = $member->getTeamsData($teamId);
if ($teamData['status'] === TB_Shared_Ent_TeamData_Profile::STATUS_ACTIVE) {
$filteredMembers[] = $member;
}
} else {
if ($teamData['status'] === TB_Shared_Ent_TeamData_Profile::STATUS_DELETED) {
$member->street = "";
$member->zip_code = "";
$member->city = "";
$member->country = "";
$member->mobile = "";
$member->phone = "";
$member->gender = "";
$member->pic_url = "";
$member->birthday_dt = "";
$member->misc = "";
$member->status = "";
}
$filteredMembers[] = $member;
}
}
@@ -135,7 +148,10 @@ class TB_Server_Control_Team {
/** @var TB_Shared_Ent_TeamData_Profile $member */
foreach ( $members as $member )
{
array_push( $accountIds, $member->account_id );
$teamData = $member->getTeamsData($teamId);
if ($teamData['status'] !== TB_Shared_Ent_TeamData_Profile::STATUS_DELETED) {
array_push( $accountIds, $member->account_id );
}
}
$emails = TB_Shared_Ent_Core_Account::getEmailsForAccountIds( $accountIds );


+ 10
- 2
src/server/shared/ent/teamdata/TB_Shared_Ent_TeamData_Appointment.php Parādīt failu

@@ -140,8 +140,11 @@ class TB_Shared_Ent_TeamData_Appointment extends Francis_Db_Row
* @param $profileId
* @param bool $includePastAppointments
*/
public static function getAcceptedByProfile( $profileId, $includePastAppointments = false )
{
public static function getAcceptedByProfile(
$profileId,
$includePastAppointments = false,
$excludeRejectDeadlineExpired = false
) {
$sql = 'SELECT appointment.* FROM appointment ';
$sql .= 'LEFT JOIN attendee ON appointment.id = attendee.appointment_id ';
$sql .= 'WHERE ';
@@ -153,6 +156,11 @@ class TB_Shared_Ent_TeamData_Appointment extends Francis_Db_Row
$sql .= 'AND appointment.start_dt > UTC_TIMESTAMP()';
}
if ( true === $excludeRejectDeadlineExpired ) {
// By this we do not include appointments where reject deadline has passed expired
$sql .= 'AND appointment.deadline_reject_dt > UTC_TIMESTAMP()';
}
//SELECT appointment.* FROM appointment LEFT JOIN attendee ON appointment.id = attendee.appointment_id WHERE appointment.state = "open" AND attendee.profile_id = 16772 AND attendee.status = "accepted";
return self::findMany( $sql, array( ':profile_id' => $profileId ) );


+ 2
- 1
src/server/shared/ent/teamdata/TB_Shared_Ent_TeamData_Profile.php Parādīt failu

@@ -75,7 +75,8 @@ class TB_Shared_Ent_TeamData_Profile extends Francis_Db_Row {
return array(
self::STATUS_ACTIVE,
self::STATUS_INACTIVE,
self::STATUS_NOT_APPROVED
self::STATUS_NOT_APPROVED,
self::STATUS_DELETED
);
}


Notiek ielāde…
Atcelt
Saglabāt