--- loncom/interface/lonsyllabus.pm 2006/03/21 21:50:49 1.50 +++ loncom/interface/lonsyllabus.pm 2012/12/07 17:15:56 1.116 @@ -1,7 +1,7 @@ # The LearningOnline Network # Syllabus # -# $Id: lonsyllabus.pm,v 1.50 2006/03/21 21:50:49 albertel Exp $ +# $Id: lonsyllabus.pm,v 1.116 2012/12/07 17:15:56 raeburn 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; @@ -38,6 +39,7 @@ use Apache::lonannounce; use Apache::lonlocal; use Apache::lonhtmlcommon; use Apache::lonspeller(); +use HTML::Entities(); sub handler { my $r = shift; @@ -50,14 +52,21 @@ sub handler { my (undef,undef,$cdom,$cnum)=split(/\//,$r->uri); # ------------------------------------------------------------ Get query string &Apache::loncommon::get_unprocessed_cgi - ($ENV{'QUERY_STRING'},['forcestudent','register','forceedit','wrapperdisplay']); + ($ENV{'QUERY_STRING'},['register','forceedit','todocs', + 'folderpath','title']); # ----------------------------------------------------- Is this even a course? my $homeserver=&Apache::lonnet::homeserver($cnum,$cdom); if ($homeserver eq 'no_host') { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; - &Apache::loncommon::simple_error_page($r,'No syllabus available', - 'No syllabus available'); + &Apache::loncommon::simple_error_page($r,'No syllabus available', + 'No syllabus available'); + return OK; + } elsif (!&Apache::lonnet::is_course($cdom,$cnum)) { + &Apache::loncommon::content_type($r,'text/html'); + $r->send_http_header; + &Apache::loncommon::simple_error_page($r,'No syllabus available', + 'The course/community for which the syllabus was requested does not exist.'); return OK; } # ------------------------------------- There is such a course, get environment @@ -65,31 +74,16 @@ sub handler { # ------------------------------------------------------------ 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::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 { - $r->print(&Apache::lonwrapper::wrapper("/public/$cdom/$cnum/syllabus?wrapperdisplay=menu", - $externalsyllabus)); - } - return OK; - } + $r->print( Apache::lonwrapper::wrapper($externalsyllabus) ); + return OK; + } # ------------------------------ The buck stops here: internal syllabus display # --------------------------------------------------------- The syllabus fields @@ -110,244 +104,348 @@ sub handler { 'kkk_textbook' => 'Textbook', 'lll_includeurl' => 'URLs To Include in Syllabus'); # --------------------------------------------------------------- Force Student - my $forcestudent=''; - if ($env{'form.forcestudent'}) { $forcestudent='student'; }; - my $forceedit=''; - if ($env{'form.forceedit'}) { $forceedit='edit'; } - -# ----------------------------------------------------------------- Make header + my ($forceedit,$forcestudent); + if ($env{'form.forceedit'}) { $forceedit=1; } + if (!$forceedit) { + $forcestudent=1; + } +# ----------------------------------------------------------------- Make header if ($target ne 'tex') { - my $start_page = - &Apache::loncommon::start_page("Syllabus", $rss_link, - {'function' => $forcestudent, - 'add_entries' => $addentries, - 'domain' => $cdom, - 'force_register' => - $env{'form.register'},}); + my $rss_link = &Apache::lonrss::rss_link($cnum,$cdom); + my $js; + if ($env{'form.backto'} eq 'coursecatalog') { + $js .= <<"ENDSCRIPT"; + + + +ENDSCRIPT + } + my $args = {'function' => undef, + 'domain' => $cdom}; + my $forcereg; + if ($env{'form.register'}) { + $forcereg = 1; + $args->{'force_register'} = $forcereg; + } + if ($env{'form.backto'} eq 'coursecatalog') { + &Apache::lonhtmlcommon::clear_breadcrumbs(); + my $brcrum = [{href=>"javascript:ToCatalog();", + text=>&mt('Course/Community Catalog'), + no_mt=>1} + ]; + if ($env{'form.coursenum'} ne '') { + push(@{$brcrum}, + {href=>"javascript:ToCatalog('details')", + text=>"Course details"}); + } + push(@{$brcrum}, + {href=>$r->uri, + text=>"Course syllabus"}); + $args->{'bread_crumbs'} = $brcrum; + } elsif ($env{'form.folderpath'} =~ /^supplemental/) { + my $crstype = &Apache::loncommon::course_type(); + my $title = $env{'form.title'}; + if ($title eq '') { + $title = &mt('Syllabus'); + } + my $brcrum = + &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); + if (ref($brcrum) eq 'ARRAY') { + $args->{'bread_crumbs'} = $brcrum; + } + } + my $start_page = + &Apache::loncommon::start_page("Syllabus", $rss_link.$js,$args); + $r->print($start_page); + } +# ---------------------------------------------------------- Load syllabus info + my %syllabus=&Apache::lonnet::dump('syllabus',$cdom,$cnum); + my $allowed=0; - $r->print($start_page.'
' + .&mt('This syllabus can be publicly viewed at [_1]' + ,''.$protocol.'://'.&Apache::lonnet::hostname($homeserver).$r->uri.'') + .' '.&Apache::loncommon::help_open_topic('Syllabus_ExtLink') + .'
' + .'' + .&mt('Instead of using this template you can specify an external URL as Syllabus in the [_1]Course Configuration[_2].' + ,'','') + .'
' + .''.$element.' | '); - } else { - $r->print(' '.&Apache::lonxml::xmlparse($r,'tex',$element).' & '); - } + 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).' & '); + } + my @coursepersonlist; 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, + 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')) { + push(@coursepersonlist,$courseperson); + } else { + push(@coursepersonlist,&Apache::loncommon::aboutmewrapper($courseperson, + $puname,$pudom)); + } + } else { + push(@coursepersonlist,&Apache::loncommon::plainname($puname, $pudom).' '); - } - } - if ($target ne 'tex') { - $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'). - '
'); - } elsif ($privileged) { - if ($target ne 'tex') { - $r->print(''.
- &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/\
$//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);
- }
+ } else {
+ $r->print(&Apache::lonxml::xmlparse($r,'tex',$day));
}
# ---------------------------------------------------------------- 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('\\\\ '.&mt('Last updated').': '.$lastmod.' '.&mt('by').'\\\\ '. - &Apache::loncommon::plainname($syllabus{'uploaded.name'}, - $syllabus{'uploaded.domain'}).'\\\\'); - } - if ($allowed) { - $r->print('
'. - &Apache::lonhtmlcommon::htmlareaselectactive(@htmlids)); - } - if ($target ne 'tex') {$r->print('');} else {$r->print('\\\\');} + if ($allowed) { + $r->print(''. + &Apache::lonhtmlcommon::htmlareaselectactive()); + } } else { - if ($target ne 'tex') {$r->print('');} else {$r->print('\par ');} - $r->print('No syllabus information provided.'); - if ($target ne 'tex') {$r->print('
');} + if ($target ne 'tex') {$r->print('');} else {$r->print('\par ');} + $r->print(&mt('No syllabus information provided.')); + if ($target ne 'tex') {$r->print('
');} } if ($target ne 'tex') { - $r->print(&Apache::loncommon::end_page()); + $r->print('