--- loncom/interface/lonsyllabus.pm	2005/06/06 02:29:46	1.41
+++ loncom/interface/lonsyllabus.pm	2006/03/21 21:25:33	1.49
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Syllabus
 #
-# $Id: lonsyllabus.pm,v 1.41 2005/06/06 02:29:46 albertel Exp $
+# $Id: lonsyllabus.pm,v 1.49 2006/03/21 21:25:33 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -45,25 +45,88 @@ sub handler {
     $r->send_http_header;
     return OK if $r->header_only;
 
-# ------------------------------------------------------------ Print the screen
     my $target=$env{'form.grade_target'};
-    if ($target ne 'tex') {
-	my $html=&Apache::lonxml::xmlbegin();
-	$r->print(<<ENDDOCUMENT);
-$html
-<head>
-<title>The LearningOnline Network with CAPA</title>
-ENDDOCUMENT
-    } else {
-	$r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}));
-    } 
+# --------------------------------------------------- Get course info from URL
     my (undef,undef,$cdom,$cnum)=split(/\//,$r->uri);
-# Is this even a course?
-    my $homeserver=&Apache::lonnet::homeserver($cnum,$cdom); 
+# ------------------------------------------------------------ Get query string
+    &Apache::loncommon::get_unprocessed_cgi
+                        ($ENV{'QUERY_STRING'},['forcestudent','register','forceedit','wrapperdisplay']);
+# ----------------------------------------------------- Is this even a course?
+    my $homeserver=&Apache::lonnet::homeserver($cnum,$cdom);
     if ($homeserver eq 'no_host') {
-	$r->print('</head><body>'.&mt('No syllabus available').'</body></html>');
+        &Apache::loncommon::content_type($r,'text/html');
+        $r->send_http_header;
+      	&Apache::loncommon::simple_error_page($r,'No syllabus available',
+					      'No syllabus available');
         return OK;
     }
+# ------------------------------------- There is such a course, get environment
+    my %courseenv=&Apache::lonnet::dump('environment',$cdom,$cnum);
+
+# ------------------------------------------------------------ Print the screen
+
+    my $rss_link =
+	&Apache::lonrss::rss_link('http://'.$ENV{'HTTP_HOST'}.'/public/'.$cdom.'/'.$cnum.'/Course_Announcements.rss');
+
+    if ($target eq 'tex') {
+	$r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}));
+    } 
+# ----------------------------------------------------- Force menu registration
+    my $addentries='';
+    if ($env{'form.register'}) {
+       $addentries=' onLoad="'.&Apache::lonmenu::loadevents().
+           '" onUnload="'.&Apache::lonmenu::unloadevents().'"';
+       $r->print(&Apache::lonmenu::registerurl(1));
+    }
+# -------------------------------------------------- Let's see who handles this
+    my $externalsyllabus=$courseenv{'externalsyllabus'};
+
+    if ($externalsyllabus=~/\w/) {
+       $r->print(&Apache::loncommon::endheadtag());
+       if ($env{'form.wrapperdisplay'} eq 'menu') {
+#
+# Producing the menu buttons
+#
+           $r->print('<body bgcolor="#FFFFFF">'.
+		     &Apache::lonmenu::menubuttons(1,'web',1).
+		     &Apache::loncommon::end_page());
+        } else {
+           if ($env{'browser.interface'} eq 'textual') {
+#
+# ssi-based rendering for text-based interface
+#
+               $r->print('<body bgcolor="#FFFFFF">'.
+			 &Apache::lonmenu::menubuttons(1).
+			 &Apache::lonnet::ssi_body($externalsyllabus).
+			 &Apache::loncommon::end_page());
+           } elsif ($env{'environment.remote'} eq 'off') {
+#
+# This is inline remote
+# 
+               $r->print(<<ENDDOCUMENTINL);
+<frameset rows="180,*" border="0" $addentries>
+<frame src="/public/$cdom/$cnum/syllabus?wrapperdisplay=menu">
+<frame src="$externalsyllabus">
+</frameset>
+</html>
+ENDDOCUMENTINL
+          } else {
+#
+# frame-based rendering for graphical interface
+#
+               $r->print(<<ENDDOCUMENT);
+<frameset rows="1,*" border="0" $addentries>
+<frame src="/adm/rat/empty.html">
+<frame src="$externalsyllabus">
+</frameset>
+</html>
+ENDDOCUMENT
+           }
+        }
+        return OK;
+     } 
+
+# ------------------------------ The buck stops here: internal syllabus display
 # --------------------------------------------------------- The syllabus fields
     my %syllabusfields=&Apache::lonlocal::texthash(
        'aaa_instructorinfo' => 'Instructor Information',
@@ -81,44 +144,37 @@ ENDDOCUMENT
        'jjj_weblinks'       => 'Web Links',
        'kkk_textbook'       => 'Textbook',
        'lll_includeurl'     => 'URLs To Include in Syllabus');
-
-# ------------------------------------------------------------ Get query string
-    &Apache::loncommon::get_unprocessed_cgi
-                        ($ENV{'QUERY_STRING'},['forcestudent','register','forceedit']);
-# ----------------------------------------------------- Force menu registration
-    my $addentries='';
-    if ($env{'form.register'}) {
-       $addentries=' onLoad="'.&Apache::lonmenu::loadevents().
-	   '" onUnload="'.&Apache::lonmenu::unloadevents().'"';
-       $r->print(&Apache::lonmenu::registerurl(1));
-    }
 # --------------------------------------------------------------- Force Student
     my $forcestudent='';
     if ($env{'form.forcestudent'}) { $forcestudent='student'; };
     my $forceedit='';
     if ($env{'form.forceedit'}) { $forceedit='edit'; }
        
-# ------------------------------------- There is such a course, get environment
-    my %courseenv=&Apache::lonnet::dump('environment',$cdom,$cnum);
+# ----------------------------------------------------------------- Make header 
     if ($target ne 'tex') {
-	$r->print(&Apache::lonhtmlcommon::htmlareaheaders().
-		  '</head>'.&Apache::loncommon::bodytag
-            ("Syllabus",$forcestudent,$addentries,'',$cdom,$env{'form.register'}));
-	$r->print('<h1>'.$courseenv{'description'}.'</h1><h3>'.
+	my $start_page = 
+	    &Apache::loncommon::start_page("Syllabus", $rss_link,
+					   {'function'       => $forcestudent,
+					    'add_entries'    => $addentries,
+					    'domain'         => $cdom,
+					    'force_register' =>
+						$env{'form.register'},});
+
+	$r->print($start_page.'<h1>'.$courseenv{'description'}.'</h1><h3>'.
                  $Apache::lonnet::domaindescription{$cdom}.'</h3>');
     } else {
 	$r->print('\noindent{\large\textbf{'.$courseenv{'description'}.'}}\\\\\\\\\textbf{'.
                  $Apache::lonnet::domaindescription{$cdom}.'}\\\\');
     }
 # -------------------------------------------------------------- Announcements?
+    my $day = &Apache::lonannounce::showday(time,2,
+			 &Apache::lonannounce::readcalendar($cdom.'_'.$cnum));
     if ($target ne 'tex') {
-	$r->print(&Apache::lonannounce::showday(time,2,
-                         &Apache::lonannounce::readcalendar($cdom.'_'.$cnum)));
+	$r->print($day. &Apache::lonrss::advertisefeeds($cnum,$cdom));
     } else {
-	$r->print(&Apache::lonxml::xmlparse($r,'tex',
-		       &Apache::lonannounce::showday(time,2,
-                       &Apache::lonannounce::readcalendar($cdom.'_'.$cnum))));
+	$r->print(&Apache::lonxml::xmlparse($r,'tex',$day));
     }
+
 # -------------------------------------------------------- Get course personnel
     my %coursepersonnel=&Apache::lonnet::get_course_adv_roles($cdom.'/'.$cnum);
     if ($target ne 'tex') {
@@ -177,6 +233,7 @@ ENDDOCUMENT
 		    .' <tt>http://'.
 		    $Apache::lonnet::hostname{$homeserver}.$r->uri.'</tt>'.
                &Apache::loncommon::help_open_topic('Syllabus_ExtLink').'</p>'.
+          '<p>'.&mt('You can specify an external URL as Syllabus in the [_1].','<a href="/adm/parmset?action=crsenv">'.&mt('Course Parameters').'</a>').'</p>'.
 	  '<p><a href="'.$r->uri.'?forcestudent=1"><font size="+1">'.
 &mt('Show Public View').'</font></a>'.
           &Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView').
@@ -319,7 +376,11 @@ ENDDOCUMENT
 	$r->print('No syllabus information provided.');
 	if ($target ne 'tex') {$r->print('</p>');}
     }
-    if ($target ne 'tex') {$r->print('</body></html>');} else {$r->print('\end{document}');}
+    if ($target ne 'tex') {
+	$r->print(&Apache::loncommon::end_page());
+    } else {
+	$r->print('\end{document}');
+    }
     return OK;
 }