--- loncom/cgi/quotacheck.pl 2014/03/17 02:37:13 1.1 +++ loncom/cgi/quotacheck.pl 2014/07/31 15:57:24 1.5 @@ -6,7 +6,7 @@ $|=1; # requested domain, or current server should belong to requested # domain. # -# $Id: quotacheck.pl,v 1.1 2014/03/17 02:37:13 raeburn Exp $ +# $Id: quotacheck.pl,v 1.5 2014/07/31 15:57:24 musolffc Exp $ # # Copyright Michigan State University Board of Trustees # @@ -51,6 +51,8 @@ if (ref($perlvar) eq 'HASH') { } undef($perlvar); +my $script = "/cgi-bin/quotacheck.pl"; + print &LONCAPA::loncgi::cgi_header('text/html',1); &main($lonhost); @@ -59,7 +61,7 @@ sub main { if ($lonhost eq '') { &Apache::lonlocal::get_language_handle(); &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"/cgi-bin/quotacheck.pl", + ({href=>$script, text=>"Content disk usage"}); print(&Apache::loncommon::start_page('Course/Community disk usage and quotas'). &Apache::lonhtmlcommon::breadcrumbs('Course/Community status'). @@ -91,7 +93,6 @@ sub main { # (b) value of domain item in query string # (c) default login domain for current server # - if (($Apache::lonnet::env{'user.name'}) && ($Apache::lonnet::env{'user.domain'})) { my $q = CGI->new; %params = $q->Vars; @@ -99,9 +100,7 @@ sub main { if ($params{'type'} eq 'Community') { $crstype = $params{'type'}; } - if ($params{'fixeddom'}) { - $reqdom = $params{'fixeddom'}; - } + if ($params{'fixeddom'}) { $reqdom = $params{'fixeddom'} } } if (($reqdom eq '') && ($ENV{'QUERY_STRING'})) { &LONCAPA::loncgi::cgi_getitems($ENV{'QUERY_STRING'},\%gets); @@ -121,18 +120,34 @@ sub main { &Apache::lonlocal::get_language_handle(); &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"/cgi-bin/quotacheck.pl?domain=$reqdom", + ({href=>$script."?domain=$reqdom", text=>"Content disk usage"}); - if ($params{'gosearch'}) { + if ( ($params{'gosearch'}) || ($params{'sortby'}) ) { &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"/cgi-bin/quotacheck.pl?domain=$reqdom", + ({href=>$script."?domain=$reqdom", text=>"Result"}); } my $domdesc = &Apache::lonnet::domain($reqdom,'description'); - print(&Apache::loncommon::start_page('Course/Community disk usage and quotas'). + my $starthash = { + add_entries => {'onload' => "javascript:courseSet(document.filterpicker.official, 'load');"}, + }; + print(&Apache::loncommon::start_page('Course/Community disk usage and quotas', undef, $starthash). &Apache::lonhtmlcommon::breadcrumbs('Course/Community status'). '

'.&Apache::lonlocal::mt('Quotas for uploaded course content').'

'. '

'.$domdesc.'

'); + my $changejs = <<"ENDSCRIPT"; + +ENDSCRIPT + + print($changejs); # # If this is for an authenticated user (i.e., not IP-based access) @@ -158,18 +173,27 @@ sub main { $Apache::lonnet::env{'form.state'} = $params{'state'}; } print(&Apache::loncommon::build_filters($filterlist,$crstype,undef,undef,$filter, - '/cgi-bin/quotacheck.pl',\$numtitles, + $script,\$numtitles, 'quotacheck',undef,undef,undef, \@codetitles,$reqdom,'quotacheck',$reqdom)); - if ($params{'gosearch'}) { + if ( ($params{'gosearch'}) || ($params{'sortby'}) ) { if ($params{'official'} eq 'on') { $Apache::lonnet::env{'form.state'} = $params{'state'}; } + # Sort by course title (cdesc) as default, not reversed + my $sortby = $params{'sortby'}; + unless ($sortby =~ m{^(quota|current_disk_usage|percent|quotatype|instcode)$}) { + $sortby = 'cdesc'; + } + my $sortorder; + if ($params{'sortorder'} eq 'rev') { $sortorder = 'rev'; } + my %courses = &Apache::loncommon::search_courses($reqdom,$crstype,$filter,$numtitles, undef,undef,undef,\@codetitles); my @showcourses = keys(%courses); - &print_usage($lonhost,$reqdom,\@showcourses); + &print_usage($lonhost,$reqdom,\@showcourses,$sortby,$sortorder); } + print(&Apache::loncommon::end_page()); return; } @@ -179,7 +203,7 @@ sub main { } sub print_usage { - my ($lonhost,$dom,$courses) = @_; + my ($lonhost,$dom,$courses,$sortby,$sortorder) = @_; my @domains = &Apache::lonnet::current_machine_domains(); my @ids=&Apache::lonnet::current_machine_ids(); my $domain = &Apache::lonnet::host_domain($lonhost); @@ -197,7 +221,7 @@ sub print_usage { '

'."\n". '

'. &Apache::lonlocal::mt('Show quotas for the domain being coordinated: [_1]', - ''. + ''. $otherdomdesc.''). '

'); return; @@ -220,16 +244,31 @@ sub print_usage { @showcourses = keys(%courseshash); } } + if (@showcourses) { print(&Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_header_row(). - ''.&Apache::lonlocal::mt('Course Type').''. - ''.&Apache::lonlocal::mt('Course Title').''. - ''.&Apache::lonlocal::mt('Institutional Code').''. - ''.&Apache::lonlocal::mt('Quota (MB)').''. - ''.&Apache::lonlocal::mt('Usage (MB)').''. - ''.&Apache::lonlocal::mt('Percent usage').''. - &Apache::loncommon::end_data_table_header_row()); + &Apache::loncommon::start_data_table_header_row() + .'' + .&Apache::lonlocal::mt('Course Type') + .'' + .'' + .&Apache::lonlocal::mt('Course Title') + .'' + .'' + .&Apache::lonlocal::mt('Institutional Code') + .'' + .'' + .&Apache::lonlocal::mt('Quota (MB)') + .'' + .'' + .&Apache::lonlocal::mt('Usage (MB)') + .'' + .'' + .&Apache::lonlocal::mt('Percent usage') + .'' + .&Apache::loncommon::end_data_table_header_row()); + + my $usagehash = {}; # Sortable hash of courses foreach my $cid (@showcourses) { my %courseinfo=&Apache::lonnet::coursedescription($cid,{'one_time' => '1'}); my $cdesc = $courseinfo{'description'}; @@ -290,13 +329,61 @@ sub print_usage { $current_disk_usage = sprintf("%.0f",$current_disk_usage); $quota = sprintf("%.0f",$quota); $percent = sprintf("%.0f",$percent); + + # Enter sortable data into hash + $usagehash->{ $cid } = { + "quotatype" => $quotatype, + "cdesc" => $cdesc, + "instcode" => $instcode, + "quota" => $quota, + "current_disk_usage" => $current_disk_usage, + "percent" => $percent, + }; + } + + # Sort courses by $sortby. "cdesc" is the default. + my @sorted_courses; + if ($sortby =~ m{^(quota|current_disk_usage|percent)$}) { + # Numerical fields + if ($sortorder eq "rev") { + @sorted_courses = sort { + $usagehash->{$a}->{$sortby} <=> $usagehash->{$b}->{$sortby} + or + uc($usagehash->{$a}->{"cdesc"}) cmp uc($usagehash->{$b}->{"cdesc"}) + } (keys(%{$usagehash})); + } else { + @sorted_courses = sort { + $usagehash->{$b}->{$sortby} <=> $usagehash->{$a}->{$sortby} + or + uc($usagehash->{$a}->{"cdesc"}) cmp uc($usagehash->{$b}->{"cdesc"}) + } (keys(%{$usagehash})); + } + } elsif ($sortby =~ m{^(cdesc|quotatype|instcode)$}) { + # String fields + if ($sortorder eq "rev") { + @sorted_courses = sort { + uc($usagehash->{$b}->{$sortby}) cmp uc($usagehash->{$a}->{$sortby}) + or + uc($usagehash->{$a}->{"cdesc"}) cmp uc($usagehash->{$b}->{"cdesc"}) + } (keys(%{$usagehash})); + } else { + @sorted_courses = sort { + uc($usagehash->{$a}->{$sortby}) cmp uc($usagehash->{$b}->{$sortby}) + or + uc($usagehash->{$a}->{"cdesc"}) cmp uc($usagehash->{$b}->{"cdesc"}) + } (keys(%{$usagehash})); + } + } + + # Print data for each course. + foreach my $course (@sorted_courses) { print(&Apache::loncommon::start_data_table_row(). - ''.$quotatype.''. - ''.$cdesc.''. - ''.$instcode.''. - ''.$quota.''. - ''.$current_disk_usage.''. - ''.$percent.''. + ''.$usagehash->{$course}->{"quotatype"}.''. + ''.$usagehash->{$course}->{"cdesc"}.''. + ''.$usagehash->{$course}->{"instcode"}.''. + ''.$usagehash->{$course}->{"quota"}.''. + ''.$usagehash->{$course}->{"current_disk_usage"}.''. + ''.$usagehash->{$course}->{"percent"}.''. &Apache::loncommon::end_data_table_row() ); }