--- loncom/xml/lonxml.pm	2011/12/06 16:30:19	1.526
+++ loncom/xml/lonxml.pm	2012/11/21 23:13:30	1.533
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # XML Parser Module 
 #
-# $Id: lonxml.pm,v 1.526 2011/12/06 16:30:19 dseaton Exp $
+# $Id: lonxml.pm,v 1.533 2012/11/21 23:13:30 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -113,6 +113,7 @@ use Apache::lonr();
 use Apache::lonlocal;
 use Apache::lonhtmlcommon();
 use Apache::functionplotresponse();
+use Apache::lonnavmaps();
 
 #====================================   Main subroutine: xmlparse  
 
@@ -210,8 +211,12 @@ sub xmlend {
     my $discussion;
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
 					   ['LONCAPA_INTERNAL_no_discussion']);
-    if (! exists($env{'form.LONCAPA_INTERNAL_no_discussion'}) ||
-        $env{'form.LONCAPA_INTERNAL_no_discussion'} ne 'true') {
+    if (
+           (   (!exists($env{'form.LONCAPA_INTERNAL_no_discussion'})) 
+            || ($env{'form.LONCAPA_INTERNAL_no_discussion'} ne 'true')
+           ) 
+        && ($env{'form.inhibitmenu'} ne 'yes')
+       ) {
         $discussion=&Apache::lonfeedback::list_discussion($mode,$status);
     }
     if ($target eq 'tex') {
@@ -301,7 +306,8 @@ sub xmlparse {
  &clean_safespace($safeeval);
 
  if (@script_var_displays) {
-     $finaloutput .= join('',@script_var_displays);
+     my $scriptoutput = join('',@script_var_displays);
+     $finaloutput=~s{(</body>\s*</html>)\s*$}{$scriptoutput$1}s;
      undef(@script_var_displays);
  }
  &init_state();
@@ -643,9 +649,9 @@ sub setup_globals {
 
 sub init_safespace {
   my ($target,$safeeval,$safehole,$safeinit) = @_;
-  $safeeval->reval('use Math::Complex;');
   $safeeval->reval('use LaTeX::Table;');
   $safeeval->deny_only(':dangerous');
+  $safeeval->reval('use Math::Complex;');
   $safeeval->permit_only(":default");
   $safeeval->permit("entereval");
   $safeeval->permit(":base_math");
@@ -1504,12 +1510,12 @@ sub renderingoptions {
 }
 
 sub inserteditinfo {
-      my ($filecontents, $filetype, $filename)=@_;
+      my ($filecontents,$filetype,$filename,$symb,$itemtitle) = @_;
       $filecontents = &HTML::Entities::encode($filecontents,'<>&"');
       my $xml_help = '';
       my $initialize='';
       my $textarea_id = 'filecont';
-      my $dragmath_button;
+      my ($dragmath_button,$deps_button);
       my ($add_to_onload, $add_to_onresize);
       $initialize=&Apache::lonhtmlcommon::spellheader();
       if (($filetype eq 'html') && (&Apache::lonhtmlcommon::htmlareabrowser())) {
@@ -1530,6 +1536,11 @@ sub inserteditinfo {
 </script>
 FULLPAGE
       if ($filetype eq 'html') {
+          if ($symb) {
+              $deps_button = &Apache::lonhtmlcommon::dependencies_button()."\n";
+              $initialize .= 
+                  &Apache::lonhtmlcommon::dependencycheck_js($symb,$itemtitle)."\n";
+          }
           $dragmath_button = '<span id="math_filecont">'.&Apache::lonhtmlcommon::dragmath_button('filecont',1).'</span>';
           $initialize .= "\n".&Apache::lonhtmlcommon::dragmath_js('EditMathPopup');
       }
@@ -1574,7 +1585,7 @@ $initialize
     <div class="LC_edit_problem_discards">
       <input type="submit" name="discardview" accesskey="d" value="$lt{'dv'}" />
       <input type="submit" name="Undo" accesskey="u" value="$lt{'un'}" />
-      $htmlerror $dragmath_button
+      $htmlerror $deps_button $dragmath_button
     </div>
     <div class="LC_edit_problem_saves">
       <input type="submit" name="savethisfile" accesskey="s" value="$lt{'st'}" />
@@ -1783,11 +1794,17 @@ ENDNOTFOUND
     unless ($env{'request.state'} eq 'published') {
 	if ($env{'form.editmode'} && (!($env{'form.viewmode'})) && (!($env{'form.discardview'})))
 	{
-	    my $displayfile=$request->uri;
-	    $displayfile=~s/^\/[^\/]*//;
+            my ($displayfile,$url,$symb,$itemtitle);
+	    $displayfile=$request->uri;
+            if ($request->uri =~ m{^/uploaded/}) {
+                ($symb,$itemtitle,$displayfile) = 
+                    &get_courseupload_hierarchy($request->uri);
+            } else {
+	        $displayfile=~s/^\/[^\/]*//;
+            }
 
 	    my ($edit_info, $add_to_onload, $add_to_onresize)=
-		&inserteditinfo($filecontents,$filetype,$displayfile);
+		&inserteditinfo($filecontents,$filetype,$displayfile,$symb,$itemtitle);
 
 	    my %options = 
 		('add_entries' =>
@@ -1837,6 +1854,27 @@ sub display_title {
     return $result;
 }
 
+sub get_courseupload_hierarchy {
+    my ($url) = @_;
+    my ($symb,$itemtitle,$displaypath);
+    if ($env{'request.course.id'}) {
+        $symb = &Apache::lonnet::symbread($url);
+        my ($map,$id,$res)=&Apache::lonnet::decode_symb($symb);
+        my $navmap=Apache::lonnavmaps::navmap->new;
+        if (ref($navmap)) {
+            my $res = $navmap->getBySymb($symb);
+            if (ref($res)) {
+                my @pathitems =
+                    &Apache::loncommon::get_folder_hierarchy($navmap,$map,1);
+                $itemtitle = $res->compTitle();
+                push(@pathitems,$itemtitle);
+                $displaypath = join(' &raquo; ',@pathitems);
+            }
+        }
+    }
+    return ($symb,$itemtitle,$displaypath);
+}
+
 sub debug {
     if ($Apache::lonxml::debug eq "1") {
 	$|=1;
@@ -1919,7 +1957,7 @@ sub error {
 	    my @userlist;
 	    foreach (keys %users) {
 		my ($user,$domain) = split(/:/, $_);
-		push(@userlist,"$user\@$domain");
+		push(@userlist,"$user:$domain");
 		my $key=$declutter.'_'.$user.'_'.$domain;
 		my %lastnotified=&Apache::lonnet::get('nohist_xmlerrornotifications',
 						      [$key],
@@ -1942,7 +1980,7 @@ sub error {
 		$errormsg=&mt("An error occurred while processing this resource. The instructor has been notified.");
 	    }
 	}
-	push(@Apache::lonxml::error_messages,"<b>$errormsg</b> <br />");
+	push(@Apache::lonxml::error_messages,"<span class=\"LC_warning\">$errormsg</span><br />");
     }
 }