--- loncom/interface/lonpickcourse.pm 2014/03/17 13:38:57 1.113 +++ loncom/interface/lonpickcourse.pm 2015/05/21 23:40:09 1.116 @@ -1,7 +1,7 @@ # The LearningOnline Network # Pick a course # -# $Id: lonpickcourse.pm,v 1.113 2014/03/17 13:38:57 raeburn Exp $ +# $Id: lonpickcourse.pm,v 1.116 2015/05/21 23:40:09 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -50,9 +50,10 @@ sub handler { &Apache::loncommon::get_unprocessed_cgi ($ENV{'QUERY_STRING'},['domainfilter','form','cnumelement', 'cdomelement','cnameelement','roleelement', - 'multiple','type','setroles','fixeddom','cloner']); + 'multiple','type','setroles','fixeddom','cloner', + 'crscode','crsdom']); my ($type,$title,$jscript,$multelement,$multiple,$roleelement,$typeelement, - $lastaction,$autosubmit,$submitopener,$cloneruname,$clonerudom); + $lastaction,$autosubmit,$submitopener,$cloneruname,$clonerudom,$crscode,$crsdom); # Get course type - Course or Community. $type = $env{'form.type'}; @@ -82,12 +83,16 @@ sub handler { # if called when a DC is creating a course for another user. if ($env{'form.form'} eq 'ccrs') { ($cloneruname,$clonerudom) = ($env{'form.cloner'} =~ /^($match_username):($match_domain)$/); + $crscode = $env{'form.crscode'}; + $crsdom = $env{'request.role.domain'}; } # if called when requesting a course if ($env{'form.form'} eq 'requestcrs') { $cloneruname = $env{'user.name'}; $clonerudom = $env{'user.domain'}; + $crscode = $env{'form.crscode'}; + $crsdom = $env{'form.crsdom'}; } my $onlyown = 0; @@ -105,7 +110,17 @@ sub handler { if ((($env{'form.form'} eq 'cu') || ($env{'form.form'} eq 'studentform')) && ($env{'form.pickedcourse'})) { - $loaditem{'onload'} .= 'setDefaultCredits();setRoles();setSections();'; + if ($type ne 'Community') { + my %coursedescription = + &Apache::lonnet::coursedescription($env{'form.pickedcourse'}, + {'one_time' => '1'}); + my $cdom = $coursedescription{'domain'}; + my %domdefs = &Apache::lonnet::get_domain_defaults($cdom); + if (($domdefs{'officialcredits'} || $domdefs{'unofficialcredits'} || $domdefs{'textbookcredits'})) { + $loaditem{'onload'} .= 'setDefaultCredits();'; + } + } + $loaditem{'onload'} .= 'setRoles();setSections();'; } if ((($env{'form.gosearch'}) && ($env{'form.updater'} eq '')) && (!$onlyown)) { $loaditem{'onload'} .= 'hideSearching(); '; @@ -210,6 +225,12 @@ sub handler { if ($coord_cloneable) { $clonetext .= ''; } + if ($crscode ne '') { + $clonetext .= ''; + } + if ($crsdom ne '') { + $clonetext .= ''; + } } $r->print(&Apache::loncommon::build_filters($filterlist,$type,$roleelement,$multelement, $filter,$action,\$numtitles,undef,$cloneruname, @@ -237,7 +258,8 @@ sub handler { my $srchdom = $filter->{'domainfilter'}; %courses = &Apache::loncommon::search_courses($srchdom,$type,$filter,$numtitles, $cloneruname,$clonerudom,$domcloner, - \@codetitles,$env{'form.cc_clone'}); + \@codetitles,$env{'form.cc_clone'}, + $crsdom,$crscode); } else { $r->print('
'); my %coursehash = &Apache::loncommon::findallcourses(); @@ -252,7 +274,7 @@ sub handler { ''.$filter->{'persondomfilter'}.'').''); } else { &display_matched_courses($r,$type,$multiple,$action,$showroles,$cloneruname, - $clonerudom,%courses); + $clonerudom,$crsdom,$crscode,%courses); } } $r->print(&Apache::loncommon::end_page()); @@ -361,7 +383,7 @@ function setDefaultCredits() { } sub display_matched_courses { - my ($r,$type,$multiple,$action,$showroles,$cloneruname,$clonerudom,%courses) = @_; + my ($r,$type,$multiple,$action,$showroles,$cloneruname,$clonerudom,$crsdom,$crscode,%courses) = @_; if ($env{'form.form'} eq 'portform') { $action = '/adm/portfolio'; } @@ -454,6 +476,7 @@ sub display_matched_courses { map {$cc_cloneable{$_} = 1;} split('&',$coord_cloneable); } } + my (%gotdomdefaults,%gotcodedefaults); foreach my $description (sort { lc($a) cmp lc($b) } (keys(%by_descrip))) { foreach my $course (@{$by_descrip{$description}}) { $r->print(&Apache::loncommon::start_data_table_row()); @@ -479,7 +502,7 @@ sub display_matched_courses { } unless ($canclone) { my $cloners = $courses{$course}{'cloners'}; - if ($cloners ne '') { + if ($cloners ne '') { my @cloneable = split(',',$cloners); if (grep(/^\*$/,@cloneable)) { $canclone = 1; @@ -490,6 +513,80 @@ sub display_matched_courses { if (grep(/^\Q$cloneruname\E:\Q$clonerudom\E$/,@cloneable)) { $canclone = 1; } + unless ($canclone) { + if (($instcode) && ($crscode) && ($cdom eq $crsdom)) { + 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{$cdom}) eq 'HASH') { + if (ref($gotcodedefaults{$cdom}{'defaults'}) eq 'HASH') { + %codedefaults = %{$gotcodedefaults{$cdom}{'defaults'}}; + } + if (ref($gotcodedefaults{$cdom}{'order'}) eq 'ARRAY') { + @code_order = @{$gotcodedefaults{$cdom}{'order'}}; + } + } else { + &Apache::lonnet::auto_instcode_defaults($cdom, + \%codedefaults, + \@code_order); + $gotcodedefaults{$cdom}{'defaults'} = \%codedefaults; + $gotcodedefaults{$cdom}{'order'} = \@code_order; + } + if (@code_order > 0) { + if (&Apache::lonnet::check_instcode_cloning(\%codedefaults,\@code_order, + $cloner,$instcode,$crscode)) { + $canclone = 1; + last; + } + } + } + } + } + } + } + } else { + my %domdefs; + if (ref($gotdomdefaults{$cdom}) eq 'HASH') { + %domdefs = %{$gotdomdefaults{$cdom}}; + } else { + %domdefs = &Apache::lonnet::get_domain_defaults($cdom); + $gotdomdefaults{$cdom} = \%domdefs; + } + if ($domdefs{'canclone'}) { + unless ($domdefs{'canclone'} eq 'none') { + if ($domdefs{'canclone'} eq 'domain') { + if ($clonerudom eq $cdom) { + $canclone = 1; + } + } elsif (($instcode) && ($crscode) && + ($cdom eq $crsdom)) { + my (%codedefaults,@code_order); + if (ref($gotcodedefaults{$cdom}) eq 'HASH') { + if (ref($gotcodedefaults{$cdom}{'defaults'}) eq 'HASH') { + %codedefaults = %{$gotcodedefaults{$cdom}{'defaults'}}; + } + if (ref($gotcodedefaults{$cdom}{'order'}) eq 'ARRAY') { + @code_order = @{$gotcodedefaults{$cdom}{'order'}}; + } + } else { + &Apache::lonnet::auto_instcode_defaults($cdom, + \%codedefaults, + \@code_order); + $gotcodedefaults{$cdom}{'defaults'} = \%codedefaults; + $gotcodedefaults{$cdom}{'order'} = \@code_order; + } + if (@code_order > 0) { + if (&Apache::lonnet::default_instcode_cloning($cdom,$domdefs{'canclone'}, + $instcode,$crscode,\%codedefaults, + \@code_order)) { + $canclone = 1; + } + } + } + } + } } } } @@ -630,7 +727,7 @@ sub course_chooser { $output = '