diff --git a/lib/WeBWorK/Utils/CourseManagement.pm b/lib/WeBWorK/Utils/CourseManagement.pm index 5c695658e0..d584758dfd 100644 --- a/lib/WeBWorK/Utils/CourseManagement.pm +++ b/lib/WeBWorK/Utils/CourseManagement.pm @@ -109,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 @@ -117,7 +127,26 @@ 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') }; + + my $archives = $archivesDir->list->grep(qr/\.tar\.gz$/i); + + my %return; + for (@$archives) { + my $size = $_->stat->size; + my @units = qw(B KB MB GB); + my $unit_idx = 0; + while ($size >= 1024 && $unit_idx < $#units) { + $size /= 1024; + ++$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/archive_course_form.html.ep b/templates/ContentGenerator/CourseAdmin/archive_course_form.html.ep index 39106e4990..fba07f6e3c 100644 --- a/templates/ContentGenerator/CourseAdmin/archive_course_form.html.ep +++ b/templates/ContentGenerator/CourseAdmin/archive_course_form.html.ep @@ -5,7 +5,7 @@ <%= maketext( 'Courses are listed either alphabetically or in order by the time of most recent login activity, oldest ' . 'first. To change the listing order check the mode you want and click "Refresh Listing". The ' - . 'listing format is: Course_Name (status :: date/time of most recent login) where status is "hidden" ' + . 'listing format is: Course_ID (status :: date/time of most recent login) where status is "hidden" ' . 'or "visible".' ) =%>

@@ -35,7 +35,7 @@ <%= $c->hidden_fields('subDisplay') =%>
<%= maketext('Select course(s) to archive.') %>
- <%= label_for archive_courseIDs => maketext('Course Name:'), class => 'col-auto col-form-label fw-bold' =%> + <%= label_for archive_courseIDs => maketext('Course ID:'), class => 'col-auto col-form-label fw-bold' =%>
<%= select_field archive_courseIDs => [ map { [ $courseLabels->{$_} => $_ ] } @$courseIDs ], id => 'archive_courseIDs', diff --git a/templates/ContentGenerator/CourseAdmin/delete_course_form.html.ep b/templates/ContentGenerator/CourseAdmin/delete_course_form.html.ep index 0306c31f29..68e9915ef7 100644 --- a/templates/ContentGenerator/CourseAdmin/delete_course_form.html.ep +++ b/templates/ContentGenerator/CourseAdmin/delete_course_form.html.ep @@ -6,7 +6,7 @@ <%= maketext( 'Courses are listed either alphabetically or in order by the time of most recent login activity, ' . 'oldest first. To change the listing order check the mode you want and click "Refresh Listing". ' - . 'The listing format is: Course_Name (status :: date/time of most recent login) where status is ' + . 'The listing format is: Course_ID (status :: date/time of most recent login) where status is ' . '"hidden" or "visible".' ) =%>

@@ -35,7 +35,7 @@ <%= $c->hidden_fields('subDisplay') =%>
<%= maketext('Select a course to delete.') %>
- <%= label_for delete_courseID => maketext('Course Name:'), class => 'col-auto col-form-label fw-bold' =%> + <%= label_for delete_courseID => maketext('Course ID:'), class => 'col-auto col-form-label fw-bold' =%>
<%= select_field delete_courseID => [ map { [ $courseLabels->{$_} => $_ ] } @$courseIDs ], id => 'delete_courseID', diff --git a/templates/ContentGenerator/CourseAdmin/hide_inactive_course_form.html.ep b/templates/ContentGenerator/CourseAdmin/hide_inactive_course_form.html.ep index 152bb1cbf2..be442fb54f 100644 --- a/templates/ContentGenerator/CourseAdmin/hide_inactive_course_form.html.ep +++ b/templates/ContentGenerator/CourseAdmin/hide_inactive_course_form.html.ep @@ -12,7 +12,7 @@ <%= maketext( 'Courses are listed either alphabetically or in order by the time of most recent login activity, ' . 'oldest first. To change the listing order check the mode you want and click "Refresh Listing". ' - . 'The listing format is: Course_Name (status :: date/time of most recent login) where status is "hidden" ' + . 'The listing format is: Course_ID (status :: date/time of most recent login) where status is "hidden" ' . 'or "visible".' ) =%>

@@ -43,7 +43,7 @@ %
<%= maketext('Select course(s) to hide or unhide.') %>
- <%= label_for hide_courseIDs => maketext('Course Name:'), class => 'col-auto col-form-label fw-bold' =%> + <%= label_for hide_courseIDs => maketext('Course ID:'), class => 'col-auto col-form-label fw-bold' =%>
<%= select_field hide_courseIDs => [ map { [ $courseLabels->{$_} => $_ ] } @$hideCourseIDs ], id => 'hide_courseIDs', diff --git a/templates/ContentGenerator/CourseAdmin/rename_course_form.html.ep b/templates/ContentGenerator/CourseAdmin/rename_course_form.html.ep index 9cb34b3546..7d17ed2972 100644 --- a/templates/ContentGenerator/CourseAdmin/rename_course_form.html.ep +++ b/templates/ContentGenerator/CourseAdmin/rename_course_form.html.ep @@ -16,11 +16,11 @@ . 'string.' ) =%>

-
+
<%= label_for rename_oldCourseID => maketext('Course ID:'), - class => 'col-sm-6 col-form-label fw-bold' =%> -
+ class => 'col-lg-3 col-md-4 col-form-label fw-bold' =%> +
<%= select_field rename_oldCourseID => [ map { [ $_ => $_ ] } @courseIDs ], class => 'form-select', size => 10, @@ -28,43 +28,43 @@
-
+
-
+
<%= text_field rename_newCourseID => '', class => 'form-control', 'aria-labelledby' => 'rename_newCourseID_label' =%>
-
+
-
+
<%= text_field rename_newCourseTitle => '', class => 'form-control', 'aria-labelledby' => 'rename_newCourseTitle_label' =%>
-
+
-
+
<%= text_field rename_newCourseInstitution => '', class => 'form-control', 'aria-labelledby' => 'rename_newCourseInstitution_label' =%>
diff --git a/templates/ContentGenerator/CourseAdmin/unarchive_course_form.html.ep b/templates/ContentGenerator/CourseAdmin/unarchive_course_form.html.ep index 0dcda1fbfc..1218c6bfe7 100644 --- a/templates/ContentGenerator/CourseAdmin/unarchive_course_form.html.ep +++ b/templates/ContentGenerator/CourseAdmin/unarchive_course_form.html.ep @@ -3,7 +3,8 @@

<%= maketext('Unarchive Course') %> <%= $c->helpMacro('AdminUnarchiveCourse') %>

% % # Find courses which have been archived. -% my @courseIDs = sort { lc($a) cmp lc($b) } listArchivedCourses($ce); +% my %courseArchives = listArchivedCourses($ce); +% my @courseIDs = sort { lc($a) cmp lc($b) } keys %courseArchives; % % if (@courseIDs) { <%= form_for current_route, method => 'POST', begin =%> @@ -12,20 +13,25 @@ %
<%= maketext('Select a course to unarchive.') =%>
% -
+
- <%= label_for 'unarchive_courseID' => maketext('Course Name:'), class => 'col-sm-4 col-form-label' =%> -
- <%= select_field unarchive_courseID => \@courseIDs, - id => 'unarchive_courseID', - class => 'form-select', - size => 10 + <%= label_for 'unarchive_courseID' => maketext('Course ID:'), + class => 'col-lg-3 col-md-4 col-form-label fw-bold' =%> +
+ <%= select_field + unarchive_courseID => [ + map { [ "$_ ($courseArchives{$_}{size})" => $courseArchives{$_}{filename} ] } @courseIDs + ], + id => 'unarchive_courseID', + class => 'form-select', + size => 10 =%>
- <%= label_for new_courseID => maketext('New Name:'), class => 'col-sm-4 col-form-label' =%> -
+ <%= 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', size => 25,