--- loncom/publisher/lonpubdir.pm 2008/11/17 13:41:10 1.113 +++ loncom/publisher/lonpubdir.pm 2009/05/19 22:52:29 1.121 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Construction Space Directory Lister # -# $Id: lonpubdir.pm,v 1.113 2008/11/17 13:41:10 schafran Exp $ +# $Id: lonpubdir.pm,v 1.121 2009/05/19 22:52:29 bisitz Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,118 +27,6 @@ # ### -=head1 NAME - -Apache::lonpubdir - Construction space directory lister - -=head1 SYNOPSIS - -Invoked (for various locations) by /etc/httpd/conf/srm.conf: - - - PerlAccessHandler Apache::loncacc - SetHandler perl-script - PerlHandler Apache::lonpubdir - ErrorDocument 403 /adm/login - ErrorDocument 404 /adm/notfound.html - ErrorDocument 406 /adm/unauthorized.html - ErrorDocument 500 /adm/errorhandler - - - - PerlAccessHandler Apache::lonacc - SetHandler perl-script - PerlHandler Apache::lonpubdir - ErrorDocument 403 /adm/login - ErrorDocument 404 /adm/notfound.html - ErrorDocument 406 /adm/unauthorized.html - ErrorDocument 500 /adm/errorhandler - - -=head1 INTRODUCTION - -This module publishes a directory of files. - -This is part of the LearningOnline Network with CAPA project -described at http://www.lon-capa.org. - -=head1 HANDLER SUBROUTINE - -This routine is called by Apache and mod_perl. - -=over 4 - -=item * - -read in information - -=item * - -start page output - -=item * - -run through list of files and attempt to publish unhidden files - -=back - -=head2 OTHER SUBROUTINES: - -=head3 startpage($r, $uame, $udom, $thisdisfn) - -Output the header of the page. This includes: - - The HTML header - - The H1/H3 stuff which includes the directory. - - startpage($r, $uame, $udom, $thisdisfn); - $r - The apache request object. - $uname - User name. - $udom - Domain name the user is logged in under. - $thisdisfn - Displayable version of the filename. - -=head3 getTitleString($fullname) - - Get the title string or "[untitled]" if the file has no title metadata: - Without the latter substitution, it's impossible to examine metadata for - untitled resources. Resources may be legitimately untitled, to prevent - searches from locating them. - - $str = getTitleString($fullname); - $fullname - Fully qualified filename to check. - -=head3 putdirectory(r, base, here, dirname, modtime) - - Put out a directory table row: - - putdirectory($r, $base, $here, $dirname, $modtime) - $r - Apache request object. - $reqfile - File in request. - $here - Where we are in directory tree. - $dirname - Name of directory special file. - $modtime - Encoded modification time. - -=head3 CategorizeFiles($location, $files) - - Categorize files in the directory. - For each file in a list of files in a file directory, - the file categorized as one of: - - directory - - sequence - - problem - - Other resource. - - For each file the modification date is determined as well. - Returned is a list of sublists: - (directories, sequences, problems, other) - each of the sublists contains entries of the following form (sorted by filename): - (filename, typecode, lastmodtime) - - $list = CategorizeFiles($location, $files) - $location - Directory in which the files live (relative to our execution) - $files - list of files. - -=cut - package Apache::lonpubdir; use strict; @@ -174,7 +62,7 @@ sub handler { &Apache::loncacc::constructaccess( $fn,$r->dir_config('lonDefDomain')); unless (($uname) && ($udom)) { - $r->log_reason($uname.' at '.$udom. + $r->log_reason($uname.':'.$udom. ' trying to list directory '.$env{'form.filename'}. ' ('.$fn.') - not authorized', $r->filename); @@ -186,7 +74,7 @@ sub handler { $fn=~s/\/$//; unless ($fn) { - $r->log_reason($env{'user.name'}.' at '.$env{'user.domain'}. + $r->log_reason($env{'user.name'}.':'.$env{'user.domain'}. ' trying to list empty directory', $r->filename); return HTTP_NOT_FOUND; } @@ -217,15 +105,16 @@ sub handler { my $numres = 0; # Start off the directory table. - $r->print('

'.&mt('Directory Contents:').'

'); - $r->print(''. - ''. - ''. - ''. - ''. - ''. - ''."\n"); + $r->print(&Apache::loncommon::start_data_table() + .&Apache::loncommon::start_data_table_header_row() + .'' + .'' + .'' + .'' + .'' + .'' + .&Apache::loncommon::end_data_table_header_row() + ); my $filename; my $dirptr=16384; # Mask indicating a directory in stat.cmode. @@ -251,7 +140,9 @@ sub handler { } closedir(DIR); - $r->print('
'.&mt('Type').''.&mt('Actions').''.&mt('Name').''.&mt('Title').''.&mt('Status').''.&mt('Last Modified'). - '
'.&mt('Type').''.&mt('Actions').''.&mt('Name').''.&mt('Title').''.&mt('Status').''.&mt('Last Modified').'
'.&Apache::loncommon::end_page()); + $r->print(&Apache::loncommon::end_data_table() + .&Apache::loncommon::end_page() + ); return OK; } # @@ -268,7 +159,7 @@ sub getEffectiveUrl { # Replace the ~username of the URL with /home/username/public_html # so that we don't have to worry about ~ expansion internally. # - $fn=~s/^http\:\/\/[^\/]+\///; + $fn=~s/^https?\:\/\/[^\/]+\///; $fn=~s/^\///; $fn=~s{~($LONCAPA::username_re)}{/home/$1/public_html}; @@ -308,26 +199,21 @@ sub startpage { my $formaction='/priv/'.$uname.$thisdisfn.'/'; $formaction=~s|/+|/|g; - my $pagetitle .= &Apache::loncommon::help_open_menu('','',3,'Authoring'). - ''.&mt('Construction Space').': '. - '
'. - &Apache::lonhtmlcommon::crumbs($uname.$thisdisfn.'/','_top','/priv','','+1',1)."
". - &Apache::lonhtmlcommon::select_recent('construct','recent', - 'this.form.action=this.form.recent.value;this.form.submit()'). - '
'; &Apache::lonhtmlcommon::store_recent('construct',$formaction,$formaction); + if ($env{'environment.remote'} eq 'off') { - $env{'request.noversionuri'}=$currdir.'/'; - $r->print(&Apache::loncommon::start_page('Construction Space',undef, - {'body_title' => - $pagetitle,})); + $env{'request.noversionuri'}=$currdir.'/'; + $r->print(&Apache::loncommon::start_page('Construction Space',undef)); } else { - $r->print(&Apache::loncommon::start_page('Construction Space',undef, - { 'only_body' => 1,})); - $r->print($pagetitle); + $r->print(&Apache::loncommon::start_page('Construction Space',undef, + { 'only_body' => 1,})); } + $r->print(&Apache::lonhtmlcommon::breadcrumbs()); # FIXME add breadcrumbs + + $r->print(&Apache::loncommon::head_subbox( + &Apache::loncommon::CSTR_pageheader(1))); + my $esc_thisdisfn = &Apache::loncommon::escape_single($thisdisfn); my $doctitle = 'LON-CAPA '.&mt('Construction Space'); my $newname = &mt('New Name'); @@ -442,8 +328,7 @@ ENDPUBDIRSCRIPT if ((($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) && $env{'environment.remote'} ne 'off') { - $r->print('

'.&mt('Co-Author').': '.$uname.' at '.$udom. - '

'); + $r->print('

'.&mt('Co-Author [_1]',$uname.':'.$udom).'

'); } } @@ -485,42 +370,46 @@ sub dircontrols { ); my $mytype = $lt{'type'}; # avoid conflict with " and ' in javascript $r->print(< - - $lt{'acti'} - $lt{'updc'} - $lt{'crea'} - - - -
- - - -
-
- - -
-
- -
- - -
- - - -
- - -
- + + + + +
+ + +
+
+ +
+ + +
+
+
+ $lt{'updc'} + + + +
+
+
+ +
+
+
+ $lt{'crea'} +