--- loncom/interface/courseprefs.pm 2013/09/01 02:09:23 1.49.2.10
+++ loncom/interface/courseprefs.pm 2014/09/24 04:43:28 1.49.2.16
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set configuration settings for a course
#
-# $Id: courseprefs.pm,v 1.49.2.10 2013/09/01 02:09:23 raeburn Exp $
+# $Id: courseprefs.pm,v 1.49.2.16 2014/09/24 04:43:28 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' =>
@@ -705,7 +724,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') {
@@ -1657,7 +1677,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 +1873,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 +1930,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 +2067,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 +2300,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 +2310,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 .= '