--- loncom/interface/loncoursegroups.pm 2006/07/21 02:51:31 1.57 +++ loncom/interface/loncoursegroups.pm 2006/07/28 18:44:27 1.58 @@ -1,6 +1,6 @@ # The LearningOnline Network with CAPA # -# $Id: loncoursegroups.pm,v 1.57 2006/07/21 02:51:31 raeburn Exp $ +# $Id: loncoursegroups.pm,v 1.58 2006/07/28 18:44:27 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -965,6 +965,7 @@ sub retrieve_settings { foreach my $role (sort(keys(%{$groupinfo{'autosec'}}))) { if (ref($groupinfo{'autosec'}{$role}) eq 'ARRAY') { foreach my $section (@{$groupinfo{'autosec'}{$role}}) { + push (@{$stored{'sec_'.$role}},$section); } if (@{$groupinfo{'autosec'}{$role}} > 0) { @@ -1206,7 +1207,7 @@ sub general_settings_form { $gpterm,$ucgpterm); &mapping_options($r,$action,$formname,$page,$sectioncount, $states,$stored,$navbuttons,4,5, - $gpterm,$ucgpterm,$crstype); + $gpterm,$ucgpterm,$crstype,$cdom,$cnum); $nexttext = $$navbuttons{'mose'}; } $prevtext = $$navbuttons{'gtpp'}; @@ -2413,7 +2414,7 @@ sub choose_privs_form { my $img2 = 8; &mapping_options($r,$action,$formname,$page,$sectioncount, $states,$stored,$navbuttons,$img1,$img2, - $gpterm,$ucgpterm,$crstype); + $gpterm,$ucgpterm,$crstype,$cdom,$cnum); } my $prevtext = $$navbuttons{'gtps'}; &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext, @@ -3077,7 +3078,7 @@ sub process_membership { sub mapping_options { my ($r,$action,$formname,$page,$sectioncount,$states,$stored, - $navbuttons,$img1,$img2,$gpterm,$ucgpterm,$crstype) = @_; + $navbuttons,$img1,$img2,$gpterm,$ucgpterm,$crstype,$cdom,$cnum) = @_; my %lt = &Apache::lonlocal::texthash( 'auto' => "Settings for automatic $gpterm enrollment", 'gmma' => "$ucgpterm membership mapping to specific sections/roles", @@ -3094,7 +3095,8 @@ sub mapping_options { 'mapr' => "Mapping of roles and sections affected by automatic $gpterm enrollment/disenrollment follows scheme chosen below.", ); &automapping($r,$action,$stored,\%lt,$img1); - &mapping_settings($r,$sectioncount,\%lt,$stored,$img2,$crstype); + &mapping_settings($r,$sectioncount,\%lt,$stored,$img2,$crstype,$cdom,$cnum, + $action); return; } @@ -3127,7 +3129,7 @@ sub automapping { } sub mapping_settings { - my ($r,$sectioncount,$lt,$stored,$image,$crstype) = @_; + my ($r,$sectioncount,$lt,$stored,$image,$crstype,$cdom,$cnum,$action) = @_; my @sections = keys(%{$sectioncount}); if (@sections > 0) { @sections = sort {$a cmp $b} @sections; @@ -3138,7 +3140,7 @@ sub mapping_settings { } &topic_bar($r,$image,$$lt{'pirs'}); my @roles = &standard_roles(); - my %customroles = &my_custom_roles(); + my %customroles = &course_custom_roles($cdom,$cnum); $r->print(&Apache::loncommon::start_data_table(). &Apache::loncommon::start_data_table_header_row()); $r->print(' @@ -3149,52 +3151,73 @@ sub mapping_settings { } $r->print(&Apache::loncommon::end_data_table_header_row()."\n"); foreach my $role (@roles) { - my $plrole=&Apache::lonnet::plaintext($role,$crstype); - my $sections_sel; - if (@sections > 0) { - if ($role eq 'cc') { - $sections_sel = ''. - &mt('all sections').''; - } else { - $sections_sel=''. - §ions_selection(\@sections,'sec_'.$role). - ''; - } - } - $r->print(&Apache::loncommon::start_data_table_row(). - ''.$plrole. - ''.$sections_sel. - &Apache::loncommon::end_data_table_row()); + my $roletitle=&Apache::lonnet::plaintext($role,$crstype); + $r->print(&print_autorole_item($role,$roletitle,\@sections)); } + my @customs; foreach my $role (sort(keys(%customroles))) { - my $sections_sel; - if (@sections > 0) { - $sections_sel = - ''.§ions_selection(\@sections,'sec_'.$role).''; - } - $r->print(&Apache::loncommon::start_data_table_row(). - ''.&mt('Custom role: '). - ''.$role.''.$sections_sel. - &Apache::loncommon::end_data_table_row()); + my ($roletitle) = ($role =~ m|^cr/[^/]+/[^/]+/(.+)$|); + $role =~ s/\//_/g; + push (@customs,$role); + $r->print(&print_autorole_item($role,$roletitle,\@sections)); + } + if ($action eq 'modify') { + foreach my $role (@{$$stored{'autorole'}}) { + if ((!grep(/^\Q$role\E$/,@customs)) && + (!grep(/^\Q$role\E$/,@roles))) { + my $roletitle; + if ($role =~ /^cr/) { + ($roletitle) = ($role =~ m|_([^_]+)$|); + } else { + $roletitle = &Apache::lonnet::plaintext($role,$crstype); + } + $r->print(&print_autorole_item($role,$roletitle,\@sections)); + } + } } $r->print(&Apache::loncommon::end_data_table()); return; } +sub print_autorole_item { + my ($role,$roletitle,$sections) = @_; + my $sections_sel; + if (@{$sections} > 0) { + if ($role eq 'cc') { + $sections_sel = ''. + &mt('all sections').''; + } else { + $sections_sel=''. + §ions_selection($sections,'sec_'.$role). + ''; + } + } + my $output = &Apache::loncommon::start_data_table_row(). + ''. + ''.$roletitle.''.$sections_sel. + &Apache::loncommon::end_data_table_row(); + return $output; +} + sub standard_roles { my @roles = ('cc','in','ta','ep','st'); return @roles; } -sub my_custom_roles { +sub course_custom_roles { + my ($cdom,$cnum) = @_; my %returnhash=(); - my %rolehash=&Apache::lonnet::dump('roles'); - foreach (keys %rolehash) { - if ($_=~/^rolesdef\_(\w+)$/) { - $returnhash{$1}=$1; + my %coursepersonnel=&Apache::lonnet::dump('nohist_userroles',$cdom,$cnum); + foreach my $person (sort(keys(%coursepersonnel))) { + my ($role) = ($person =~ /^([^:]+):/); + my ($end,$start) = split(/:/,$coursepersonnel{$person}); + if ($end == -1 && $start == -1) { + next; + } + if ($role =~ m|^cr/[^/]+/[^/]+/[^/]|) { + $returnhash{$role} ++; } } return %returnhash;