--- loncom/interface/loncoursequeueadmin.pm 2015/03/26 14:16:11 1.50 +++ loncom/interface/loncoursequeueadmin.pm 2016/06/19 00:19:31 1.54 @@ -1,7 +1,7 @@ # The LearningOnline Network # Utilities to administer domain course requests and course self-enroll requests # -# $Id: loncoursequeueadmin.pm,v 1.50 2015/03/26 14:16:11 raeburn Exp $ +# $Id: loncoursequeueadmin.pm,v 1.54 2016/06/19 00:19:31 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -523,6 +523,7 @@ sub build_queue_display { unofficial => 'Unofficial course', community => 'Community', textbook => 'Textbook course', + placement => 'Placement test', ); $output .= ''.&mt('Type').''. ''.&mt('Date requested').''. @@ -651,7 +652,7 @@ sub update_request_queue { $beneficiary = 'enroller'; $cid = $env{'request.course.id'}; $crstype = lc(&Apache::loncommon::course_type()); - $firsturl = &course_portal_url($cnum,$cdom); + $firsturl = &Apache::lonnet::course_portal_url($cnum,$cdom); %requesthash = &Apache::lonnet::dump($namespace,$cdom,$cnum); $access_start = $env{'course.'.$cid.'.internal.selfenroll_start_access'}; $access_end = $env{'course.'.$cid.'.internal.selfenroll_end_access'}; @@ -680,7 +681,7 @@ sub update_request_queue { } } my $domconfiguser = &Apache::lonnet::get_domainconfiguser($cdom); - $firsturl = &course_portal_url($domconfiguser,$cdom); + $firsturl = &Apache::lonnet::course_portal_url($domconfiguser,$cdom); $approvedmsg = [{ mt => 'Your request for Authoring Space has been approved.', }, @@ -705,7 +706,7 @@ sub update_request_queue { } } my $domconfiguser = &Apache::lonnet::get_domainconfiguser($cdom); - $firsturl = &course_portal_url($domconfiguser,$cdom); + $firsturl = &Apache::lonnet::course_portal_url($domconfiguser,$cdom); $approvedmsg = [{ mt => 'Your request for a LON-CAPA account has been approved.', }, @@ -980,7 +981,7 @@ sub update_request_queue { } else { $approvedmsg = $approvalmsg{'course'}; } - my $firsturl = &course_portal_url($cnum,$cdom); + my $firsturl = &Apache::lonnet::course_portal_url($cnum,$cdom); if (ref($approvedmsg) eq 'ARRAY') { if (ref($approvedmsg->[1]) eq 'HASH') { $approvedmsg->[1]->{'args'} = [$firsturl]; @@ -1564,22 +1565,6 @@ sub update_request_queue { return $output; } -sub course_portal_url { - my ($cnum,$cdom) = @_; - my $chome = &Apache::lonnet::homeserver($cnum,$cdom); - my $hostname = &Apache::lonnet::hostname($chome); - my $protocol = $Apache::lonnet::protocol{$chome}; - $protocol = 'http' if ($protocol ne 'https'); - my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom); - my $firsturl; - if ($domdefaults{'portal_def'}) { - $firsturl = $domdefaults{'portal_def'}; - } else { - $firsturl = $protocol.'://'.$hostname; - } - return $firsturl; -} - sub get_student_counts { my ($cdom,$cnum) = @_; my (%idx,%stucounts); @@ -1603,7 +1588,7 @@ sub course_creation { $keysmsg,$domdefs,$longroles,$coderef,$customhash) = @_; unless ((ref($details) eq 'HASH') && (ref($domdefs) eq 'HASH') && (ref($longroles) eq 'HASH')) { - return 'error: Invalid request'; + return ('error: Invalid request'); } my ($result,$ownername,$ownerdom); my $crstype = $details->{'crstype'}; @@ -1674,6 +1659,8 @@ sub build_batchcreatehash { $batchhash{'authparam'} = $domdefs->{'auth_arg_def'}; if ($details->{'crstype'} eq 'community') { $batchhash{'crstype'} = 'Community'; + } elsif ($details->{'crstype'} eq 'placement') { + $batchhash{'crstype'} = 'Placement'; } else { if ($details->{'crstype'} eq 'textbook') { if ($details->{'clonecrs'} && $details->{'clonedom'}) { @@ -1724,7 +1711,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') { @@ -1735,19 +1722,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)) { @@ -2041,7 +2079,7 @@ sub process_official_reqs { my $cid = $dom.'_'.$cnum; push(@{$newcids{$instcode}},$cid); if ($dcname && $dcdom) { - my $firsturl = &course_portal_url($cnum,$dom); + my $firsturl = &Apache::lonnet::course_portal_url($cnum,$dom); my $beneficiary = 'pendingrequestor'; my $now = time; my $owner = $ownername.':'.$ownerdom;