From 57a03abbcd327f504b6015278be6a6845213b3d2 Mon Sep 17 00:00:00 2001 From: Jaimos Skriletz Date: Sun, 15 Dec 2024 17:41:26 -0700 Subject: [PATCH] When sorting achievements, make level achievements last. Level achievements need to be processed last, and currently an instructor can edit achievement numbers which could place some achievements after the level achievements. Update the sortAchievements utility method to always place level achievements at the end of the list. --- lib/WeBWorK/Utils.pm | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/WeBWorK/Utils.pm b/lib/WeBWorK/Utils.pm index 766904200f..f35898287f 100644 --- a/lib/WeBWorK/Utils.pm +++ b/lib/WeBWorK/Utils.pm @@ -215,15 +215,21 @@ sub sortAchievements (@achievements) { # Next sort by number. @achievements = sort { ($a->number || 0) <=> ($b->number || 0) } @achievements; - # Finally sort by category. + # Finally sort by category. Always place level achievements last. @achievements = sort { - if ($a->number && $b->number) { + if ($a->{category} eq 'level' && $b->{category} eq 'level') { + return 0; + } elsif ($a->{category} eq 'level') { + return 1; + } elsif ($b->{category} eq 'level') { + return -1; + } elsif ($a->number && $b->number) { return $a->number <=> $b->number; } elsif ($a->{category} eq $b->{category}) { return 0; - } elsif ($a->{category} eq 'secret' or $b->{category} eq 'level') { + } elsif ($a->{category} eq 'secret') { return -1; - } elsif ($a->{category} eq 'level' or $b->{category} eq 'secret') { + } elsif ($b->{category} eq 'secret') { return 1; } else { return $a->{category} cmp $b->{category};