--- loncom/interface/lonsyllabus.pm	2008/10/22 08:56:35	1.68
+++ loncom/interface/lonsyllabus.pm	2009/04/15 10:49:30	1.86
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Syllabus
 #
-# $Id: lonsyllabus.pm,v 1.68 2008/10/22 08:56:35 bisitz Exp $
+# $Id: lonsyllabus.pm,v 1.86 2009/04/15 10:49:30 bisitz Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -29,6 +29,7 @@
 package Apache::lonsyllabus;
 
 use strict;
+use Apache::lontemplate;
 use Apache::Constants qw(:common);
 use Apache::loncommon;
 use Apache::lonnet;
@@ -68,20 +69,20 @@ sub handler {
 
     if ($target eq 'tex') {
 	$r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}));
-    } 
+    }
 # -------------------------------------------------- Let's see who handles this
     my $externalsyllabus=$courseenv{'externalsyllabus'};
 
     if ($externalsyllabus=~/\w/) {
-	
+
        if ($env{'form.wrapperdisplay'} eq 'menu') {
 	   $r->print(&Apache::lonwrapper::simple_menu());
-       } else {	    
+       } else {
 	   $r->print(&Apache::lonwrapper::wrapper("/public/$cdom/$cnum/syllabus?wrapperdisplay=menu",
 						   $externalsyllabus));
        }
        return OK;
-     } 
+     }
 
 # ------------------------------ The buck stops here: internal syllabus display
 # --------------------------------------------------------- The syllabus fields
@@ -106,8 +107,8 @@ sub handler {
     if ($env{'form.forcestudent'}) { $forcestudent='student'; };
     my $forceedit='';
     if ($env{'form.forceedit'}) { $forceedit='edit'; }
-       
-# ----------------------------------------------------------------- Make header 
+
+# ----------------------------------------------------------------- Make header
     if ($target ne 'tex') {
 	my $rss_link = &Apache::lonrss::rss_link($cnum,$cdom);
         my $js;
@@ -138,7 +139,7 @@ function getIndexByName(item) {
 
 ENDSCRIPT
         }
-	my $start_page = 
+	my $start_page =
 	    &Apache::loncommon::start_page("Syllabus", $rss_link.$js,
 					   {'function'       => $forcestudent,
 					    'domain'         => $cdom,
@@ -161,60 +162,7 @@ ENDSCRIPT
                text=>"Course syllabus"});
             $r->print(&Apache::lonhtmlcommon::breadcrumbs());
         }
-        $r->print('<h1>'.$courseenv{'description'}.'</h1><h3>'.
-		  &Apache::lonnet::domain($cdom,'description').'</h3>');
-    } else {
-	$r->print('\noindent{\large\textbf{'.$courseenv{'description'}.'}}\\\\\\\\\textbf{'.
-		  &Apache::lonnet::domain($cdom,'description').'}\\\\');
-    }
-# -------------------------------------------------------------- Announcements?
-    my $day = &Apache::lonannounce::showday(time,2,
-			 &Apache::lonannounce::readcalendar($cdom.'_'.$cnum));
-    if ($target ne 'tex') {
-	$r->print($day. &Apache::lonrss::advertisefeeds($cnum,$cdom,$forceedit));
-    } else {
-	$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') {
-	$r->print(&Apache::lonhtmlcommon::start_pick_box());
-    } else {
-	$r->print('\begin{tabular}{|p{0.45\textwidth}|p{0.45\textwidth}|}\hline');
-    }
-    foreach my $element (sort keys %coursepersonnel) {
-	if ($target ne 'tex') {
-	    $r->print(&Apache::lonhtmlcommon::row_title($element));
-	} else {
-	    $r->print(' '.&Apache::lonxml::xmlparse($r,'tex',$element).' & '); 
-	}
-        foreach (split(/\,/,$coursepersonnel{$element})) {
-	    my ($puname,$pudom)=split(/\:/,$_);
-	    if ($target ne 'tex') {
-                my $courseperson = &Apache::loncommon::plainname($puname,$pudom);
-                if (($env{'user.name'} eq '') || ($env{'user.name'} eq 'public') ||
-                    ($env{'user.domain'} eq '') || ($env{'user.domain'} eq 'public')) {
-		    $r->print(' '.$courseperson);
-                } else {
-                    $r->print(' '.&Apache::loncommon::aboutmewrapper($courseperson,
-                              $puname,$pudom));
-                }
-	    } else {
-		$r->print(' '.&Apache::loncommon::plainname($puname,
-                              $pudom).' ');
-	    }
-	}
-	if ($target ne 'tex') {
-	    $r->print(&Apache::lonhtmlcommon::row_closure());
-	} else {
-	    $r->print('\\\\ \hline');
-	}
-    }
-    if ($target ne 'tex') {
-	$r->print(&Apache::lonhtmlcommon::end_pick_box());
-    } else {
-	$r->print('\end{tabular}\\\\');
     }
 # ---------------------------------------------------------- Load syllabus info
     my %syllabus=&Apache::lonnet::dump('syllabus',$cdom,$cnum);
@@ -235,23 +183,6 @@ ENDSCRIPT
 	  }
           if ($forcestudent or $target eq 'tex') { $allowed=0; }
        }
-       if ($allowed) {
-          $r->print('<p>'.
-&Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes',&mt('Help with filling in text boxes')).'</p><p>'.&mt('This syllabus can be publicly viewed at')
-		    .' <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').
-          '</p>');
-      } elsif ($privileged) {
-	  if ($target ne 'tex') {
-	      $r->print('<p><a href="'.$r->uri.'?forceedit=1"><font size="+1">'.
-			&mt('Edit').'</font></a>'); 
-	  }
-      }
        if (($allowed) && ($env{'form.storesyl'})) {
 	   foreach my $syl_field (keys(%syllabusfields)) {
                my $field=$env{'form.'.$syl_field};
@@ -268,7 +199,7 @@ ENDSCRIPT
 # get rid of leading and trailing spaces
                       $url=~s/^\s+//;
                       $url=~s/\s+$//;
-                      if ($url=~m|^http://([^/]+)/(.+)$|) {
+                      if ($url=~m|^https?\://([^/]+)/(.+)$|) {
 			  my $host = $1;
                           my $remainder=$2;
 # remove the hostname from internal URLs
@@ -281,7 +212,7 @@ ENDSCRIPT
 		          }
 		      }
 # norm internal URLs
-                      unless ($url=~/^http\:/) {
+                      unless ($url=~/^https?\:/) {
 		          $url=&Apache::lonnet::clutter($url);
                       }
 # re-assemble field
@@ -298,20 +229,108 @@ ENDSCRIPT
            &Apache::lonnet::put('syllabus',\%syllabus,$cdom,$cnum);
        }
     }
-# ---------------------------------------------------------------- Get syllabus
-    if (($syllabus{'uploaded.lastmodified'}) || ($allowed)) {
-       my $lastmod=$syllabus{'uploaded.lastmodified'};
+
+#---------------------Print External URL Syllabus Info
+if( ($allowed) && ($target ne 'tex') ) {
+	my $protocol = $Apache::lonnet::protocol{$homeserver};
+  	$protocol = 'http' if ($protocol ne 'https');
+        $r->print('<p class="LC_info">'
+                 .&mt('This syllabus can be publicly viewed at [_1]'
+                     ,'<tt>'.$protocol.'://'.&Apache::lonnet::hostname($homeserver).$r->uri.'</tt>')
+                 .'&nbsp;'.&Apache::loncommon::help_open_topic('Syllabus_ExtLink')
+                 .'</p>'
+                 .'<p class="LC_info">'
+                 .&mt('Instead of using this template you can specify an external URL as Syllabus in the [_1]Course Parameters[_2].'
+                     ,'<a href="/adm/parmset?action=crsenv">','</a>')
+                 .'</p>'
+        );
+}
+
+#-Print Help Text
+if ($target ne 'tex') {
+	if($allowed){
+		$r->print(&Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes',&mt('Help with filling in text boxes')));
+	}
+}
+#--------Functions
+if ($target ne 'tex') {
+		if($allowed || $privileged){
+                $r->print(&Apache::lontemplate::start_functionslist());
+		if($allowed){
+                    $r->print(&Apache::lontemplate::item_functionslist(
+                        '<a href="'.$r->uri.'?forcestudent=1">'.&mt('Show Public View').'</a>'
+                       .&Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView')));
+		}elsif($privileged){
+                    $r->print(&Apache::lontemplate::item_functionslist(
+                        '<a href="'.$r->uri.'?forceedit=1">'.&mt('Edit').'</a>'));
+		}
+                $r->print(&Apache::lontemplate::end_functionslist());
+		}
+ }
+#----------------------------Print Headtitle
+if($target ne 'tex'){
+	$r->print('<h1>'.$courseenv{'description'}.'</h1>');
+	$r->print('<h3>'.  &Apache::lonnet::domain($cdom,'description').'</h3>');
+}else{
+	$r->print('\noindent{\large\textbf{'.$courseenv{'description'}.'}}\\\\\\\\\textbf{'.
+	&Apache::lonnet::domain($cdom,'description').'}\\\\');
+}
+# -------------------------------------------------------- Get course personnel
+    my %coursepersonnel=&Apache::lonnet::get_course_adv_roles($cdom.'/'.$cnum);
+    if ($target ne 'tex') {
+	$r->print(&Apache::lonhtmlcommon::start_pick_box());
+    } else {
+	$r->print('\begin{tabular}{|p{0.45\textwidth}|p{0.45\textwidth}|}\hline');
+    }
+    my @personnel=sort(keys(%coursepersonnel));
+    my $lastpers=$personnel[$#personnel];
+    foreach my $element (@personnel) {
+	if ($target ne 'tex') {
+	    $r->print(&Apache::lonhtmlcommon::row_title($element));
+	} else {
+	    $r->print(' '.&Apache::lonxml::xmlparse($r,'tex',$element).' & ');
+	}
+        foreach (split(/\,/,$coursepersonnel{$element})) {
+	    my ($puname,$pudom)=split(/\:/,$_);
+	    if ($target ne 'tex') {
+                my $courseperson = &Apache::loncommon::plainname($puname,$pudom);
+                if (($env{'user.name'} eq '') || ($env{'user.name'} eq 'public') ||
+                    ($env{'user.domain'} eq '') || ($env{'user.domain'} eq 'public')) {
+		    $r->print(' '.$courseperson);
+                } else {
+                    $r->print(' '.&Apache::loncommon::aboutmewrapper($courseperson,
+                              $puname,$pudom));
+                }
+	    } else {
+		$r->print(' '.&Apache::loncommon::plainname($puname,
+                              $pudom).' ');
+	    }
+	}
+	if ($target ne 'tex') {
+            my $lastclose=$element eq $lastpers?1:0;
+            $r->print(&Apache::lonhtmlcommon::row_closure($lastclose));
+	} else {
+	    $r->print('\\\\ \hline');
+	}
+    }
+    if ($target ne 'tex') {
+	$r->print(&Apache::lonhtmlcommon::end_pick_box());
+    } else {
+	$r->print('\end{tabular}\\\\');
+    }
+#----------Print last update
+ my $lastmod=$syllabus{'uploaded.lastmodified'};
        $lastmod=($lastmod?&Apache::lonlocal::locallocaltime($lastmod):&mt('never'));
        my $who = &Apache::loncommon::aboutmewrapper(
                     &Apache::loncommon::plainname($syllabus{'uploaded.name'},
                      $syllabus{'uploaded.domain'}),$syllabus{'uploaded.name'},
                      $syllabus{'uploaded.domain'});
-       if ($target ne 'tex') {
+ if ($target ne 'tex') {
 	   $r->print('<table><tr><td>'.&mt('Last updated').':</td><td>'.
 		     $lastmod.'</td><td>'.
 		     ($who ? &mt('by').' '.$who
                            : '' ).
-		     '</td></tr></table><p>');
+		     '</td></tr></table>');
        } else {
 	   $r->print('\\\\ '.&mt('Last updated').': '.$lastmod.' '.
 		     ($who? &mt('by').'\\\\ '.
@@ -319,12 +338,33 @@ ENDSCRIPT
 		          :'')
 		     .'\\\\');
        }
+# -------------------------------------------------------------- Announcements?
+    my $day = &Apache::lonannounce::showday(time,2,
+			 &Apache::lonannounce::readcalendar($cdom.'_'.$cnum));
+    if ($target ne 'tex') {
+	if($allowed){
+		&Apache::lontemplate::print_start_template($r,'RSS Feeds and Blogs','LC_ContentBoxSpecial');
+		$r->print(&Apache::lonrss::advertisefeeds($cnum,$cdom,$forceedit));
+		&Apache::lontemplate::print_end_template($r);
+	}
+	elsif(&Apache::lonrss::advertisefeeds($cnum,$cdom) ne ''){
+		&Apache::lontemplate::print_start_template($r,'RSS Feeds and Blogs','LC_ContentBoxSpecial');
+		$r->print(&Apache::lonrss::advertisefeeds($cnum,$cdom,$forceedit));
+		&Apache::lontemplate::print_end_template($r);
+	}
+
+    } else {
+	$r->print(&Apache::lonxml::xmlparse($r,'tex',$day));
+    }
+# ---------------------------------------------------------------- Get syllabus
+    if (($syllabus{'uploaded.lastmodified'}) || ($allowed)) {
        if ($allowed) {
 	   $r->print('<form method="post">'.
 		     '<input type="hidden" name="forceedit" value="edit" />');
        }
        my @htmlids=();
-       foreach my $field (sort(keys(%syllabusfields))) {
+
+	foreach my $field (sort(keys(%syllabusfields))) {
 	   if (($syllabus{$field}=~/\w/) || ($allowed)) {
 	       my $message=$syllabus{$field};
 	       if ($field eq 'lll_includeurl') { # this is the "included" field
@@ -332,40 +372,40 @@ ENDSCRIPT
 		   $message='';
 		   foreach my $filelink (split(/\n/,$urls)) {
 		       my $output='';
-# embed style?
+			# embed style?
 		       my ($curfext)=($filelink=~/\.([^\.]+)$/);
 		       my $embstyle=&Apache::loncommon::fileembstyle($curfext);
-		       if (($embstyle eq 'ssi') || ($curfext=~/\/$/)) {
-# make ssi call and remove everything but the body contents
+		       if (($embstyle eq 'ssi') || ($curfext=~/\/$/)) {# make ssi call and remove everything but the body contents
 			   $output=&Apache::lonnet::ssi_body($filelink);
-		       } elsif ($embstyle eq 'img') {
-# embed as an image
+		       } elsif ($embstyle eq 'img') {# embed as an image
 			   $output='<img src="'.$filelink.'" />';
 		       }
-		       if ($target ne 'tex') {
-			   $message.='<p>'.$output.'</p>';
-		       } else {
-			   $message.=' '.&Apache::lonxml::xmlparse($r,'tex','<p>'.$output.'</p>').' ';
-		       }      
+		       if($output ne ''){
+		       		if ($target ne 'tex') {
+			  	 	$message.='<p>'.$output.'</p>';
+		       		} else {
+			   		$message.=' '.&Apache::lonxml::xmlparse($r,'tex','<p>'.$output.'</p>').' ';
+		       		}
+			}
 		   }
 		   if ($allowed) {
 		       $r->print('<h3>'.$syllabusfields{$field}.
-				 &Apache::loncommon::help_open_topic('Syllabus_URLs').'</h3>'.
-				 '<p><a href="'.$r->uri.'?forcestudent=1"><font size="+1">'.&mt('Show Public View').'</font></a>'.
-				 &Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView').'</p>');
+			 &Apache::loncommon::help_open_topic('Syllabus_URLs').'</h3>');
 		   } else {
 		       $r->print($message);
-		   } 
+		   }
 	       } else {
 		   &Apache::lonfeedback::newline_to_br(\$message);
-		   $message =~s|(https*://[^\s]+)|<a href="$1"><tt>$1</tt></a>|g;
+		   $message =~s|(https?\://[^\s]+)|<a href="$1"><tt>$1</tt></a>|g;
 		   if ($allowed) {
 		       $message=&Apache::lonspeller::markeduptext($message);
 		   }
 		   $message=&Apache::lontexconvert::msgtexconverted($message);
 		   if ($target ne 'tex') {
-		       $r->print('<h3>'.$syllabusfields{$field}.'</h3><blockquote>'.
-				 $message.'</blockquote>');
+			if($allowed){
+				$r->print('<p>');
+			}
+			&Apache::lontemplate::print_template($r, $syllabusfields{$field}, $message,$allowed,'LC_ContentBoxSpecial');
 		   } else {
 		       $r->print('\\\\\textbf{'.$syllabusfields{$field}.'}\\\\'.
 				 &Apache::lonxml::xmlparse($r,'tex',$message).'\\\\');
@@ -373,19 +413,22 @@ ENDSCRIPT
 		   push(@htmlids,$field);
 	       }
 	       if ($allowed) {
-		   $r->print('<br /><textarea cols="80" rows="12" name="'.$field.'" id="'.$field.'">'.
-			     &HTML::Entities::encode($syllabus{$field},'"&<>').
-			     '</textarea> <input type="submit" name="storesyl" value="'.&mt('Save').'" />');
+			if($target ne 'tex'){
+				$r->print('</p>');
+				&Apache::lontemplate::print_editbox_template($r, $syllabus{$field}, $field);
+			}
+
 	       }
 	   }
        }
+
        if ($allowed) {
 	   $r->print('</form>'.
 		     &Apache::lonhtmlcommon::htmlareaselectactive(@htmlids));
        }
-       if ($target ne 'tex') {$r->print('</p>');} else {$r->print('\\\\');}
+      # if ($target ne 'tex') {$r->print('</p>');} else {$r->print('\\\\');}
     } else {
-	if ($target ne 'tex') {$r->print('<p>');} else {$r->print('\par ');} 
+	if ($target ne 'tex') {$r->print('<p>');} else {$r->print('\par ');}
 	$r->print(&mt('No syllabus information provided.'));
 	if ($target ne 'tex') {$r->print('</p>');}
     }
@@ -400,7 +443,7 @@ ENDSCRIPT
 	$r->print('\end{document}');
     }
     return OK;
-} 
+}
 
 1;
 __END__