--- loncom/interface/loncoursequeueadmin.pm 2014/05/06 20:42:27 1.48 +++ loncom/interface/loncoursequeueadmin.pm 2016/08/31 23:28:05 1.52.2.1 @@ -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.52.2.1 2016/08/31 23:28:05 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.'
  • '; } @@ -1716,12 +1719,13 @@ sub build_batchcreatehash { $batchhash{'users'}{$owner}{lastname} = $owner_lastname; $batchhash{'users'}{$owner}{emailenc} = $emailenc; $batchhash{'users'}{$owner}{owneremail} = $owneremail; + $batchhash{'setcomment'} = 1; } return %batchhash; } 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 +1736,70 @@ 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)) { + $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);