--- loncom/interface/lonsyllabus.pm 2002/08/27 15:40:27 1.3
+++ loncom/interface/lonsyllabus.pm 2006/03/15 19:41:26 1.48
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Syllabus
#
-# $Id: lonsyllabus.pm,v 1.3 2002/08/27 15:40:27 www Exp $
+# $Id: lonsyllabus.pm,v 1.48 2006/03/15 19:41:26 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -32,42 +32,356 @@ use strict;
use Apache::Constants qw(:common);
use Apache::loncommon;
use Apache::lonnet;
+use Apache::lontexconvert;
+use Apache::lonfeedback;
+use Apache::lonannounce;
+use Apache::lonlocal;
+use Apache::lonhtmlcommon;
+use Apache::lonspeller();
sub handler {
my $r = shift;
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
return OK if $r->header_only;
-
-# ------------------------------------------------------------ Print the screen
- $r->print(< '.
+&Apache::loncommon::help_open_topic('Uploaded_Templates_TextBoxes','Help with filling in text boxes').' '.&mt('This syllabus can be publicly viewed at')
+ .' http://'.
+ $Apache::lonnet::hostname{$homeserver}.$r->uri.''.
+ &Apache::loncommon::help_open_topic('Syllabus_ExtLink').' '.&mt('You can specify an external URL as Syllabus in the [_1].',''.&mt('Course Parameters').'').' '.
+&mt('Show Public View').''.
+ &Apache::loncommon::help_open_topic('Uploaded_Templates_PublicView').
+ ' '.
+ &mt('Edit').'');
+ }
+ }
+ if (($allowed) && ($env{'form.storesyl'})) {
+ foreach (keys %syllabusfields) {
+ my $field=$env{'form.'.$_};
+ chomp($field);
+ $field=~s/\s+$//s;
+ $field=~s/^\s+//s;
+ $field=~s/\ ');
+ } else {
+ $r->print('\\\\ '.&mt('Last updated').': '.$lastmod.' '.&mt('by').'\\\\ '.
+ &Apache::loncommon::plainname($syllabus{'uploaded.name'},
+ $syllabus{'uploaded.domain'}).'\\\\');
+ }
+ if ($allowed) {
+ $r->print(''.$courseenv{'description'}.'
'.
- $Apache::lonnet::domaindescription{$cdom}.'
');
+
+# ------------------------------------------------------------ Print the screen
+ my $feedurl='http://'.$ENV{'HTTP_HOST'}.'/public/'.$cdom.'/'.$cnum.'/Course_Announcements.rss';
+ if ($target ne 'tex') {
+ my $html=&Apache::lonxml::xmlbegin();
+ my $head=&Apache::loncommon::headtag('The LearningOnline Network with CAPA');
+ $r->print(<'.$courseenv{'description'}.'
'.
+ $Apache::lonnet::domaindescription{$cdom}.'
');
+ } else {
+ $r->print('\noindent{\large\textbf{'.$courseenv{'description'}.'}}\\\\\\\\\textbf{'.
+ $Apache::lonnet::domaindescription{$cdom}.'}\\\\');
+ }
+# -------------------------------------------------------------- Announcements?
+ if ($target ne 'tex') {
+ $r->print(&Apache::lonannounce::showday(time,2,
+ &Apache::lonannounce::readcalendar($cdom.'_'.$cnum)).
+ &Apache::lonrss::advertisefeeds($cnum,$cdom));
+ } else {
+ $r->print(&Apache::lonxml::xmlparse($r,'tex',
+ &Apache::lonannounce::showday(time,2,
+ &Apache::lonannounce::readcalendar($cdom.'_'.$cnum))));
+ }
+# -------------------------------------------------------- Get course personnel
+ my %coursepersonnel=&Apache::lonnet::get_course_adv_roles($cdom.'/'.$cnum);
+ if ($target ne 'tex') {
+ $r->print('');
+ } 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('
');
+ } else {
+ $r->print('\end{tabular}\\\\');
+ }
+# ---------------------------------------------------------- Load syllabus info
+ my %syllabus=&Apache::lonnet::dump('syllabus',$cdom,$cnum);
+ my $allowed=0;
+ my $privileged=0;
+
# This handler might be called anonymously ...
# ----------------------------------------------------- Only if not public call
- if ($ENV{'user.environment'}) {
+ if ($env{'user.environment'}) {
# does this user have privileges to post, etc?
- my $allowed=0;
- if ($ENV{'request.course.id'}) {
- $allowed=&Apache::lonnet::allowed('srm',$ENV{'request.course.id'});
+ if ($env{'request.course.id'}) {
+ $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'});
+ $privileged=$allowed;
+ if (($syllabus{'uploaded.lastmodified'}) && (!$forceedit)) {
+ $forcestudent='student';
+ }
+ if ($forcestudent or $target eq 'tex') { $allowed=0; }
}
+ if ($allowed) {
+ $r->print(' ');
+ } else {
+ $r->print('\\\\ \hline');
+ }
+ }
+ if ($target ne 'tex') {
+ $r->print(''.$element.' ');
+ } else {
+ $r->print(' '.&Apache::lonxml::xmlparse($r,'tex',$element).' & ');
+ }
+ foreach (split(/\,/,$coursepersonnel{$element})) {
+ my ($puname,$pudom)=split(/\:/,$_);
+ if ($target ne 'tex') {
+ $r->print(' '.&Apache::loncommon::aboutmewrapper(
+ &Apache::loncommon::plainname($puname,
+ $pudom),$puname,$pudom));
+ } else {
+ $r->print(' '.&Apache::loncommon::plainname($puname,
+ $pudom).' ');
+ }
+ }
+ if ($target ne 'tex') {
+ $r->print('
$//s;
+ $field=&Apache::lonfeedback::clear_out_html($field,1);
+ $syllabus{$_}=$field;
+ if ($_ eq 'lll_includeurl') { # clean up included URLs
+ my $field='';
+ foreach (split(/\n/,$syllabus{$_})) {
+ my $url=$_;
+# get rid of leading and trailing spaces
+ $url=~s/^\s+//;
+ $url=~s/\s+$//;
+ if ($url=~/^http\:\/\/([^\/]+)\/(.+)$/) {
+ my $remainder=$2;
+# remove the hostname from internal URLs
+ foreach (keys %Apache::lonnet::hostname) {
+ if ($1=~/$Apache::lonnet::hostname{$_}/i) {
+ $url=$remainder;
+ }
+ }
+ }
+# norm internal URLs
+ unless ($url=~/^http\:/) {
+ $url=&Apache::lonnet::clutter($url);
+ }
+# re-assemble field
+ if ($url) {
+ $field.=$url."\n";
+ }
+ }
+ $syllabus{$_}=$field;
+ }
+ }
+ $syllabus{'uploaded.domain'}=$env{'user.domain'};
+ $syllabus{'uploaded.name'}=$env{'user.name'};
+ $syllabus{'uploaded.lastmodified'}=time;
+ &Apache::lonnet::put('syllabus',\%syllabus,$cdom,$cnum);
+ }
+ }
+# ---------------------------------------------------------------- Get syllabus
+ if (($syllabus{'uploaded.lastmodified'}) || ($allowed)) {
+ 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') {
+ $r->print(''.&mt('Last updated').': '.
+ $lastmod.' '.&mt('by').' '.$who.
+ '
');} else {$r->print('\par ');} + $r->print('No syllabus information provided.'); + if ($target ne 'tex') {$r->print('
');} + } + if ($target ne 'tex') { + $r->print(&Apache::loncommon::end_page()); + } else { + $r->print('\end{document}'); } - $r->print('