From 674fa81773a517aacb758b556c35fffd29d787be Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 22 Aug 2023 16:23:22 +0200 Subject: [PATCH] wip terms --- src/client/app/js/app/core/Dict.js | 15 ++++- src/client/app/js/app/model/Group.js | 12 ++++ src/client/app/js/app/model/Profile.js | 13 +++- .../app/js/app/state/GroupDetailEdit.js | 67 ++++++++++++------- .../app/js/app/state/GroupMemberManagement.js | 23 ++++++- .../app/state/GroupMemberManagementMember.js | 2 + src/client/app/tmpl/group-detail-edit.html | 37 ++++++++++ .../group-member-management-member-body.html | 21 ++++-- .../tmpl/group-member-management-member.html | 2 +- .../app/tmpl/group-member-management.html | 6 ++ .../app/tmpl/home-modal-not-activated.html | 2 +- .../server/control/TB_Server_Control_Team.php | 29 ++++++++ .../core/TB_Server_Core_Notification.php | 2 +- .../ent/core/TB_Shared_Ent_Core_Account.php | 2 +- .../TB_Shared_Ent_TeamData_Profile.php | 1 + .../teamdata/TB_Shared_Ent_TeamData_Team.php | 2 + tools/db-install/devResetPw.php | 20 ++++++ tools/patches/addActiveStateToProfile.php | 4 +- tools/patches/addTermsAcceptedToProfile.php | 38 +++++++++++ tools/patches/addTermsConditionsToTeam.php | 19 ++++++ 20 files changed, 276 insertions(+), 41 deletions(-) create mode 100644 tools/db-install/devResetPw.php create mode 100644 tools/patches/addTermsAcceptedToProfile.php create mode 100644 tools/patches/addTermsConditionsToTeam.php diff --git a/src/client/app/js/app/core/Dict.js b/src/client/app/js/app/core/Dict.js index f26674a..661ab98 100644 --- a/src/client/app/js/app/core/Dict.js +++ b/src/client/app/js/app/core/Dict.js @@ -62,6 +62,7 @@ app.core.Dict = { "STATS" : "Statistik", "TEAM_DETAIL_TEAMNAME_PLACEHOLDER" : "Bitte gib deinem Firmen-/Gruppennamen ein", "TEAM_DETAIL_TEAMDESCRIPTION_PLACEHOLDER" : "Schreibe ein paar Worte über deine Gruppe...", + "TEAM_DETAIL_TEAM_TERMS_PLACEHOLDER" : "Schreibe eine Begrüßung, deine Nutzungsbedingungen und entscheide ob diese aktiv und somit verpflichtend sein sollen", "BTN_SAVE_CHANGES" : "Änderungen speichern", "UNKNOWN_NAME" : "Name unbekannt", "SHARE_INVITATION_LINK_HEADER" : "So geht's", @@ -239,6 +240,14 @@ app.core.Dict = { "EDIT_GROUP" : "Gruppe bearbeiten", "GROUP_NAME" : "Gruppenname", "GROUP_DESCRIPTION" : "Beschreibung", + "GROUP_TERMS_DESCRIPTION": "Begrüßung und Nutzungsbedingungen", + "GROUP_TERMS_ACTIVE": "Nutzungsbedingungen aktiv", + "GROUP_TERMS_ACTIVE_DESCRIPTION": "Wenn die Nutzungsbedingungen aktiv sind, müssen Gruppenmitglieder diese aktiv akzeptieren um weiter aktiv an Terminen teilnehmen zu können.", + "BTN_GROUP_TERMS_RESET": "Nutzungsbedingungen zurücksetzen", + "GROUP_TERMS_RESET_DESCRIPTION": "Wenn sie die Nutzungsbedingung zurücksetzen, müssen alle Mitglieder die Nutzungsbedingungen erneut akzeptieren. Dies ist bei Änderungen der Nutzungsbedingungen sinnvoll.", + "SUCCESS_RESET_TERMS_MEMBERS": "Die Akzeptierung der Nutzungsbedingungen aller Mitglieder wurde erfolgreich zurückgesetzt", + "DO_YOU_REALLY_WANT_TO_RESET_GROUP_MEMBERS_ACCEPTED_TERMS": "Willst du wirklich Akzeptierung der Nutzungsbedingungen aller Mitglieder zurücksetzen? Mitglieder müssen danach die Nutzungsbedingungen neu bestätigen!", + "BTN_CONFIRM_RESET_GROUP_MEMBERS_ACCEPTED_TERMS": "Ja, zurücksetzen", "GROUP_INDUSTRY" : "Branche", "GROUP_INDUSTRY_FITNESS" : "Sport und Fitness", "GROUP_INDUSTRY_YOGA" : "Yoga", @@ -551,17 +560,21 @@ 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_FILTER" : "Suchfilter Name", + "GROUP_MANAGEMENT_MEMBERS_EMAIL_VALIDATED" : "Emailadresse validiert", + "GROUP_MANAGEMENT_MEMBERS_EMAIL_NOT_VALIDATED" : "Emailadresse noch nicht validiert", "GROUP_MANAGEMENT_MEMBERS_ACTIVE" : "Aktiv", "GROUP_MANAGEMENT_MEMBERS_INACTIVE" : "Inaktiv", "GROUP_MANAGEMENT_MEMBERS_NOT_APPROVED" : "Unbestätigt", "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", "MEMBER_STATUS_CHANGED" : "Status erfolgreich geändert.", "GROUP_DETAIL_NOTE_INACTIVE_OR_NOT_APPROVED" : "Du bist bereits Mitglied dieser Gruppe, deine volle Mitgliedschaft muss von einem Admin aktiviert werden. Aktuell kannst du noch keine Gruppentermine sehen oder an ihnen teilnehmen.", "GROUP_DETAIL_STATUS" : "Dein Gruppenstatus", "HOME_MODAL_NOT_ACTIVATED_TITLE" : "Herzlich Willkommen", "HOME_MODAL_NOT_ACTIVATED_TEXT1" : "Herzlich Willkommen bei", - "HOME_MODAL_NOT_ACTIVATED_TEXT2" : "Ihre Registrierung war erfolgreich, bitte vervollständigen Sie schon Ihr Profil, damit der Gruppeninhaber Ihre Anmeldung bestätigen kann. Sie werden benachrichtigt, sobald die Freigabe erfolgt ist.", + "HOME_MODAL_NOT_ACTIVATED_TEXT2" : "Ihre Registrierung war erfolgreich. Der Gruppeninhaber wurde benachrichtigt und wird Sie in Kürze für die Gruppe freigeben. Bitte ergänzen Sie Ihre Adressdaten und Ihre Telefonnummer im Profil, sollten Rückfragen aufkommen. Vielen Dank.", "HOME_MODAL_NOT_ACTIVATED_BUTTON" : "Profil vervollständigen", }, "en" : { diff --git a/src/client/app/js/app/model/Group.js b/src/client/app/js/app/model/Group.js index 1299ba4..0271042 100644 --- a/src/client/app/js/app/model/Group.js +++ b/src/client/app/js/app/model/Group.js @@ -16,6 +16,8 @@ app.model.Group = function( data, memberData ) name = data.display_name, category = data.category, description = data.description || null, + termsConditions = data.terms_conditions || null, + termsConditionsActive = data.terms_conditions_active === 1, contactInformation = data.contact_information || null, emblemUrl = data.emblem_url || null, emblem_cloud_id = data.emblem_cloud_id || null, @@ -101,6 +103,16 @@ app.model.Group = function( data, memberData ) return description; }; + this.getTermsConditions = function() + { + return termsConditions; + }; + + this.getTermsConditionsActive = function() + { + return termsConditionsActive; + }; + this.getContactInformation = function() { return contactInformation; diff --git a/src/client/app/js/app/model/Profile.js b/src/client/app/js/app/model/Profile.js index 4c92e12..b661815 100644 --- a/src/client/app/js/app/model/Profile.js +++ b/src/client/app/js/app/model/Profile.js @@ -34,7 +34,8 @@ app.model.Profile = function( data, groupsData ) childProfiles = data.child_profile_js || [], createdDt = data.created_dt, // Note: Emails are optional - email = null; + email = null, + emailValidated = null; if ( "object" === typeof( teamCategoryIds ) ) { @@ -59,6 +60,16 @@ app.model.Profile = function( data, groupsData ) return email; }; + this.setEmailValidated = function( ev ) + { + emailValidated = ev; + }; + + this.getEmailValidated = function() + { + return emailValidated; + }; + this.isAdminOfGroup = function( groupId ) { let isAdmin = false; diff --git a/src/client/app/js/app/state/GroupDetailEdit.js b/src/client/app/js/app/state/GroupDetailEdit.js index 2159db2..131ff50 100644 --- a/src/client/app/js/app/state/GroupDetailEdit.js +++ b/src/client/app/js/app/state/GroupDetailEdit.js @@ -9,8 +9,7 @@ app.state.GroupDetailEdit = function() { var state = app.core.StateManager.createState( 'group-detail-edit' ); - state.onEnter = function( p ) - { + state.onEnter = function( p ) { let $content = app.core.View.getContent(), groupId = p.groupId; @@ -19,37 +18,33 @@ app.state.GroupDetailEdit = function() app.core.Rpc.call( 'Team', 'getDetails', - { teamId : groupId }, - function( res ) - { - var group = new app.model.Group( res.team ); + {teamId: groupId}, + function (res) { + var group = new app.model.Group(res.team); app.core.View.setContent( - app.core.View.getTemplate( 'group-detail-edit', { group : group } ) + app.core.View.getTemplate('group-detail-edit', {group: group}) ); - $content.find( '[data-id="btn-save-changes"]' ).first().click( function() - { - let $form = $content.find( '[data-id="form-team-details"]' ).first(), - isValid = app.util.Form.bootstrapValidate( $form ); + $content.find('[data-id="btn-save-changes"]').first().click(function () { + let $form = $content.find('[data-id="form-team-details"]').first(), + isValid = app.util.Form.bootstrapValidate($form); - if ( isValid ) - { + if (isValid) { app.gui.PageLoader.show(); app.core.Rpc.call( 'Team', 'update', { - groupId : groupId, - groupName : app.util.Helper.trim( $form.find( '[data-id="input-team-name"]' ).first().val() ), - description : app.util.Helper.trim( $form.find( '[data-id="textarea-team-description"]' ).first().val() ), - contactInformation : app.util.Helper.trim( $form.find( '[data-id="textarea-team-contactinformation"]' ).first().val() ), - industry : $form.find( '[data-id="select-team-industry"]' ).first().val() + groupId: groupId, + groupName: app.util.Helper.trim($form.find('[data-id="input-team-name"]').first().val()), + description: app.util.Helper.trim($form.find('[data-id="textarea-team-description"]').first().val()), + contactInformation: app.util.Helper.trim($form.find('[data-id="textarea-team-contactinformation"]').first().val()), + industry: $form.find('[data-id="select-team-industry"]').first().val() }, - function( res ) - { - app.core.Controller.redirect( '#/group/' + groupId ); + function (res) { + app.core.Controller.redirect('#/group/' + groupId); } ); @@ -58,10 +53,32 @@ app.state.GroupDetailEdit = function() return false; }); - app.gui.PageLoader.hide(); + $content.find('[data-id="btn-reset-terms-members"]').first().click(function () { + app.core.View.confirm( + _lc('DO_YOU_REALLY_WANT_TO_RESET_GROUP_MEMBERS_ACCEPTED_TERMS'), + function () { + app.gui.PageLoader.show(); + app.core.View.closeModal(); + app.core.Rpc.call( + 'Team', + 'resetAcceptedMemberTerms', + { + groupId: groupId, + }, + function (res) { + app.core.View.toastSuccess(_lc('SUCCESS_RESET_TERMS_MEMBERS')); + }, + function (res) { + app.core.View.toastError(_lc('GENERAL_SERVER_ERROR')); + } + ); + }, + _lc('BTN_CONFIRM_RESET_GROUP_MEMBERS_ACCEPTED_TERMS') + ); + }); } ); - }; - + app.gui.PageLoader.hide(); + } return state; -}; \ No newline at end of file +} \ No newline at end of file diff --git a/src/client/app/js/app/state/GroupMemberManagement.js b/src/client/app/js/app/state/GroupMemberManagement.js index ddcbbd7..2931f57 100644 --- a/src/client/app/js/app/state/GroupMemberManagement.js +++ b/src/client/app/js/app/state/GroupMemberManagement.js @@ -45,6 +45,7 @@ app.state.GroupMemberManagement = function() if ( member.getAccountId() == emails[ ei ].id ) { member.setEmail( emails[ ei ].email ); + member.setEmailValidated(emails[ ei ].is_validated == 1) break; } } @@ -99,8 +100,11 @@ app.state.GroupMemberManagement = function() }); $content.on( 'click', '[data-id="member-header"] .nav-tabs .nav-link', function() { - var content = $(this).data("content"); + let searchInput = $content.find('[data-id="member-search-filter"]') + searchInput.val(''); + searchInput.trigger('input'); $('[data-id="member-header"] .nav-tabs .nav-link').removeClass("active"); + var content = $(this).data("content"); $(".group-members-content").removeClass("active"); $(this).addClass("active"); $("#" + content).addClass("active"); @@ -113,6 +117,23 @@ app.state.GroupMemberManagement = function() fnUpdateMemberToEdit( memberId ) } + $content.on('input', '[data-id="member-search-filter"]', function(e) + { + var searchTerm = $(this).val().toLowerCase(); + + // Filter elements + $('table.table-profiles tbody tr').each(function() { + var $tr = $(this); + var userName = $tr.find('.align-middle > div').text().toLowerCase(); + + if (userName.includes(searchTerm) || searchTerm === '') { + $tr.show(); + } else { + $tr.hide(); + } + }); + }); + app.gui.PageLoader.hide(); } ); diff --git a/src/client/app/js/app/state/GroupMemberManagementMember.js b/src/client/app/js/app/state/GroupMemberManagementMember.js index e78521e..abc130e 100644 --- a/src/client/app/js/app/state/GroupMemberManagementMember.js +++ b/src/client/app/js/app/state/GroupMemberManagementMember.js @@ -11,6 +11,7 @@ app.state.GroupMemberManagementMember = function() state.onEnter = function( p ) { + console.log(p); let $content = app.core.View.getContent(), fnRenderMemberForm = null, fnGetMemberById = null, @@ -165,6 +166,7 @@ app.state.GroupMemberManagementMember = function() if ( member.getAccountId() == emails[ ei ].id ) { member.setEmail( emails[ ei ].email ); + member.setEmailValidated(emails[ ei ].is_validated == 1) break; } } diff --git a/src/client/app/tmpl/group-detail-edit.html b/src/client/app/tmpl/group-detail-edit.html index f351ba6..7397cf2 100644 --- a/src/client/app/tmpl/group-detail-edit.html +++ b/src/client/app/tmpl/group-detail-edit.html @@ -85,6 +85,43 @@ class="form-control" placeholder="<%= _lc( 'TEAM_DETAIL_TEAMDESCRIPTION_PLACEHOLDER' ) %>"><%= group.getDescription() ? group.getDescription() : '' %> +
+ + +
+
+
+ + +

+ <%= _lc( 'GROUP_TERMS_ACTIVE_DESCRIPTION' ) %> +

+
+
+
+ +

+ <%= _lc( 'GROUP_TERMS_RESET_DESCRIPTION' ) %> +

+