--- loncom/publisher/lonpubdir.pm 2014/06/23 03:22:39 1.156 +++ loncom/publisher/lonpubdir.pm 2016/09/14 16:48:02 1.160.2.2 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Authoring Space Directory Lister # -# $Id: lonpubdir.pm,v 1.156 2014/06/23 03:22:39 raeburn Exp $ +# $Id: lonpubdir.pm,v 1.160.2.2 2016/09/14 16:48:02 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -88,6 +88,26 @@ sub handler { my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom); &startpage($r, $uname, $udom, $thisdisfn); # Put out the start of page. + + if (!-d $fn) { + if (-e $fn) { + $r->print('

'.&mt('Requested item is a file not a directory.').'

'); + } else { + $r->print('

'.&mt('The requested subdirectory does not exist.').'

'); + } + $r->print(&Apache::loncommon::end_page()); + return OK; + } + my @files; + if (opendir(DIR,$fn)) { + @files = grep(!/^\.+$/,readdir(DIR)); + closedir(DIR); + } else { + $r->print('

'.&mt('Could not open directory.').'

'); + $r->print(&Apache::loncommon::end_page()); + return OK; + } + &dircontrols($r,$uname,$udom,$thisdisfn); # Put out actions for directory, # browse/upload + new file page. &resourceactions($r,$uname,$udom,$thisdisfn); # Put out form used for printing/deletion etc. @@ -95,6 +115,16 @@ sub handler { my $numdir = 0; my $numres = 0; + if ((@files == 0) && ($thisdisfn =~ m{^/$match_domain/$match_username})) { + if ($thisdisfn =~ m{^/$match_domain/$match_username$}) { + $r->print('

'.&mt('This Authoring Space is currently empty.').'

'); + } else { + $r->print('

'.&mt('This subdirectory is currently empty.').'

'); + } + $r->print(&Apache::loncommon::end_page()); + return OK; + } + # Retrieving value for "sortby" and "sortorder" from QUERY_STRING &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['sortby','sortorder']); @@ -102,57 +132,78 @@ sub handler { # Sort by name as default, not reversed if (! exists($env{'form.sortby'})) { $env{'form.sortby'} = 'filename' } if (! exists($env{'form.sortorder'})) { $env{'form.sortorder'} = '' } - my $sortby = $env{'form.sortby'}; my $sortorder = $env{'form.sortorder'}; - opendir(DIR,$fn); - my @files = readdir(DIR); - closedir(DIR); - - if ((@files == 0) && ($thisdisfn =~ m{^/$match_domain/$match_username})) { - $r->print('

'.&mt('This Authoring Space is currently empty.').'

'); - $r->print(&Apache::loncommon::end_page()); - return OK; + # Order in which columns are displayed from left to right + my @order = ('filetype','actions','filename','title', + 'pubstatus','cmtime','size'); + + # Up and down arrows to indicate sort order + my @arrows = (' ▲',' ▼',''); + + # Default sort order and column title + my %columns = ( + filetype => { + order => 'ascending', + text => &mt('Type'), + }, + actions => { + # Not sortable + text => &mt('Actions'), + }, + filename => { + order => 'ascending', + text => &mt('Name'), + }, + title => { + order => 'ascending', + text => &mt('Title'), + }, + pubstatus => { + order => 'ascending', + text => &mt('Status'), + colspan => '2', + }, + cmtime => { + order => 'descending', + text => &mt('Last Modified'), + }, + size => { + order => 'ascending', + text => &mt('Size').' (kB)', + }, + ); + + # Print column headers + my $output = ''; + foreach my $key (@order) { + my $idx; + # Append an up or down arrow to sorted column + if ($sortby eq $key) { + $idx = ($columns{$key}{order} eq 'ascending') ? 0:1; + if ($sortorder eq 'rev') { $idx ++; } + $idx = $idx%2; + } else { $idx = 2; } # No arrow if column is not sorted + $output .= (($columns{$key}{order}) ? + '' + .$columns{$key}{text}.$arrows[$idx].'' : + ''.$columns{$key}{text}.''); } - - # Start off the directory table. $r->print(&Apache::loncommon::start_data_table() - .&Apache::loncommon::start_data_table_header_row() - .''.&mt('Type') - .'' - .''.&mt('Actions').'' - .''.&mt('Name') - .'' - .''.&mt('Title') - .'' - .''.&mt('Status') - .'' - .''.&mt('Last Modified') - .'' - .''.&mt('Size').' (kB)' - .'' + .&Apache::loncommon::start_data_table_header_row() . $output .&Apache::loncommon::end_data_table_header_row() ); my $dirptr=16384; # Mask indicating a directory in stat.cmode. my $filehash = {}; foreach my $filename (@files) { - # Skip .DS_Store and hidden files + # Skip .DS_Store, .DAV and hidden files my ($extension) = ($filename=~/\.(\w+)$/); next if (($filename eq '.DS_Store') + || ($filename eq '.DAV') || (&Apache::loncommon::fileembstyle($extension) eq 'hdn') || ($filename =~ /^\._/)); @@ -293,7 +344,8 @@ sub startpage { $r->print(&Apache::loncommon::head_subbox( '
' - .&Apache::lonhtmlcommon::display_usage($current_disk_usage,$disk_quota) + .&Apache::lonhtmlcommon::display_usage($current_disk_usage, + $disk_quota,'authoring') .'
' .&Apache::loncommon::CSTR_pageheader())); @@ -511,7 +563,44 @@ sub dircontrols { -    +    +
+ Quickactions: + + + + + + + + + + +