--- loncom/cgi/quotacheck.pl 2014/08/23 18:54:45 1.7 +++ loncom/cgi/quotacheck.pl 2015/05/04 15:13:57 1.8 @@ -6,7 +6,7 @@ $|=1; # requested domain, or current server should belong to requested # domain. # -# $Id: quotacheck.pl,v 1.7 2014/08/23 18:54:45 raeburn Exp $ +# $Id: quotacheck.pl,v 1.8 2015/05/04 15:13:57 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,6 +36,7 @@ use strict; use lib '/home/httpd/lib/perl/'; use Apache::lonnet(); use Apache::loncommon(); +use Apache::courseclassifier(); use Apache::lonlocal(); use LONCAPA::Configuration(); use LONCAPA::loncgi(); @@ -85,7 +86,7 @@ sub main { return; } } - my (%gets,%posted,$reqdom,$crstype,%params); + my ($reqdom,$crstype,$type,%params); # # Get domain -- if this is for an authenticated user (i.e., not IP-based access) @@ -99,11 +100,12 @@ sub main { $crstype = 'Course'; if ($params{'type'} eq 'Community') { $crstype = $params{'type'}; + $type = $crstype; } if ($params{'fixeddom'}) { $reqdom = $params{'fixeddom'} } - unless ($params{'sortby'}) { $params{'sortby'} = 'cdesc'; } } if (($reqdom eq '') && ($ENV{'QUERY_STRING'})) { + my %gets; &LONCAPA::loncgi::cgi_getitems($ENV{'QUERY_STRING'},\%gets); if (ref($gets{'domain'}) eq 'ARRAY') { $gets{'domain'}->[0] =~ s/^\s+|\s+$//g; @@ -114,41 +116,62 @@ sub main { } } } + if (($crstype eq '') && (ref($gets{'type'}) eq 'ARRAY')) { + $gets{'type'}->[0] =~ s/^\s+|\s+$//g; + if (lc($gets{'type'}->[0]) eq 'community') { + $crstype = 'Community'; + } elsif ($gets{'type'}->[0] =~ /^(un|)official$/) { + $crstype = $gets{'type'}->[0]; + } + } + if (($params{'sortby'} eq '') && (ref($gets{'sortby'}) eq 'ARRAY')){ + $gets{'sortby'}->[0] =~ s/^\s+|\s+$//g; + if ($gets{'sortby'}->[0] =~ /^(quota|current_disk_usage|percent|quotatype|instcode)$/) { + $params{'sortby'} = $1; + } + } + if (($params{'sortorder'} eq '') && (ref($gets{'sortorder'}) eq 'ARRAY')){ + $gets{'sortorder'}->[0] =~ s/^\s+|\s+$//g; + if ($gets{'sortorder'}->[0] eq 'rev') { + $params{'sortorder'} = $gets{'sortorder'}->[0]; + } + } } if ($reqdom eq '') { $reqdom = &Apache::lonnet::default_login_domain(); } - + my $knownuser; + if (($Apache::lonnet::env{'user.name'}) && ($Apache::lonnet::env{'user.domain'})) { + $knownuser = 1; + } &Apache::lonlocal::get_language_handle(); &Apache::lonhtmlcommon::add_breadcrumb ({href=>$script."?domain=$reqdom", text=>"Content disk usage"}); - if ( ($params{'gosearch'}) || ($params{'sortby'}) ) { + if ((($params{'gosearch'}) || ($params{'sortby'})) && ($knownuser)) { &Apache::lonhtmlcommon::add_breadcrumb ({href=>$script."?domain=$reqdom", text=>"Result"}); } my $domdesc = &Apache::lonnet::domain($reqdom,'description'); - my $starthash = { - add_entries => {'onload' => "javascript:courseSet(document.filterpicker.official, 'load');"}, - }; + my $starthash; + unless ($crstype eq 'Community') { + $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); +# 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'; } # # If this is for an authenticated user (i.e., not IP-based access) @@ -156,7 +179,18 @@ ENDSCRIPT # (e.g., recent activity, recently created, institutional code, course owner etc.) # - if (($Apache::lonnet::env{'user.name'}) && ($Apache::lonnet::env{'user.domain'})) { + if ($knownuser) { + print <<"ENDSCRIPT"; + +ENDSCRIPT my ($numtitles,@codetitles); print(&Apache::loncommon::js_changer()); my ($filterlist,$filter) = &get_filters($reqdom,\%params); @@ -167,8 +201,10 @@ ENDSCRIPT foreach my $item (@standardnames) { if ($params{'official'} eq 'on') { $Apache::lonnet::env{'form.'.$item} = $params{$item}; + $type = 'official'; } else { $Apache::lonnet::env{'form.'.$item} = 0; + $type = 'unofficial'; } } $Apache::lonnet::env{'form.state'} = $params{'state'}; @@ -181,30 +217,52 @@ ENDSCRIPT 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,$sortby,$sortorder); + &print_usage($lonhost,$reqdom,\@showcourses,$sortby,$sortorder,$type, + $knownuser,$script); } - - print(&Apache::loncommon::end_page()); - return; + } else { + my ($instcodefilter,$regexpok,@showcourses); + $instcodefilter = '.'; + if ($crstype eq '') { + $crstype = '.'; + } elsif ($crstype =~ /^(un|)official$/) { + $type = $crstype; + my ($numtitles,@codetitles,%cat_items,%cat_titles,%cat_order); + (undef,undef,$numtitles) = + &Apache::courseclassifier::instcode_selectors_data($reqdom,'filterpicker', + \%cat_items,\@codetitles, + \%cat_titles,\%cat_order); + foreach my $item (@codetitles) { + $Apache::lonnet::env{'form.'.$item} = 0; + } + $instcodefilter = + &Apache::courseclassifier::instcode_search_str($reqdom,$numtitles,\@codetitles); + if ($crstype eq 'official') { + $regexpok = 1; + } elsif ($crstype eq 'unofficial') { + unless ($instcodefilter eq '') { + $regexpok = -1; + } + } + $crstype = 'Course'; + } + my %courseshash = &Apache::lonnet::courseiddump($reqdom,'.',1,$instcodefilter,'.','.', + undef,undef,$crstype,$regexpok); + if (keys(%courseshash)) { + @showcourses = keys(%courseshash); + } + &print_usage($lonhost,$reqdom,\@showcourses,$sortby,$sortorder,$type,$knownuser, + $script); } - &print_usage($lonhost,$reqdom); print(&Apache::loncommon::end_page()); return; } sub print_usage { - my ($lonhost,$dom,$courses,$sortby,$sortorder) = @_; + my ($lonhost,$dom,$courses,$sortby,$sortorder,$type,$knownuser,$script) = @_; my @domains = &Apache::lonnet::current_machine_domains(); my @ids=&Apache::lonnet::current_machine_ids(); my $domain = &Apache::lonnet::host_domain($lonhost); @@ -285,6 +343,7 @@ sub print_usage { # Print column headers my $output = ''; foreach my $key (@order) { + next if (($key eq 'instcode') && ($type ne 'official') && ($type ne '')); my $idx; # Append an up or down arrow to sorted column if ($sortby eq $key) { @@ -292,9 +351,20 @@ sub print_usage { if ($sortorder eq 'rev') { $idx ++; } $idx = $idx%2; } else { $idx = 2; } # No arrow if column not sorted - $output .= ''.$columns{$key}{text} - .$arrows[$idx].''; + my $link = 'javascript:changeSort('."'$key'".');'; + if (!$knownuser) { + $link = $script.'?domain='.$dom.'&sortby='.$key; + if ($type =~ /^((un|)official)|(C|c)ommunity/) { + $link .='&type='.$type; + } + if ($sortby eq $key) { + unless ($sortorder) { + $link .= '&sortorder=rev'; + } + } + } + $output .= ''.$columns{$key}{text} + .$arrows[$idx].''; } print(&Apache::loncommon::start_data_table() .&Apache::loncommon::start_data_table_header_row().$output @@ -411,9 +481,11 @@ sub print_usage { foreach my $course (@sorted_courses) { print(&Apache::loncommon::start_data_table_row(). ''.$usagehash->{$course}->{"quotatype"}.''. - ''.$usagehash->{$course}->{"cdesc"}.''. - ''.$usagehash->{$course}->{"instcode"}.''. - ''.$usagehash->{$course}->{"quota"}.''. + ''.$usagehash->{$course}->{"cdesc"}.''); + if (($type eq 'official') || (!$type)) { + print(''.$usagehash->{$course}->{"instcode"}.''); + } + print(''.$usagehash->{$course}->{"quota"}.''. ''.$usagehash->{$course}->{"current_disk_usage"}.''. ''.$usagehash->{$course}->{"percent"}.''. &Apache::loncommon::end_data_table_row()