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)) { -
  1. <%= $_ %>
  2. + % my %courseArchives = listArchivedCourses($ce); + % for (sort { lc($a) cmp lc($b) } keys %courseArchives) { +
  3. <%= "$_ ($courseArchives{$_}{size})" %>
  4. % }
% } 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',