--- loncom/publisher/lonpubdir.pm 2007/01/10 19:51:35 1.99 +++ loncom/publisher/lonpubdir.pm 2014/10/13 14:50:42 1.161 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA -# Construction Space Directory Lister +# Authoring Space Directory Lister # -# $Id: lonpubdir.pm,v 1.99 2007/01/10 19:51:35 albertel Exp $ +# $Id: lonpubdir.pm,v 1.161 2014/10/13 14:50:42 goltermann Exp $ # # Copyright Michigan State University Board of Trustees # @@ -33,7 +33,6 @@ use strict; use Apache::File; use File::Copy; use Apache::Constants qw(:common :http :methods); -use Apache::loncacc; use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::londiff(); @@ -41,143 +40,293 @@ use Apache::lonlocal; use Apache::lonmsg; use Apache::lonmenu; use Apache::lonnet; -use LONCAPA; +use LONCAPA qw(:DEFAULT :match); sub handler { - my $r=shift; + my $r=shift; - my $fn; + # Validate access to the construction space and get username:domain. + my ($uname,$udom)=&Apache::lonnet::constructaccess($r->uri); + unless (($uname) && ($udom)) { + return HTTP_NOT_ACCEPTABLE; + } +# ----------------------------------------------------------- Start page output - $fn = getEffectiveUrl($r); + my $fn=$r->filename; + $fn=~s/\/$//; + my $thisdisfn=$fn; + + my $docroot=$r->dir_config('lonDocRoot'); # Apache londocument root. + if ($thisdisfn eq "$docroot/priv/$udom") { + if ((-d "/home/$uname/public_html/") && (!-e "$docroot/priv/$udom/$uname")) { + my ($version) = ($r->dir_config('lonVersion') =~ /^\'?(\d+\.\d+)\./); + &Apache::loncommon::content_type($r,'text/html'); + $r->send_http_header; + + &Apache::lonhtmlcommon::clear_breadcrumbs(); + $r->print(&Apache::loncommon::start_page('Authoring Space'). + '
'. + &mt('Your Authoring Space is currently in the location used by LON-CAPA version 2.10 and older, but your domain is using a newer LON-CAPA version ([_1]).',$version).'
'. + ''. + &mt('Please ask your Domain Coordinator to move your Authoring Space to the new location.'). + '
'. + ''.&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; + } - # Remove trailing / from directory name. + &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. - $fn=~s/\/$//; + 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; + } - unless ($fn) { - $r->log_reason($env{'user.name'}.' at '.$env{'user.domain'}. - ' trying to list empty directory', $r->filename); - return HTTP_NOT_FOUND; - } + # Retrieving value for "sortby" and "sortorder" from QUERY_STRING + &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, + ['sortby','sortorder']); + + # 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'}; + + # 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}) ? + ''.&mt('Type').' | '. - ''.&mt('Actions').' | '. - ''.&mt('Name').' | '. - ''.&mt('Title').' | '. - ''.&mt('Status').' | '. - ''.&mt('Last Modified'). - ' |
---|
'. - ' | '. -' |
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.
More information about this error may be available in the server error log.