--- loncom/interface/loncoursequeueadmin.pm 2014/05/06 20:42:27 1.48
+++ loncom/interface/loncoursequeueadmin.pm 2015/05/21 23:40:09 1.51
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Utilities to administer domain course requests and course self-enroll requests
#
-# $Id: loncoursequeueadmin.pm,v 1.48 2014/05/06 20:42:27 raeburn Exp $
+# $Id: loncoursequeueadmin.pm,v 1.51 2015/05/21 23:40:09 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -968,6 +968,9 @@ sub update_request_queue {
}
}
}
+ if ($history{'details'}{'clonecrs'}) {
+ $customitems{'_LC_clonefrom'} = $history{'details'}{'clonedom'}.'_'.$history{'details'}{'clonecrs'};
+ }
my ($result,$postprocess) = &course_creation($cdom,$cnum,$context,$history{'details'},\$logmsg,
\$newusermsg,\$addresult,\$enrollcount,
\$response,\$keysmsg,\%domdefs,$longroles,\$code,\%customitems);
@@ -1311,7 +1314,7 @@ sub update_request_queue {
my $syllabuslink =
&Apache::loncommon::syllabuswrapper($showcourse,$cnum,$cdom);
if ($codes{$cnum}) {
- $syllabuslink .= &mt('Unique code: [_1]',$codes{$cnum});
+ $syllabuslink .= ' '.&mt('Unique code: [_1]',$codes{$cnum});
}
$output .= '
'.$syllabuslink.'';
}
@@ -1721,7 +1724,7 @@ sub build_batchcreatehash {
}
sub can_clone_course {
- my ($uname,$udom,$clonecrs,$clonedom,$crstype) = @_;
+ my ($uname,$udom,$clonecrs,$clonedom,$crstype,$dom,$instcode) = @_;
my $canclone;
my $ccrole = 'cc';
if ($crstype eq 'community') {
@@ -1732,19 +1735,71 @@ sub can_clone_course {
if (exists($roleshash{$clonecrs.':'.$clonedom.':'.$ccrole})) {
$canclone = 1;
} else {
- my %courseenv = &Apache::lonnet::userenvironment($clonedom,$clonecrs,('cloners'));
+ my %courseenv = &Apache::lonnet::userenvironment($clonedom,$clonecrs,
+ ('cloners','internal.coursecode'));
my $cloners = $courseenv{'cloners'};
+ my $clonefromcode = $courseenv{'internal.coursecode'};
if ($cloners ne '') {
my @cloneable = split(',',$cloners);
if (grep(/^\*$/,@cloneable)) {
$canclone = 1;
- }
- if (grep(/^\*:\Q$udom\E$/,@cloneable)) {
+ } elsif (grep(/^\*:\Q$udom\E$/,@cloneable)) {
$canclone = 1;
- }
- if (grep(/^\Q$uname\E:\Q$udom\E$/,@cloneable)) {
+ } elsif (grep(/^\Q$uname\E:\Q$udom\E$/,@cloneable)) {
$canclone = 1;
}
+ unless ($canclone) {
+ if (($clonefromcode) && ($instcode) && ($clonedom eq $dom)) {
+ my (%gotdomdefaults,%gotcodedefaults);
+ foreach my $cloner (@cloneable) {
+ if (($cloner ne '*') && ($cloner !~ /^\*\:$match_domain$/) &&
+ ($cloner !~ /^$match_username\:$match_domain$/) && ($cloner ne '')) {
+ if ($cloner =~ /\=/) {
+ my (%codedefaults,@code_order);
+ if (ref($gotcodedefaults{$clonedom}) eq 'HASH') {
+ if (ref($gotcodedefaults{$clonedom}{'defaults'}) eq 'HASH') {
+ %codedefaults = %{$gotcodedefaults{$clonedom}{'defaults'}};
+ }
+ if (ref($gotcodedefaults{$clonedom}{'order'}) eq 'ARRAY') {
+ @code_order = @{$gotcodedefaults{$dom}{'order'}};
+ }
+ } else {
+ &Apache::lonnet::auto_instcode_defaults($clonedom,
+ \%codedefaults,
+ \@code_order);
+ $gotcodedefaults{$clonedom}{'defaults'} = \%codedefaults;
+ $gotcodedefaults{$clonedom}{'order'} = \@code_order;
+ }
+ if (@code_order > 0) {
+ if (&Apache::lonnet::check_instcode_cloning(\%codedefaults,\@code_order,
+ $cloner,$clonefromcode,$instcode)) {
+print STDERR "Z got check from $cloner,$clonefromcode,$instcode and ||".join('**',@code_order)."||\n";
+ $canclone = 1;
+ last;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ } else {
+ my %domdefs = &Apache::lonnet::get_domain_defaults($clonedom);
+ if ($domdefs{'canclone'}) {
+ unless ($domdefs{'canclone'} eq 'none') {
+ if ($domdefs{'canclone'} eq 'domain') {
+ if ($udom eq $clonedom) {
+ $canclone = 1;
+ }
+ } elsif (($clonefromcode) && ($instcode) &&
+ ($clonedom eq $dom)) {
+ if (&Apache::lonnet::default_instcode_cloning($clonedom,$domdefs{'canclone'},
+ $clonefromcode,$instcode)) {
+ $canclone = 1;
+ }
+ }
+ }
+ }
}
unless ($canclone) {
if (&Apache::lonnet::is_course_owner($clonedom,$clonecrs,$uname,$udom)) {
@@ -2026,6 +2081,9 @@ sub process_official_reqs {
}
}
}
+ if ($history{'details'}{'clonecrs'}) {
+ $customitems{'_LC_clonefrom'} = $history{'details'}{'clonedom'}.'_'.$history{'details'}{'clonecrs'};
+ }
my ($result,$postprocess) =
&course_creation($dom,$cnum,'domain',$history{'details'},\$logmsg,\$newusermsg,\$addresult,
\$enrollcount,\$response,\$keysmsg,\%domdefs,\%longroles,\$code,\%customitems);