--- loncom/interface/domainprefs.pm 2007/09/16 17:26:56 1.28 +++ loncom/interface/domainprefs.pm 2007/11/10 03:51:46 1.32 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.28 2007/09/16 17:26:56 raeburn Exp $ +# $Id: domainprefs.pm,v 1.32 2007/11/10 03:51:46 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -61,7 +61,7 @@ sub handler { &Apache::lonhtmlcommon::clear_breadcrumbs(); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['phase']); - my $phase = "display"; + my $phase = 'pickactions'; if ( exists($env{'form.phase'}) ) { $phase = $env{'form.phase'}; } @@ -69,97 +69,173 @@ sub handler { &Apache::lonnet::get_dom('configuration',['login','rolecolors', 'quotas','autoenroll','autoupdate','directorysrch', 'usercreation','contacts'],$dom); - my @prefs = ( - { text => 'Default color schemes', - help => 'Default_Color_Schemes', - action => 'rolecolors', - header => [{col1 => 'Student Settings', - col2 => '',}, - {col1 => 'Coordinator Settings', - col2 => '',}, - {col1 => 'Author Settings', - col2 => '',}, - {col1 => 'Administrator Settings', - col2 => '',}], - }, - { text => 'Log-in page options', - help => 'Domain_Log-in_Page', - action => 'login', - header => [{col1 => 'Item', - col2 => '',}], - }, - { text => 'Default quotas for user portfolios', - help => 'Default_User_Quota', - action => 'quotas', - header => [{col1 => 'User type', - col2 => 'Default quota'}], - }, - { text => 'Auto-enrollment settings', - help => 'Domain_Auto_Enrollment', - action => 'autoenroll', - header => [{col1 => 'Configuration setting', - col2 => 'Value(s)'}], - }, - { text => 'Auto-update settings', - help => 'Domain_Auto_Update', - action => 'autoupdate', - header => [{col1 => 'Setting', - col2 => 'Value',}, - {col1 => 'User Population', - col2 => 'Updataeable user data'}], - }, - { text => 'Institutional directory searches', - help => 'Domain_Directory_Search', - action => 'directorysrch', - header => [{col1 => 'Setting', - col2 => 'Value',}], - }, - { text => 'Contact Information', - help => 'Domain_Contact_Information', - action => 'contacts', - header => [{col1 => 'Setting', - col2 => 'Value',}], - }, - - { text => 'User creation', - help => 'Domain_User_Creation', - action => 'usercreation', - header => [{col1 => 'Setting', - col2 => 'Value',}, - {col1 => 'Context', - col2 => 'Assignable Authentication Types'}], - }, + my @prefs_order = ('rolecolors','login','quotas','autoenroll', + 'autoupdate','directorysrch','contacts', + 'usercreation'); + my %prefs = ( + 'rolecolors' => + { text => 'Default color schemes', + help => 'Default_Color_Schemes', + header => [{col1 => 'Student Settings', + col2 => '',}, + {col1 => 'Coordinator Settings', + col2 => '',}, + {col1 => 'Author Settings', + col2 => '',}, + {col1 => 'Administrator Settings', + col2 => '',}], + }, + 'login' => + { text => 'Log-in page options', + help => 'Domain_Log-in_Page', + header => [{col1 => 'Item', + col2 => '',}], + }, + 'quotas' => + { text => 'Default quotas for user portfolios', + help => 'Default_User_Quota', + header => [{col1 => 'User type', + col2 => 'Default quota'}], + }, + 'autoenroll' => + { text => 'Auto-enrollment settings', + help => 'Domain_Auto_Enrollment', + header => [{col1 => 'Configuration setting', + col2 => 'Value(s)'}], + }, + 'autoupdate' => + { text => 'Auto-update settings', + help => 'Domain_Auto_Update', + header => [{col1 => 'Setting', + col2 => 'Value',}, + {col1 => 'User Population', + col2 => 'Updataeable user data'}], + }, + 'directorysrch' => + { text => 'Institutional directory searches', + help => 'Domain_Directory_Search', + header => [{col1 => 'Setting', + col2 => 'Value',}], + }, + 'contacts' => + { text => 'Contact Information', + help => 'Domain_Contact_Information', + header => [{col1 => 'Setting', + col2 => 'Value',}], + }, + + 'usercreation' => + { text => 'User creation', + help => 'Domain_User_Creation', + header => [{col1 => 'Setting', + col2 => 'Value',}, + {col1 => 'Context', + col2 => 'Assignable Authentication Types'}], + }, ); my @roles = ('student','coordinator','author','admin'); + my @actions = &Apache::loncommon::get_env_multiple('form.actions'); &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"javascript:changePage(document.$phase,'display')", - text=>"Domain Configuration"}); + ({href=>"javascript:changePage(document.$phase,'pickactions')", + text=>"Pick functionality"}); my $confname = $dom.'-domainconfig'; if ($phase eq 'process') { &Apache::lonhtmlcommon::add_breadcrumb - ({href=>"javascript:changePage(document.$phase,'$phase')", + ({href=>"javascript:changePage(document.$phase,'display')", + text=>"Domain Configuration"}, + {href=>"javascript:changePage(document.$phase,'$phase')", text=>"Updated"}); &print_header($r,$phase); - foreach my $item (@prefs) { - $r->print('

'.&mt($item->{'text'}).'

'. - &process_changes($r,$dom,$confname, - $item->{'action'},\@roles,%domconfig)); + foreach my $item (@prefs_order) { + if (grep(/^\Q$item\E$/,@actions)) { + $r->print('

'.&mt($prefs{$item}{'text'}).'

'. + &process_changes($r,$dom,$confname,$item, + \@roles,%domconfig)); + } } $r->print('

'); - &print_footer($r,$phase,'display','Back to actions menu'); + &print_footer($r,$phase,'display','Back to configuration display', + \@actions); $r->print('

'); + } elsif ($phase eq 'display') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"javascript:changePage(document.$phase,'display')", + text=>"Domain Configuration"}); + &print_header($r,$phase); + if (@actions > 0) { + my $rowsum = 0; + my (%output,%rowtotal,@items); + my $halfway = @actions/2; + foreach my $item (@prefs_order) { + if (grep(/^\Q$item\E$/,@actions)) { + push(@items,$item); + ($output{$item},$rowtotal{$item}) = + &print_config_box($r,$dom,$confname,$phase, + $item,$prefs{$item}, + $domconfig{$item}); + $rowsum += $rowtotal{$item}; + } + } + my $colend; + my $halfway = $rowsum/2; + my $aggregate = 0; + my $sumleft = 0; + my $sumright = 0; + my $crossover; + for (my $i=0; $i<@items; $i++) { + $aggregate += $rowtotal{$items[$i]}; + if ($aggregate > $halfway) { + $crossover = $i; + last; + } + } + for (my $i=0; $i<$crossover; $i++) { + $sumleft += $rowtotal{$items[$i]}; + } + for (my $i=$crossover+1; $i<@items; $i++) { + $sumright += $rowtotal{$items[$i]}; + } + if ((@items > 1) && ($env{'form.numcols'} == 2)) { + my $sumdiff = $sumright - $sumleft; + if ($sumdiff > 0) { + $colend = $crossover + 1; + } else { + $colend = $crossover; + } + } else { + $colend = @items; + } + $r->print('

'); + for (my $i=0; $i<$colend; $i++) { + $r->print($output{$items[$i]}); + } + $r->print(''); + if ($colend < @items) { + for (my $i=$colend; $i<@items; $i++) { + $r->print($output{$items[$i]}); + } + } + $r->print('

'); + $r->print(&print_footer($r,$phase,'process','Save',\@actions)); + } else { + $r->print(''. + ''."\n". + ''.&mt('No settings chosen'). + ''); + } + $r->print(''); + $r->print(&Apache::loncommon::end_page()); } else { if ($phase eq '') { - $phase = 'display'; + $phase = 'pickactions'; } - my %helphash; - my $numprefs = @prefs; + my %helphash; &print_header($r,$phase); if (keys(%domconfig) == 0) { my $primarylibserv = &Apache::lonnet::domain($dom,'primary'); - my $perlvarref = &LONCAPA::Configuration::read_conf('loncapa.conf'); - my $hostid = $perlvarref->{'lonHostID'}; - if ($hostid ne $primarylibserv) { + my @ids=&Apache::lonnet::current_machine_ids(); + if (!grep(/^\Q$primarylibserv\E$/,@ids)) { my %designhash = &Apache::loncommon::get_domainconf($dom); my @loginimages = ('img','logo','domlogo'); my $custom_img_count = 0; @@ -175,24 +251,39 @@ sub handler { } if ($custom_img_count > 0) { my $switch_server = &check_switchserver($dom,$confname); - $r->print(&mt('Domain configuration settings have yet to be saved for this domain via the web-based domain preferences interface.').'
'.&mt("While this remains so, you must switch to the domain's primary library server in order to update settings.").'

'.&mt("Thereafter, you will be able to update settings from this screen when logged in to any server in the LON-CAPA network (with a Domain Coordinator role selected in the domain), although you will still need to switch to the domain's primary library server to upload new images or logos.").'

'.$switch_server.' '.&mt('to primary library server for domain: [_1]',$dom)); + $r->print( + &mt('Domain configuration settings have yet to be saved for this domain via the web-based domain preferences interface.').'
'. + &mt("While this remains so, you must switch to the domain's primary library server in order to update settings.").'

'. + &mt("Thereafter, (with a Domain Coordinator role selected in the domain) you will be able to update settings when logged in to any server in the LON-CAPA network.").'
'. + &mt("However, you will still need to switch to the domain's primary library server to upload new images or logos.").'

'); + if ($switch_server) { + $r->print($switch_server.' '.&mt('to primary library server for domain: [_1]',$dom)); + } return OK; } } } - $r->print(' - -
'); - foreach my $item (@prefs) { - if ($item->{'action'} eq 'login') { - $r->print(' '); - } - &print_config_box($r,$dom,$confname,$phase,$item->{'action'}, - $item,$domconfig{$item->{'action'}}); - } - $r->print(' -
'); - &print_footer($r,$phase,'process','Save changes'); + $r->print('

'.&mt('Functionality to display/modify').'

'); + $r->print(''."\n".'

  '. + '

'); + foreach my $item (@prefs_order) { + $r->print('

'); + } + $r->print('

'.&mt('Display options').'

'."\n". + '

'.&mt('Display using: ')."\n". + '  '. + ''. + &mt('two columns').'

'); + $r->print(&print_footer($r,$phase,'display','Go')); + $r->print(''); + $r->print(&Apache::loncommon::end_page()); } return OK; } @@ -223,34 +314,38 @@ sub process_changes { sub print_config_box { my ($r,$dom,$confname,$phase,$action,$item,$settings) = @_; - $r->print(' - + my $rowtotal = 0; + my $output = + '
- '); + '; # # FIXME - put the help link back in when the help files exist # # '); + $rowtotal ++; if (($action eq 'autoupdate') || ($action eq 'rolecolors') || ($action eq 'usercreation')) { my $colspan = ($action eq 'rolecolors')?' colspan="2"':''; - $r->print(' + $output .= ' @@ -260,13 +355,14 @@ sub print_config_box { - '); + '; + $rowtotal ++; if ($action eq 'autoupdate') { - $r->print(&print_autoupdate('bottom',$dom,$settings)); + $output .= &print_autoupdate('bottom',$dom,$settings,\$rowtotal); } elsif ($action eq 'usercreation') { - $r->print(&print_usercreation('bottom',$dom,$settings)); + $output .= &print_usercreation('bottom',$dom,$settings,\$rowtotal); } else { - $r->print(&print_rolecolors($phase,'coordinator',$dom,$confname,$settings).' + $output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).'
'.&mt($item->{text}).' 
'.&mt($item->{text}). + ' 
'.&mt($item->{text}).' '. # &Apache::loncommon::help_open_topic($item->{'help'}).'
- '); + '; + $rowtotal ++; if ($action eq 'autoupdate') { - $r->print(&print_autoupdate('top',$dom,$settings)); + $output .= &print_autoupdate('top',$dom,$settings,\$rowtotal); } elsif ($action eq 'usercreation') { - $r->print(&print_usercreation('top',$dom,$settings)); + $output .= &print_usercreation('top',$dom,$settings,\$rowtotal); } else { - $r->print(&print_rolecolors($phase,'student',$dom,$confname,$settings)); + $output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal); } - $r->print(' + $output .= '
'.$item->{'header'}->[0]->{'col1'}.' '.$item->{'header'}->[0]->{'col2'}.'
'.$item->{'header'}->[1]->{'col1'}.' '.$item->{'header'}->[1]->{'col2'}.'
@@ -277,7 +373,7 @@ sub print_config_box { '.$item->{'header'}->[2]->{'col1'}.' '.$item->{'header'}->[2]->{'col2'}.' '. - &print_rolecolors($phase,'author',$dom,$confname,$settings).' + &print_rolecolors($phase,'author',$dom,$confname,$settings,\$rowtotal).' @@ -288,58 +384,99 @@ sub print_config_box { '.$item->{'header'}->[3]->{'col1'}.' '.$item->{'header'}->[3]->{'col2'}.' '. - &print_rolecolors($phase,'admin',$dom,$confname,$settings)); + &print_rolecolors($phase,'admin',$dom,$confname,$settings,\$rowtotal); + $rowtotal += 2; } } else { - $r->print(' + $output .= ' - '); + '; if (($action eq 'login') || ($action eq 'directorysrch')) { - $r->print(' - '); + $output .= ' + '; } else { - $r->print(' - '); + $output .= ' + '; } - $r->print(' + $output .= ' - '); + '; + $rowtotal ++; if ($action eq 'login') { - $r->print(&print_login($dom,$confname,$phase,$settings)); + $output .= &print_login($dom,$confname,$phase,$settings,\$rowtotal); } elsif ($action eq 'quotas') { - $r->print(&print_quotas($dom,$settings)); + $output .= &print_quotas($dom,$settings,\$rowtotal); } elsif ($action eq 'autoenroll') { - $r->print(&print_autoenroll($dom,$settings)); + $output .= &print_autoenroll($dom,$settings,\$rowtotal); } elsif ($action eq 'directorysrch') { - $r->print(&print_directorysrch($dom,$settings)); + $output .= &print_directorysrch($dom,$settings,\$rowtotal); } elsif ($action eq 'contacts') { - $r->print(&print_contacts($dom,$settings)); + $output .= &print_contacts($dom,$settings,\$rowtotal); } } - $r->print(' + $output .= '
'.$item->{'header'}->[0]->{'col1'}.''.$item->{'header'}->[0]->{'col1'}.''.$item->{'header'}->[0]->{'col1'}.''.$item->{'header'}->[0]->{'col1'}.''.$item->{'header'}->[0]->{'col2'}.'
-
'); - return; +
'; + return ($output,$rowtotal); } sub print_header { my ($r,$phase) = @_; + my $alert = &mt('You must select at least one functionality type to display.'); my $js = ' '; + my $additem; + if ($phase eq 'pickactions') { + my %loaditems = ( + 'onload' => "javascript:getViewportDims(document.$phase.width,document.$phase.height);setDisplayColumns();setFormElements(document.pickactions);", + ); + $additem = {'add_entries' => \%loaditems,}; + } else { + my %loaditems = ( + 'onload' => "javascript:getViewportDims(document.$phase.width,document.$phase.height);", + ); + $additem = {'add_entries' => \%loaditems,}; + } $r->print(&Apache::loncommon::start_page('View/Modify Domain Settings', - $js)); + $js,$additem)); $r->print(&Apache::lonhtmlcommon::breadcrumbs('Domain Settings')); $r->print('
@@ -354,23 +491,42 @@ function changePage(formname,newphase) { } sub print_footer { - my ($r,$phase,$newphase,$button_text) = @_; + my ($r,$phase,$newphase,$button_text,$actions) = @_; $button_text = &mt($button_text); - $r->print(''); + $r->print(''. + ''. + ''); + if (($phase eq 'display') || ($phase eq 'process')) { + if (ref($actions) eq 'ARRAY') { + foreach my $item (@{$actions}) { + $r->print('')."\n"; + } + } + $r->print(''); + } my $dest='"javascript:changePage(document.'.$phase.','."'$newphase'".')"'; if ($phase eq 'process') { - $r->print(''.$button_text.''); + $r->print('

'.$button_text.'

'); } else { - $r->print(''); + my $onclick; + if ($phase eq 'display') { + $onclick = '"javascript:changePage(document.'.$phase.','."'$newphase'".')"'; + } else { + $onclick = '"javascript:changePage(document.'.$phase.','."'$newphase'".')"'; + } + $r->print('

'); + } + if ($phase eq 'process') { + $r->print('
'.&Apache::loncommon::end_page()); } - $r->print(''); - $r->print('
'.&Apache::loncommon::end_page()); return; } sub print_login { - my ($dom,$confname,$phase,$settings) = @_; + my ($dom,$confname,$phase,$settings,$rowtotal) = @_; my %choices = &login_choices(); my ($catalogon,$catalogoff,$adminmailon,$adminmailoff); $catalogon = ' checked="checked" '; @@ -471,7 +627,7 @@ sub print_login { ''; $itemcount ++; - $datatable .= &display_color_options($dom,$confname,$phase,'login',$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text); + $datatable .= &display_color_options($dom,$confname,$phase,'login',$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text,$rowtotal); $datatable .= ''; return $datatable; } @@ -498,7 +654,7 @@ sub login_choices { } sub print_rolecolors { - my ($phase,$role,$dom,$confname,$settings) = @_; + my ($phase,$role,$dom,$confname,$settings,$rowtotal) = @_; my %choices = &color_font_choices(); my @bgs = ('pgbg','tabbg','sidebg'); my @links = ('link','alink','vlink'); @@ -564,19 +720,19 @@ sub print_rolecolors { } } my $itemcount = 1; - my $datatable = &display_color_options($dom,$confname,$phase,$role,$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text); + my $datatable = &display_color_options($dom,$confname,$phase,$role,$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text,$rowtotal); $datatable .= ''; return $datatable; } sub display_color_options { my ($dom,$confname,$phase,$role,$itemcount,$choices,$is_custom,$defaults,$designs, - $images,$bgs,$links,$alt_text) = @_; + $images,$bgs,$links,$alt_text,$rowtotal) = @_; my $css_class = $itemcount%2?' class="LC_odd_row"':''; my $datatable = ''. ''.$choices->{'font'}.''; if (!$is_custom->{'font'}) { - $datatable .= ''.&mt('Default in use:').' '.$defaults->{'font'}.''; + $datatable .= ''.&mt('Default in use:').' '.$defaults->{'font'}.''; } else { $datatable .= ' '; } @@ -584,6 +740,8 @@ sub display_color_options { $datatable .= ''. ' '.$fontlink. + '    '. ''; my $switchserver = &check_switchserver($dom,$confname); foreach my $img (@{$images}) { @@ -679,7 +837,7 @@ sub display_color_options { my $bgs_def; foreach my $item (@{$bgs}) { if (!$is_custom->{$item}) { - $bgs_def .= ''.$choices->{$item}.'
'.$defaults->{'bgs'}{$item}.''; + $bgs_def .= ''.$choices->{$item}.'    
'.$defaults->{'bgs'}{$item}.''; } } if ($bgs_def) { @@ -693,10 +851,10 @@ sub display_color_options { my $link = &color_pick($phase,$role,$item,$choices->{$item},$designs->{'bgs'}{$item}); $datatable .= ''.$link; if ($designs->{'bgs'}{$item}) { - $datatable .= ' '; + $datatable .= '    '; } $datatable .= '
'; + '" onblur = "javascript:document.display.css_'.$role.'_'.$item.'.style.background-color = document.display.'.$role.'_'.$item.'.value;"/>'; } $datatable .= ''; $itemcount ++; @@ -706,7 +864,7 @@ sub display_color_options { my $links_def; foreach my $item (@{$links}) { if (!$is_custom->{$item}) { - $links_def .= ''.$choices->{$item}.'
'.$defaults->{'links'}{$item}.''; + $links_def .= ''.$choices->{$item}.'
'.$defaults->{'links'}{$item}.''; } } if ($links_def) { @@ -717,17 +875,16 @@ sub display_color_options { $datatable .= ''. ''; foreach my $item (@{$links}) { - $datatable .= ''; } + $$rowtotal += $itemcount; return $datatable; } @@ -767,7 +924,7 @@ ENDCOL } sub print_quotas { - my ($dom,$settings) = @_; + my ($dom,$settings,$rowtotal) = @_; my $datatable; my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom); my $typecount = 0; @@ -799,11 +956,12 @@ sub print_quotas { ''; + $$rowtotal += $typecount; return $datatable; } sub print_autoenroll { - my ($dom,$settings) = @_; + my ($dom,$settings,$rowtotal) = @_; my $autorun = &Apache::lonnet::auto_run(undef,$dom), my ($defdom,$runon,$runoff); if (ref($settings) eq 'HASH') { @@ -852,11 +1010,12 @@ sub print_autoenroll { $settings->{'sender_uname'}. '" size="10" />  '.&mt('domain'). ': '.$domform.''; + $$rowtotal += 2; return $datatable; } sub print_autoupdate { - my ($position,$dom,$settings) = @_; + my ($position,$dom,$settings,$rowtotal) = @_; my $datatable; if ($position eq 'top') { my $updateon = ' '; @@ -892,6 +1051,7 @@ sub print_autoupdate { ''. ''; + $$rowtotal += 2; } else { my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom); my @fields = ('lastname','firstname','middlename','gen', @@ -910,18 +1070,20 @@ sub print_autoupdate { $datatable = &usertype_update_row($settings,$usertypes,\%fieldtitles, \@fields,$types,\$numrows); + $$rowtotal += @{$types}; } } $datatable .= &usertype_update_row($settings,{'default' => $othertitle}, \%fieldtitles,\@fields,['default'], \$numrows); + $$rowtotal ++; } return $datatable; } sub print_directorysrch { - my ($dom,$settings) = @_; + my ($dom,$settings,$rowtotal) = @_; my $srchon = ' '; my $srchoff = ' checked="checked" '; my ($exacton,$containson,$beginson); @@ -963,20 +1125,21 @@ sub print_directorysrch { my $numinrow = 4; my $cansrchrow = 0; my $datatable=''. - ''. + ''. ''. ''. - ''. + ''. ''. ''; + $$rowtotal += 2; if (ref($usertypes) eq 'HASH') { if (keys(%{$usertypes}) > 0) { $datatable .= &users_cansearch_row($settings,$types,$usertypes,$dom, @@ -985,12 +1148,13 @@ sub print_directorysrch { } } if ($cansrchrow) { + $$rowtotal ++; $datatable .= ''; } else { $datatable .= ''; } - $datatable .= '
'; - my $link = &color_pick($phase,$role,$item,$choices->{$item},$designs->{'links'}{$item}); + $datatable .= ''."\n". + &color_pick($phase,$role,$item,$choices->{$item}, + $designs->{'links'}{$item}); if ($designs->{'links'}{$item}) { - $datatable.=''. - $link.''; - } else { - $datatable .= $link; + $datatable.='    '; } $datatable .= '
'. ' Mb
'.&mt('Directory search available?').''.&mt('Directory search available?').' '. '
'.&mt('Other domains can search?').''.&mt('Other domains can search?').' '. '
'.&mt('Supported search methods'). - ''; + $datatable .= ''; + $$rowtotal ++; if ($cansrchrow) { $datatable .= ''; } else { $datatable .= ''; } - $datatable .= ''. + $datatable .= ''. ''; + $$rowtotal ++; return $datatable; } sub print_contacts { - my ($dom,$settings) = @_; + my ($dom,$settings,$rowtotal) = @_; my $datatable; my @contacts = ('adminemail','supportemail'); my (%checked,%to,%otheremails); @@ -1070,9 +1236,9 @@ sub print_contacts { } else { $css_class = ' class="LC_odd_row" '; } - $datatable .= ''. - ''. - ''; $rownum ++; @@ -1084,7 +1250,8 @@ sub print_contacts { $css_class = ' class="LC_odd_row" '; } $datatable .= ''. - ''. + ''. ''."\n"; $rownum ++; } + $$rowtotal += $rownum; return $datatable; } @@ -1119,10 +1287,8 @@ sub contact_titles { } sub print_usercreation { - my ($position,$dom,$settings) = @_; + my ($position,$dom,$settings,$rowtotal) = @_; my $numinrow = 4; - my $rowcount = 0; - my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($dom); my $datatable; my %lt = &Apache::lonlocal::texthash ( nondc => 'User creation other than by Domain Coordinator: ', @@ -1139,8 +1305,8 @@ sub print_usercreation { } } $datatable = ''. - ''. - '
'.&mt('Supported search methods'). + ''; foreach my $title (@{$titleorder}) { if (defined($searchtitles->{$title})) { my $check = ' '; @@ -1007,12 +1171,13 @@ sub print_directorysrch { } } $datatable .= '
'.&mt('Search latitude').''.&mt('Search latitude').''. '
'.$titles->{$item}.''. + $datatable .= ''. + ''.$titles->{$item}. + ''. '
'.$titles->{$type}.': '. + $titles->{$type}.': '. ''; foreach my $item (@contacts) { @@ -1100,6 +1267,7 @@ sub print_contacts { '
'.$lt{'nondc'}.''; + ''; - $rowcount ++; + $$rowtotal ++; + my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($dom,'username'); + my $rowcount = 0; if (ref($rules) eq 'HASH') { if (keys(%{$rules}) > 0) { - $datatable .= &username_formats_row($settings,$rules, - $ruleorder,$numinrow); + $datatable .= &user_formats_row('username',$settings,$rules, + $ruleorder,$numinrow,$rowcount); + $$rowtotal ++; + $rowcount ++; + } + } + my ($idrules,$idruleorder) = &Apache::lonnet::inst_userrules($dom,'id'); + if (ref($idrules) eq 'HASH') { + if (keys(%{$idrules}) > 0) { + $datatable .= &user_formats_row('id',$settings,$idrules, + $idruleorder,$numinrow,$rowcount); + $$rowtotal ++; $rowcount ++; } } @@ -1184,7 +1362,7 @@ sub print_usercreation { } else { $css_class = ' class="LC_odd_row" '; } - $datatable .= ''. + $datatable .= ''. ''; $rownum ++; } + $$rowtotal += $rownum; } return $datatable; } -sub username_formats_row { - my ($settings,$rules,$ruleorder,$numinrow) = @_; - my $output = ''. - '
'.$lt{'nondc'}. + ''; foreach my $item ('author','course') { $datatable .= ''; } $datatable .= '
'.$title{$item}. ''. ''; @@ -1197,15 +1375,24 @@ sub print_usercreation { $datatable .= '
'.&mt('Format rules to check for new usernames: '). - ''; +sub user_formats_row { + my ($type,$settings,$rules,$ruleorder,$numinrow,$rowcount) = @_; + my $output; + my %text = ( + 'username' => 'new usernames', + 'id' => 'IDs', + ); + my $css_class = $rowcount%2?' class="LC_odd_row"':''; + $output = ''. + ''. + '
'. + &mt("Format rules to check for $text{$type}: "). + ''; my $rem; if (ref($ruleorder) eq 'ARRAY') { for (my $i=0; $i<@{$ruleorder}; $i++) { @@ -1218,14 +1405,14 @@ sub username_formats_row { $output .= ''; } my $check = ' '; - if (ref($settings->{'username_rule'}) eq 'ARRAY') { - if (grep(/^\Q$ruleorder->[$i]\E$/,@{$settings->{'username_rule'}})) { + if (ref($settings->{$type.'_rule'}) eq 'ARRAY') { + if (grep(/^\Q$ruleorder->[$i]\E$/,@{$settings->{$type.'_rule'}})) { $check = ' checked="checked" '; } } $output .= ''; } @@ -2003,6 +2190,18 @@ sub check_switchserver { return $switchserver; } +sub javascript_set_colnums { + return < 1100) { + document.pickactions.numcols[1].checked = true; + } else { + document.pickactions.numcols[0].checked = true; + } +} +END +} + sub modify_quotas { my ($dom,%domconfig) = @_; my ($resulttext,%changes); @@ -2546,6 +2745,7 @@ sub modify_usercreation { course => 'adding users to a course', ); my @username_rule = &Apache::loncommon::get_env_multiple('form.username_rule'); + my @id_rule = &Apache::loncommon::get_env_multiple('form.id_rule'); my @cancreate = &Apache::loncommon::get_env_multiple('form.can_createuser'); if (ref($curr_usercreation{'cancreate'}) eq 'ARRAY') { foreach my $type (@{$curr_usercreation{'cancreate'}}) { @@ -2576,6 +2776,21 @@ sub modify_usercreation { push(@{$changes{'username_rule'}},@username_rule); } + if (ref($curr_usercreation{'id_rule'}) eq 'ARRAY') { + foreach my $type (@{$curr_usercreation{'id_rule'}}) { + if (!grep(/^\Q$type\E$/,@id_rule)) { + push(@{$changes{'id_rule'}},$type); + } + } + foreach my $type (@id_rule) { + if (!grep(/^\Q$type\E$/,@{$curr_usercreation{'id_rule'}})) { + push(@{$changes{'id_rule'}},$type); + } + } + } else { + push(@{$changes{'id_rule'}},@id_rule); + } + my @contexts = ('author','course','domain'); my @authtypes = ('int','krb4','krb5','loc'); my %authhash; @@ -2610,7 +2825,8 @@ sub modify_usercreation { usercreation => { cancreate => \@cancreate, username_rule => \@username_rule, - authtypes => \%authhash, + id_rule => \@id_rule, + authtypes => \%authhash, } ); @@ -2632,7 +2848,8 @@ sub modify_usercreation { } } if (ref($changes{'username_rule'}) eq 'ARRAY') { - my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($dom); + my ($rules,$ruleorder) = + &Apache::lonnet::inst_userrules($dom,'username'); my $chgtext = '
    '; foreach my $type (@username_rule) { if (ref($rules->{$type}) eq 'HASH') { @@ -2646,6 +2863,22 @@ sub modify_usercreation { $resulttext .= '
  • '.&mt('There are now no username formats restricted to verified users in the institutional directory.').'
  • '; } } + if (ref($changes{'id_rule'}) eq 'ARRAY') { + my ($idrules,$idruleorder) = + &Apache::lonnet::inst_userrules($dom,'id'); + my $chgtext = '
      '; + foreach my $type (@id_rule) { + if (ref($idrules->{$type}) eq 'HASH') { + $chgtext .= '
    • '.$idrules->{$type}{'name'}.'
    • '; + } + } + $chgtext .= '
    '; + if (@id_rule > 0) { + $resulttext .= '
  • '.&mt('IDs with the following formats are restricted to verified users in the institutional directory: ').$chgtext.'
  • '; + } else { + $resulttext .= '
  • '.&mt('There are now no ID formats restricted to verified users in the institutional directory.').'
  • '; + } + } my %authname = &authtype_names(); my %context_title = &context_names(); if (ref($changes{'authtypes'}) eq 'ARRAY') {
'. '