--- loncom/interface/lonpickcourse.pm 2009/12/02 18:33:27 1.91 +++ loncom/interface/lonpickcourse.pm 2010/02/21 15:09:36 1.92 @@ -1,7 +1,7 @@ # The LearningOnline Network # Pick a course # -# $Id: lonpickcourse.pm,v 1.91 2009/12/02 18:33:27 bisitz Exp $ +# $Id: lonpickcourse.pm,v 1.92 2010/02/21 15:09:36 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -79,7 +79,7 @@ sub handler { $typeelement = ''; } - # if called when a DC is creating a course + # 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)$/); } @@ -309,8 +309,8 @@ sub display_matched_courses { my $ccrolechk = ' checked="checked" '; my $menuchk = ' '; if ($env{'form.prevphase'} ne '') { - $ccrolechk = ' '; - $menuchk = ' checked="checked" '; + $ccrolechk = ' '; + $menuchk = ' checked="checked" '; } $r->print( '
' @@ -380,6 +380,14 @@ sub display_matched_courses { } $r->print(&Apache::loncommon::end_data_table_header_row()); } + my %cc_cloneable; + if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) { + my ($coord_cloneable,$warning) = + &get_coordinator_cloneable($cloneruname,$clonerudom,$type); + if ($coord_cloneable) { + map {$cc_cloneable{$_} = 1;} split('&',$coord_cloneable); + } + } 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()); @@ -392,17 +400,22 @@ sub display_matched_courses { $instcode = $courses{$course}{'inst_code'}; $ttype = $courses{$course}{'type'}; if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) { - my $cloners = $courses{$course}{'cloners'}; - if ($cloners ne '') { - my @cloneable = split(',',$cloners); - if (grep(/^\*$/,@cloneable)) { - $canclone = 1; - } - if (grep(/^\*:\Q$env{'form.clonerudom'}\E$/,@cloneable)) { - $canclone = 1; - } - if (grep(/^\Q$cloneruname\E:\Q$clonerudom\E$/,@cloneable)) { - $canclone = 1; + if ($cc_cloneable{$courses{$course}{'cnum'}.':'.$courses{$course}{'domain'}}) { + $canclone = 1; + } + unless ($canclone) { + my $cloners = $courses{$course}{'cloners'}; + if ($cloners ne '') { + my @cloneable = split(',',$cloners); + if (grep(/^\*$/,@cloneable)) { + $canclone = 1; + } + if (grep(/^\*:\Q$env{'form.clonerudom'}\E$/,@cloneable)) { + $canclone = 1; + } + if (grep(/^\Q$cloneruname\E:\Q$clonerudom\E$/,@cloneable)) { + $canclone = 1; + } } } } @@ -762,33 +775,15 @@ $typeelement .&Apache::lonhtmlcommon::row_closure(1); } $output .= &Apache::lonhtmlcommon::end_pick_box().'

'; - my $warning; + my ($coord_cloneable,$warning); if (($env{'form.form'} eq 'ccrs') || ($env{'form.form'} eq 'requestcrs')) { - my $cloneruhome=&Apache::lonnet::homeserver($cloneruname,$clonerudom); - my $cc_clone; - if ($cloneruhome eq 'no_host') { - $warning = '

'.&mt('Intended course owner does not exist'). - '
'; - } else { - my $ccrole; - if ($type eq 'Community') { - $ccrole = 'co'; - } elsif ($type eq 'Course') { - $ccrole = 'cc'; - } - if ($env{'form.form'} eq 'ccrs') { - $output .= ''."\n"; - } - my %ccroles = &Apache::lonnet::get_my_roles($cloneruname,$clonerudom, - 'userroles',['active'], [$ccrole]); - foreach my $key (sort(keys(%ccroles))) { - my ($cnum,$cdom,$role) = split(':',$key); - $cc_clone .= $cdom.':'.$cnum.'&'; - } - $cc_clone =~ s/\&$//; + ($coord_cloneable,$warning) = + &get_coordinator_cloneable($cloneruname,$clonerudom,$type); + if ($env{'form.form'} eq 'ccrs') { + $output .= ''."\n"; } - if ($cc_clone ne '') { - $output .= ''; + if ($coord_cloneable) { + $output .= ''; } } $output .= ''."\n". @@ -797,6 +792,30 @@ $typeelement return $jscript.$warning.$output; } +sub get_coordinator_cloneable { + my ($cloneruname,$clonerudom,$type) = @_; + if (&Apache::lonnet::homeserver($cloneruname,$clonerudom) eq 'no_host') { + my $warning = '
'.&mt('Intended course owner does not exist'). + '
'; + return ('',$warning); + } else { + my ($cc_clone,$ccrole); + if ($type eq 'Community') { + $ccrole = 'co'; + } elsif ($type eq 'Course') { + $ccrole = 'cc'; + } + my %ccroles = &Apache::lonnet::get_my_roles($cloneruname,$clonerudom, + 'userroles',['active'], [$ccrole]); + foreach my $key (sort(keys(%ccroles))) { + my ($cnum,$cdom,$role) = split(':',$key); + $cc_clone .= $cdom.':'.$cnum.'&'; + } + $cc_clone =~ s/\&$//; + return ($cc_clone); + } +} + sub instcode_selectors { my ($codedom,$formname,$officialjs) = @_; my ($output,@codetitles,%cat_titles,%cat_order,%cat_items);