--- loncom/interface/loncommon.pm	2011/10/31 01:14:24	1.1025
+++ loncom/interface/loncommon.pm	2011/12/04 16:27:05	1.1029
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.1025 2011/10/31 01:14:24 raeburn Exp $
+# $Id: loncommon.pm,v 1.1029 2011/12/04 16:27:05 www Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -4446,7 +4446,7 @@ sub get_legacy_domconf {
             close($fh);
         }
     }
-    if (-e '/home/httpd/html/adm/lonDomLogos/'.$udom.'.gif') {
+    if (-e $Apache::lonnet::perlvar{'lonDocRoot'}.'/adm/lonDomLogos/'.$udom.'.gif') {
         $legacyhash{$udom.'.login.domlogo'} = "/adm/lonDomLogos/$udom.gif";
     }
     return %legacyhash;
@@ -4532,29 +4532,39 @@ sub designparm {
 
 =item * &authorspace()
 
-Inputs: ./.
+Inputs: $url (usually will be undef).
 
-Returns: Path to the Construction Space of the current user's
-         accessed author space
-         The author space will be that of the current user
-         when accessing the own author space
-         and that of the co-author/assistent co-author
-         when accessing the co-author's/assistent co-author's
-         space
+Returns: Path to Construction Space containing the resource or 
+         directory being viewed (or for which action is being taken). 
+         If $url is provided, and begins /priv/<domain>/<uname>
+         the path will be that portion of the $context argument.
+         Otherwise the path will be for the author space of the current
+         user when the current role is author, or for that of the 
+         co-author/assistant co-author space when the current role 
+         is co-author or assistant co-author.
 
 =cut
 
 sub authorspace {
+    my ($url) = @_;
+    if ($url ne '') {
+        if ($url =~ m{^(/priv/$match_domain/$match_username/)}) {
+           return $1;
+        }
+    }
     my $caname = '';
     my $cadom = '';
-    if ($env{'request.role'} =~ /^ca|^aa/) {
+    if ($env{'request.role'} =~ /^(?:ca|aa)/) {
         ($cadom,$caname) =
             ($env{'request.role'}=~/($match_domain)\/($match_username)$/);
-    } else {
+    } elsif ($env{'request.role'} =~ m{^au\./($match_domain)/}) {
         $caname = $env{'user.name'};
         $cadom = $env{'user.domain'};
     }
-    return '/priv/'.$cadom.'/'.$caname.'/';
+    if (($caname ne '') && ($cadom ne '')) {
+        return "/priv/$cadom/$caname/";
+    }
+    return;
 }
 
 ##############################################
@@ -4582,7 +4592,9 @@ sub head_subbox {
 
 =item * &CSTR_pageheader()
 
-Inputs: ./.
+Input: (optional) filename from which breadcrumb trail is built.
+       In most cases no input as needed, as $env{'request.filename'}
+       is appropriate for use in building the breadcrumb trail.
 
 Returns: HTML div with CSTR path and recent box
          To be included on Construction Space pages
@@ -4590,12 +4602,19 @@ Returns: HTML div with CSTR path and rec
 =cut
 
 sub CSTR_pageheader {
-    # this is for resources; directories have customtitle, and crumbs
-            # and select recent are created in lonpubdir.pm  
+    my ($trailfile) = @_;
+    if ($trailfile eq '') {
+        $trailfile = $env{'request.filename'};
+    }
+
+# this is for resources; directories have customtitle, and crumbs
+# and select recent are created in lonpubdir.pm
+
+    my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'};
     my ($udom,$uname,$thisdisfn)=
-        ($env{'request.filename'} =~ m|^/home/httpd/html/priv/([^/]+)/([^/]+)/(.*)$|);
-    my $formaction='/priv/'.$udom.'/'.$uname.'/'.$thisdisfn;
-    $formaction=~s/\/+/\//g;
+        ($trailfile =~ m{^\Q$londocroot\E/priv/([^/]+)/([^/]+)/(.*)$});
+    my $formaction = "/priv/$udom/$uname/$thisdisfn";
+    $formaction =~ s{/+}{/}g;
 
     my $parentpath = '';
     my $lastitem = '';
@@ -5505,6 +5524,11 @@ span.LC_current_location {
   background: $pgbg;
 }
 
+span.LC_current_nav_location {
+  font-weight:bold;
+  background: $sidebg;
+}
+
 span.LC_parm_menu_item {
   font-size: larger;
 }
@@ -8451,7 +8475,7 @@ sub ask_for_embedded_content {
     } elsif (($actionurl eq '/adm/upload') || ($actionurl eq '/adm/testbank') ||
              ($actionurl eq '/adm/imsimport')) { 
         my ($udom,$uname,$rest) = ($args->{'current_path'} =~ m{/priv/($match_domain)/($match_username)/?(.*)$});
-        $url = '/home/httpd/html/priv/'.$udom.'/'.$uname.'/';
+        $url = $Apache::lonnet::perlvar{'lonDocRoot'}."/priv/$udom/$uname/";
         $toplevel = $url;
         if ($rest ne '') {
             $url .= $rest;
@@ -8815,12 +8839,12 @@ sub upload_embedded {
             my $fullpath = $dir_root.$dirpath.'/'.$path;
             my $dest = $fullpath.$fname;
             my $url = $url_root.$dirpath.'/'.$path.$fname;
-            my @parts=split(/\//,$fullpath);
+            my @parts=split(/\//,"$dirpath/$path");
             my $count;
             my $filepath = $dir_root;
-            for ($count=4;$count<=$#parts;$count++) {
-                $filepath .= "/$parts[$count]";
-                if ((-e $filepath)!=1) {
+            foreach my $subdir (@parts) {
+                $filepath .= "/$subdir";
+                if (!-e $filepath) {
                     mkdir($filepath,0770);
                 }
             }
@@ -8939,7 +8963,7 @@ sub modify_html_refs {
     } elsif ($context eq 'coursedoc') {
         $container = $env{'form.primaryurl'};
     } else {
-        $container = $env{'form.filename'};
+        $container = $Apache::lonnet::perlvar{'lonDocRoot'}.$env{'form.filename'};
     }
     my (%allfiles,%codebase,$output,$content);
     my @changes = &get_env_multiple('form.namechange');