--- loncom/interface/lonsyllabus.pm 2013/08/26 23:38:07 1.129
+++ loncom/interface/lonsyllabus.pm 2016/02/20 00:12:40 1.140
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Syllabus
#
-# $Id: lonsyllabus.pm,v 1.129 2013/08/26 23:38:07 raeburn Exp $
+# $Id: lonsyllabus.pm,v 1.140 2016/02/20 00:12:40 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -35,6 +35,7 @@ use Apache::loncommon;
use Apache::lonnet;
use Apache::lontexconvert;
use Apache::lonfeedback;
+use Apache::lonhtmlgateway;
use Apache::lonannounce;
use Apache::lonlocal;
use Apache::lonhtmlcommon;
@@ -53,7 +54,7 @@ sub handler {
# ------------------------------------------------------------ Get query string
&Apache::loncommon::get_unprocessed_cgi
($ENV{'QUERY_STRING'},['register','forceedit','todocs',
- 'folderpath','title']);
+ 'folderpath','title','only_body']);
# ----------------------------------------------------- Is this even a course?
my $homeserver=&Apache::lonnet::homeserver($cnum,$cdom);
if ($homeserver eq 'no_host') {
@@ -73,12 +74,6 @@ sub handler {
my %courseenv=&Apache::lonnet::dump('environment',$cdom,$cnum);
my $crstype = &Apache::loncommon::course_type();
-# ------------------------------------------------------------ Print the screen
-
- if ($target eq 'tex') {
- $r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}));
- }
-
# --------------------------------------------------------------- Force Student
my ($forceedit,$forcestudent);
if ($env{'form.forceedit'}) { $forceedit=1; }
@@ -103,8 +98,8 @@ sub handler {
my $uploaded=$courseenv{'uploadedsyllabus'};
my $minimal=$courseenv{'minimalsyllabus'};
- if (($minimal =~/\w/) || ($uploaded =~/\w/)) {
- my $item;
+ if (($minimal =~/\w/) || ($uploaded =~/\w/)) {
+ my ($item,$is_pdf);
if ($minimal =~/\w/) {
if ($external =~ m{\Q$minimal\E$}) {
undef($external);
@@ -115,6 +110,9 @@ sub handler {
undef($external);
}
$item = $uploaded;
+ if ($item =~ /\.pdf$/i) {
+ $is_pdf = 1;
+ }
}
unless ($allowed && $forceedit) {
my $file=&Apache::lonnet::filelocation("",$item);
@@ -124,19 +122,37 @@ sub handler {
if ($filecontents eq -1) {
$r->print(&mt('Syllabus file unavailable'));
} elsif ($filetype eq 'tex') {
- my $result = &Apache::lontexconvert::converted(\$filecontents,
- $env{'form.texengine'});
- my %args;
- &get_breadcrumbs($cdom,$cnum,$crstype,\%args);
- $r->print(&Apache::loncommon::start_page("Syllabus",undef,\%args).
- $result.
- &Apache::loncommon::end_page());
+ if ($target eq 'tex') {
+ $r->print($filecontents);
+ } else {
+ my $texengine = $env{'form.texengine'};
+ if ($texengine eq '') {
+ $texengine = 'tth';
+ } elsif (lc($texengine) eq 'jsmath') {
+ $texengine = 'MathJax';
+ }
+ my $result = &Apache::lontexconvert::converted(\$filecontents,$texengine);
+ my %args;
+ &get_breadcrumbs($cdom,$cnum,$crstype,\%args);
+ if ($env{'form.only_body'}) {
+ $args{'only_body'} = 1;
+ }
+ if ($env{'request.use_absolute'}) {
+ $args{'use_absolute'} = $env{'request.use_absolute'};
+ }
+ $r->print(&Apache::loncommon::start_page("Syllabus",undef,\%args).
+ $result.
+ &Apache::loncommon::end_page());
+ }
} else {
my %mystyle;
+ unless ($target eq 'tex') {
+ $target = 'web';
+ }
&Apache::structuretags::reset_problem_globals();
my $oldfile = $env{'request.filename'};
$env{'request.filename'} = $item;
- my $result = &Apache::lonxml::xmlparse($r,'web',$filecontents,
+ my $result = &Apache::lonxml::xmlparse($r,$target,$filecontents,
'',%mystyle);
&Apache::structuretags::reset_problem_globals();
&Apache::lonhomework::finished_parsing();
@@ -145,17 +161,44 @@ sub handler {
$r->print($result);
}
} else {
- $r->print(&Apache::lonwrapper::wrapper($item));
+ if ($target eq 'tex') {
+ $r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}).
+ ' \strut \\\\ \textbf{'.&mt('Syllabus').'} \strut \\\\ '.
+ &mt('Unsupported file type.').' \strut \\\\ '.
+ &mt('Print the syllabus directly from your web browser').
+ '\end{document}');
+ } else {
+ $r->print(&Apache::lonwrapper::wrapper($item,undef,$env{'request.use_absolute'},
+ undef,$is_pdf,undef,&mt('Syllabus')));
+ }
}
return OK;
}
} elsif ($external=~/\w/) {
unless ($allowed && $forceedit) {
- $r->print(&Apache::lonwrapper::wrapper($external));
+ if ($target eq 'tex') {
+ $r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}).
+ ' \strut \\\\ \textbf{'.&mt('Syllabus').'} \strut \\\\ '.$external.' '.
+ ' \strut \\\\ '.&mt('Print the syllabus directly from your web browser').
+ '\end{document}');
+ } else {
+ my $is_ext = 1;
+ my $is_pdf;
+ if ($external =~ /\.pdf$/i) {
+ $is_pdf = 1;
+ }
+ $r->print(&Apache::lonwrapper::wrapper($external,undef,$env{'request.use_absolute'},
+ $is_ext,$is_pdf,undef,&mt('Syllabus')));
+ }
return OK;
}
}
+# ------------------------------------------------------------ Print the screen
+
+ if ($target eq 'tex') {
+ $r->print(&Apache::lonprintout::print_latex_header($env{'form.latex_type'}));
+ }
# ------------------------------ The buck stops here: internal syllabus display
# --------------------------------------------------------- The syllabus fields
@@ -385,7 +428,7 @@ sub handler {
}
$rsslinktext = &mt('Manage Course RSS Feeds/Blogs');
if ($crstype eq 'Community') {
- $rsslinktext = &mt('Manage Communiity RSS Feeds/Blogs');
+ $rsslinktext = &mt('Manage Community RSS Feeds/Blogs');
}
}
my $editurl= &Apache::lonnet::absolute_url().'/adm/'.$cdom.'/'.$cnum.'/_rss.html';
@@ -542,6 +585,7 @@ ENDSCRIPT
my $checkedstr = "var include = new Array('".join("','",@checked)."');";
my $uncheckedstr = "var exclude = new Array('".join("','",@unchecked)."');";
my $invurl = &mt('Invalid URL');
+ &js_escape(\$invurl);
my $urlregexp = <<'ENDREGEXP';
/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i
ENDREGEXP
@@ -670,6 +714,13 @@ ENDSCRIPT
onload => 'setTemplateBoxes();',
);
$args->{'add_entries'} = \%loaditem;
+ } else {
+ if ($env{'request.use_absolute'}) {
+ $args->{'use_absolute'} = $env{'request.use_absolute'};
+ }
+ }
+ if ($env{'form.only_body'}) {
+ $args->{'only_body'} = 1;
}
my $start_page =
&Apache::loncommon::start_page("Syllabus", $rss_link.$js,$args);
@@ -1060,13 +1111,18 @@ sub get_personnel {
sub save_changes {
my ($cnum,$cdom,$uploaded,$external,$minimal,$syllabus,$syllabusfields,$courseenv) = @_;
my ($earlyout,$output);
- unless ((ref($syllabus) eq 'HASH') && (ref($syllabusfields) eq 'HASH')) {
+ unless ((ref($syllabus) eq 'HASH') && (ref($syllabusfields) eq 'HASH') ||
+ (ref($courseenv) eq 'HASH')) {
return ($earlyout,$uploaded,$external,$minimal,$output);
}
if (($env{'form.deleteuploaded_file'}) || ($env{'form.deleteuploaded_minimal'})) {
my %storehash;
if (($env{'form.choice'} eq 'file') &&
($env{'form.deleteuploaded_file'}) && ($uploaded =~ /\w/)) {
+ if ($courseenv->{'uploadedsyllabus'} =~ m{^\Q/uploaded/$cdom/$cnum/portfolio\E(/syllabus/.+)$}) {
+ my $filename = $1;
+ &update_access_permissions($cdom,$cnum,$filename);
+ }
&Apache::lonnet::delenv('course.'.$env{'request.course.id'}.'.uploadedsyllabus');
&Apache::lonnet::delenv('course.'.$env{'request.course.id'}.'.externalsyllabus');
$storehash{'uploadedsyllabus'} = '';
@@ -1076,6 +1132,17 @@ sub save_changes {
undef($external);
} elsif (($env{'form.choice'} eq 'minimal') &&
($env{'form.deleteuploaded_minimal'}) && ($minimal =~ /\w/)) {
+ my $minimalurl = "/uploaded/$cdom/$cnum/portfolio/syllabus/loncapa.html";
+ if ($courseenv->{'minimalsyllabus'} eq "$minimalurl") {
+ my $filecontents=&Apache::lonnet::getfile(&Apache::lonnet::filelocation("",$minimalurl));
+ unless ($filecontents eq -1) {
+ $env{'form.output'} = $filecontents;
+ &Apache::lonnet::finishuserfileupload($cnum,$cdom,'output',
+ 'portfolio/syllabus/loncapa.html.bak');
+ $minimalurl = &default_minimal_syllabus($cnum,$cdom);
+ }
+ }
+ &update_access_permissions($cdom,$cnum,'/syllabus/loncapa.html');
&Apache::lonnet::delenv('course.'.$env{'request.course.id'}.'.externalsyllabus');
&Apache::lonnet::delenv('course.'.$env{'request.course.id'}.'.minimalsyllabus');
$storehash{'externalsyllabus'} = '';
@@ -1131,10 +1198,8 @@ sub save_changes {
foreach my $syl_field (keys(%{$syllabusfields})) {
my $field=$env{'form.'.$syl_field};
chomp($field);
- $field=~s/\s+$//s;
- $field=~s/^\s+//s;
- $field=~s/\
$//s;
- $field=&Apache::lonfeedback::clear_out_html($field,1);
+ my $gateway = Apache::lonhtmlgateway->new();
+ $field = $gateway->process_incoming_html($field,1);
#here it will be stored
$syllabus->{$syl_field}=$field;
if ($syl_field eq 'lll_includeurl') { # clean up included URLs
@@ -1229,34 +1294,16 @@ sub save_changes {
($url,$needlink) = &process_upload(\$output,$cnum,$cdom,
\%allfiles,\%codebase);
} else {
- $output = '