Skip to content

Commit 5e08d47

Browse files
Implement cutom reason for account request rejection
1 parent 9422cb0 commit 5e08d47

File tree

6 files changed

+108
-18
lines changed

6 files changed

+108
-18
lines changed

lib/GADS.pm

+2-1
Original file line numberDiff line numberDiff line change
@@ -1556,8 +1556,9 @@ any ['get', 'post'] => '/user_requests/' => require_any_role [qw/useradmin super
15561556
if logged_in_user->id == $delete_id;
15571557

15581558
my $usero = rset('User')->find($delete_id);
1559+
my $email_reject_text = param('reject_reason');
15591560

1560-
if (process( sub { $usero->retire(send_reject_email => 1) }))
1561+
if (process( sub { $usero->retire(send_reject_email => 1, email_reject_text => $email_reject_text) }))
15611562
{
15621563
$audit->login_change("User ID $delete_id deleted");
15631564
return forwardHome(

lib/GADS/Schema/Result/User.pm

+30-7
Original file line numberDiff line numberDiff line change
@@ -1014,6 +1014,24 @@ sub permissions
10141014
}
10151015
}
10161016

1017+
sub _map_fields
1018+
{ my ($self, $text) = @_;
1019+
my @fields = ('firstname', 'surname', 'email', 'title', 'organisation', 'department', 'team');
1020+
1021+
if ($text)
1022+
{
1023+
foreach my $field (@fields)
1024+
{
1025+
my $value = $self->$field || '';
1026+
$text =~ s/\{$field\}/$value/g;
1027+
}
1028+
my $notes = $self->account_request_notes || '';
1029+
$text =~ s/\{notes\}/$notes/g;
1030+
}
1031+
1032+
return $text;
1033+
}
1034+
10171035
sub retire
10181036
{ my ($self, %options) = @_;
10191037

@@ -1023,14 +1041,19 @@ sub retire
10231041
# Properly delete if account request - no record needed
10241042
if ($self->account_request)
10251043
{
1044+
if ($options{send_reject_email})
1045+
{
1046+
my $email_body = $options{email_reject_text} || $site->email_reject_text || "Your account request has been rejected";
1047+
$email_body = $self->_map_fields($email_body);
1048+
1049+
my $email = GADS::Email->instance;
1050+
$email->send({
1051+
subject => $site->email_reject_subject || "Account request rejected",
1052+
emails => [$self->email],
1053+
text => $email_body,
1054+
});
1055+
}
10261056
$self->delete;
1027-
return unless $options{send_reject_email};
1028-
my $email = GADS::Email->instance;
1029-
$email->send({
1030-
subject => $site->email_reject_subject || "Account request rejected",
1031-
emails => [$self->email],
1032-
text => $site->email_reject_text || "Your account request has been rejected",
1033-
});
10341057

10351058
return;
10361059
}

src/frontend/components/data-table/lib/component.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'datatables.net-rowreorder-bs4'
88
import { setupDisclosureWidgets, onDisclosureClick } from 'components/more-less/lib/disclosure-widgets'
99
import { moreLess } from 'components/more-less/lib/more-less'
1010
import { bindToggleTableClickHandlers } from './toggle-table'
11-
import TypeaheadBuilder from 'util/typeahead'
1211

1312
const MORE_LESS_TRESHOLD = 50
1413

@@ -126,7 +125,7 @@ class DataTableComponent extends Component {
126125

127126
fillModalData(row) {
128127
const fields = $(this.modal).find('input, textarea')
129-
const btnReject = $(this.modal).find('.btn-js-reject-request')
128+
const btnReject = $(this.modal).find('.btn-js-reject-request-send')
130129
const id = parseInt($(row).find(`td[data-id]`).data('id'), 10)
131130

132131
if (id) $(this.modal).data('config').id = id

src/frontend/components/modal/lib/component.js

+1
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,7 @@ class ModalComponent extends Component {
271271

272272
// Validate the required fields of the frame
273273
validateFrame() {
274+
if(!this.frame) return;
274275
this.frame.isValid = true
275276

276277
this.frame.requiredFields.each((i, field) => {

src/frontend/components/modal/modals/user/lib/component.js

+21-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ class UserModalComponent extends ModalComponent {
2323

2424
// Toggle the right content (add user or approve account)
2525
toggleContent(ev) {
26-
if ($(ev.relatedTarget).hasClass('btn-add')) {
26+
this.target = $(ev.relatedTarget)
27+
if (this.target.hasClass('btn-add')) {
2728
modal.clear()
2829
this.el.find('.js-approve-account').hide()
2930
this.el.find('.js-add-user').show()
@@ -33,7 +34,9 @@ class UserModalComponent extends ModalComponent {
3334
} else {
3435
this.el.find('.js-add-user').hide()
3536
this.el.find('.js-approve-account').show()
36-
this.el.find('.btn-js-reject-request').show()
37+
this.el.find('.btn-js-reject-request').show().on("click", ()=>{
38+
this.activateFrame(4);
39+
})
3740
this.el.find('.btn-js-save .btn__title').html('Approve account')
3841
this.el.find('input[name="approve-account"]').val('true')
3942
}
@@ -90,6 +93,22 @@ class UserModalComponent extends ModalComponent {
9093
super.handleClose()
9194
this.emailText.html("USER")
9295
}
96+
97+
handleBack() {
98+
super.handleBack()
99+
if(this.target.hasClass('btn-add')) return;
100+
this.el.find('.btn-js-reject-request').off().on("click", ()=>{
101+
this.activateFrame(4);
102+
});
103+
}
104+
105+
handleNext() {
106+
super.handleNext()
107+
if(this.target.hasClass('btn-add')) return;
108+
this.el.find('.btn-js-reject-request').off().on("click", ()=>{
109+
this.activateFrame(4);
110+
});
111+
}
93112
}
94113

95114
export default UserModalComponent

views/wizard/user_add.tt

+53-6
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@
2929

3030
<ol class="modal__steps">
3131
<li class="modal__step modal__step--active" data-step="1">
32-
<span>
33-
User details
34-
</span>
32+
<span>
33+
User details
34+
</span>
3535
</li>
3636
<li class="modal__step " data-step="2">
3737
<span>
@@ -140,7 +140,7 @@
140140
dismiss = "modal"
141141
}]
142142
right_buttons = [{
143-
type = "submit"
143+
type = "button"
144144
class = "btn-danger btn-js-reject-request"
145145
name = "delete"
146146
value = user.id
@@ -230,7 +230,7 @@
230230
label = "Back"
231231
}]
232232
right_buttons = [{
233-
type = "submit"
233+
type = "button"
234234
class = "btn-danger btn-js-reject-request"
235235
name = "delete"
236236
value = user.id
@@ -281,7 +281,7 @@
281281
label = "Back"
282282
}]
283283
right_buttons = [{
284-
type = "submit"
284+
type = "button"
285285
class = "btn-danger btn-js-reject-request"
286286
name = "delete"
287287
value = user.id
@@ -292,6 +292,53 @@
292292
}];
293293
-%]
294294
</div>
295+
<div class="modal-frame" data-config='{"step":4,"frame":4,"item":null,"count":null}'>
296+
<div class="modal-body">
297+
<div class="container-fluid">
298+
<div class="row">
299+
<div class="col">
300+
<div class="alert alert-danger alert-js-reject-details" role="alert" id="modal-alert-reject">
301+
</div>
302+
</div>
303+
</div>
304+
305+
<div class="row mb-4">
306+
<div class="col">
307+
<p class="js-reject-account">In this window you can add a reason for the account request rejection.</p>
308+
</div>
309+
</div>
310+
311+
<div class="row">
312+
<div class="col-lg-12">
313+
[%-
314+
INCLUDE fields/textarea.tt
315+
id = "reject_reason"
316+
name = "reject_reason"
317+
label = "Reject reason"
318+
placeholder = "Enter reject reason"
319+
filter = "html"
320+
rows = 2;
321+
-%]
322+
</div>
323+
324+
</div> <!-- container end -->
325+
</div> <!-- modal body end -->
326+
[%-
327+
INCLUDE wizard/sub/modal_footer.tt
328+
left_buttons = [{
329+
class = "btn-cancel"
330+
label = "Cancel"
331+
dismiss = "modal"
332+
}]
333+
right_buttons = [{
334+
type = "submit"
335+
class = "btn-danger btn-js-reject-request-send"
336+
name = "delete"
337+
value = user.id
338+
label = "Reject request"
339+
}];
340+
-%]
341+
</div>
295342
</form>
296343
</div>
297344
</div>

0 commit comments

Comments
 (0)