Skip to content

Commit f8194b5

Browse files
committed
hard delete group, feature need to be tested
1 parent 3ee12fb commit f8194b5

File tree

3 files changed

+444
-504
lines changed

3 files changed

+444
-504
lines changed

src/apps/competitions/views.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from django.db import transaction
1616
from django.contrib import messages
1717

18-
18+
from django.core.exceptions import PermissionDenied
1919
from profiles.models import CustomGroup, User
2020
from queues.models import Queue
2121

@@ -336,29 +336,37 @@ def competition_update_group(request, pk, group_id):
336336
@require_POST
337337
def competition_delete_group(request, pk, group_id):
338338
competition = get_object_or_404(Competition, pk=pk)
339-
group = get_object_or_404(CustomGroup, pk=group_id)
340339

341340
user = request.user
342-
if not (user.is_superuser or user == competition.created_by or user in competition.collaborators.all()):
343-
return HttpResponseForbidden("Not allowed")
341+
if not (
342+
user.is_superuser
343+
or user == competition.created_by
344+
or user in competition.collaborators.all()
345+
):
346+
raise PermissionDenied("Not allowed")
344347

345-
if not competition.participant_groups.filter(pk=group.pk).exists():
346-
return HttpResponseBadRequest("Group does not belong to this competition")
348+
group = get_object_or_404(
349+
CustomGroup,
350+
pk=group_id,
351+
competitions=competition
352+
)
347353

348354
try:
349355
with transaction.atomic():
350356
competition.participant_groups.remove(group)
351357
group.delete()
358+
352359
except Exception as e:
353-
return HttpResponseBadRequest("Error deleting group: %s" % str(e))
360+
return HttpResponseBadRequest(f"Error deleting group: {str(e)}")
354361

355362
if (
356-
request.content_type.startswith('application/json')
357-
or request.headers.get('x-requested-with') == 'XMLHttpRequest'
358-
or 'application/json' in request.headers.get('accept', '')
363+
request.content_type.startswith("application/json")
364+
or request.headers.get("x-requested-with") == "XMLHttpRequest"
365+
or "application/json" in request.headers.get("accept", "")
359366
):
360-
return JsonResponse({'status': 'ok', 'group_id': group_id})
361-
367+
return JsonResponse({"status": "ok", "group_id": group_id})
362368

363369
messages.success(request, "Groupe supprimé")
364-
return HttpResponseRedirect(reverse('competitions:edit', kwargs={'pk': competition.pk}))
370+
return HttpResponseRedirect(
371+
reverse("competitions:edit", kwargs={"pk": competition.pk})
372+
)

src/static/riot/competitions/detail/leaderboards.tag

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,11 @@
112112
}
113113

114114
self.bold_class = function(column, submission){
115-
// Return `text-bold` if submission has
116-
// more than one scores and score index == leaderbaord.primary_index
117-
// otherwise return empty string
118-
return_class = '' // default class value
119-
if(column.task_id != -1){ // factsheet check
120-
if(submission.scores.length > 1){ // score length check
115+
return_class = ''
116+
if(column.task_id != -1){
117+
if(submission.scores.length > 1){
121118
let column_index = _.get(column, 'index')
122-
if(column_index === self.selected_leaderboard.primary_index){ // column index check
119+
if(column_index === self.selected_leaderboard.primary_index){
123120
return_class = 'text-bold'
124121
}
125122
}

0 commit comments

Comments
 (0)