diff --git a/lib/WeBWorK/Utils/CourseManagement.pm b/lib/WeBWorK/Utils/CourseManagement.pm
index 41073c1810..d584758dfd 100644
--- a/lib/WeBWorK/Utils/CourseManagement.pm
+++ b/lib/WeBWorK/Utils/CourseManagement.pm
@@ -29,7 +29,6 @@ use WeBWorK::Utils::Instructor qw(assignSetsToUsers);
our @EXPORT_OK = qw(
listCourses
listArchivedCourses
- statArchivedCourses
addCourse
renameCourse
retitleCourse
@@ -110,7 +109,17 @@ sub listCourses {
=item listArchivedCourses($ce)
-Lists the courses which have been archived (end in .tar.gz).
+Lists the courses which have been archived (end in .tar.gz). The courses found
+are returned as a hash whose keys are the course ids and the values are
+references to hashes containing the C (the basename of the file
+including the .tar.gz extension) and file C. For example,
+
+ {
+ myTestCourse => {
+ filename => 'myTestCourse.tar.gz',
+ size => '605 KB'
+ }
+ }
=cut
@@ -118,30 +127,24 @@ sub listArchivedCourses {
my ($ce) = @_;
my $archivesDir = path("$ce->{webworkDirs}{courses}/$ce->{admin_course_id}/archives");
surePathToFile($ce->{webworkDirs}{courses}, "$archivesDir/test"); # Ensure archives directory exists.
- return @{ $archivesDir->list->grep(qr/\.tar\.gz$/)->map('basename') };
-}
-=item statArchivedCourses($ce)
+ my $archives = $archivesDir->list->grep(qr/\.tar\.gz$/i);
-File info for the courses which have been archived (end in .tar.gz).
-
-=cut
-
-sub statArchivedCourses {
- my ($ce) = @_;
- my @archives = listArchivedCourses($ce);
- my $archivesDir = path("$ce->{webworkDirs}{courses}/$ce->{admin_course_id}/archives");
my %return;
- for (@archives) {
- my @stat = stat("$archivesDir/$_");
- my $size = $stat[7];
+ for (@$archives) {
+ my $size = $_->stat->size;
my @units = qw(B KB MB GB);
my $unit_idx = 0;
- while ($size >= 1024 && $unit_idx < @units - 1) {
+ while ($size >= 1024 && $unit_idx < $#units) {
$size /= 1024;
- $unit_idx++;
+ ++$unit_idx;
}
- $return{ $_ =~ s/\.tar\.gz$//ir } = { filename => $_, size => sprintf("%s %s", int($size), $units[$unit_idx]) };
+ my $basename = $_->basename;
+ my $round = 10**($unit_idx > 0 ? $unit_idx - 1 : 0);
+ $return{ $basename =~ s/\.tar\.gz$//ir } = {
+ filename => $basename,
+ size => sprintf("%s %s", int($size * $round) / $round, $units[$unit_idx])
+ };
}
return %return;
}
diff --git a/templates/ContentGenerator/CourseAdmin.html.ep b/templates/ContentGenerator/CourseAdmin.html.ep
index be8e357ad9..793a193ac0 100644
--- a/templates/ContentGenerator/CourseAdmin.html.ep
+++ b/templates/ContentGenerator/CourseAdmin.html.ep
@@ -65,8 +65,9 @@
) =%>
- % for (sort { lc($a) cmp lc($b) } listArchivedCourses($ce)) {
- - <%= $_ %>
+ % my %courseArchives = listArchivedCourses($ce);
+ % for (sort { lc($a) cmp lc($b) } keys %courseArchives) {
+ - <%= "$_ ($courseArchives{$_}{size})" %>
% }
% }
diff --git a/templates/ContentGenerator/CourseAdmin/unarchive_course_form.html.ep b/templates/ContentGenerator/CourseAdmin/unarchive_course_form.html.ep
index e5b2d4afc1..1218c6bfe7 100644
--- a/templates/ContentGenerator/CourseAdmin/unarchive_course_form.html.ep
+++ b/templates/ContentGenerator/CourseAdmin/unarchive_course_form.html.ep
@@ -1,10 +1,10 @@
-% use WeBWorK::Utils::CourseManagement qw(statArchivedCourses);
+% use WeBWorK::Utils::CourseManagement qw(listArchivedCourses);
%
<%= maketext('Unarchive Course') %> <%= $c->helpMacro('AdminUnarchiveCourse') %>
%
% # Find courses which have been archived.
-% my %stat = statArchivedCourses($ce);
-% my @courseIDs = sort { lc($a) cmp lc($b) } keys %stat;
+% my %courseArchives = listArchivedCourses($ce);
+% my @courseIDs = sort { lc($a) cmp lc($b) } keys %courseArchives;
%
% if (@courseIDs) {
<%= form_for current_route, method => 'POST', begin =%>
@@ -15,18 +15,22 @@
%
- <%= label_for 'unarchive_courseID' => maketext('Course ID:'), class => 'col-lg-3 col-md-4 col-form-label fw-bold' =%>
+ <%= label_for 'unarchive_courseID' => maketext('Course ID:'),
+ class => 'col-lg-3 col-md-4 col-form-label fw-bold' =%>
<%= select_field
- unarchive_courseID => [map {["$_ ($stat{$_}{size})" => $stat{$_}{filename}]} @courseIDs],
- id => 'unarchive_courseID',
- class => 'form-select',
- size => 10
+ unarchive_courseID => [
+ map { [ "$_ ($courseArchives{$_}{size})" => $courseArchives{$_}{filename} ] } @courseIDs
+ ],
+ id => 'unarchive_courseID',
+ class => 'form-select',
+ size => 10
=%>
- <%= label_for new_courseID => maketext('New ID:'), class => 'col-lg-3 col-md-4 col-form-label fw-bold' =%>
+ <%= label_for new_courseID => maketext('New ID:'),
+ class => 'col-lg-3 col-md-4 col-form-label fw-bold' =%>
<%= text_field new_courseID => '',
id => 'new_courseID',