--- loncom/xml/londefdef.pm	2013/09/14 02:04:47	1.445
+++ loncom/xml/londefdef.pm	2013/10/14 17:11:18	1.450
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Tags Default Definition Module 
 #
-# $Id: londefdef.pm,v 1.445 2013/09/14 02:04:47 raeburn Exp $
+# $Id: londefdef.pm,v 1.450 2013/10/14 17:11:18 raeburn Exp $
 # 
 #
 # Copyright Michigan State University Board of Trustees
@@ -599,12 +599,16 @@ sub start_body {
             $header=&Apache::lonmenu::constspaceform();
         }
         if ($env{'request.state'} ne 'published') {
-            $header.=&edit_controls();
+            unless ($env{'form.inhibitmenu'} eq 'yes') {
+                $header.=&edit_controls();
+            }
         }
         if ($env{'request.state'} eq 'construct') {
-            $currentstring.=&Apache::loncommon::head_subbox(
-                                &Apache::loncommon::CSTR_pageheader()
-                               .$header);
+            unless ($env{'form.inhibitmenu'} eq 'yes') {
+                $currentstring.=&Apache::loncommon::head_subbox(
+                                    &Apache::loncommon::CSTR_pageheader()
+                                   .$header);
+            }
         } elsif ($env{'request.state'} eq 'edit') {
             $currentstring.=&Apache::loncommon::head_subbox($header);
         }
@@ -1724,6 +1728,15 @@ sub start_a {
                     if (!&Apache::lonnet::allowed('bre',$linkurl)) {
                         if (&Apache::lonnet::is_on_map($url)) {
                             &Apache::lonxml::extlink($linkurl);
+                        } elsif ($env{'request.course.id'}) {
+                            my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+                            my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+                            if ($linkurl =~ m{^([^/]|/uploaded/$cdom/$cnum/docs/)}) {
+                                my $cleanhref = &clean_docs_httpref($linkurl,$url,$cdom,$cnum);
+                                if ($cleanhref) {
+                                    &Apache::lonxml::extlink($cleanhref);
+                                }
+                            }
                         }
                     }
                 }
@@ -3602,11 +3615,32 @@ sub start_iframe {
                         }
                     }
                     $currentstring =~ s/\s+$//;
-                    $currentstring .= '>';
+                    if ($token->[4] =~ m{/>$}) {
+                        $currentstring .= ' />';
+                    } else {
+                        $currentstring .= '>';
+                    }
                 } else {
                     $currentstring = $token->[4];
                 }
             }
+            if (($url !~ m{^https?://}) && ($env{'request.course.id'})) {
+                my $docuri = &Apache::lonnet::hreflocation('',$env{'request.filename'});
+                my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+                my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+                if ($url =~ m{^([^/]|/uploaded/)}) {
+                    my $cleanhref = &clean_docs_httpref($url,$docuri,$cdom,$cnum);
+                    if ($cleanhref) {
+                        &Apache::lonxml::extlink($cleanhref);
+                    }
+                } elsif (($url =~ m{/res/$LONCAPA::domain_re/}) && ($docuri =~ m{^\Q/uploaded/$cdom/$cnum/docs/\E})) {
+                    if (!&Apache::lonnet::allowed('bre',$url)) {
+                        if (&Apache::lonnet::is_on_map($url)) {
+                            &Apache::lonxml::extlink($url);
+                        }
+                    }
+                }
+            }
         } else {
             $currentstring = $token->[4];
         }
@@ -4558,6 +4592,62 @@ sub latex_header {
 
 }
 
+sub clean_docs_httpref {
+    my ($href,$docuri,$cdom,$cnum) = @_;
+    if ($docuri eq '') {
+        $docuri = &Apache::lonnet::hreflocation('',$env{'request.filename'});
+    }
+    if ($cdom eq '') {
+        $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+    }
+    if ($cnum eq '') {
+        $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+    }
+    my $cleanhref;
+    if ($docuri =~ m{^(\Q/uploaded/$cdom/$cnum/docs/\E)(.+/)[^/]+$}) {
+        my $prefix = $1;
+        my $relpath = $2;
+        my ($hrefpath,$fname);
+        if ($href =~ m{^/}) {
+            if ($href =~ m{^\Q$prefix\E(.+/)([^/]+)$}) {
+                $hrefpath = $1;
+                $fname = $2;
+            } else {
+                return $cleanhref;
+            }
+        } else {
+            if ($href =~ m{/}) {  
+                (my $path,$fname) = ($href =~ m{^(.*)/([^/]*)$});
+                $hrefpath = $relpath.$path;
+                if ($path eq '') {
+                    $hrefpath =~ s{/$}{};
+                }
+            } else {
+                $fname = $href;
+                $hrefpath = $relpath;
+                $hrefpath =~ s{/$}{};
+            }
+        }
+        if ($fname ne '') {
+            my $cleanrelpath;
+            foreach my $dir (split(/\//,$hrefpath)) {
+                next if ($dir eq '.');
+                if ($dir eq '..') {
+                    $cleanrelpath =~ s{([^/]+/)$}{};
+                } else {
+                    $cleanrelpath .= $dir.'/';
+                }
+            }
+            if ($cleanrelpath ne '') {
+                $cleanhref = $prefix.$cleanrelpath.$fname;
+            } else {
+                $cleanhref = $prefix.$fname;
+            }
+        }
+    }
+    return $cleanhref;
+}
+
 =pod
 
 =head1 NAME
@@ -4652,7 +4742,22 @@ described at http://www.lon-capa.org.
      	   I'm in a table....
      	}
 
-
+=item clean_docs_httpref($href,$docuri,$cdom,$cnum)
+        HTML pages uploaded to a course which contain dependencies either from iframes,
+        javascript files or objects (FlashPlayerSwf, MediaSrc, XMPSrc, ConfigurationSrc,
+        and PosterImageSrc) for which dependency is another file uploaded to the same
+        course.
+
+        Required input: 
+        href - dependency (either a relative URL, or an absolute URL)
+        Optional inputs:
+        docuri - URL of HTML page containing the dependency
+        cdom - Course domain
+        cnum - CourseID
+
+        Output:
+        returns an absolute URL constructed from the href provided, and the calling context.
+        (this will be null, if the URL does not begin: /uploaded/$cdom/$cnum/docs/).
 
 =back