Diff for /loncom/interface/domainprefs.pm between versions 1.102.2.11 and 1.102.4.3

version 1.102.2.11, 2010/03/11 02:51:44 version 1.102.4.3, 2009/10/02 16:36:09
Line 199  sub handler { Line 199  sub handler {
     }      }
     my %domconfig =      my %domconfig =
       &Apache::lonnet::get_dom('configuration',['login','rolecolors',        &Apache::lonnet::get_dom('configuration',['login','rolecolors',
                 'quotas','autoenroll','autoupdate','autocreate',                  'quotas','autoenroll','autoupdate','directorysrch',
                 'directorysrch','usercreation','usermodification',                  'usercreation','usermodification','contacts','defaults',
                 'contacts','defaults','scantron','coursecategories',                  'scantron','coursecategories','serverstatuses',
                 'serverstatuses','requestcourses','coursedefaults'],$dom);                  'requestcourses'],$dom);
     my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll',      my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll',
                        'autoupdate','autocreate','directorysrch','contacts',                         'autoupdate','directorysrch','contacts',
                        'usercreation','usermodification','scantron',                         'usercreation','usermodification','scantron',
                        'requestcourses','coursecategories','serverstatuses',                         'requestcourses','coursecategories','serverstatuses');
                        'coursedefaults');  
     my %prefs = (      my %prefs = (
         'rolecolors' =>          'rolecolors' =>
                    { text => 'Default color schemes',                     { text => 'Default color schemes',
Line 254  sub handler { Line 253  sub handler {
                                 {col1 => 'User population',                                  {col1 => 'User population',
                                  col2 => 'Updataeable user data'}],                                   col2 => 'Updataeable user data'}],
                   },                    },
         'autocreate' =>   
                   {  text => 'Auto-course creation settings',  
                      help => 'Domain_Configuration_Auto_Creation',  
                      header => [{col1 => 'Configuration Setting',  
                                  col2 => 'Value',}],  
                   },  
         'directorysrch' =>           'directorysrch' => 
                   { text => 'Institutional directory searches',                    { text => 'Institutional directory searches',
                     help => 'Domain_Configuration_InstDirectory_Search',                      help => 'Domain_Configuration_InstDirectory_Search',
Line 309  sub handler { Line 302  sub handler {
                               col2 => 'Value'}],                                col2 => 'Value'}],
                  },                   },
         'coursecategories' =>          'coursecategories' =>
                   { text => 'Cataloging of courses/communities',                    { text => 'Cataloging of courses',
                     help => 'Domain_Configuration_Cataloging_Courses',                      help => 'Domain_Configuration_Cataloging_Courses',
                     header => [{col1 => 'Category settings',                      header => [{col1 => 'Category settings',
                                 col2 => '',},                                  col2 => '',},
Line 325  sub handler { Line 318  sub handler {
                               col3 => 'Specific IPs',                                col3 => 'Specific IPs',
                             }],                              }],
                  },                   },
         'coursedefaults' =>  
                  {text => 'Course/Community defaults',  
                   help => 'Domain_Configuration_Course_Defaults',  
                   header => [{col1 => 'Setting',  
                               col2 => 'Value',}],  
                  },  
     );      );
     my %servers = &dom_servers($dom);  
     if (keys(%servers) > 1) {  
         $prefs{'login'}  = { text   => 'Log-in page options',  
                              help   => 'Domain_Configuration_Login_Page',  
                             header => [{col1 => 'Log-in Service',  
                                         col2 => 'Server Setting',},  
                                        {col1 => 'Log-in Page Items',  
                                         col2 => ''}],  
                            };  
     }  
     my @roles = ('student','coordinator','author','admin');      my @roles = ('student','coordinator','author','admin');
     my @actions = &Apache::loncommon::get_env_multiple('form.actions');      my @actions = &Apache::loncommon::get_env_multiple('form.actions');
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
Line 409  sub process_changes { Line 386  sub process_changes {
         $output = &modify_autoenroll($dom,%domconfig);          $output = &modify_autoenroll($dom,%domconfig);
     } elsif ($action eq 'autoupdate') {      } elsif ($action eq 'autoupdate') {
         $output = &modify_autoupdate($dom,%domconfig);          $output = &modify_autoupdate($dom,%domconfig);
     } elsif ($action eq 'autocreate') {  
         $output = &modify_autocreate($dom,%domconfig);  
     } elsif ($action eq 'directorysrch') {      } elsif ($action eq 'directorysrch') {
         $output = &modify_directorysrch($dom,%domconfig);          $output = &modify_directorysrch($dom,%domconfig);
     } elsif ($action eq 'usercreation') {      } elsif ($action eq 'usercreation') {
Line 429  sub process_changes { Line 404  sub process_changes {
         $output = &modify_serverstatuses($dom,%domconfig);          $output = &modify_serverstatuses($dom,%domconfig);
     } elsif ($action eq 'requestcourses') {      } elsif ($action eq 'requestcourses') {
         $output = &modify_quotas($dom,$action,%domconfig);          $output = &modify_quotas($dom,$action,%domconfig);
     } elsif ($action eq 'coursedefaults') {  
         $output = &modify_coursedefaults($dom,%domconfig);  
     }      }
     return $output;      return $output;
 }  }
Line 450  sub print_config_box { Line 423  sub print_config_box {
            &Apache::loncommon::help_open_topic($item->{'help'}).'</span></th>'."\n".             &Apache::loncommon::help_open_topic($item->{'help'}).'</span></th>'."\n".
           '</tr>';            '</tr>';
     $rowtotal ++;      $rowtotal ++;
     my $numheaders = 1;      if (($action eq 'autoupdate') || ($action eq 'rolecolors') || 
     if (ref($item->{'header'}) eq 'ARRAY') {          ($action eq 'usercreation') || ($action eq 'usermodification') ||
         $numheaders = scalar(@{$item->{'header'}});          ($action eq 'coursecategories') || ($action eq 'requestcourses')) {
     }  
     if ($numheaders > 1) {  
         my $colspan = '';          my $colspan = '';
         if (($action eq 'rolecolors') || ($action eq 'coursecategories')) {          if (($action eq 'rolecolors') || ($action eq 'coursecategories')) {
             $colspan = ' colspan="2"';              $colspan = ' colspan="2"';
Line 476  sub print_config_box { Line 447  sub print_config_box {
             $output .= &print_usermodification('top',$dom,$settings,\$rowtotal);              $output .= &print_usermodification('top',$dom,$settings,\$rowtotal);
         } elsif ($action eq 'coursecategories') {          } elsif ($action eq 'coursecategories') {
             $output .= &print_coursecategories('top',$dom,$item,$settings,\$rowtotal);              $output .= &print_coursecategories('top',$dom,$item,$settings,\$rowtotal);
         } elsif ($action eq 'login') {  
             $output .= &print_login('top',$dom,$confname,$phase,$settings,\$rowtotal);  
             $colspan = ' colspan="2"';  
         } elsif ($action eq 'requestcourses') {          } elsif ($action eq 'requestcourses') {
             $output .= &print_quotas($dom,$settings,\$rowtotal,$action);              $output .= &print_quotas($dom,$settings,\$rowtotal,$action);
         } else {          } else {
Line 528  sub print_config_box { Line 496  sub print_config_box {
             $rowtotal ++;              $rowtotal ++;
         } elsif ($action eq 'coursecategories') {          } elsif ($action eq 'coursecategories') {
             $output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal);              $output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal);
         } elsif ($action eq 'login') {  
             $output .= &print_login('bottom',$dom,$confname,$phase,$settings,\$rowtotal);  
         } elsif ($action eq 'requestcourses') {          } elsif ($action eq 'requestcourses') {
             $output .= &print_courserequestmail($dom,$settings,\$rowtotal);              $output .= &print_courserequestmail($dom,$settings,\$rowtotal);
         } else {          } else {
Line 600  sub print_config_box { Line 566  sub print_config_box {
         $output .= '</tr>';          $output .= '</tr>';
         $rowtotal ++;          $rowtotal ++;
         if ($action eq 'login') {          if ($action eq 'login') {
             $output .= &print_login('bottom',$dom,$confname,$phase,$settings,              $output .= &print_login($dom,$confname,$phase,$settings,\$rowtotal);
                                     \$rowtotal);  
         } elsif ($action eq 'quotas') {          } elsif ($action eq 'quotas') {
             $output .= &print_quotas($dom,$settings,\$rowtotal,$action);              $output .= &print_quotas($dom,$settings,\$rowtotal,$action);
         } elsif ($action eq 'autoenroll') {          } elsif ($action eq 'autoenroll') {
             $output .= &print_autoenroll($dom,$settings,\$rowtotal);              $output .= &print_autoenroll($dom,$settings,\$rowtotal);
         } elsif ($action eq 'autocreate') {  
             $output .= &print_autocreate($dom,$settings,\$rowtotal);  
         } elsif ($action eq 'directorysrch') {          } elsif ($action eq 'directorysrch') {
             $output .= &print_directorysrch($dom,$settings,\$rowtotal);              $output .= &print_directorysrch($dom,$settings,\$rowtotal);
         } elsif ($action eq 'contacts') {          } elsif ($action eq 'contacts') {
Line 618  sub print_config_box { Line 581  sub print_config_box {
             $output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal);              $output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal);
         } elsif ($action eq 'serverstatuses') {          } elsif ($action eq 'serverstatuses') {
             $output .= &print_serverstatuses($dom,$settings,\$rowtotal);              $output .= &print_serverstatuses($dom,$settings,\$rowtotal);
         } elsif ($action eq 'coursedefaults') {  
             $output .= &print_coursedefaults($dom,$settings,\$rowtotal);  
         }          }
     }      }
     $output .= '      $output .= '
Line 631  sub print_config_box { Line 592  sub print_config_box {
 }  }
   
 sub print_login {  sub print_login {
     my ($position,$dom,$confname,$phase,$settings,$rowtotal) = @_;      my ($dom,$confname,$phase,$settings,$rowtotal) = @_;
     my ($css_class,$datatable);  
     my %choices = &login_choices();      my %choices = &login_choices();
   
     if ($position eq 'top') {  
         my %servers = &dom_servers($dom);  
         my $choice = $choices{'disallowlogin'};  
         $css_class = ' class="LC_odd_row"';  
         $datatable .= '<tr'.$css_class.'><td>'.$choice.'</td>'.  
                       '<td align="right"><table><tr><th>'.$choices{'hostid'}.'</th>'.  
                       '<th>'.$choices{'server'}.'</th>'.  
                       '<th>'.$choices{'serverpath'}.'</th>'.  
                       '<th>'.$choices{'custompath'}.'</th>'.  
                       '<th><span class="LC_nobreak">'.$choices{'exempt'}.'</span></th></tr>'."\n";  
         my %disallowed;  
         if (ref($settings) eq 'HASH') {  
             if (ref($settings->{'loginvia'}) eq 'HASH') {  
                %disallowed = %{$settings->{'loginvia'}};  
             }  
         }  
         foreach my $lonhost (sort(keys(%servers))) {  
             my $direct = 'selected="selected"';  
             if (ref($disallowed{$lonhost}) eq 'HASH') {  
                 if ($disallowed{$lonhost}{'server'} ne '') {  
                     $direct = '';  
                 }  
             }  
             $datatable .= '<tr><td>'.$servers{$lonhost}.'</td>'.  
                           '<td><select name="'.$lonhost.'_server">'.  
                           '<option value=""'.$direct.'>'.$choices{'directlogin'}.  
                           '</option>';  
             foreach my $hostid (keys(%servers)) {  
                 next if ($servers{$hostid} eq $servers{$lonhost});  
                 my $selected = '';  
                 if (ref($disallowed{$lonhost}) eq 'HASH') {  
                     if ($hostid eq $disallowed{$lonhost}{'server'}) {  
                         $selected = 'selected="selected"';  
                     }  
                 }  
                 $datatable .= '<option value="'.$hostid.'"'.$selected.'>'.  
                               $servers{$hostid}.'</option>';  
             }  
             $datatable .= '</select></td>'.  
                           '<td><select name="'.$lonhost.'_serverpath">';  
             foreach my $path ('','/','/adm/login','/adm/roles','custom') {  
                 my $pathname = $path;  
                 if ($path eq 'custom') {  
                     $pathname = &mt('Custom Path').' ->';  
                 }  
                 my $selected = '';  
                 if (ref($disallowed{$lonhost}) eq 'HASH') {  
                     if ($path eq $disallowed{$lonhost}{'serverpath'}) {  
                         $selected = 'selected="selected"';  
                     }  
                 } elsif ($path eq '') {  
                     $selected = 'selected="selected"';  
                 }  
                 $datatable .= '<option value="'.$path.'"'.$selected.'>'.$pathname.'</option>';  
             }  
             $datatable .= '</select></td>';  
             my ($custom,$exempt);  
             if (ref($disallowed{$lonhost}) eq 'HASH') {  
                 $custom = $disallowed{$lonhost}{'custompath'};  
                 $exempt = $disallowed{$lonhost}{'exempt'};  
             }  
             $datatable .= '<td><input type="text" name="'.$lonhost.'_custompath" size="6" value="'.$custom.'" /></td>'.  
                           '<td><input type="text" name="'.$lonhost.'_exempt" size="8" value="'.$exempt.'" /></td>'.  
                           '</tr>';  
         }  
         $datatable .= '</table></td></tr>';  
         return $datatable;  
     }  
   
     my %defaultchecked = (       my %defaultchecked = ( 
                            'coursecatalog' => 'on',                             'coursecatalog' => 'on',
                            'adminmail'     => 'off',                             'adminmail'     => 'off',
Line 838  sub print_login { Line 728  sub print_login {
 sub login_choices {  sub login_choices {
     my %choices =      my %choices =
         &Apache::lonlocal::texthash (          &Apache::lonlocal::texthash (
             coursecatalog => 'Display Course/Community Catalog link?',              coursecatalog => 'Display Course Catalog link?',
             adminmail => "Display Administrator's E-mail Address?",              adminmail => "Display Administrator's E-mail Address?",
             disallowlogin => "Login page requests redirected",  
             hostid        => "Server",  
             server        => "Redirect to:",  
             serverpath    => "Path",  
             custompath    => "Custom",  
             exempt        => "Exempt IP(s)",  
             directlogin   => "No redirect",  
             newuser   => "Link to create a user account",              newuser   => "Link to create a user account",
             img => "Header",              img => "Header",
             logo => "Main Logo",              logo => "Main Logo",
Line 1243  sub print_quotas { Line 1126  sub print_quotas {
     my ($css_class,%titles);      my ($css_class,%titles);
     if ($context eq 'requestcourses') {      if ($context eq 'requestcourses') {
         @usertools = ('official','unofficial','community');          @usertools = ('official','unofficial','community');
         @options =('norequest','approval','validate','autolimit');          @options =('norequest','approval','autolimit','validate');
         %validations = &Apache::lonnet::auto_courserequest_checks($dom);          %validations = &Apache::lonnet::auto_courserequest_checks($dom);
         %titles = &courserequest_titles();          %titles = &courserequest_titles();
     } else {      } else {
Line 1312  sub print_quotas { Line 1195  sub print_quotas {
                             $cell{$item} .= '<span class="LC_nobreak"><label>'.                              $cell{$item} .= '<span class="LC_nobreak"><label>'.
                                   '<input type="radio" name="crsreq_'.$item.                                    '<input type="radio" name="crsreq_'.$item.
                                   '_'.$type.'" value="'.$val.'"'.$checked.' />'.                                    '_'.$type.'" value="'.$val.'"'.$checked.' />'.
                                   $titles{$option}.'</label>';                                    $titles{$option}.'</label>&nbsp;';
                             if ($option eq 'autolimit') {                              if ($option eq 'autolimit') {
                                 $cell{$item} .= '&nbsp;<input type="text" name="crsreq_'.                                  $cell{$item} .= '<input type="text" name="crsreq_'.
                                                 $item.'_limit_'.$type.'" size="1" '.                                                  $item.'_limit_'.$type.'" size="1" '.
                                                 'value="'.$currlimit.'" />';                                                  'value="'.$currlimit.'" />';
                             }                              }
                             $cell{$item} .= '</span> ';  
                             if ($option eq 'autolimit') {                              if ($option eq 'autolimit') {
                                 $cell{$item} .= $titles{'unlimited'};                                  $cell{$item} .= $titles{'unlimited'};
                             }                              }
                               $cell{$item} .= '</span>&nbsp; ';
                         }                          }
                     } else {                      } else {
                         my $checked = 'checked="checked" ';                          my $checked = 'checked="checked" ';
Line 1420  sub print_quotas { Line 1303  sub print_quotas {
                                   '_default" value="'.$val.'"'.$checked.' />'.                                    '_default" value="'.$val.'"'.$checked.' />'.
                                   $titles{$option}.'</label>';                                    $titles{$option}.'</label>';
                 if ($option eq 'autolimit') {                  if ($option eq 'autolimit') {
                     $defcell{$item} .= '&nbsp;<input type="text" name="crsreq_'.                      $defcell{$item} .= '<input type="text" name="crsreq_'.
                                        $item.'_limit_default" size="1" '.                                         $item.'_limit_default" size="1" '.
                                        'value="'.$currlimit.'" />';                                         'value="'.$currlimit.'" />';
                 }                  }
                 $defcell{$item} .= '</span> ';                  $defcell{$item} .= '</span>&nbsp; ';
                 if ($option eq 'autolimit') {                  if ($option eq 'autolimit') {
                     $defcell{$item} .= $titles{'unlimited'};                      $defcell{$item} .= $titles{'unlimited'};
                 }                  }
Line 1523  sub print_quotas { Line 1406  sub print_quotas {
                                   '__LC_adv" value="'.$val.'"'.$checked.' />'.                                    '__LC_adv" value="'.$val.'"'.$checked.' />'.
                                   $titles{$option}.'</label>';                                    $titles{$option}.'</label>';
                 if ($option eq 'autolimit') {                  if ($option eq 'autolimit') {
                     $advcell{$item} .= '&nbsp;<input type="text" name="crsreq_'.                      $advcell{$item} .= '<input type="text" name="crsreq_'.
                                        $item.'_limit__LC_adv" size="1" '.                                         $item.'_limit__LC_adv" size="1" '.
                                        'value="'.$currlimit.'" />';                                         'value="'.$currlimit.'" />';
                 }                  }
                 $advcell{$item} .= '</span> ';                  $advcell{$item} .= '</span>&nbsp; ';
                 if ($option eq 'autolimit') {                  if ($option eq 'autolimit') {
                     $advcell{$item} .= $titles{'unlimited'};                      $advcell{$item} .= $titles{'unlimited'};
                 }                  }
Line 1642  sub print_courserequestmail { Line 1525  sub print_courserequestmail {
 sub print_autoenroll {  sub print_autoenroll {
     my ($dom,$settings,$rowtotal) = @_;      my ($dom,$settings,$rowtotal) = @_;
     my $autorun = &Apache::lonnet::auto_run(undef,$dom),      my $autorun = &Apache::lonnet::auto_run(undef,$dom),
     my ($defdom,$runon,$runoff,$coownerson,$coownersoff);      my ($defdom,$runon,$runoff);
     if (ref($settings) eq 'HASH') {      if (ref($settings) eq 'HASH') {
         if (exists($settings->{'run'})) {          if (exists($settings->{'run'})) {
             if ($settings->{'run'} eq '0') {              if ($settings->{'run'} eq '0') {
Line 1661  sub print_autoenroll { Line 1544  sub print_autoenroll {
                 $runon = ' ';                  $runon = ' ';
             }              }
         }          }
         if (exists($settings->{'co-owners'})) {  
             if ($settings->{'co-owners'} eq '0') {  
                 $coownersoff = ' checked="checked" ';  
                 $coownerson = ' ';  
             } else {  
                 $coownerson = ' checked="checked" ';  
                 $coownersoff = ' ';  
             }  
         } else {  
             $coownersoff = ' checked="checked" ';  
             $coownerson = ' ';  
         }  
         if (exists($settings->{'sender_domain'})) {          if (exists($settings->{'sender_domain'})) {
             $defdom = $settings->{'sender_domain'};              $defdom = $settings->{'sender_domain'};
         }          }
Line 1703  sub print_autoenroll { Line 1574  sub print_autoenroll {
                   &mt('username').':&nbsp;'.                    &mt('username').':&nbsp;'.
                   '<input type="text" name="sender_uname" value="'.                    '<input type="text" name="sender_uname" value="'.
                   $notif_sender.'" size="10" />&nbsp;&nbsp;'.&mt('domain').                    $notif_sender.'" size="10" />&nbsp;&nbsp;'.&mt('domain').
                   ':&nbsp;'.$domform.'</span></td></tr>'.                    ':&nbsp;'.$domform.'</span></td></tr>';
                   '<tr class="LC_odd_row">'.      $$rowtotal += 2;
                   '<td>'.&mt('Automatically assign co-ownership').'</td>'.  
                   '<td class="LC_right_item"><span class="LC_nobreak"><label>'.  
                   '<input type="radio" name="autoassign_coowners"'.  
                   $coownerson.' value="1" />'.&mt('Yes').'</label>&nbsp;'.  
                   '<label><input type="radio" name="autoassign_coowners"'.  
                   $coownersoff.' value="0" />'.&mt('No').'</label></span></td>'.  
                   '</tr>';  
     $$rowtotal += 3;  
     return $datatable;      return $datatable;
 }  }
   
Line 1777  sub print_autoupdate { Line 1640  sub print_autoupdate {
     return $datatable;      return $datatable;
 }  }
   
 sub print_autocreate {  
     my ($dom,$settings,$rowtotal) = @_;  
     my (%createon,%createoff);  
     my $curr_dc;  
     my @types = ('xml','req');  
     if (ref($settings) eq 'HASH') {  
         foreach my $item (@types) {  
             $createoff{$item} = ' checked="checked" ';  
             $createon{$item} = ' ';  
             if (exists($settings->{$item})) {  
                 if ($settings->{$item}) {  
                     $createon{$item} = ' checked="checked" ';  
                     $createoff{$item} = ' ';  
                 }  
             }  
         }  
         $curr_dc = $settings->{'xmldc'};  
     } else {  
         foreach my $item (@types) {  
             $createoff{$item} = ' checked="checked" ';  
             $createon{$item} = ' ';  
         }  
     }  
     $$rowtotal += 2;  
     my $datatable='<tr class="LC_odd_row">'.  
                   '<td>'.&mt('Create pending official courses from XML files').'</td>'.  
                   '<td class="LC_right_item"><span class="LC_nobreak"><label>'.  
                   '<input type="radio" name="autocreate_xml"'.  
                   $createon{'xml'}.' value="1" />'.&mt('Yes').'</label>&nbsp;'.  
                   '<label><input type="radio" name="autocreate_xml"'.  
                   $createoff{'xml'}.' value="0" />'.&mt('No').'</label></span>';  
     my ($numdc,$dctable) = &active_dc_picker($dom,$curr_dc);  
     if ($numdc > 1) {  
         $datatable .= '</td><tr><td>'.  
                       &mt('XML files processed as: (choose Dom. Coord.)').  
                       '</td><td class="LC_left_item">'.$dctable.'</td></tr>'.  
                       '<tr class="LC_odd_row">';  
         $$rowtotal ++ ;  
     } else {  
         $datatable .= '</td></tr><tr>';  
     }  
     $datatable .= '<td>'.&mt('Create pending requests for official courses (if validated)').'</td>'.  
                   '<td class="LC_right_item"><span class="LC_nobreak"><label>'.  
                   '<input type="radio" name="autocreate_req"'.  
                   $createon{'req'}.' value="1" />'.&mt('Yes').'</label>&nbsp;'.  
                   '<label><input type="radio" name="autocreate_req"'.  
                   $createoff{'req'}.' value="0" />'.&mt('No').'</label></span></td>'.  
                   '</tr>';  
     return $datatable;  
 }  
   
 sub print_directorysrch {  sub print_directorysrch {
     my ($dom,$settings,$rowtotal) = @_;      my ($dom,$settings,$rowtotal) = @_;
     my $srchon = ' ';      my $srchon = ' ';
Line 2016  sub print_contacts { Line 1828  sub print_contacts {
     return $datatable;      return $datatable;
 }  }
   
 sub radiobutton_prefs {  
     my ($settings,$toggles,$defaultchecked,$choices,$itemcount) = @_;  
     return unless ((ref($toggles) eq 'ARRAY') && (ref($defaultchecked) eq 'HASH') &&  
                    (ref($choices) eq 'HASH'));  
   
     my (%checkedon,%checkedoff,$datatable,$css_class);  
   
     foreach my $item (@{$toggles}) {  
         if ($defaultchecked->{$item} eq 'on') {  
             $checkedon{$item} = ' checked="checked" ';  
             $checkedoff{$item} = ' ';  
         } elsif ($defaultchecked->{$item} eq 'off') {  
             $checkedoff{$item} = ' checked="checked" ';  
             $checkedon{$item} = ' ';  
         }  
     }  
     if (ref($settings) eq 'HASH') {  
         foreach my $item (@{$toggles}) {  
             if ($settings->{$item} eq '1') {  
                 $checkedon{$item} =  ' checked="checked" ';  
                 $checkedoff{$item} = ' ';  
             } elsif ($settings->{$item} eq '0') {  
                 $checkedoff{$item} =  ' checked="checked" ';  
                 $checkedon{$item} = ' ';  
             }  
         }  
     }  
     foreach my $item (@{$toggles}) {  
         $css_class = $itemcount%2?' class="LC_odd_row"':'';  
         $datatable .=  
             '<tr'.$css_class.'><td><span class="LC_nobreak">'.$choices->{$item}.  
             '</span></td>'.  
             '<td class="LC_right_item"><span class="LC_nobreak">'.  
             '<label><input type="radio" name="'.  
             $item.'" '.$checkedon{$item}.' value="1" />'.&mt('Yes').  
             '</label>&nbsp;<label><input type="radio" name="'.$item.'" '.  
             $checkedoff{$item}.' value="0" />'.&mt('No').'</label>'.  
             '</span></td>'.  
             '</tr>';  
         $itemcount ++;  
     }  
     return ($datatable,$itemcount);  
 }  
   
 sub print_coursedefaults {  
     my ($dom,$settings,$rowtotal) = @_;  
     my ($css_class,$datatable);  
     my $itemcount = 1;  
     my (%checkedon,%checkedoff,%choices,%defaultchecked,@toggles);  
     %choices =  
         &Apache::lonlocal::texthash (  
             canuse_pdfforms => 'Course/Community users can create/upload PDF forms',  
     );  
     %defaultchecked = ('canuse_pdfforms' => 'off');  
     @toggles = ('canuse_pdfforms',);  
     ($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked,  
                                                  \%choices,$itemcount);  
     $$rowtotal += $itemcount;  
     return $datatable;  
 }  
   
 sub contact_titles {  sub contact_titles {
     my %titles = &Apache::lonlocal::texthash (      my %titles = &Apache::lonlocal::texthash (
                    'supportemail' => 'Support E-mail address',                     'supportemail' => 'Support E-mail address',
Line 2688  sub print_coursecategories { Line 2439  sub print_coursecategories {
         my $toggle_cats_dom = ' checked="checked" ';          my $toggle_cats_dom = ' checked="checked" ';
         my $can_cat_crs = ' ';          my $can_cat_crs = ' ';
         my $can_cat_dom = ' checked="checked" ';          my $can_cat_dom = ' checked="checked" ';
         my $toggle_catscomm_comm = ' ';  
         my $toggle_catscomm_dom = ' checked="checked" ';  
         my $can_catcomm_comm = ' ';  
         my $can_catcomm_dom = ' checked="checked" ';  
   
         if (ref($settings) eq 'HASH') {          if (ref($settings) eq 'HASH') {
             if ($settings->{'togglecats'} eq 'crs') {              if ($settings->{'togglecats'} eq 'crs') {
                 $toggle_cats_crs = $toggle_cats_dom;                  $toggle_cats_crs = $toggle_cats_dom;
Line 2702  sub print_coursecategories { Line 2448  sub print_coursecategories {
                 $can_cat_crs = $can_cat_dom;                  $can_cat_crs = $can_cat_dom;
                 $can_cat_dom = ' ';                  $can_cat_dom = ' ';
             }              }
             if ($settings->{'togglecatscomm'} eq 'comm') {  
                 $toggle_catscomm_comm = $toggle_catscomm_dom;  
                 $toggle_catscomm_dom = ' ';  
             }  
             if ($settings->{'categorizecomm'} eq 'comm') {  
                 $can_catcomm_comm = $can_catcomm_dom;  
                 $can_catcomm_dom = ' ';  
             }  
         }          }
         my %title = &Apache::lonlocal::texthash (          my %title = &Apache::lonlocal::texthash (
                      togglecats     => 'Show/Hide a course in catalog',                       togglecats => 'Show/Hide a course in the catalog',
                      togglecatscomm => 'Show/Hide a community in catalog',                       categorize    => 'Assign a category to a course',
                      categorize     => 'Assign a category to a course',  
                      categorizecomm => 'Assign a category to a community',  
                     );                      );
         my %level = &Apache::lonlocal::texthash (          my %level = &Apache::lonlocal::texthash (
                      dom => 'Set in Domain',                       dom => 'Set in "Modify Course" (Domain)',
                      crs => 'Set in Course',                          crs => 'Set in "Modify Parameters" (Course)',   
                      comm => 'Set in Community',  
                     );                      );
         $datatable = '<tr class="LC_odd_row">'.          $datatable = '<tr class="LC_odd_row">'.
                   '<td>'.$title{'togglecats'}.'</td>'.                    '<td>'.$title{'togglecats'}.'</td>'.
Line 2736  sub print_coursecategories { Line 2471  sub print_coursecategories {
                   $can_cat_dom.' value="dom" />'.$level{'dom'}.'</label>&nbsp;'.                    $can_cat_dom.' value="dom" />'.$level{'dom'}.'</label>&nbsp;'.
                   '<label><input type="radio" name="categorize"'.                    '<label><input type="radio" name="categorize"'.
                   $can_cat_crs.'value="crs" />'.$level{'crs'}.'</label></span></td>'.                    $can_cat_crs.'value="crs" />'.$level{'crs'}.'</label></span></td>'.
                   '</tr><tr class="LC_odd_row">'.  
                   '<td>'.$title{'togglecatscomm'}.'</td>'.  
                   '<td class="LC_right_item"><span class="LC_nobreak"><label>'.  
                   '<input type="radio" name="togglecatscomm"'.  
                   $toggle_catscomm_dom.' value="dom" />'.$level{'dom'}.'</label>&nbsp;'.  
                   '<label><input type="radio" name="togglecatscomm"'.  
                   $toggle_catscomm_comm.' value="comm" />'.$level{'comm'}.'</label></span></td>'.  
                   '</tr><tr>'.  
                   '<td>'.$title{'categorizecomm'}.'</td>'.  
                   '<td class="LC_right_item"><span class="LC_nobreak">'.  
                   '<label><input type="radio" name="categorizecomm"'.  
                   $can_catcomm_dom.' value="dom" />'.$level{'dom'}.'</label>&nbsp;'.  
                   '<label><input type="radio" name="categorizecomm"'.  
                   $can_catcomm_comm.'value="comm" />'.$level{'comm'}.'</label></span></td>'.  
                   '</tr>';                    '</tr>';
         $$rowtotal += 4;          $$rowtotal += 2;
     } else {      } else {
         my $css_class;          my $css_class;
         my $itemcount = 1;          my $itemcount = 1;
Line 2773  sub print_coursecategories { Line 2494  sub print_coursecategories {
                 if (ref($cats[0]) eq 'ARRAY') {                  if (ref($cats[0]) eq 'ARRAY') {
                     my $numtop = @{$cats[0]};                      my $numtop = @{$cats[0]};
                     my $maxnum = $numtop;                      my $maxnum = $numtop;
                     my %default_names = (                      if ((!grep(/^instcode$/,@{$cats[0]})) || ($cathash->{'instcode::0'} eq '')) {
                           instcode    => &mt('Official courses'),  
                           communities => &mt('Communities'),  
                     );  
   
                     if ((!grep(/^instcode$/,@{$cats[0]})) ||  
                         ($cathash->{'instcode::0'} eq '') ||  
                         (!grep(/^communities$/,@{$cats[0]})) ||  
                         ($cathash->{'communities::0'} eq '')) {  
                         $maxnum ++;                          $maxnum ++;
                     }                      }
                     my $lastidx;                      my $lastidx;
Line 2802  sub print_coursecategories { Line 2515  sub print_coursecategories {
                             $datatable .= '<option value="'.$k.'"'.$selstr.'>'.$vpos.'</option>';                              $datatable .= '<option value="'.$k.'"'.$selstr.'>'.$vpos.'</option>';
                         }                          }
                         $datatable .= '</select></td><td>';                          $datatable .= '</select></td><td>';
                         if ($parent eq 'instcode' || $parent eq 'communities') {                          if ($parent eq 'instcode') {
                             $datatable .=  '<span class="LC_nobreak">'                              $datatable .=  '<span class="LC_nobreak">'.&mt('Official courses')
                                            .$default_names{$parent}.'</span>';                                             .'</span><br /><span class="LC_nobreak">('
                             if ($parent eq 'instcode') {                                             .&mt('with institutional codes').')</span></td>'
                                 $datatable .= '<br /><span class="LC_nobreak">('                                             .'<td'.$colattrib.'><span class="LC_nobreak"><label><input type="radio" name="instcode" value="1" checked="checked" />'
                                               .&mt('with institutional codes')                                              .&mt('Display').'</label>&nbsp;'
                                               .')</span></td><td'.$colattrib.'>';                                              .'<label><input type="radio" name="instcode" value="0" />'
                             } else {                                              .&mt('Do not display').'</label></span></td>';
                                 $datatable .= '<table><tr><td>';  
                             }  
                             $datatable .= '<span class="LC_nobreak">'  
                                           .'<label><input type="radio" name="'  
                                           .$parent.'" value="1" checked="checked" />'  
                                           .&mt('Display').'</label>';  
                             if ($parent eq 'instcode') {  
                                 $datatable .= '&nbsp;';  
                             } else {  
                                 $datatable .= '</span></td></tr><tr><td>'  
                                               .'<span class="LC_nobreak">';  
                             }  
                             $datatable .= '<label><input type="radio" name="'  
                                           .$parent.'" value="0" />'  
                                           .&mt('Do not display').'</label></span>';  
                             if ($parent eq 'communities') {  
                                 $datatable .= '</td></tr></table>';  
                             }  
                             $datatable .= '</td>';  
                         } else {                          } else {
                             $datatable .= $parent                              $datatable .= $parent
                                           .'&nbsp;<label><input type="checkbox" name="deletecategory" '                                            .'&nbsp;<label><input type="checkbox" name="deletecategory" '
Line 2856  sub print_coursecategories { Line 2550  sub print_coursecategories {
                                   .'<input type="text" size="20" name="addcategory_name" value="" /></td>'                                    .'<input type="text" size="20" name="addcategory_name" value="" /></td>'
                                   .'</tr>'."\n";                                    .'</tr>'."\n";
                     $itemcount ++;                      $itemcount ++;
                     foreach my $default ('instcode','communities') {                      if ((!grep(/^instcode$/,@{$cats[0]})) || ($cathash->{'instcode::0'} eq '')) {
                         if ((!grep(/^\Q$default\E$/,@{$cats[0]})) || ($cathash->{$default.'::0'} eq '')) {                          $css_class = $itemcount%2?' class="LC_odd_row"':'';
                             $css_class = $itemcount%2?' class="LC_odd_row"':'';                          my $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','instcode_pos','$lastidx'".');"';
                             my $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','$default"."_pos','$lastidx'".');"';                          $datatable .= '<tr><td colspan="'.$maxdepth.'" class="LC_row_separator"></td></tr><tr '.$css_class.'><td>'.
                             $datatable .= '<tr><td colspan="'.$maxdepth.'" class="LC_row_separator"></td></tr><tr '.$css_class.'><td>'.                                        '<span class="LC_nobreak"><select name="instcode_pos"'.$chgstr.'>';
                                           '<span class="LC_nobreak"><select name="'.$default.'_pos"'.$chgstr.'>';                          for (my $k=0; $k<=$maxnum; $k++) {
                             for (my $k=0; $k<=$maxnum; $k++) {                              my $vpos = $k+1;
                                 my $vpos = $k+1;                              my $selstr;
                                 my $selstr;                              if ($k == $maxnum) {
                                 if ($k == $maxnum) {                                  $selstr = ' selected="selected" ';
                                     $selstr = ' selected="selected" ';  
                                 }  
                                 $datatable .= '<option value="'.$k.'"'.$selstr.'>'.$vpos.'</option>';  
                             }                              }
                             $datatable .= '</select></span></td>'.                              $datatable .= '<option value="'.$k.'"'.$selstr.'>'.$vpos.'</option>';
                                           '<td><span class="LC_nobreak">'.  
                                           $default_names{$default}.'</span>';  
                             if ($default eq 'instcode') {  
                                 $datatable .= '<br /><span class="LC_nobreak">('  
                                               .&mt('with institutional codes').')</span>';  
                             }  
                             $datatable .= '</td>'  
                                           .'<td><span class="LC_nobreak"><label><input type="radio" name="'.$default.'" value="1" />'  
                                           .&mt('Display').'</label>&nbsp;'  
                                           .'<label><input type="radio" name="'.$default.'" value="0" checked="checked"/>'  
                                           .&mt('Do not display').'</label></span></td></tr>';  
                         }                          }
                           $datatable .= '</select></span></td><td><span class="LC_nobreak">'
                                         .&mt('Official courses').'</span>'.'<br /><span class="LC_nobreak">('
                                         .&mt('with institutional codes').')</span></td>'
                                         .'<td><span class="LC_nobreak"><label><input type="radio" name="instcode" value="1" />'
                                         .&mt('Display').'</label>&nbsp;'
                                         .'<label><input type="radio" name="instcode" value="0" checked="checked"/>'
                                         .&mt('Do not display').'</label></span></td></tr>';
                     }                      }
                 }                  }
             } else {              } else {
Line 2946  sub print_serverstatuses { Line 2633  sub print_serverstatuses {
 sub serverstatus_pages {  sub serverstatus_pages {
     return ('userstatus','lonstatus','loncron','server-status','codeversions',      return ('userstatus','lonstatus','loncron','server-status','codeversions',
             'clusterstatus','metadata_keywords','metadata_harvest',              'clusterstatus','metadata_keywords','metadata_harvest',
             'takeoffline','takeonline','showenv','toggledebug');              'takeoffline','takeonline','showenv');
 }  }
   
 sub coursecategories_javascript {  sub coursecategories_javascript {
Line 2971  sub coursecategories_javascript { Line 2658  sub coursecategories_javascript {
         $jstext  = '    var categories = Array(1);'."\n".          $jstext  = '    var categories = Array(1);'."\n".
                    '    categories[0] = Array("instcode_pos");'."\n";                      '    categories[0] = Array("instcode_pos");'."\n"; 
     }      }
     my $instcode_reserved = &mt('The name: "instcode" is a reserved category');  
     my $communities_reserved = &mt('The name: "communities" is a reserved category');  
     my $choose_again = '\\n'.&mt('Please use a different name for the new top level category');  
     $output = <<"ENDSCRIPT";      $output = <<"ENDSCRIPT";
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
Line 3033  $jstext Line 2717  $jstext
     }      }
     return;      return;
 }  }
   
 function categoryCheck(form) {  
     if (form.elements['addcategory_name'].value == 'instcode') {  
         alert('$instcode_reserved\\n$choose_again');  
         return false;  
     }  
     if (form.elements['addcategory_name'].value == 'communities') {  
         alert('$communities_reserved\\n$choose_again');  
         return false;  
     }  
     return true;  
 }  
   
 // ]]>  // ]]>
 </script>  </script>
   
Line 3055  ENDSCRIPT Line 2726  ENDSCRIPT
   
 sub initialize_categories {  sub initialize_categories {
     my ($itemcount) = @_;      my ($itemcount) = @_;
     my ($datatable,$css_class,$chgstr);      my $datatable;
     my %default_names = (      my $css_class = $itemcount%2?' class="LC_odd_row"':'';
                       instcode    => 'Official courses (with institutional codes)',      my $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','instcode_pos','0'".');"';
                       communities => 'Communities',  
                         );      $datatable = '<tr '.$css_class.'><td><span class="LC_nobreak">'
     my $select0 = ' selected="selected"';                   .'<select name="instcode_pos"><option value="0" selected="selected">1</option>'
     my $select1 = '';                   .'<option value="1">2</option></select>&nbsp;'
     foreach my $default ('instcode','communities') {                   .&mt('Official courses (with institutional codes)')
         $css_class = $itemcount%2?' class="LC_odd_row"':'';                   .'</span></td><td><span class="LC_nobreak">'
         $chgstr = ' onchange="javascript:reorderCats(this.form,'."'',$default"."_pos','0'".');"';                   .'<label><input type="radio" name="instcode" value="1" checked="checked" />'
         if ($default eq 'communities') {                   .&mt('Display').'</label>&nbsp;<label>'
             $select1 = $select0;                   .'<input type="radio" name="instcode" value="0" />'.&mt('Do not display')
             $select0 = '';  
         }  
         $datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">'  
                      .'<select name="'.$default.'_pos">'  
                      .'<option value="0"'.$select0.'>1</option>'  
                      .'<option value="1"'.$select1.'>2</option>'  
                      .'<option value="2">3</option></select>&nbsp;'  
                      .$default_names{$default}  
                      .'</span></td><td><span class="LC_nobreak">'  
                      .'<label><input type="radio" name="'.$default.'" value="1" checked="checked" />'  
                      .&mt('Display').'</label>&nbsp;<label>'  
                      .'<input type="radio" name="'.$default.'" value="0" />'.&mt('Do not display')  
                  .'</label></span></td></tr>';                   .'</label></span></td></tr>';
         $itemcount ++;      $itemcount ++;
     }  
     $css_class = $itemcount%2?' class="LC_odd_row"':'';      $css_class = $itemcount%2?' class="LC_odd_row"':'';
     $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','addcategory_pos','0'".');"';      $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','addcategory_pos','0'".');"';
     $datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">'      $datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">'
                   .'<select name="addcategory_pos"'.$chgstr.'>'                    .'<select name="addcategory_pos"'.$chgstr.'><option value="0">1</option>'
                   .'<option value="0">1</option>'                    .'<option value="1" selected="selected">2</option></select>&nbsp;'
                   .'<option value="1">2</option>'  
                   .'<option value="2" selected="selected">3</option></select>&nbsp;'  
                   .&mt('Add category').'</td><td>'.&mt('Name:')                    .&mt('Add category').'</td><td>'.&mt('Name:')
                   .'&nbsp;<input type="text" size="20" name="addcategory_name" value="" /></td></tr>';                    .'&nbsp;<input type="text" size="20" name="addcategory_name" value="" /></td></tr>';
     return $datatable;      return $datatable;
Line 3395  sub modify_login { Line 3051  sub modify_login {
                   newuser => 'Link for visitors to create a user account',                    newuser => 'Link for visitors to create a user account',
                   loginheader => 'Log-in box header');                    loginheader => 'Log-in box header');
     my @offon = ('off','on');      my @offon = ('off','on');
     my %curr_loginvia;  
     if (ref($domconfig{login}) eq 'HASH') {  
         if (ref($domconfig{login}{loginvia}) eq 'HASH') {  
             foreach my $lonhost (keys(%{$domconfig{login}{loginvia}})) {  
                 $curr_loginvia{$lonhost} = $domconfig{login}{loginvia}{$lonhost};  
             }  
         }  
     }  
     my %loginhash;      my %loginhash;
     ($errors,%colchanges) = &modify_colors($r,$dom,$confname,['login'],      ($errors,%colchanges) = &modify_colors($r,$dom,$confname,['login'],
                                            \%domconfig,\%loginhash);                                             \%domconfig,\%loginhash);
Line 3415  sub modify_login { Line 3063  sub modify_login {
         $colchgtext = &display_colorchgs($dom,\%colchanges,['login'],          $colchgtext = &display_colorchgs($dom,\%colchanges,['login'],
                                          \%loginhash);                                           \%loginhash);
     }      }
   
     my %servers = &dom_servers($dom);  
     my @loginvia_attribs = ('serverpath','custompath','exempt');  
     if (keys(%servers) > 1) {  
         foreach my $lonhost (keys(%servers)) {  
             next if ($env{'form.'.$lonhost.'_server'} eq $lonhost);  
             if (ref($curr_loginvia{$lonhost}) eq 'HASH') {  
                 if ($env{'form.'.$lonhost.'_server'} eq $curr_loginvia{$lonhost}{'server'}) {  
                     $loginhash{login}{loginvia}{$lonhost}{'server'} = $curr_loginvia{$lonhost}{'server'};  
                 } elsif ($curr_loginvia{$lonhost}{'server'} ne '') {  
                     if (defined($servers{$env{'form.'.$lonhost.'_server'}})) {  
                         $loginhash{login}{loginvia}{$lonhost}{'server'} = $env{'form.'.$lonhost.'_server'};  
                         $changes{'loginvia'}{$lonhost} = 1;  
                     } else {  
                         $loginhash{login}{loginvia}{$lonhost}{'server'} = '';  
                         $changes{'loginvia'}{$lonhost} = 1;  
                     }  
                 } else {  
                     if (defined($servers{$env{'form.'.$lonhost.'_server'}})) {  
                         $loginhash{login}{loginvia}{$lonhost}{'server'} = $env{'form.'.$lonhost.'_server'};  
                         $changes{'loginvia'}{$lonhost} = 1;  
                     }  
                 }  
                 if ($loginhash{login}{loginvia}{$lonhost}{'server'} eq '') {  
                     foreach my $item (@loginvia_attribs) {  
                         $loginhash{login}{loginvia}{$lonhost}{$item} = '';  
                     }  
                 } else {  
                     foreach my $item (@loginvia_attribs) {  
                         my $new = $env{'form.'.$lonhost.'_'.$item};  
                         if (($item eq 'serverpath') && ($new eq 'custom')) {  
                             $env{'form.'.$lonhost.'_custompath'} =~ s/\s+//g;  
                             if ($env{'form.'.$lonhost.'_custompath'} eq '') {  
                                 $new = '/';  
                             }  
                         }  
                         if (($item eq 'custompath') &&  
                             ($env{'form.'.$lonhost.'_serverpath'} ne 'custom')) {  
                             $new = '';  
                         }  
                         if ($new ne $curr_loginvia{$lonhost}{$item}) {  
                             $changes{'loginvia'}{$lonhost} = 1;  
                         }  
                         if ($item eq 'exempt') {  
                             $new =~ s/^\s+//;  
                             $new =~ s/\s+$//;  
                             my @poss_ips = split(/\s*[,:]\s*/,$new);  
                             my @okips;  
                             foreach my $ip (@poss_ips) {  
                                 if ($ip =~ /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/) {  
                                     if (($1 <= 255) && ($2 <= 255) && ($3 <= 255) && ($4 <= 255)) {  
                                         push(@okips,$ip);  
                                     }  
                                 }  
                             }  
                             if (@okips > 0) {  
                                 $new = join(',',@okips);  
                             } else {  
                                 $new = '';  
                             }  
                         }  
   
                         $loginhash{login}{loginvia}{$lonhost}{$item} = $new;  
                     }  
                 }  
             } else {  
                 if (defined($servers{$env{'form.'.$lonhost.'_server'}})) {  
                     $loginhash{login}{loginvia}{$lonhost}{'server'} = $env{'form.'.$lonhost.'_server'};  
                     $changes{'loginvia'}{$lonhost} = 1;  
                     foreach my $item (@loginvia_attribs) {  
                         my $new = $env{'form.'.$lonhost.'_'.$item};  
                         if (($item eq 'serverpath') && ($new eq 'custom')) {  
                             if ($env{'form.'.$lonhost.'_custompath'} eq '') {  
                                 $new = '/';  
                             }  
                         }  
                         if (($item eq 'custompath') &&  
                             ($env{'form.'.$lonhost.'_serverpath'} ne 'custom')) {  
                             $new = '';  
                         }  
                         $loginhash{login}{loginvia}{$lonhost}{$item} = $new;  
                     }  
                 }  
             }  
         }  
     }  
   
     my $putresult = &Apache::lonnet::put_dom('configuration',\%loginhash,      my $putresult = &Apache::lonnet::put_dom('configuration',\%loginhash,
                                              $dom);                                               $dom);
     if ($putresult eq 'ok') {      if ($putresult eq 'ok') {
Line 3548  sub modify_login { Line 3109  sub modify_login {
             foreach my $item (sort(keys(%changes))) {              foreach my $item (sort(keys(%changes))) {
                 if ($item eq 'loginheader') {                  if ($item eq 'loginheader') {
                     $resulttext .= '<li>'.&mt("$title{$item} set to $env{'form.loginheader'}").'</li>';                      $resulttext .= '<li>'.&mt("$title{$item} set to $env{'form.loginheader'}").'</li>';
                 } elsif ($item eq 'loginvia') {  
                     if (ref($changes{$item}) eq 'HASH') {  
                         $resulttext .= '<li>'.&mt('Log-in page availability:').'<ul>';  
                         foreach my $lonhost (sort(keys(%{$changes{$item}}))) {  
                             if (defined($servers{$loginhash{login}{loginvia}{$lonhost}{'server'}})) {  
                                 if (ref($loginhash{login}{loginvia}{$lonhost}) eq 'HASH') {  
                                     my $protocol = $Apache::lonnet::protocol{$env{'form.'.$lonhost.'_server'}};  
                                     $protocol = 'http' if ($protocol ne 'https');  
                                     my $target = $protocol.'://'.$servers{$env{'form.'.$lonhost.'_server'}};  
   
                                     if ($loginhash{login}{loginvia}{$lonhost}{'serverpath'} eq 'custom') {  
                                         $target .= $loginhash{login}{loginvia}{$lonhost}{'custompath'};  
                                     } else {  
                                         $target .= $loginhash{login}{loginvia}{$lonhost}{'serverpath'};  
                                     }  
                                     $resulttext .= '<li>'.&mt('Server: [_1] log-in page redirects to [_2].',$servers{$lonhost},'<a href="'.$target.'">'.$target.'</a>');  
                                     if ($loginhash{login}{loginvia}{$lonhost}{'exempt'} ne '') {  
                                         $resulttext .= '&nbsp;'.&mt('No redirection for clients from following IPs:').'&nbsp;'.$loginhash{login}{loginvia}{$lonhost}{'exempt'};  
                                     }  
                                     $resulttext .= '</li>';  
                                 } else {  
                                     $resulttext .= '<li>'.&mt('Server: [_1] has standard log-in page.',$lonhost).'</li>';  
                                 }  
                             } else {  
                                 $resulttext .= '<li>'.&mt('Server: [_1] has standard log-in page.',$servers{$lonhost}).'</li>';  
                             }  
                         }  
                         $resulttext .= '</ul></li>';  
                     }  
                 } else {                  } else {
                     $resulttext .= '<li>'.&mt("$title{$item} set to $offon[$env{'form.'.$item}]").'</li>';                      $resulttext .= '<li>'.&mt("$title{$item} set to $offon[$env{'form.'.$item}]").'</li>';
                 }                  }
Line 4223  sub modify_quotas { Line 3755  sub modify_quotas {
     }      }
     if ($context eq 'requestcourses') {      if ($context eq 'requestcourses') {
         @usertools = ('official','unofficial','community');          @usertools = ('official','unofficial','community');
         @options =('norequest','approval','validate','autolimit');          @options =('norequest','approval','autolimit','validate');
         %validations = &Apache::lonnet::auto_courserequest_checks($dom);          %validations = &Apache::lonnet::auto_courserequest_checks($dom);
         %titles = &courserequest_titles();          %titles = &courserequest_titles();
         $toolregexp = join('|',@usertools);          $toolregexp = join('|',@usertools);
Line 4498  sub modify_autoenroll { Line 4030  sub modify_autoenroll {
     }      }
     my $autorun = &Apache::lonnet::auto_run(undef,$dom),      my $autorun = &Apache::lonnet::auto_run(undef,$dom),
     my %title = ( run => 'Auto-enrollment active',      my %title = ( run => 'Auto-enrollment active',
                   sender => 'Sender for notification messages',                    sender => 'Sender for notification messages');
                   coowners => 'Automatic assignment of co-ownership to instructors of record (institutional data)');  
     my @offon = ('off','on');      my @offon = ('off','on');
     my $sender_uname = $env{'form.sender_uname'};      my $sender_uname = $env{'form.sender_uname'};
     my $sender_domain = $env{'form.sender_domain'};      my $sender_domain = $env{'form.sender_domain'};
Line 4508  sub modify_autoenroll { Line 4039  sub modify_autoenroll {
     } elsif ($sender_uname eq '') {      } elsif ($sender_uname eq '') {
         $sender_domain = '';          $sender_domain = '';
     }      }
     my $coowners = $env{'form.autoassign_coowners'};  
     my %autoenrollhash =  (      my %autoenrollhash =  (
                        autoenroll => { run => $env{'form.autoenroll_run'},                         autoenroll => { run => $env{'form.autoenroll_run'},
                                        sender_uname => $sender_uname,                                         sender_uname => $sender_uname,
                                        sender_domain => $sender_domain,                                         sender_domain => $sender_domain,
                                        'co-owners' => $coowners,  
                                 }                                  }
                      );                       );
     my $putresult = &Apache::lonnet::put_dom('configuration',\%autoenrollhash,      my $putresult = &Apache::lonnet::put_dom('configuration',\%autoenrollhash,
Line 4534  sub modify_autoenroll { Line 4064  sub modify_autoenroll {
         if ($currautoenroll{'sender_domain'} ne $sender_domain) {          if ($currautoenroll{'sender_domain'} ne $sender_domain) {
             $changes{'sender'} = 1;              $changes{'sender'} = 1;
         }          }
         if ($currautoenroll{'co-owners'} ne '') {  
             if ($currautoenroll{'co-owners'} ne $coowners) {  
                 $changes{'coowners'} = 1;  
             }  
         } elsif ($coowners) {  
             $changes{'coowners'} = 1;  
         }  
         if (keys(%changes) > 0) {          if (keys(%changes) > 0) {
             $resulttext = &mt('Changes made:').'<ul>';              $resulttext = &mt('Changes made:').'<ul>';
             if ($changes{'run'}) {              if ($changes{'run'}) {
Line 4553  sub modify_autoenroll { Line 4076  sub modify_autoenroll {
                     $resulttext .= '<li>'.&mt("$title{'sender'} set to [_1]",$sender_uname.':'.$sender_domain).'</li>';                      $resulttext .= '<li>'.&mt("$title{'sender'} set to [_1]",$sender_uname.':'.$sender_domain).'</li>';
                 }                  }
             }              }
             if ($changes{'coowners'}) {  
                 $resulttext .= '<li>'.&mt("$title{'coowners'} set to $offon[$env{'form.autoassign_coowners'}]").'</li>';  
                 &Apache::loncommon::devalidate_domconfig_cache($dom);  
             }  
             $resulttext .= '</ul>';              $resulttext .= '</ul>';
         } else {          } else {
             $resulttext = &mt('No changes made to auto-enrollment settings');              $resulttext = &mt('No changes made to auto-enrollment settings');
Line 4690  sub modify_autoupdate { Line 4209  sub modify_autoupdate {
     return $resulttext;      return $resulttext;
 }  }
   
 sub modify_autocreate {  
     my ($dom,%domconfig) = @_;  
     my ($resulttext,%changes,%currautocreate,%newvals,%autocreatehash);  
     if (ref($domconfig{'autocreate'}) eq 'HASH') {  
         foreach my $key (keys(%{$domconfig{'autocreate'}})) {  
             $currautocreate{$key} = $domconfig{'autocreate'}{$key};  
         }  
     }  
     my %title= ( xml => 'Auto-creation of courses in XML course description files',  
                  req => 'Auto-creation of validated requests for official courses',  
                  xmldc => 'Identity of course creator of courses from XML files',  
                );  
     my @types = ('xml','req');  
     foreach my $item (@types) {  
         $newvals{$item} = $env{'form.autocreate_'.$item};  
         $newvals{$item} =~ s/\D//g;  
         $newvals{$item} = 0 if ($newvals{$item} eq '');  
     }  
     $newvals{'xmldc'} = $env{'form.autocreate_xmldc'};  
     my %domcoords = &get_active_dcs($dom);  
     unless (exists($domcoords{$newvals{'xmldc'}})) {  
         $newvals{'xmldc'} = '';  
     }  
     %autocreatehash =  (  
                         autocreate => { xml => $newvals{'xml'},  
                                         req => $newvals{'req'},  
                                       }  
                        );  
     if ($newvals{'xmldc'} ne '') {  
         $autocreatehash{'autocreate'}{'xmldc'} = $newvals{'xmldc'};  
     }  
     my $putresult = &Apache::lonnet::put_dom('configuration',\%autocreatehash,  
                                              $dom);  
     if ($putresult eq 'ok') {  
         my @items = @types;  
         if ($newvals{'xml'}) {  
             push(@items,'xmldc');  
         }  
         foreach my $item (@items) {  
             if (exists($currautocreate{$item})) {  
                 if ($currautocreate{$item} ne $newvals{$item}) {  
                     $changes{$item} = 1;  
                 }  
             } elsif ($newvals{$item}) {  
                 $changes{$item} = 1;  
             }  
         }  
         if (keys(%changes) > 0) {  
             my @offon = ('off','on');  
             $resulttext = &mt('Changes made:').'<ul>';  
             foreach my $item (@types) {  
                 if ($changes{$item}) {  
                     my $newtxt = $offon[$newvals{$item}];  
                     $resulttext .= '<li>'.&mt("$title{$item} set to [_1]$newtxt [_2]",'<b>','</b>').'</li>';  
                 }  
             }  
             if ($changes{'xmldc'}) {  
                 my ($dcname,$dcdom) = split(':',$newvals{'xmldc'});  
                 my $newtxt = &Apache::loncommon::plainname($dcname,$dcdom);  
                 $resulttext .= '<li>'.&mt("$title{'xmldc'} set to [_1]$newtxt [_2]",'<b>','</b>').'</li>';  
             }  
             $resulttext .= '</ul>';  
         } else {  
             $resulttext = &mt('No changes made to auto-creation settings');  
         }  
     } else {  
         $resulttext = '<span class="LC_error">'.  
             &mt('An error occurred: [_1]',$putresult).'</span>';  
     }  
     return $resulttext;  
 }  
   
 sub modify_directorysrch {  sub modify_directorysrch {
     my ($dom,%domconfig) = @_;      my ($dom,%domconfig) = @_;
     my ($resulttext,%changes);      my ($resulttext,%changes);
Line 5516  sub modify_usermodification { Line 4963  sub modify_usermodification {
                             }                              }
                             my @modifiable;                              my @modifiable;
                             if ($context eq 'selfcreate') {                              if ($context eq 'selfcreate') {
                                 $resulttext .= '<li><span class="LC_cusr_emph">'.&mt('Self-creation of account by users with status: [_1]',$rolename).'</span> - '.&mt('modifiable fields (if institutional data blank): ');                                  $resulttext .= '<li><span class="LC_cusr_emph">'.&mt('Self-creation of account by users with status: [_1]  ',$rolename).'</span> - '.&mt('modifiable fields (if institutional data blank): ');
                             } else {                              } else {
                                 $resulttext .= '<li><span class="LC_cusr_emph">'.&mt('Target user with [_1] role',$rolename).'</span> - '.&mt('modifiable fields: ');                                  $resulttext .= '<li><span class="LC_cusr_emph">'.&mt('Target user with [_1] role',$rolename).'</span> - '.&mt('modifiable fields: ');
                             }                              }
Line 5565  sub modify_defaults { Line 5012  sub modify_defaults {
             if ($newvalues{$item} ne '') {              if ($newvalues{$item} ne '') {
                 if ($newvalues{$item} =~ /^(\w+)/) {                  if ($newvalues{$item} =~ /^(\w+)/) {
                     my $langcode = $1;                      my $langcode = $1;
                     if ($langcode ne 'x_chef') {                      if (($langcode ne 'gci') && ($langcode ne 'gct') && 
                           ($langcode ne 'x_chef')) {
                         if (code2language($langcode) eq '') {                          if (code2language($langcode) eq '') {
                             push(@errors,$item);                              push(@errors,$item);
                         }                          }
Line 5742  sub modify_coursecategories { Line 5190  sub modify_coursecategories {
             $changes{'categorize'} = 1;              $changes{'categorize'} = 1;
             $domconfig{'coursecategories'}{'categorize'} = $env{'form.categorize'};              $domconfig{'coursecategories'}{'categorize'} = $env{'form.categorize'};
         }          }
         if ($domconfig{'coursecategories'}{'togglecatscomm'} ne $env{'form.togglecatscomm'}) {  
             $changes{'togglecatscomm'} = 1;  
             $domconfig{'coursecategories'}{'togglecatscomm'} = $env{'form.togglecatscomm'};  
         }  
         if ($domconfig{'coursecategories'}{'categorizecomm'} ne $env{'form.categorizecomm'}) {  
             $changes{'categorizecomm'} = 1;  
             $domconfig{'coursecategories'}{'categorizecomm'} = $env{'form.categorizecomm'};  
         }  
     } else {      } else {
         $changes{'togglecats'} = 1;          $changes{'togglecats'} = 1;
         $changes{'categorize'} = 1;          $changes{'categorize'} = 1;
         $changes{'togglecatscomm'} = 1;  
         $changes{'categorizecomm'} = 1;  
         $domconfig{'coursecategories'} = {          $domconfig{'coursecategories'} = {
                                              togglecats => $env{'form.togglecats'},                                               togglecats => $env{'form.togglecats'},
                                              categorize => $env{'form.categorize'},                                               categorize => $env{'form.categorize'},
                                              togglecatscomm => $env{'form.togglecatscomm'},  
                                              categorizecomm => $env{'form.categorizecomm'},  
                                          };                                           };
     }      }
     if (ref($cathash) eq 'HASH') {      if (ref($cathash) eq 'HASH') {
         if (($domconfig{'coursecategories'}{'cats'}{'instcode::0'} ne '')  && ($env{'form.instcode'} == 0)) {          if (($domconfig{'coursecategories'}{'cats'}{'instcode::0'} ne '')  && ($env{'form.instcode'} == 0)) {
             push (@deletecategory,'instcode::0');              push (@deletecategory,'instcode::0');
         }          }
         if (($domconfig{'coursecategories'}{'cats'}{'communities::0'} ne '')  && ($env{'form.communities'} == 0)) {  
             push(@deletecategory,'communities::0');  
         }  
     }      }
     my (@predelcats,@predeltrails,%predelallitems,%sort_by_deltrail);      my (@predelcats,@predeltrails,%predelallitems,%sort_by_deltrail);
     if (ref($cathash) eq 'HASH') {      if (ref($cathash) eq 'HASH') {
Line 5818  sub modify_coursecategories { Line 5251  sub modify_coursecategories {
             $adds{$newitem} = 1;              $adds{$newitem} = 1;
         }          }
     }      }
     if ($env{'form.communities'} eq '1') {  
         if (ref($cathash) eq 'HASH') {  
             my $newitem = 'communities::0';  
             if ($cathash->{$newitem} eq '') {  
                 $domconfig{'coursecategories'}{'cats'}{$newitem} = $env{'form.communities_pos'};  
                 $adds{$newitem} = 1;  
             }  
         } else {  
             my $newitem = 'communities::0';  
             $domconfig{'coursecategories'}{'cats'}{$newitem} = $env{'form.communities_pos'};  
             $adds{$newitem} = 1;  
         }  
     }  
     if ($env{'form.addcategory_name'} ne '') {      if ($env{'form.addcategory_name'} ne '') {
         if (($env{'form.addcategory_name'} ne 'instcode') &&          my $newitem = &escape($env{'form.addcategory_name'}).'::0';
             ($env{'form.addcategory_name'} ne 'communities')) {          $domconfig{'coursecategories'}{'cats'}{$newitem} = $env{'form.addcategory_pos'};
             my $newitem = &escape($env{'form.addcategory_name'}).'::0';          $adds{$newitem} = 1;
             $domconfig{'coursecategories'}{'cats'}{$newitem} = $env{'form.addcategory_pos'};  
             $adds{$newitem} = 1;  
         }  
     }      }
     my $putresult;      my $putresult;
     if ((keys(%deletions) > 0) || (keys(%reorderings) > 0) || (keys(%adds) > 0)) {      if ((keys(%deletions) > 0) || (keys(%reorderings) > 0) || (keys(%adds) > 0)) {
Line 5874  sub modify_coursecategories { Line 5291  sub modify_coursecategories {
         $putresult = &Apache::lonnet::put_dom('configuration',\%domconfig,$dom);          $putresult = &Apache::lonnet::put_dom('configuration',\%domconfig,$dom);
         if ($putresult eq 'ok') {          if ($putresult eq 'ok') {
             my %title = (              my %title = (
                          togglecats     => 'Show/Hide a course in catalog',                           togglecats  => 'Show/Hide a course in the catalog',
                          categorize     => 'Assign a category to a course',                           categorize     => 'Category assigned to course',
                          togglecatscomm => 'Show/Hide a community in catalog',  
                          categorizecomm => 'Assign a category to a community',  
                         );                          );
             my %level = (              my %level = (
                          dom  => 'set in Domain ("Modify Course/Community")',                           dom => 'set from "Modify Course" (Domain)',
                          crs  => 'set in Course ("Course Configuration")',                           crs => 'set from "Parameters" (Course)',
                          comm => 'set in Community ("Community Configuration")',  
                         );                          );
             $resulttext = &mt('Changes made:').'<ul>';              $resulttext = &mt('Changes made:').'<ul>';
             if ($changes{'togglecats'}) {              if ($changes{'togglecats'}) {
Line 5891  sub modify_coursecategories { Line 5305  sub modify_coursecategories {
             if ($changes{'categorize'}) {              if ($changes{'categorize'}) {
                 $resulttext .= '<li>'.&mt("$title{'categorize'} $level{$env{'form.categorize'}}").'</li>';                  $resulttext .= '<li>'.&mt("$title{'categorize'} $level{$env{'form.categorize'}}").'</li>';
             }              }
             if ($changes{'togglecatscomm'}) {  
                 $resulttext .= '<li>'.&mt("$title{'togglecatscomm'} $level{$env{'form.togglecatscomm'}}").'</li>';  
             }  
             if ($changes{'categorizecomm'}) {  
                 $resulttext .= '<li>'.&mt("$title{'categorizecomm'} $level{$env{'form.categorizecomm'}}").'</li>';  
             }  
             if ((keys(%deletions) > 0) || (keys(%reorderings) > 0) || (keys(%adds) > 0)) {              if ((keys(%deletions) > 0) || (keys(%reorderings) > 0) || (keys(%adds) > 0)) {
                 my $cathash;                  my $cathash;
                 if (ref($domconfig{'coursecategories'}) eq 'HASH') {                  if (ref($domconfig{'coursecategories'}) eq 'HASH') {
Line 5946  sub modify_coursecategories { Line 5354  sub modify_coursecategories {
                           &mt('An error occurred: [_1]',$putresult).'</span>';                            &mt('An error occurred: [_1]',$putresult).'</span>';
         }          }
     } else {      } else {
         $resulttext = &mt('No changes made to course and community categories');          $resulttext = &mt('No changes made to course categories');
     }      }
     return $resulttext;      return $resulttext;
 }  }
Line 6076  sub modify_serverstatuses { Line 5484  sub modify_serverstatuses {
     return $resulttext;      return $resulttext;
 }  }
   
 sub modify_coursedefaults {  
     my ($dom,%domconfig) = @_;  
     my ($resulttext,$errors,%changes,%defaultshash);  
     my %defaultchecked = ('canuse_pdfforms' => 'off');  
     my @offon = ('off','on');  
     my @toggles = ('canuse_pdfforms');  
   
     $defaultshash{'coursedefaults'} = {};  
   
     if (ref($domconfig{'coursedefaults'}) ne 'HASH') {  
         if ($domconfig{'coursedefaults'} eq '') {  
             $domconfig{'coursedefaults'} = {};  
         }  
     }  
   
     if (ref($domconfig{'coursedefaults'}) eq 'HASH') {  
         foreach my $item (@toggles) {  
             if ($defaultchecked{$item} eq 'on') {  
                 if (($domconfig{'coursedefaults'}{$item} eq '') &&  
                     ($env{'form.'.$item} eq '0')) {  
                     $changes{$item} = 1;  
                 } elsif ($domconfig{'coursdefaults'}{$item} ne $env{'form.'.$item}) {  
                     $changes{$item} = 1;  
                 }  
             } elsif ($defaultchecked{$item} eq 'off') {  
                 if (($domconfig{'coursedefaults'}{$item} eq '') &&  
                     ($env{'form.'.$item} eq '1')) {  
                     $changes{$item} = 1;  
                 } elsif ($domconfig{'coursedefaults'}{$item} ne $env{'form.'.$item}) {  
                     $changes{$item} = 1;  
                 }  
             }  
             $defaultshash{'coursedefaults'}{$item} = $env{'form.'.$item};  
         }  
     }  
     my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash,  
                                              $dom);  
     if ($putresult eq 'ok') {  
         if (keys(%changes) > 0) {  
             if ($changes{'canuse_pdfforms'}) {  
                 my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);  
                 $domdefaults{'canuse_pdfforms'}=$defaultshash{'coursedefaults'}{'canuse_pdfforms'};  
                 my $cachetime = 24*60*60;  
                 &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime);  
             }  
             $resulttext = &mt('Changes made:').'<ul>';  
             foreach my $item (sort(keys(%changes))) {  
                 if ($item eq 'canuse_pdfforms') {  
                     if ($env{'form.'.$item} eq '1') {  
                         $resulttext .= '<li>'.&mt("Course/Community users can create/upload PDF forms set to 'on'").'</li>';  
                     } else {  
                         $resulttext .= '<li>'.&mt('Course/Community users can create/upload PDF forms set to "off"').'</li>';  
                     }  
                 }  
             }  
             $resulttext .= '</ul>';  
         } else {  
             $resulttext = &mt('No changes made to course defaults');  
         }  
     } else {  
         $resulttext = '<span class="LC_error">'.  
             &mt('An error occurred: [_1]',$putresult).'</span>';  
     }  
     return $resulttext;  
 }  
   
 sub recurse_check {  sub recurse_check {
     my ($chkcats,$categories,$depth,$name) = @_;      my ($chkcats,$categories,$depth,$name) = @_;
     if (ref($chkcats->[$depth]{$name}) eq 'ARRAY') {      if (ref($chkcats->[$depth]{$name}) eq 'ARRAY') {
Line 6182  sub recurse_cat_deletes { Line 5524  sub recurse_cat_deletes {
     return;      return;
 }  }
   
 sub dom_servers {  
     my ($dom) = @_;  
     my (%uniqservers,%servers);  
     my $primaryserver = &Apache::lonnet::hostname(&Apache::lonnet::domain($dom,'primary'));  
     my @machinedoms = &Apache::lonnet::machine_domains($primaryserver);  
     foreach my $mdom (@machinedoms) {  
         my %currservers = %servers;  
         my %server = &Apache::lonnet::get_servers($mdom);  
         %servers = (%currservers,%server);  
     }  
     my %by_hostname;  
     foreach my $id (keys(%servers)) {  
         push(@{$by_hostname{$servers{$id}}},$id);  
     }  
     foreach my $hostname (sort(keys(%by_hostname))) {  
         if (@{$by_hostname{$hostname}} > 1) {  
             my $match = 0;  
             foreach my $id (@{$by_hostname{$hostname}}) {  
                 if (&Apache::lonnet::host_domain($id) eq $dom) {  
                     $uniqservers{$id} = $hostname;  
                     $match = 1;  
                 }  
             }  
             unless ($match) {  
                 $uniqservers{$by_hostname{$hostname}[0]} = $hostname;  
             }  
         } else {  
             $uniqservers{$by_hostname{$hostname}[0]} = $hostname;  
         }  
     }  
     return %uniqservers;  
 }  
   
 sub get_active_dcs {  
     my ($dom) = @_;  
     my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc']);  
     my %domcoords;  
     my $numdcs = 0;  
     my $now = time;  
     foreach my $server (keys(%dompersonnel)) {  
         foreach my $user (sort(keys(%{$dompersonnel{$server}}))) {  
             my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user);  
             my ($end,$start) = split(':',$dompersonnel{$server}{$user});  
             if (($end eq '') || ($end == 0) || ($end > $now)) {  
                 if ($start <= $now) {  
                     $domcoords{$uname.':'.$udom} = $dompersonnel{$server}{$user};  
                 }  
             }  
         }  
     }  
     return %domcoords;  
 }  
   
 sub active_dc_picker {  
     my ($dom,$curr_dc) = @_;  
     my %domcoords = &get_active_dcs($dom);  
     my @dcs = sort(keys(%domcoords));  
     my $numdcs = scalar(@dcs);  
     my $datatable;  
     my $numinrow = 2;  
     if ($numdcs > 1) {  
         $datatable = '<table>';  
         for (my $i=0; $i<@dcs; $i++) {  
             my $rem = $i%($numinrow);  
             if ($rem == 0) {  
                 if ($i > 0) {  
                     $datatable .= '</tr>';  
                 }  
                 $datatable .= '<tr>';  
             }  
             my $check = ' ';  
             if ($curr_dc eq '') {  
                 if (!$i) {  
                     $check = ' checked="checked" ';  
                 }  
             } elsif ($dcs[$i] eq $curr_dc) {  
                 $check = ' checked="checked" ';  
             }  
             if ($i == @dcs - 1) {  
                 my $colsleft = $numinrow - $rem;  
                 if ($colsleft > 1) {  
                     $datatable .= '<td colspan="'.$colsleft.'">';  
                 } else {  
                     $datatable .= '<td>';  
                 }  
             } else {  
                 $datatable .= '<td>';  
             }  
             my ($dcname,$dcdom) = split(':',$dcs[$i]);  
             $datatable .= '<span class="LC_nobreak"><label>'.  
                           '<input type="radio" name="autocreate_xmldc"'.  
                           ' value="'.$dcs[$i].'"'.$check.'/>'.  
                           &Apache::loncommon::plainname($dcname,$dcdom).  
                           '</label></span></td>';  
         }  
         $datatable .= '</tr></table>';  
     } elsif (@dcs) {  
         $datatable .= '<input type="hidden" name="autocreate_dc" value="'.  
                       $dcs[0].'" />';  
     }  
     return ($numdcs,$datatable);  
 }  
   
 1;  1;

Removed from v.1.102.2.11  
changed lines
  Added in v.1.102.4.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>