--- loncom/interface/courseprefs.pm 2013/11/23 20:33:58 1.61
+++ loncom/interface/courseprefs.pm 2015/03/07 23:17:15 1.69
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set configuration settings for a course
#
-# $Id: courseprefs.pm,v 1.61 2013/11/23 20:33:58 raeburn Exp $
+# $Id: courseprefs.pm,v 1.69 2015/03/07 23:17:15 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -215,10 +215,14 @@ use Apache::lonnet;
use Apache::loncommon();
use Apache::lonhtmlcommon();
use Apache::lonconfigsettings;
+use Apache::lonrelrequtils;
use Apache::lonparmset;
use Apache::lonlocal;
use LONCAPA qw(:DEFAULT :match);
+my $registered_cleanup;
+my $modified_courses;
+
sub handler {
my $r=shift;
if ($r->header_only) {
@@ -228,7 +232,7 @@ sub handler {
}
my $context = 'course';
my $cid = $env{'request.course.id'};
- my ($cnum,$cdom) = &get_course($cid);
+ my ($cnum,$cdom,$chome) = &get_course($cid);
my $crstype = &Apache::loncommon::course_type();
my $parm_permission = &Apache::lonnet::allowed('opa',$cid);
my $navmap = Apache::lonnavmaps::navmap->new();
@@ -257,6 +261,9 @@ sub handler {
return HTTP_NOT_ACCEPTABLE;
}
+ $registered_cleanup=0;
+ @{$modified_courses}=();
+
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['phase','actions','origin']);
&Apache::lonhtmlcommon::clear_breadcrumbs();
@@ -272,6 +279,7 @@ sub handler {
edit => 'Edit Community Settings',
gens => 'General community settings',
idnu => 'Community ID or number',
+ unco => 'Unique code',
desc => 'Community Description',
ownr => 'Community Owner',
cown => 'Community Co-owners',
@@ -299,6 +307,7 @@ sub handler {
edit => 'Edit Course Settings',
gens => 'General course settings',
idnu => 'Course ID or number',
+ unco => 'Unique code',
desc => 'Course Description',
cred => 'Student credits',
ownr => 'Course Owner',
@@ -342,7 +351,14 @@ sub handler {
if ($phase eq 'releaseinfo') {
my $loncaparev = $env{'course.'.$cid.'.internal.releaserequired'};
if ($loncaparev) {
- &display_loncaparev_constraints($r,$navmap,$loncaparev,$crstype);
+ if (&display_loncaparev_constraints($r,$navmap,$loncaparev,$crstype)) {
+ push(@{$modified_courses},[$cdom,$cnum,$chome,$crstype]);
+ unless ($registered_cleanup) {
+ my $handlers = $r->get_handlers('PerlCleanupHandler');
+ $r->set_handlers('PerlCleanupHandler' => [\&update_releasereq,@{$handlers}]);
+ $registered_cleanup=1;
+ }
+ }
return OK;
}
}
@@ -357,13 +373,15 @@ sub handler {
{ text => $lt{'gens'},
help => 'Course_Prefs_General',
ordered => ['owner','co-owners','loncaparev','description',
- 'courseid','categories','hidefromcat',
- 'externalsyllabus','cloners','url','rolenames'],
+ 'clonedfrom','courseid','uniquecode','categories',
+ 'hidefromcat','externalsyllabus','cloners','url',
+ 'rolenames'],
itemtext => {
'owner' => $lt{'ownr'},
'co-owners' => $lt{'cown'},
'description' => $lt{'desc'},
'courseid' => $lt{'idnu'},
+ 'uniquecode' => $lt{'unco'},
'categories' => $lt{'catg'},
'hidefromcat' => $lt{'excc'},
'cloners' => $lt{'clon'},
@@ -371,6 +389,7 @@ sub handler {
'url' => 'Top Level Map',
'rolenames' => $lt{'rept'},
'loncaparev' => $lt{'lcrv'},
+ 'clonedfrom' => 'Cloned from',
},
},
'localization' =>
@@ -444,13 +463,15 @@ sub handler {
help => 'Course_Prefs_Display',
ordered => ['default_xml_style','pageseparators',
'disable_receipt_display','texengine',
- 'tthoptions'],
+ 'tthoptions','uselcmath','usejsme'],
itemtext => {
default_xml_style => 'Default XML style file',
pageseparators => 'Visibly Separate Items on Pages',
disable_receipt_display => 'Disable display of problem receipts',
texengine => 'Force use of a specific math rendering engine',
tthoptions => 'Default set of options to pass to tth/m when converting TeX',
+ uselcmath => 'Student formula entry uses inline preview, not DragMath pop-up',
+ usejsme => 'Molecule editor uses JSME (HTML5) in place of JME (Java)',
},
},
'grading' =>
@@ -705,7 +726,8 @@ sub process_changes {
next if (($entry eq 'categories') &&
(!$can_categorize));
next if (($entry eq 'loncaparev') ||
- ($entry eq 'owner'));
+ ($entry eq 'owner') ||
+ ($entry eq 'clonedfrom'));
push(@ordered,$entry);
}
} elsif ($action eq 'classlists') {
@@ -1385,7 +1407,7 @@ sub store_changes {
$displayval = &Apache::lonlocal::locallocaltime($displayval);
} elsif ($key eq 'categories') {
$displayval = $env{'form.categories_display'};
- } elsif ($key eq 'canuse_pdfforms') {
+ } elsif (($key eq 'canuse_pdfforms') || ($key eq 'usejsme') || ($key eq 'uselcmath')) {
if ($changes->{$item}{$key} eq '1') {
$displayval = &mt('Yes');
} elsif ($changes->{$item}{$key} eq '0') {
@@ -1657,7 +1679,8 @@ sub get_course {
}
my $cdom=$env{'course.'.$courseid.'.domain'};
my $cnum=$env{'course.'.$courseid.'.num'};
- return ($cnum,$cdom);
+ my $chome=$env{'course.'.$courseid.'.home'};
+ return ($cnum,$cdom,$chome);
}
sub get_jscript {
@@ -1852,12 +1875,18 @@ sub print_courseinfo {
'co-owners' => {
text => ''.&mt($itemtext->{'co-owners'}).'',
},
+ 'clonedfrom' => {
+ text => ''.&mt($itemtext->{'clonedfrom'}).'',
+ },
'courseid' => {
text => ''.&mt($itemtext->{'courseid'}).'
'.'('.
&mt('internal, optional').')',
input => 'textbox',
size => '25',
},
+ 'uniquecode' => {
+ text => ''.&mt($itemtext->{'uniquecode'}).'',
+ },
'cloners' => {
text => ''.&mt($itemtext->{'cloners'}).'
'.
&mt('Owner and Coordinators included automatically'),
@@ -1903,6 +1932,8 @@ sub print_courseinfo {
next if (!$can_toggle_cat);
} elsif ($item eq 'categories') {
next if (!$can_categorize);
+ } elsif ($item eq 'uniquecode') {
+ next if (!$env{'course.'.$env{'request.course.id'}.'.internal.uniquecode'});
}
unless (($item eq 'cloners') || ($item eq 'rolenames')) {
$colspan = 2;
@@ -2038,6 +2069,21 @@ sub print_courseinfo {
$owner = &mt('None specified');
}
$datatable .= $owner;
+ } elsif ($item eq 'clonedfrom') {
+ my $clonesrc = $env{'course.'.$env{'request.course.id'}.'.clonedfrom'};
+ my $clonedfrom = &mt('None');
+ if ($clonesrc =~ m{/$match_domain/$match_courseid}) {
+ my %clonesrcinfo = &Apache::lonnet::coursedescription($clonesrc);
+ if ($clonesrcinfo{'description'}) {
+ $clonedfrom = $clonesrcinfo{'description'}.' '.($clonesrc);
+ }
+ }
+ $datatable .= $clonedfrom;
+ } elsif ($item eq 'uniquecode') {
+ my $code = $env{'course.'.$env{'request.course.id'}.'.internal.uniquecode'};
+ if ($code) {
+ $datatable .= $code;
+ }
} elsif ($item eq 'co-owners') {
my $coowners = $env{'course.'.$env{'request.course.id'}.'.internal.co-owners'};
my @currcoown;
@@ -2256,6 +2302,7 @@ ENDSCRIPT
sub display_loncaparev_constraints {
my ($r,$navmap,$loncaparev,$crstype) = @_;
+ my ($reqdmajor,$reqdminor);
my $cid = $env{'request.course.id'};
my $cdom = $env{'course.'.$cid.'.domain'};
my $cnum = $env{'course.'.$cid.'.num'};
@@ -2265,22 +2312,22 @@ sub display_loncaparev_constraints {
'section/group' => 'section/group',
'user' => 'user',
);
- my (%checkparms,%checkresponsetypes,%checkcrstypes,%anonsurvey,%randomizetry);
- &Apache::loncommon::build_release_hashes(\%checkparms,\%checkresponsetypes,
- \%checkcrstypes,\%anonsurvey,\%randomizetry);
- if (defined($checkcrstypes{$crstype})) {
+ &Apache::lonrelrequtils::init_global_hashes();
+ if (defined($Apache::lonrelrequtils::checkcrstypes{$crstype})) {
+ ($reqdmajor,$reqdminor) = split(/\./,$Apache::lonrelrequtils::checkcrstypes{$crstype});
$output .= '