diff --git a/lib/GADS.pm b/lib/GADS.pm index 7a830eac1..c3b2af6a5 100644 --- a/lib/GADS.pm +++ b/lib/GADS.pm @@ -1556,8 +1556,9 @@ any ['get', 'post'] => '/user_requests/' => require_any_role [qw/useradmin super if logged_in_user->id == $delete_id; my $usero = rset('User')->find($delete_id); + my $email_reject_text = param('reject_reason'); - if (process( sub { $usero->retire(send_reject_email => 1) })) + if (process( sub { $usero->retire(send_reject_email => 1, email_reject_text => $email_reject_text) })) { $audit->login_change("User ID $delete_id deleted"); return forwardHome( diff --git a/lib/GADS/Schema/Result/User.pm b/lib/GADS/Schema/Result/User.pm index 7de2dbe93..9a6b30119 100644 --- a/lib/GADS/Schema/Result/User.pm +++ b/lib/GADS/Schema/Result/User.pm @@ -1014,6 +1014,24 @@ sub permissions } } +sub _map_fields +{ my ($self, $text) = @_; + my @fields = ('firstname', 'surname', 'email', 'title', 'organisation', 'department', 'team'); + + if ($text) + { + foreach my $field (@fields) + { + my $value = $self->$field || ''; + $text =~ s/\{$field\}/$value/g; + } + my $notes = $self->account_request_notes || ''; + $text =~ s/\{notes\}/$notes/g; + } + + return $text; +} + sub retire { my ($self, %options) = @_; @@ -1023,14 +1041,19 @@ sub retire # Properly delete if account request - no record needed if ($self->account_request) { + if ($options{send_reject_email}) + { + my $email_body = $options{email_reject_text} || $site->email_reject_text || "Your account request has been rejected"; + $email_body = $self->_map_fields($email_body); + + my $email = GADS::Email->instance; + $email->send({ + subject => $site->email_reject_subject || "Account request rejected", + emails => [$self->email], + text => $email_body, + }); + } $self->delete; - return unless $options{send_reject_email}; - my $email = GADS::Email->instance; - $email->send({ - subject => $site->email_reject_subject || "Account request rejected", - emails => [$self->email], - text => $site->email_reject_text || "Your account request has been rejected", - }); return; } diff --git a/src/frontend/components/data-table/lib/component.js b/src/frontend/components/data-table/lib/component.js index 8c83d888f..1bd3abf77 100644 --- a/src/frontend/components/data-table/lib/component.js +++ b/src/frontend/components/data-table/lib/component.js @@ -8,7 +8,6 @@ import 'datatables.net-rowreorder-bs4' import { setupDisclosureWidgets, onDisclosureClick } from 'components/more-less/lib/disclosure-widgets' import { moreLess } from 'components/more-less/lib/more-less' import { bindToggleTableClickHandlers } from './toggle-table' -import TypeaheadBuilder from 'util/typeahead' const MORE_LESS_TRESHOLD = 50 @@ -126,7 +125,7 @@ class DataTableComponent extends Component { fillModalData(row) { const fields = $(this.modal).find('input, textarea') - const btnReject = $(this.modal).find('.btn-js-reject-request') + const btnReject = $(this.modal).find('.btn-js-reject-request-send') const id = parseInt($(row).find(`td[data-id]`).data('id'), 10) if (id) $(this.modal).data('config').id = id diff --git a/src/frontend/components/modal/lib/component.js b/src/frontend/components/modal/lib/component.js index e7406c44e..76e828008 100644 --- a/src/frontend/components/modal/lib/component.js +++ b/src/frontend/components/modal/lib/component.js @@ -271,6 +271,7 @@ class ModalComponent extends Component { // Validate the required fields of the frame validateFrame() { + if(!this.frame) return; this.frame.isValid = true this.frame.requiredFields.each((i, field) => { diff --git a/src/frontend/components/modal/modals/user/lib/component.js b/src/frontend/components/modal/modals/user/lib/component.js index 5289dd7fb..1b47d3fc0 100644 --- a/src/frontend/components/modal/modals/user/lib/component.js +++ b/src/frontend/components/modal/modals/user/lib/component.js @@ -23,7 +23,8 @@ class UserModalComponent extends ModalComponent { // Toggle the right content (add user or approve account) toggleContent(ev) { - if ($(ev.relatedTarget).hasClass('btn-add')) { + this.target = $(ev.relatedTarget) + if (this.target.hasClass('btn-add')) { modal.clear() this.el.find('.js-approve-account').hide() this.el.find('.js-add-user').show() @@ -33,7 +34,9 @@ class UserModalComponent extends ModalComponent { } else { this.el.find('.js-add-user').hide() this.el.find('.js-approve-account').show() - this.el.find('.btn-js-reject-request').show() + this.el.find('.btn-js-reject-request').show().on("click", ()=>{ + this.activateFrame(4); + }) this.el.find('.btn-js-save .btn__title').html('Approve account') this.el.find('input[name="approve-account"]').val('true') } @@ -90,6 +93,22 @@ class UserModalComponent extends ModalComponent { super.handleClose() this.emailText.html("USER") } + + handleBack() { + super.handleBack() + if(this.target.hasClass('btn-add')) return; + this.el.find('.btn-js-reject-request').off().on("click", ()=>{ + this.activateFrame(4); + }); + } + + handleNext() { + super.handleNext() + if(this.target.hasClass('btn-add')) return; + this.el.find('.btn-js-reject-request').off().on("click", ()=>{ + this.activateFrame(4); + }); + } } export default UserModalComponent diff --git a/views/wizard/user_add.tt b/views/wizard/user_add.tt index c8aad503b..d9be7d322 100644 --- a/views/wizard/user_add.tt +++ b/views/wizard/user_add.tt @@ -29,9 +29,9 @@