Skip to content

Commit e7ac4a7

Browse files
Refactored admin account activation and updated contest dashboard ui
- Generalized account activation process to include deactivation - Moved walk-in team button to pre-contest section
1 parent 3e1a0e0 commit e7ac4a7

File tree

3 files changed

+51
-33
lines changed

3 files changed

+51
-33
lines changed

src/contestadmin/forms.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,18 @@ class Meta:
4343
model = Profile
4444
fields = ["role"]
4545

46+
47+
class AccountStatusForm(forms.Form):
48+
STATUS = (
49+
(0, 'Activate'),
50+
(1, 'Deactivate')
51+
)
4652

47-
class ActivateAccountForm(forms.Form):
4853
username = forms.CharField(
4954
max_length=150,
5055
label='Username',
5156
help_text="Person's account username.")
57+
status = forms.ChoiceField(choices=STATUS)
5258

5359

5460
class DesignateFacultyTeamForm(forms.Form):

src/contestadmin/templates/contestadmin/dashboard.html

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ <h1 class="text-center">Contest Dashboard</h1>
2525
<i class="fa-solid fa-clock-rotate-left fa-fw"></i> Pre-Contest
2626
</div>
2727
<div class="card-body overflow-auto">
28+
<div class="row justify-content-center">
29+
<button type="button" class="btn btn-primary btn-sm my-1" data-toggle="modal" data-target="#walkinModal"> <i class="fa-solid fa-person-walking fa-fw"></i> Create Walk-in teams</button>
30+
</div>
2831
<div class="row justify-content-center">
2932
<a class="btn btn-primary btn-sm my-1" href="{% url 'gen_dj_files' %}" onclick="return confirm('Are you certain you want to generate the DOMjudge files?');"><i class="fa-solid fa-file-circle-plus fa-fw"></i> Generate DOMjudge TSVs</a>
3033
{% if dj_files_available %}
@@ -73,7 +76,6 @@ <h1 class="text-center">Contest Dashboard</h1>
7376
</div>
7477
<div class="card-body overflow-auto">
7578
<div class="row justify-content-center">
76-
7779
{% if dj_results_processed %}
7880
<!--<button type="button" class="btn btn-primary btn-sm my-1" data-toggle="modal" data-target="#generateEcReportsModal">Generate Reports</button>-->
7981
<a class="btn btn-primary btn-sm my-1" href="{% url 'gen_ec_reports' %}" onclick="return confirm('Are you certain you want to generate the extra credit files?');"><i class="fa-solid fa-file-circle-plus fa-fw"></i> Generate Reports</a>
@@ -106,6 +108,9 @@ <h1 class="text-center">Contest Dashboard</h1>
106108
<div class="card-body overflow-auto">
107109
<div class="row">
108110
<div class="col-lg-6">
111+
<div class="row justify-content-center">
112+
<button type="button" class="btn btn-primary btn-sm my-1" data-toggle="modal" data-target="#accountStatusModal"><i class="fa-solid fa-user-gear fa-fw"></i> Update Account Status</button>
113+
</div>
109114
<div class="row justify-content-center">
110115
<a class="btn btn-primary btn-sm my-1" href="{% url 'generate_team_csvs' %}" onclick="return confirm('Are you certain you want to generate the team data CSVs?');"><i class="fa-solid fa-file-circle-plus fa-fw"></i> Generate Team CSVs</a>
111116
{% if team_csvs_available %}
@@ -114,17 +119,11 @@ <h1 class="text-center">Contest Dashboard</h1>
114119
<a class="btn text-secondary disabled" href="#" role="button"><i class="fa fa-download fa-md" aria-hidden="true"></i></a>
115120
{% endif %}
116121
</div>
117-
<div class="row justify-content-center">
118-
<button type="button" class="btn btn-primary btn-sm my-1" data-toggle="modal" data-target="#walkinModal"> <i class="fa-solid fa-person-walking fa-fw"></i> Create Walk-in teams</button>
119-
</div>
120-
<div class="row justify-content-center">
121-
<button type="button" class="btn btn-primary btn-sm my-1" data-toggle="modal" data-target="#facultyTeamModal"><i
122-
class="fa-solid fa-chalkboard-user fa-fw"></i> Designate Faculty Team</button>
123-
</div>
124122
</div>
125123
<div class="col-lg-6">
126124
<div class="row justify-content-center">
127-
<button type="button" class="btn btn-primary btn-sm my-1" data-toggle="modal" data-target="#activateAccountModal"><i class="fa-solid fa-user-check fa-fw"></i> Activate User Account</button>
125+
<button type="button" class="btn btn-primary btn-sm my-1" data-toggle="modal" data-target="#facultyTeamModal"><i
126+
class="fa-solid fa-chalkboard-user fa-fw"></i> Designate Faculty Team</button>
128127
</div>
129128
<div class="row justify-content-center">
130129
<button type="button" class="btn btn-primary btn-sm my-1" data-toggle="modal" data-target="#checkinModal"><i class="fa-solid fa-robot fa-fw"></i> Check in/out Users</button>
@@ -284,7 +283,6 @@ <h1 class="text-center">Contest Dashboard</h1>
284283
</div>
285284
<!-- Volunteer Summary card end -->
286285

287-
288286
<!-- Create Walk-in Teams Modal -->
289287
<div class="modal fade" id="walkinModal" tabindex="-1" role="dialog"
290288
aria-labelledby="confirmClearModalCenterTitle" aria-hidden="true">
@@ -321,7 +319,6 @@ <h5 class="mb-0">{{ field.label_tag }}</h5>
321319
</div>
322320
<!-- End Create Walk-in Teams Modal -->
323321

324-
325322
<!-- Checkin/Checkout Users Modal -->
326323
<div class="modal fade" id="checkinModal" tabindex="-1" role="dialog" aria-labelledby="confirmClearModalCenterTitle"
327324
aria-hidden="true">
@@ -357,20 +354,22 @@ <h5 class="modal-title" id="confirmClearModalLongTitle">Check in/out Users</h5>
357354
</div>
358355
<!-- End Create Walk-in Teams Modal -->
359356

360-
361-
<!-- Activate Account Modal -->
362-
<div class="modal fade" id="activateAccountModal" tabindex="-1" role="dialog"
357+
<!-- Account Status Modal -->
358+
<div class="modal fade" id="accountStatusModal" tabindex="-1" role="dialog"
363359
aria-labelledby="confirmClearModalCenterTitle" aria-hidden="true">
364360
<div class="modal-dialog modal-dialog-centered" role="document">
365361
<div class="modal-content">
366362
<div class="modal-header">
367-
<h5 class="modal-title" id="confirmClearModalLongTitle">Activate User Account</h5>
363+
<h5 class="modal-title" id="confirmClearModalLongTitle">Update Account Status</h5>
368364
</div>
369-
<form method="post" onSubmit="return confirm('Are you certain you want to activate this account?');">
365+
<form method="post" onSubmit="return confirm('Are you certain you want to update this account?');">
370366
<div class="modal-body overflow-auto">
371367
{% csrf_token %}
372368
<div class="form-group">
373-
{{ activate_account_form.username | placeholder:"Username" }}
369+
{{ account_status_form.username | placeholder:"Username" }}
370+
</div>
371+
<div class="form-group">
372+
{{ account_status_form.status }}
374373
</div>
375374
</div>
376375
<div class="card-footer">
@@ -381,8 +380,7 @@ <h5 class="modal-title" id="confirmClearModalLongTitle">Activate User Account</h
381380
</div>
382381
</div>
383382
</div>
384-
<!-- End Activate Account Modal -->
385-
383+
<!-- End Account Status Modal -->
386384

387385
<!-- Designate Faculty Team Modal -->
388386
<div class="modal fade" id="facultyTeamModal" tabindex="-1" role="dialog"

src/contestadmin/views.py

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ def dashboard(request):
259259
channel_form = forms.ClearChannelForm(request.POST)
260260
update_password_form = forms.UpdatePasswordForm(request.POST)
261261
profile_role_form = forms.UpdateProfileRoleForm(request.POST)
262-
activate_account_form = forms.ActivateAccountForm(request.POST)
262+
account_status_form = forms.AccountStatusForm(request.POST)
263263
faculty_team_form = forms.DesignateFacultyTeamForm(request.POST)
264264

265265
# Process walk-in team creation form
@@ -311,21 +311,35 @@ def dashboard(request):
311311
else:
312312
messages.success(request, 'Updated user role.',
313313
fail_silently=True)
314-
# Process admin account activation form
315-
elif activate_account_form.is_valid():
314+
# Process account status update form
315+
elif account_status_form.is_valid():
316316
try:
317317
account = User.objects.get(
318-
username=activate_account_form.cleaned_data['username'])
319-
# Activate account
320-
account.is_active = True
321-
account.profile.email_confirmed = True
322-
account.save()
318+
username=account_status_form.cleaned_data['username'])
323319
except:
324320
messages.error(
325-
request, 'Account activation failed.', fail_silently=True)
321+
request, 'Unable to locate username in database.', fail_silently=True)
326322
else:
327-
messages.success(
328-
request, 'Activated user account.', fail_silently=True)
323+
if account_status_form.cleaned_data['status'] == '0':
324+
# Activate account
325+
account.is_active = True
326+
account.profile.email_confirmed = True
327+
elif account_status_form.cleaned_data['status'] == '1':
328+
# Deactivate account
329+
account.is_active = False
330+
331+
try:
332+
account.save()
333+
except:
334+
messages.error(
335+
request, 'Account status update failed.', fail_silently=True)
336+
else:
337+
if account_status_form.cleaned_data['status'] == '0':
338+
messages.success(
339+
request, 'Activated user account.', fail_silently=True)
340+
elif account_status_form.cleaned_data['status'] == '1':
341+
messages.success(
342+
request, 'Deactivated user account.', fail_silently=True)
329343
# Process faculty team designation form
330344
elif faculty_team_form.is_valid():
331345
try:
@@ -372,7 +386,7 @@ def dashboard(request):
372386
channel_form = forms.ClearChannelForm()
373387
update_password_form = forms.UpdatePasswordForm()
374388
profile_role_form = forms.UpdateProfileRoleForm()
375-
activate_account_form = forms.ActivateAccountForm()
389+
account_status_form = forms.AccountStatusForm()
376390
faculty_team_form = forms.DesignateFacultyTeamForm()
377391

378392

@@ -407,7 +421,7 @@ def dashboard(request):
407421
context['channel_form'] = channel_form
408422
context['update_password_form'] = update_password_form
409423
context['profile_role_form'] = profile_role_form
410-
context['activate_account_form'] = activate_account_form
424+
context['account_status_form'] = account_status_form
411425
context["faculty_team_form"] = faculty_team_form
412426

413427
return render(request, 'contestadmin/dashboard.html', context)

0 commit comments

Comments
 (0)