--- loncom/publisher/lonpubdir.pm 2007/01/10 19:51:35 1.99 +++ loncom/publisher/lonpubdir.pm 2008/11/10 13:43:51 1.111 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Construction Space Directory Lister # -# $Id: lonpubdir.pm,v 1.99 2007/01/10 19:51:35 albertel Exp $ +# $Id: lonpubdir.pm,v 1.111 2008/11/10 13:43:51 jms Exp $ # # Copyright Michigan State University Board of Trustees # @@ -27,6 +27,118 @@ # ### +=head1 NAME + +Apache::lonpubdir - Construction space directory lister + +=head1 SYNOPSIS + +Invoked (for various locations) by /etc/httpd/conf/srm.conf: + + <LocationMatch "^/\~.*/$"> + 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 + </LocationMatch> + + <Location /adm/pubdir> + 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 + </Location> + +=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 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; @@ -105,7 +217,7 @@ sub handler { my $numres = 0; # Start off the directory table. - $r->print('<h3>Directory Contents:</h3>'); + $r->print('<h3>'.&mt('Directory Contents:').'</h3>'); $r->print('<table id="LC_browser"><tr>'. '<th>'.&mt('Type').'</th>'. '<th>'.&mt('Actions').'</th>'. @@ -197,7 +309,7 @@ sub startpage { my $formaction='/priv/'.$uname.$thisdisfn.'/'; $formaction=~s|/+|/|g; my $pagetitle .= &Apache::loncommon::help_open_menu('','',3,'Authoring'). - '<font face="Arial, Helvetica, sans-serif" size="+1"><b>Construction Space</b>:</font> '. + '<font face="Arial, Helvetica, sans-serif" size="+1"><b>'.&mt('Construction Space').'</b>:</font> '. '<form name="dirs" method="post" action="'.$formaction. '" target="_parent"><tt><b>'. &Apache::lonhtmlcommon::crumbs($uname.$thisdisfn.'/','_top','/priv','','+1',1)."</b></tt><br />". @@ -211,16 +323,20 @@ sub startpage { {'body_title' => $pagetitle,})); } else { - $r->print(&Apache::loncommon::start_page('Construction Space',undef)); + $r->print(&Apache::loncommon::start_page('Construction Space',undef, + { 'only_body' => 1,})); $r->print($pagetitle); } + my $esc_thisdisfn = &Apache::loncommon::escape_single($thisdisfn); + my $doctitle = 'LON-CAPA '.&mt('Construction Space'); + my $newname = &mt('New Name'); my $pubdirscript=(<<ENDPUBDIRSCRIPT); <script type="text/javascript"> -top.document.title = '$thisdisfn/ - LON-CAPA Construction Space'; +top.document.title = '$esc_thisdisfn/ - $doctitle'; // Store directory location for menu bar to find -parent.lastknownpriv='/~$uname$thisdisfn/'; +parent.lastknownpriv='/~$uname$esc_thisdisfn/'; // Confirmation dialogues @@ -311,7 +427,7 @@ parent.lastknownpriv='/~$uname$thisdisfn } function changename(theform,activity) { var oldname=theform.dispfilename.value; - var newname=prompt('New Name',oldname); + var newname=prompt('$newname',oldname); if (newname == "" || !newname || newname == oldname) { return } @@ -354,17 +470,20 @@ sub dircontrols { ncrf => 'New custom rights file', nsty => 'New style file', nlib => 'New library file', + nbt => 'New bridgetask file', nsub => 'New subdirectory', renm => 'Rename current file to', move => 'Move current file to', copy => 'Copy current file to', type => 'Type Name Here', - go => 'Go', + go => 'Go', prnt => 'Print contents of directory', crea => 'Create a new directory or LON-CAPA document', acti => 'Actions for current directory', - updc => 'Upload a new document' + updc => 'Upload a new document', + pick => 'Please select an action to perform using the new filename', ); + my $mytype = $lt{'type'}; # avoid conflict with " and ' in javascript $r->print(<<END); <table id="LC_cstr_controls"> <tr> @@ -403,18 +522,29 @@ sub dircontrols { <form name="fileaction" method="post" action="/adm/cfile" target="_parent"> <span style="white-space: nowrap"> <input type="hidden" name="filename" value="/~$uname$thisdisfn/" /> - <select name="action"> - <option value="Select Action">$lt{'sela'}</option> - <option value="newfile">$lt{'nfil'}:</option> - <option value="newhtmlfile">$lt{'nhtm'}:</option> - <option value="newproblemfile">$lt{'nprb'}:</option> - <option value="newpagefile">$lt{'npag'}:</option> - <option value="newsequencefile">$lt{'nseq'}:</option> - <option value="newrightsfile">$lt{'ncrf'}:</option> - <option value="newstyfile">$lt{'nsty'}:</option> - <option value="newlibraryfile">$lt{'nlib'}:</option> - <option value="newdir">$lt{'nsub'}:</option> - </select> <input type="text" name="newfilename" value="Type Name Here" onfocus="if (this.value == 'Type Name Here') this.value=''" /> <input type="button" value="Go" onclick="document.fileaction.submit()" /> + <script type="text/javascript"> + function validate_go() { + var selected = document.fileaction.action.selectedIndex; + if (selected == 0) { + alert('$lt{'pick'}'); + } else { + document.fileaction.submit(); + } + } + </script> + <select name="action"> + <option value="none">$lt{'sela'}</option> + <option value="newfile">$lt{'nfil'}:</option> + <option value="newhtmlfile">$lt{'nhtm'}:</option> + <option value="newproblemfile">$lt{'nprb'}:</option> + <option value="newpagefile">$lt{'npag'}:</option> + <option value="newsequencefile">$lt{'nseq'}:</option> + <option value="newrightsfile">$lt{'ncrf'}:</option> + <option value="newstyfile">$lt{'nsty'}:</option> + <option value="newtaskfile">$lt{'nbt'}:</option> + <option value="newlibraryfile">$lt{'nlib'}:</option> + <option value="newdir">$lt{'nsub'}:</option> + </select> <input type="text" name="newfilename" value="$lt{'type'}" onfocus="if (this.value == '$mytype') this.value=''" /> <input type="button" value="Go" onclick="validate_go();" /> </span> </form> </td> @@ -523,7 +653,7 @@ sub putdirectory { )); my $actionitem = ''; if ($dirname eq '..') { - $actionitem = 'Go to ...'; + $actionitem = &mt('Go to ...'); } else { $actionitem = '<form name="dirselect_'.$$numdir. @@ -609,7 +739,6 @@ sub putresource { $title = '<a href="/res/'.$targetdir.'/'.$filename. '.meta" target="cat">'. &getTitleString($targetdir.'/'.$filename).'</a>'; - &Apache::lonnet::logthis("same $same meta $meta_same"); if ($same) { if (&Apache::lonnet::metadata($targetdir.'/'.$filename,'obsolete')) { $pubstatus = 'obsolete'; @@ -639,7 +768,7 @@ sub putresource { } $title.="\n".'<br /><a href="/~'.$uname.$thisdisfn.'/'.$filename.'.meta">'. - ($$bombs{$targetdir.'/'.$filename}?'<img src="/adm/lonMisc/bomb.gif" border="0" alt="bomb" />':'Edit Metadata').'</a>'; + ($$bombs{$targetdir.'/'.$filename}?'<img src="/adm/lonMisc/bomb.gif" border="0" alt="'.&mt('bomb').'" />':&mt('Edit Metadata')).'</a>'; if (!$meta_same) { $title = &mt('Metadata Modified').'<br />'.$title. @@ -675,7 +804,7 @@ sub putresource { '<td>'.($filename=~/[\#\~]$/?' ': '<img src="'.&Apache::loncommon::icon($filename).'" alt="" />').'</td>'. '<td>'.$pub_select.'</td>'. - '<td><span class="LC_filename"> '. + '<td><span class="LC_filename">'. '<a href="'.$linkdir.'/'.$filename.'" target="_parent">'. $filename.'</a></span>'.$editlink2.$editlink. '</td>'. @@ -768,59 +897,4 @@ sub CategorizeFiles { 1; __END__ -=head1 NAME - -Apache::lonpubdir - Construction space directory lister - -=head1 SYNOPSIS - -Invoked (for various locations) by /etc/httpd/conf/srm.conf: - <LocationMatch "^/\~.*/$"> - 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 - </LocationMatch> - - <Location /adm/pubdir> - 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 - </Location> - -=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 - -=cut