--- loncom/publisher/lonpubdir.pm	2009/11/18 20:48:06	1.125
+++ loncom/publisher/lonpubdir.pm	2011/10/22 12:34:01	1.130
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Construction Space Directory Lister
 #
-# $Id: lonpubdir.pm,v 1.125 2009/11/18 20:48:06 droeschl Exp $
+# $Id: lonpubdir.pm,v 1.130 2011/10/22 12:34:01 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -47,58 +47,34 @@ sub handler {
 
   my $r=shift;
 
-  my $fn;
-
-
-
-  $fn = getEffectiveUrl($r);
-
   # Validate access to the construction space and get username@domain.
 
   my $uname;
   my $udom;
 
-  ($uname,$udom)=
-    &Apache::loncacc::constructaccess(
-             $fn,$r->dir_config('lonDefDomain')); 
+  ($uname,$udom)=&Apache::loncacc::constructaccess($r->uri); 
   unless (($uname) && ($udom)) {
-     $r->log_reason($uname.':'.$udom.
-         ' trying to list directory '.$env{'form.filename'}.
-         ' ('.$fn.') - not authorized', 
-         $r->filename); 
      return HTTP_NOT_ACCEPTABLE;
   }
 
-  # Remove trailing / from directory name.
+# ----------------------------------------------------------- Start page output
 
+  my $fn=$r->filename;
   $fn=~s/\/$//;
 
-  unless ($fn) { 
-     $r->log_reason($env{'user.name'}.':'.$env{'user.domain'}.
-         ' trying to list empty directory', $r->filename); 
-     return HTTP_NOT_FOUND;
-  } 
-
-# ----------------------------------------------------------- Start page output
-
   my $thisdisfn=$fn;
-  $thisdisfn=~s/^\/home\/$uname\/public_html//;	# subdirectory part of
-                                                # construction space. 
   my $docroot=$r->dir_config('lonDocRoot');     # Apache  londocument root.
+  $thisdisfn=~s/^\Q$docroot\E\/priv//;
 
-  my $resdir=$docroot.'/res/'.$udom.'/'.$uname.$thisdisfn; # Resource directory
-  my $targetdir=$udom.'/'.$uname.$thisdisfn; # Publiction target directory.
-  my $linkdir='/priv/'.$uname.$thisdisfn;      # Full URL name of constr space.
+  my $resdir=$docroot.'/res'.$thisdisfn; # Resource directory
+  my $targetdir='/res'.$thisdisfn; # Publication target directory.
+  my $linkdir='/priv'.$thisdisfn;      # Full URL name of constr space.
 
   my %bombs=&Apache::lonmsg::all_url_author_res_msg($uname,$udom);
 
   &startpage($r, $uname, $udom, $thisdisfn);   # Put out the start of page.
-  if ($env{'environment.remote'} eq 'off') {
-      &dircontrols($r,$uname,$udom,$thisdisfn);    # Put out actions for directory, 
+  &dircontrols($r,$uname,$udom,$thisdisfn);    # Put out actions for directory, 
                                                # browse/upload + new file page.
-  } else {
-      &pubbuttons($r,$uname,$thisdisfn);
-  }
   &resourceactions($r,$uname,$udom,$thisdisfn); #Put out form used for printing/deletion etc.
 
   my $numdir = 0;
@@ -130,9 +106,9 @@ sub handler {
      my $extension='';
      if ($filename=~/\.(\w+)$/) { $extension=$1; }
      if ($cmode&$dirptr) {
-	 putdirectory($r, $thisdisfn, $linkdir, $filename, $cmtime,$targetdir,\%bombs,\$numdir);
+	 &putdirectory($r, $thisdisfn, $linkdir, $filename, $cmtime,$targetdir,\%bombs,\$numdir);
      } elsif (&Apache::loncommon::fileembstyle($extension) ne 'hdn') {
-	 putresource($r, $udom, $uname, $filename, $thisdisfn, $resdir, 
+	 &putresource($r, $udom, $uname, $filename, $thisdisfn, $resdir, 
 		     $targetdir, $linkdir, $cmtime,\%bombs,\$numres);
      } else {
 	# "hidden" extension and not a directory, so hide it away.
@@ -145,41 +121,7 @@ sub handler {
   );
   return OK;  
 }
-#
-#  Gets the effective URL of the request and returns it:
-#    $effn = getEffectiveUrl($r);
-#       $r  - The Apache Request object.
-sub getEffectiveUrl {
-    my $r = shift;
-    my $fn;
-    
-    if ($env{'form.filename'}) {	# If a form filename is defined.
-	$fn=$env{'form.filename'};
-	#
-	#   Replace the ~username of the URL with /home/username/public_html
-	#   so that we don't have to worry about ~ expansion internally.
-	#
-	$fn=~s/^https?\:\/\/[^\/]+\///;
-        $fn=~s/^\///;
-        $fn=~s{~($LONCAPA::username_re)}{/home/$1/public_html};
-	
-	#  Remove trailing / strings (?) 
-	
-	$fn=~s/\/[^\/]+$//;
-    } else {
-	#   If no form is defined, use request filename.
-	$fn = $r->filename();
-	my $lonDocRoot=$r->dir_config('lonDocRoot');
-	if ( $fn =~ /$lonDocRoot/ ) {
-	    #internal authentication, needs fixup.
-	    $fn = $r->uri(); # non users do not get the full path request
-                             # through SCRIPT_FILENAME
-	    $fn=~s{^/~($LONCAPA::username_re)}{/home/$1/public_html};
-	}
-    }
-    $fn=~s/\/+/\//g;
-    return $fn;
-}
+
 #
 #   Output the header of the page.  This includes:
 #   - The HTML header 
@@ -193,7 +135,6 @@ sub getEffectiveUrl {
 
 sub startpage {
     my ($r, $uname, $udom, $thisdisfn) = @_;
-    my $currdir = '/priv/'.$uname.$thisdisfn;
     &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;
 
@@ -209,13 +150,8 @@ sub startpage {
     # breadcrumbs (and tools) will be created 
     # in start_page->bodytag->innerregister
 
-    if ($env{'environment.remote'} eq 'off') {
-        $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,}));
-    }
+    $env{'request.noversionuri'}='/priv/'.$udom.'/'.$uname.$thisdisfn.'/';
+    $r->print(&Apache::loncommon::start_page('Construction Space',undef));
 
     $r->print(&Apache::loncommon::head_subbox(
                 &Apache::loncommon::CSTR_pageheader(1)));
@@ -228,7 +164,7 @@ sub startpage {
 top.document.title = '$esc_thisdisfn/ - $doctitle';
 // Store directory location for menu bar to find
 
-parent.lastknownpriv='/~$uname$esc_thisdisfn/';
+parent.lastknownpriv='/priv/$udom/$uname$esc_thisdisfn/';
 
 // Confirmation dialogues
 
@@ -331,11 +267,6 @@ parent.lastknownpriv='/~$uname$esc_thisd
 </script>
 ENDPUBDIRSCRIPT
     $r->print($pubdirscript);
-
-    if ((($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) &&
-	$env{'environment.remote'} ne 'off') {
-        $r->print('<h3>'.&mt('Co-Author [_1]',$uname.':'.$udom).'</h3>');
-    }
 }
 
 sub dircontrols {
@@ -388,7 +319,7 @@ sub dircontrols {
             <option value="printdir">$lt{'prnt'}</option>
             <option value="delete">$lt{'dedr'}</option>
         </select>
-        <input type="hidden" name="filename" value="/~$uname$thisdisfn/" />
+        <input type="hidden" name="filename" value="/priv/$udom/$uname$thisdisfn/" />
       </fieldset>
     </form>
     <form name="publishdir" method="post" action="/adm/publish" target="_parent">
@@ -404,7 +335,7 @@ sub dircontrols {
     <form name="upublisher" enctype="multipart/form-data" method="post" action="/adm/upload" target="_parent">
       <fieldset>
         <legend>$lt{'updc'}</legend>
-        <input type="hidden" name="filename" value="/~$uname$thisdisfn/" />
+        <input type="hidden" name="filename" value="/priv/$udom/$uname$thisdisfn/" />
         <input type="file" name="upfile" size="20" />
         <input type="button" value="$lt{'uplo'}"  onclick="checkUpload(this.form)" />
       </fieldset>
@@ -416,7 +347,7 @@ sub dircontrols {
       <fieldset>
               <legend>$lt{'crea'}</legend>
 	      <span class="LC_nobreak">
-		<input type="hidden" name="filename" value="/~$uname$thisdisfn/" />
+		<input type="hidden" name="filename" value="/priv/$udom/$uname$thisdisfn/" />
                   <script type="text/javascript">
                     function validate_go() {
                         var selected = document.fileaction.action.selectedIndex;
@@ -448,17 +379,6 @@ sub dircontrols {
 END
 }
 
-sub pubbuttons {
-    my ($r,$uname,$thisdisfn) = @_;
-    $r->print('<form method="post" action="/adm/publish" target="_parent">'.
-              '<table><tr><td><input type="hidden" name="filename" value="/~'.
-               $uname.$thisdisfn.'/" />'.
-              '<input type="submit" value="'.&mt('Publish Directory').'" /></td><td>'.
-'<input type="button" onclick="window.location='."'/~".
-               $uname.$thisdisfn."/default.meta'".'" value="'.
-&mt('Edit Directory Metadata').'" /></td></tr></table></form>');
-}
-
 sub resourceactions {
     my ($r,$uname,$udom,$thisdisfn) = @_;
     $r->print(<<END);
@@ -526,28 +446,30 @@ sub getSourceRightString {
 # 
 sub putdirectory {
     my ($r, $reqfile, $here, $dirname, $modtime, $resdir, $bombs, $numdir) = @_;
-    # construct the display filename: the directory name unless ..:
+
+# construct the display filename: the directory name unless ..:
     
     my $disfilename = $dirname;
     if ($dirname eq '..') {
 	$disfilename = '<i>'.&mt('Parent Directory').'</i>';
     }
-    unless ( (($dirname eq '..') && ($reqfile eq '')) || ($dirname eq '.')) {
+# Don't display directory itself, and there is no way up from root directory
+    unless ( (($dirname eq '..') && ($reqfile=~/^\/[^\/]+\/[^\/]+$/)) || ($dirname eq '.')) {
 	my $kaputt=0;
 	foreach (keys %{$bombs}) {
 	    if ($_=~m:^\Q$resdir\E/\Q$disfilename\E/:) { $kaputt=1; last; }
 	}
+#
+# Get the metadata from that directory's default.meta to display titles
+#
 	%Apache::lonpublisher::metadatafields=();
 	%Apache::lonpublisher::metadatakeys=();
-	my $construct=$here;
-	$construct=~s{^/priv/($LONCAPA::username_re)$}{/home/$1/public_html};
-        my $dirpath = $here;
-        $dirpath=~s{^/priv/}{/~};
-	&Apache::lonpublisher::metaeval(&Apache::lonnet::getfile(
-       				 $construct.'/'.$dirname.'/default.meta'
-								 ));
+	&Apache::lonpublisher::metaeval(
+                 &Apache::lonnet::getfile($r->dir_config('lonDocRoot').$here.'/'.$dirname.'/default.meta')
+                                       );
+#
         my $actionitem = '';
-        if ($dirname eq '..') {
+        if ($here eq '..') {
             $actionitem = &mt('Go to ...');
         } else {
             $actionitem = 
@@ -561,7 +483,7 @@ sub putdirectory {
                       '<option value="printdir">'.&mt('Print directory').'</option>'.
                       '<option value="delete">'.&mt('Delete directory').'</option>'.
                     '</select>'.
-                     '<input type="hidden" name="filename" value="'.&HTML::Entities::encode($dirpath.'/'.$dirname,'<>&"').'/" />'.
+                     '<input type="hidden" name="filename" value="'.&HTML::Entities::encode($here.'/'.$dirname,'<>&"').'/" />'.
                      '<input type="hidden" name="openname" value="'.$here.'/'.$dirname.'/" />'.
                      '<input type="hidden" name="postdata" value="" />'.
                    '</form>';
@@ -598,11 +520,9 @@ sub putresource {
     my $css_class='LC_browser_file';
     my $title='&nbsp;';
     my $publish_button=&mt('Publish');
-    my $cstr_dir = '/home/'.$uname.'/public_html/'.$thisdisfn.'/';
-#    my $action_buttons=
-#        '<br /><a target="_parent" href="/adm/cfile?action=delete&filename=/~'.
-#	$uname.'/'.$thisdisfn.'/'.$filename.'">'.
-#	&mt('Delete').'</a>';
+    my $cstr_dir = $r->dir_config('lonDocRoot').'/priv/'.$udom.'/'.$uname.'/'.$thisdisfn.'/';
+    my $linkfilename='/priv'.$thisdisfn.'/'.$filename;
+
     if (-e $resdir.'/'.$filename) {
         my $same=0;
 	my ($rdev,$rino,$rmode,$rnlink,
@@ -655,34 +575,26 @@ sub putresource {
 		$status=&mt('Published').
 		    '<br />'. $rights_status;
 	    }
-#	    } else {
-#		$action_buttons='';
-#	    }
 	} else {
             $pubstatus = 'modified';
 	    $status=&mt('Modified').
 		'<br />'. $rights_status;
-#	    $action_buttons='';
 	    if (&Apache::loncommon::fileembstyle(($filename=~/\.(\w+)$/)) eq 'ssi') {
-		$status.='<br /><a href="/adm/diff?filename=/~'.$uname.
-		    $thisdisfn.'/'.$filename.
+		$status.='<br /><a href="/adm/diff?filename='.$linkfilename.
 		    '&amp;versiontwo=priv" target="cat">'.&mt('Diffs').'</a>';
 	    }
 	} 
 
-	$title.="\n".'<br /><a href="/~'.$uname.$thisdisfn.'/'.$filename.'.meta">'. 
+	$title.="\n".'<br /><a href="'.$linkfilename.'.meta">'. 
 	    ($$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.
-		'<br /><a href="/adm/diff?filename=/~'.$uname.
-		$thisdisfn.'/'.$filename.'.meta'.
+		'<br /><a href="/adm/diff?filename=/priv/'.$linkfilename.'.meta'.
 		'&amp;versiontwo=priv" target="cat">'.&mt('Metadata Diffs').'</a>';
-	    $title.="\n".'<br /><a href="/adm/retrieve?filename=/~'.$uname.
-		$thisdisfn.'/'.$filename.'.meta" target="_parent">'.&mt('Retrieve Metadata').'</a>';
+	    $title.="\n".'<br /><a href="/adm/retrieve?filename='.$linkfilename.'.meta" target="_parent">'.&mt('Retrieve Metadata').'</a>';
 	}
-	$status.="\n".'<br /><a href="/adm/retrieve?filename=/~'.$uname.
-	    $thisdisfn.'/'.$filename.'" target="_parent">'.&mt('Retrieve').'</a>';
+	$status.="\n".'<br /><a href="/adm/retrieve?filename='.$linkfilename.'" target="_parent">'.&mt('Retrieve').'</a>';
     }
     my $editlink='';
     my $editlink2='';
@@ -694,12 +606,10 @@ sub putresource {
 	$editlink2=' <br />(<a href="'.$linkdir.'/'.$filename.'?forceColoredit=1" target="_parent">'.&mt('Edit').'</a>)';
     }
     if ($filename=~/\.(problem|exam|quiz|assess|survey|form|library|xml|html|htm|xhtml|xhtm|sty)$/) {
-	$editlink.=' (<a href="/adm/cleanup?filename=/~'.$uname.
-	    $thisdisfn.'/'.$filename.'" target="_parent">'.&mt('Clean Up').')</a>';
+	$editlink.=' (<a href="/adm/cleanup?filename='.$linkfilename.'" target="_parent">'.&mt('Clean Up').')</a>';
     }
     if ($filename=~/\.(zip|tar|bz2|gz|tar.gz|tar.bz2|tgz)$/) {
-	$editlink=' (<a target="_parent" href="/adm/cfile?decompress=/~'.
-	      $uname.$thisdisfn.'/'.$filename.'">'.&mt('Decompress').'</a>)';
+	$editlink=' (<a target="_parent" href="/adm/cfile?decompress='.$linkfilename.'">'.&mt('Decompress').'</a>)';
     }
     my $pub_select = '';
     &create_pubselect($r,\$pub_select,$udom,$uname,$thisdisfn,$filename,$resdir,$pubstatus,$publish_button,$numres);
@@ -773,32 +683,6 @@ sub check_for_versions {
     return $versions;
 }
 
-#
-#   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.
-#
-sub CategorizeFiles {
-    my $location = shift;
-    my $files    = shift;
-}
-
 1;
 __END__
 
@@ -895,26 +779,6 @@ Output the header of the page.  This inc
         $dirname - Name of directory special file.
         $modtime - Encoded modification time.
 
-=item 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.
-
 =back
 
 =cut