Diff for /loncom/interface/domainprefs.pm between versions 1.102.2.9 and 1.123.2.4

version 1.102.2.9, 2010/02/22 18:39:13 version 1.123.2.4, 2010/12/06 17:50:40
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','helpsettings','coursedefaults'],$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','helpsettings',
                        'coursedefaults');                         'coursedefaults');
     my %prefs = (      my %prefs = (
         'rolecolors' =>          'rolecolors' =>
Line 221  sub handler { Line 221  sub handler {
                                 {col1 => 'Administrator Settings',                                  {col1 => 'Administrator Settings',
                                  col2 => '',}],                                   col2 => '',}],
                     },                      },
         'login' =>            'login' =>
                     { text => 'Log-in page options',                      { text => 'Log-in page options',
                       help => 'Domain_Configuration_Login_Page',                        help => 'Domain_Configuration_Login_Page',
                       header => [{col1 => 'Item',                        header => [{col1 => 'Item',
                                   col2 => '',}],                                    col2 => '',}],
                     },                      },
   
         'defaults' =>           'defaults' => 
                     { text => 'Default authentication/language/timezone',                      { text => 'Default authentication/language/timezone',
                       help => 'Domain_Configuration_LangTZAuth',                        help => 'Domain_Configuration_LangTZAuth',
Line 254  sub handler { Line 255  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 325  sub handler { Line 320  sub handler {
                               col3 => 'Specific IPs',                                col3 => 'Specific IPs',
                             }],                              }],
                  },                   },
           'helpsettings' =>
                    {text   => 'Help page settings',
                     help   => 'Domain_Configuration_Help_Settings',
                     header => [{col1 => 'Authenticated Help Settings',
                                 col2 => ''},
                                {col1 => 'Unauthenticated Help Settings',
                                 col2 => ''}],
                    },
         'coursedefaults' =>          'coursedefaults' =>
                  {text => 'Course/Community defaults',                   {text => 'Course/Community defaults',
                   help => 'Domain_Configuration_Course_Defaults',                    help => 'Domain_Configuration_Course_Defaults',
                     header => [{col1 => 'Defaults which can be overridden for each course by a DC',
                                 col2 => 'Value',}],
                    },
           'privacy' => 
                    {text   => 'User Privacy',
                     help   => 'Domain_Configuration_User_Privacy',
                   header => [{col1 => 'Setting',                    header => [{col1 => 'Setting',
                               col2 => 'Value',}],                                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 399  sub process_changes { Line 418  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 419  sub process_changes { Line 436  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 'helpsettings') {
           $output = &modify_helpsettings($r,$dom,$confname,%domconfig);
     } elsif ($action eq 'coursedefaults') {      } elsif ($action eq 'coursedefaults') {
         $output = &modify_coursedefaults($dom,%domconfig);          $output = &modify_coursedefaults($dom,%domconfig);
     }      }
Line 446  sub print_config_box { Line 465  sub print_config_box {
     }      }
     if ($numheaders > 1) {      if ($numheaders > 1) {
         my $colspan = '';          my $colspan = '';
         if (($action eq 'rolecolors') || ($action eq 'coursecategories')) {          if (($action eq 'rolecolors') || ($action eq 'coursecategories') || ($action eq 'helpsettings')) {
             $colspan = ' colspan="2"';              $colspan = ' colspan="2"';
         }          }
         $output .= '          $output .= '
Line 466  sub print_config_box { Line 485  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 {          } elsif ($action eq 'helpsettings') {
               $output .= &print_helpsettings('top',$dom,$confname,$settings,\$rowtotal);
           } elsif ($action eq 'rolecolors') {
             $output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal);              $output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal);
         }          }
         $output .= '          $output .= '
Line 515  sub print_config_box { Line 539  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 {          } elsif ($action eq 'helpsettings') {
               $output .= &print_helpsettings('bottom',$dom,$confname,$settings,\$rowtotal);
           } elsif ($action eq 'rolecolors') {
             $output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).'              $output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).'
            </table>             </table>
           </td>            </td>
Line 585  sub print_config_box { Line 613  sub print_config_box {
         $output .= '</tr>';          $output .= '</tr>';
         $rowtotal ++;          $rowtotal ++;
         if ($action eq 'login') {          if ($action eq 'login') {
             $output .= &print_login($dom,$confname,$phase,$settings,\$rowtotal);              $output .= &print_login('bottom',$dom,$confname,$phase,$settings,
                                       \$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 602  sub print_config_box { Line 629  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') {          } elsif ($action eq 'helpsettings') {
               $output .= &print_helpsettings('top',$dom,$confname,$settings,\$rowtotal);
       } elsif ($action eq 'coursedefaults') {
             $output .= &print_coursedefaults($dom,$settings,\$rowtotal);              $output .= &print_coursedefaults($dom,$settings,\$rowtotal);
         }          }
     }      }
Line 615  sub print_config_box { Line 644  sub print_config_box {
 }  }
   
 sub print_login {  sub print_login {
     my ($dom,$confname,$phase,$settings,$rowtotal) = @_;      my ($position,$dom,$confname,$phase,$settings,$rowtotal) = @_;
       my ($css_class,$datatable);
     my %choices = &login_choices();      my %choices = &login_choices();
       my $itemcount = 1;
   
       if ($position eq 'top') {
           my %servers = &dom_servers($dom);
           my $choice = $choices{'disallowlogin'};
           $css_class = ' class="LC_odd_row"';
           $datatable .= '<tr'.$css_class.'><td>'.$choices{'disallowlogin'}.'</td>'.
                         '<td align="right"><table><tr><th>'.$choices{'hostid'}.'</th>'.
                         '<th>'.$choices{'serverurl'}.'</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 ($disallowed{$lonhost} eq '') {
                   $direct = '';
               }
               $datatable .= '<tr><td>'.$servers{$lonhost}.'</td>'.
                             '<td><select name="'.$lonhost.'_serverurl">'.
                             '<option value=""'.$direct.'>'.$choices{'directlogin'}.
                             '</option>';
               foreach my $hostid (keys(%servers)) {
                   next if ($servers{$hostid} eq $servers{$lonhost});
                   my $selected = '';
                   if ($hostid eq $disallowed{$lonhost}) {
                       $selected = 'selected="selected"';
                   }
                   $datatable .= '<option value="'.$hostid.'"'.$selected.'>'.
                                 $servers{$hostid}.'</option>';
               }
               $datatable .= '</select></td></tr>';
           }
           $datatable .= '</table></td></tr>';
           return $datatable;
       }
   
     my %defaultchecked = (       my %defaultchecked = ( 
                            'coursecatalog' => 'on',                             'coursecatalog' => 'on',
                            'adminmail'     => 'off',                             'adminmail'     => 'off',
Line 752  sub login_choices { Line 821  sub login_choices {
     my %choices =      my %choices =
         &Apache::lonlocal::texthash (          &Apache::lonlocal::texthash (
             coursecatalog => 'Display Course/Community Catalog link?',              coursecatalog => 'Display Course/Community Catalog link?',
             adminmail => "Display Administrator's E-mail Address?",              adminmail     => "Display Administrator's E-mail Address?",
             newuser   => "Link to create a user account",              disallowlogin => "Login page requests redirected",
             img => "Header",              hostid        => "Server",
             logo => "Main Logo",              serverurl     => "Redirect to log-in via:",
             domlogo => "Domain Logo",              directlogin   => "No redirect",
             login => "Log-in Header",               newuser       => "Link to create a user account",
             textcol => "Text color",              img           => "Header",
             bgcol   => "Box color",              logo          => "Main Logo",
             bgs => "Background colors",              domlogo       => "Domain Logo",
             links => "Link colors",              login         => "Log-in Header", 
             font => "Font color",              textcol       => "Text color",
             pgbg => "Header",              bgcol         => "Box color",
             mainbg => "Page",              bgs           => "Background colors",
             sidebg => "Login box",              links         => "Link colors",
             link => "Link",              font          => "Font color",
             alink => "Active link",              pgbg          => "Header",
             vlink => "Visited link",              mainbg        => "Page",
               sidebg        => "Login box",
               link          => "Link",
               alink         => "Active link",
               vlink         => "Visited link",
         );          );
     return %choices;      return %choices;
 }  }
Line 786  sub print_rolecolors { Line 859  sub print_rolecolors {
     my %defaults = (      my %defaults = (
                    img => $defaultdesign{$role.'.img'},                     img => $defaultdesign{$role.'.img'},
                    font => $defaultdesign{$role.'.font'},                     font => $defaultdesign{$role.'.font'},
      fontmenu => $defaultdesign{$role.'.fontmenu'},
                    );                     );
     foreach my $item (@bgs) {      foreach my $item (@bgs) {
         $defaults{'bgs'}{$item} = $defaultdesign{$role.'.'.$item};          $defaults{'bgs'}{$item} = $defaultdesign{$role.'.'.$item};
Line 803  sub print_rolecolors { Line 877  sub print_rolecolors {
                 $designs{'font'} = $settings->{$role}->{'font'};                  $designs{'font'} = $settings->{$role}->{'font'};
                 $is_custom{'font'} = 1;                  $is_custom{'font'} = 1;
             }              }
               if ($settings->{$role}->{'fontmenu'} ne '') {
                   $designs{'fontmenu'} = $settings->{$role}->{'fontmenu'};
                   $is_custom{'fontmenu'} = 1;
               }
             foreach my $item (@bgs) {              foreach my $item (@bgs) {
                 if ($settings->{$role}->{$item} ne '') {                  if ($settings->{$role}->{$item} ne '') {
                     $designs{'bgs'}{$item} = $settings->{$role}->{$item};                      $designs{'bgs'}{$item} = $settings->{$role}->{$item};
Line 821  sub print_rolecolors { Line 899  sub print_rolecolors {
             $designs{img} = $designhash{$dom.'.'.$role.'.img'};              $designs{img} = $designhash{$dom.'.'.$role.'.img'};
             $is_custom{'img'} = 1;              $is_custom{'img'} = 1;
         }          }
           if ($designhash{$dom.'.'.$role.'.fontmenu'} ne '') {
               $designs{fontmenu} = $designhash{$dom.'.'.$role.'.fontmenu'};
               $is_custom{'fontmenu'} = 1; 
           }
         if ($designhash{$dom.'.'.$role.'.font'} ne '') {          if ($designhash{$dom.'.'.$role.'.font'} ne '') {
             $designs{font} = $designhash{$dom.'.'.$role.'.font'};              $designs{font} = $designhash{$dom.'.'.$role.'.font'};
             $is_custom{'font'} = 1;              $is_custom{'font'} = 1;
Line 849  sub display_color_options { Line 931  sub display_color_options {
     my ($dom,$confname,$phase,$role,$itemcount,$choices,$is_custom,$defaults,$designs,      my ($dom,$confname,$phase,$role,$itemcount,$choices,$is_custom,$defaults,$designs,
         $images,$bgs,$links,$alt_text,$rowtotal,$logintext,$loginheader) = @_;          $images,$bgs,$links,$alt_text,$rowtotal,$logintext,$loginheader) = @_;
     my $css_class = $itemcount%2?' class="LC_odd_row"':'';      my $css_class = $itemcount%2?' class="LC_odd_row"':'';
     my $datatable = '<tr'.$css_class.'>'.      my $datatable = '<tr>'.
         '<td>'.$choices->{'font'}.'</td>';          '<td>'.$choices->{'font'}.'</td>';
     if (!$is_custom->{'font'}) {      if (!$is_custom->{'font'}) {
         $datatable .=  '<td>'.&mt('Default in use:').'&nbsp;<span id="css_default_'.$role.'_font" style="color: '.$defaults->{'font'}.';">'.$defaults->{'font'}.'</span></td>';          $datatable .=  '<td>'.&mt('Default in use:').'&nbsp;<span id="css_default_'.$role.'_font" style="color: '.$defaults->{'font'}.';">'.$defaults->{'font'}.'</span></td>';
Line 863  sub display_color_options { Line 945  sub display_color_options {
                   '&nbsp;<span id="css_'.$role.'_font" style="background-color: '.                    '&nbsp;<span id="css_'.$role.'_font" style="background-color: '.
                   $designs->{'font'}.';">&nbsp;&nbsp;&nbsp;</span>'.                    $designs->{'font'}.';">&nbsp;&nbsp;&nbsp;</span>'.
                   '</span></td></tr>';                    '</span></td></tr>';
       unless ($role eq 'login') { 
           $datatable .= '<tr'.$css_class.'>'.
                         '<td>'.$choices->{'fontmenu'}.'</td>';
           if (!$is_custom->{'fontmenu'}) {
               $datatable .=  '<td>'.&mt('Default in use:').'&nbsp;<span id="css_default_'.$role.'_font" style="color: '.$defaults->{'fontmenu'}.';">'.$defaults->{'fontmenu'}.'</span></td>';
           } else {
               $datatable .= '<td>&nbsp;</td>';
           }
           $fontlink = &color_pick($phase,$role,'fontmenu',$choices->{'fontmenu'},$designs->{'fontmenu'});
           $datatable .= '<td><span class="LC_nobreak">'.
                         '<input type="text" size="10" name="'.$role.'_fontmenu"'.
                         ' value="'.$designs->{'fontmenu'}.'" />&nbsp;'.$fontlink.
                         '&nbsp;<span id="css_'.$role.'_fontmenu" style="background-color: '.
                         $designs->{'fontmenu'}.';">&nbsp;&nbsp;&nbsp;</span>'.
                         '</span></td></tr>';
       }
     my $switchserver = &check_switchserver($dom,$confname);      my $switchserver = &check_switchserver($dom,$confname);
     foreach my $img (@{$images}) {      foreach my $img (@{$images}) {
  $itemcount ++;   $itemcount ++;
Line 1218  sub print_quotas { Line 1316  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> ';                              $cell{$item} .= '</span>&nbsp; ';
                             if ($option eq 'autolimit') {                              if ($option eq 'autolimit') {
                                 $cell{$item} .= $titles{'unlimited'};                                  $cell{$item} .= $titles{'unlimited'}
                             }                              }
                         }                          }
                     } else {                      } else {
Line 1249  sub print_quotas { Line 1347  sub print_quotas {
                 if ($context eq 'requestcourses') {                  if ($context eq 'requestcourses') {
                     $datatable .= '</tr><tr>';                      $datatable .= '</tr><tr>';
                     foreach my $item (@usertools) {                      foreach my $item (@usertools) {
                         $datatable .= '<td style="vertical-align: top;">'.$cell{$item}.'</td>';                            $datatable .= '<td style="vertical-align: top">'.$cell{$item}.'</td>';  
                     }                      }
                     $datatable .= '</tr></table>';                      $datatable .= '</tr></table>';
                 }                  }
Line 1326  sub print_quotas { Line 1424  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'}
                 }                  }
             }              }
         } else {          } else {
Line 1355  sub print_quotas { Line 1453  sub print_quotas {
     if ($context eq 'requestcourses') {      if ($context eq 'requestcourses') {
         $datatable .= '</tr><tr>';          $datatable .= '</tr><tr>';
         foreach my $item (@usertools) {          foreach my $item (@usertools) {
             $datatable .= '<td style="vertical-align: top;">'.$defcell{$item}.'</td>';              $datatable .= '<td style="vertical-align: top">'.$defcell{$item}.'</td>';
         }          }
         $datatable .= '</tr></table>';          $datatable .= '</tr></table>';
     }      }
Line 1429  sub print_quotas { Line 1527  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'}
                 }                  }
             }              }
         } else {          } else {
Line 1458  sub print_quotas { Line 1556  sub print_quotas {
     if ($context eq 'requestcourses') {      if ($context eq 'requestcourses') {
         $datatable .= '</tr><tr>';          $datatable .= '</tr><tr>';
         foreach my $item (@usertools) {          foreach my $item (@usertools) {
             $datatable .= '<td style="vertical-align: top;">'.$advcell{$item}.'</td>';              $datatable .= '<td style="vertical-align: top">'.$advcell{$item}.'</td>';
         }          }
         $datatable .= '</tr></table>';          $datatable .= '</tr></table>';
     }      }
Line 1663  sub print_autoupdate { Line 1761  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 1902  sub print_contacts { Line 1949  sub print_contacts {
     return $datatable;      return $datatable;
 }  }
   
   sub print_helpsettings {
   
    my ($position,$dom,$confname,$settings,$rowtotal) = @_;
    my ($css_class,$datatable);
   
    my $switchserver = &check_switchserver($dom,$confname);
   
    my $itemcount = 1;
   
    if ($position eq 'top') {
   
    my (%checkedon,%checkedoff,%choices,%defaultchecked,@toggles);
   
    %choices =
    &Apache::lonlocal::texthash (
    submitbugs => 'Display &quot;Submit a bug&quot; link?',
    );
   
    %defaultchecked = ('submitbugs' => 'on');
   
    @toggles = ('submitbugs',);
   
    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><span class="LC_nobreak">&nbsp;</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 ++;
    }
        
        } else {
        
         $css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
        
         $datatable .= '<tr'.$css_class.'>';
        
         if (ref($settings) eq 'HASH') {
    if ($settings->{'loginhelpurl'} ne '') {
    my($directory, $filename) = $settings->{'loginhelpurl'} =~ m/(.*\/)(.*)$/;
    $datatable .= '<td width="33%"><span class="LC_left_item"><label><a href="'.$settings->{'loginhelpurl'}.'" target="_blank">'.&mt('Custom Login Page Help File In Use').'</a></label></span></td>';
    $datatable .= '<td width="33%"><span class="LC_right_item"><label><input type="checkbox" name="loginhelpurl_del" value="1" />'.&mt('Delete?').'</label></span></td>'
    } else {
    $datatable .= '<td width="33%"><span class="LC_left_item"><label>'.&mt('Default Login Page Help File In Use').'</label></span></td>';
    $datatable .= '<td width="33%"><span class="LC_right_item">&nbsp;</span></td>';
    }
    } else {
    $datatable .= '<td><span class="LC_left_item">&nbsp;</span></td>';
    $datatable .= '<td><span class="LC_right_item">&nbsp;</span></td>';
    }
      
         $datatable .= '<td width="33%"><span class="LC_right_item">';
         if ($switchserver) {
               $datatable .= &mt('Upload to library server: [_1]',$switchserver);
           } else {
           $datatable .= &mt('Upload Custom Login Page Help File:');
               $datatable .='<input type="file" name="loginhelpurl" />';
           }
           $datatable .= '</span></td></tr>';
           
        }
        
        return $datatable;
   
   }
   
   
 sub radiobutton_prefs {  sub radiobutton_prefs {
     my ($settings,$toggles,$defaultchecked,$choices,$itemcount) = @_;      my ($settings,$toggles,$defaultchecked,$choices,$itemcount) = @_;
     return unless ((ref($toggles) eq 'ARRAY') && (ref($defaultchecked) eq 'HASH') &&      return unless ((ref($toggles) eq 'ARRAY') && (ref($defaultchecked) eq 'HASH') &&
Line 1951  sub print_coursedefaults { Line 2092  sub print_coursedefaults {
     my ($css_class,$datatable);      my ($css_class,$datatable);
     my $itemcount = 1;      my $itemcount = 1;
     my (%checkedon,%checkedoff,%choices,%defaultchecked,@toggles);      my (%checkedon,%checkedoff,%choices,%defaultchecked,@toggles);
     %choices =      $css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
       my %choices =
         &Apache::lonlocal::texthash (          &Apache::lonlocal::texthash (
             canuse_pdfforms => 'Course/Community users can create/upload PDF forms',              anonsurvey_threshold => 'Responder count needed before showing submissions for anonymous surveys',
     );      );
     %defaultchecked = ('canuse_pdfforms' => 'off');      my $currdefresponder;
     @toggles = ('canuse_pdfforms',);      if (ref($settings) eq 'HASH') {
     ($datatable,$itemcount) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked,          $currdefresponder = $settings->{'anonsurvey_threshold'};
                                                  \%choices,$itemcount);      }
       if (!$currdefresponder) {
           $currdefresponder = 10;
       } elsif ($currdefresponder < 1) {
           $currdefresponder = 1;
       }
       $datatable .=
              '<tr'.$css_class.'><td><span class="LC_nobreak">'.$choices{'anonsurvey_threshold'}.
               '</span></td>'.
               '<td class="LC_right_item"><span class="LC_nobreak">'.
               '<input type="text" name="anonsurvey_threshold"'.
               ' value="'.$currdefresponder.'" size="5" /></span>'.
               '</td></tr>';
     $$rowtotal += $itemcount;      $$rowtotal += $itemcount;
     return $datatable;      return $datatable;
 }  }
Line 2008  sub courserequest_titles { Line 2162  sub courserequest_titles {
   
 sub courserequest_conditions {  sub courserequest_conditions {
     my %conditions = &Apache::lonlocal::texthash (      my %conditions = &Apache::lonlocal::texthash (
        approval   => '(Processing of request subject to approval by Domain Coordinator).',         approval    => '(Processing of request subject to approval by Domain Coordinator).',
        validate   => '(Processing of request subject to instittutional validation).',         validate   => '(Processing of request subject to instittutional validation).',
                  );                   );
     return %conditions;      return %conditions;
Line 2604  sub print_coursecategories { Line 2758  sub print_coursecategories {
                      categorizecomm => 'Assign a category to a community',                       categorizecomm => 'Assign a category to a community',
                     );                      );
         my %level = &Apache::lonlocal::texthash (          my %level = &Apache::lonlocal::texthash (
                      dom => 'Set in Domain',                       dom  => 'Set in Domain',
                      crs => 'Set in Course',                          crs  => 'Set in Course',
                      comm => 'Set in Community',                       comm => 'Set in Community',
                     );                      );
         $datatable = '<tr class="LC_odd_row">'.          $datatable = '<tr class="LC_odd_row">'.
Line 2664  sub print_coursecategories { Line 2818  sub print_coursecategories {
                           communities => &mt('Communities'),                            communities => &mt('Communities'),
                     );                      );
   
                     if ((!grep(/^instcode$/,@{$cats[0]})) ||                      if ((!grep(/^instcode$/,@{$cats[0]})) || 
                         ($cathash->{'instcode::0'} eq '') ||                          ($cathash->{'instcode::0'} eq '') ||
                         (!grep(/^communities$/,@{$cats[0]})) ||                          (!grep(/^communities$/,@{$cats[0]})) || 
                         ($cathash->{'communities::0'} eq '')) {                          ($cathash->{'communities::0'} eq '')) {
                         $maxnum ++;                          $maxnum ++;
                     }                      }
Line 2760  sub print_coursecategories { Line 2914  sub print_coursecategories {
                                           '<td><span class="LC_nobreak">'.                                            '<td><span class="LC_nobreak">'.
                                           $default_names{$default}.'</span>';                                            $default_names{$default}.'</span>';
                             if ($default eq 'instcode') {                              if ($default eq 'instcode') {
                                 $datatable .= '<br /><span class="LC_nobreak">('                                  $datatable .= '<br /><span class="LC_nobreak">(' 
                                               .&mt('with institutional codes').')</span>';                                                .&mt('with institutional codes').')</span>';
                             }                              }
                             $datatable .= '</td>'                              $datatable .= '</td>'
Line 2859  sub coursecategories_javascript { Line 3013  sub coursecategories_javascript {
     }      }
     my $instcode_reserved = &mt('The name: "instcode" is a reserved category');      my $instcode_reserved = &mt('The name: "instcode" is a reserved category');
     my $communities_reserved = &mt('The name: "communities" 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');      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 3281  sub modify_login { Line 3435  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 3293  sub modify_login { Line 3455  sub modify_login {
         $colchgtext = &display_colorchgs($dom,\%colchanges,['login'],          $colchgtext = &display_colorchgs($dom,\%colchanges,['login'],
                                          \%loginhash);                                           \%loginhash);
     }      }
   
       my %servers = &dom_servers($dom);
       if (keys(%servers) > 1) {
           foreach my $lonhost (keys(%servers)) {
               next if ($env{'form.'.$lonhost.'_serverurl'} eq $lonhost);
               if ($env{'form.'.$lonhost.'_serverurl'} eq $curr_loginvia{$lonhost}) {
                   $loginhash{login}{loginvia}{$lonhost} = $curr_loginvia{$lonhost};                next;
               }
               if ($curr_loginvia{$lonhost} ne '') {
                   $loginhash{login}{loginvia}{$lonhost} = $env{'form.'.$lonhost.'_serverurl'};
                   $changes{'loginvia'}{$lonhost} = 1;
               } else {
                   if (defined($servers{$env{'form.'.$lonhost.'_serverurl'}})) {
                       $loginhash{login}{loginvia}{$lonhost} = $env{'form.'.$lonhost.'_serverurl'};
                       $changes{'loginvia'}{$lonhost} = 1;
                   }
               }
           }
       }
   
     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 3339  sub modify_login { Line 3521  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 ($servers{$env{'form.'.$lonhost.'_serverurl'}} ne '') {
                                   $resulttext .= '<li>'.&mt('Server: [_1] log-in page now redirects to [_2]',$lonhost,$servers{$env{'form.'.$lonhost.'_serverurl'}}).'</li>';
                               } else {
                                   $resulttext .= '<li>'.&mt('Server: [_1] now has standard log-in page.',$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 3366  sub color_font_choices { Line 3560  sub color_font_choices {
             links => "Link colors",              links => "Link colors",
             images => "Images",              images => "Images",
             font => "Font color",              font => "Font color",
               fontmenu => "Font Menu",
             pgbg => "Page",              pgbg => "Page",
             tabbg => "Header",              tabbg => "Header",
             sidebg => "Border",              sidebg => "Border",
Line 3423  sub modify_colors { Line 3618  sub modify_colors {
             @logintext = ('textcol','bgcol');              @logintext = ('textcol','bgcol');
         } else {          } else {
             %choices = &color_font_choices();              %choices = &color_font_choices();
               $confhash->{$role}{'fontmenu'} = $env{'form.'.$role.'_fontmenu'};
         }          }
         if ($role eq 'login') {          if ($role eq 'login') {
             @images = ('img','logo','domlogo','login');              @images = ('img','logo','domlogo','login');
Line 3545  sub modify_colors { Line 3741  sub modify_colors {
                         $changes{$role}{'font'} = 1;                          $changes{$role}{'font'} = 1;
                     }                      }
                 }                  }
                   if ($role ne 'login') {
                       if ($domconfig->{$role}{'fontmenu'} ne '') {
                           if ($confhash->{$role}{'fontmenu'} ne $domconfig->{$role}{'fontmenu'}) {
                               $changes{$role}{'fontmenu'} = 1;
                           }
                       } else {
                           if ($confhash->{$role}{'fontmenu'}) {
                               $changes{$role}{'fontmenu'} = 1;
                           }
                       }
                   }
                 foreach my $item (@bgs) {                  foreach my $item (@bgs) {
                     if ($domconfig->{$role}{$item} ne '') {                      if ($domconfig->{$role}{$item} ne '') {
                         if ($confhash->{$role}{$item} ne $domconfig->{$role}{$item}) {                          if ($confhash->{$role}{$item} ne $domconfig->{$role}{$item}) {
Line 4040  sub modify_quotas { Line 4247  sub modify_quotas {
     }      }
     foreach my $item (@usertools) {      foreach my $item (@usertools) {
         foreach my $type (@{$types},'default','_LC_adv') {          foreach my $type (@{$types},'default','_LC_adv') {
             my $unset;              my $unset; 
             if ($context eq 'requestcourses') {              if ($context eq 'requestcourses') {
                 $unset = '0';                  $unset = '0';
                 if ($type eq '_LC_adv') {                  if ($type eq '_LC_adv') {
Line 4439  sub modify_autoupdate { Line 4646  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 5265  sub modify_usermodification { Line 5400  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 5302  sub modify_defaults { Line 5437  sub modify_defaults {
     my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);      my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
     my @items = ('auth_def','auth_arg_def','lang_def','timezone_def','datelocale_def');      my @items = ('auth_def','auth_arg_def','lang_def','timezone_def','datelocale_def');
     my @authtypes = ('internal','krb4','krb5','localauth');      my @authtypes = ('internal','krb4','krb5','localauth');
       my @doms = &Apache::lonnet::current_machine_domains();
       my @langs;
       foreach my $dom (@doms) {
           if ($dom =~ /^(\w{2})\w?itest$/) {
               push (@langs,$1.'t');
           } elsif ($dom =~ /^(\w{2})\w?i$/) {
               push(@langs,$1.'i');
           }
       }
     foreach my $item (@items) {      foreach my $item (@items) {
         $newvalues{$item} = $env{'form.'.$item};          $newvalues{$item} = $env{'form.'.$item};
         if ($item eq 'auth_def') {          if ($item eq 'auth_def') {
Line 5314  sub modify_defaults { Line 5458  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 ((!grep(/^\Q$langcode\E/,@langs)) &&  
                           ($langcode ne 'x_chef')) {
                         if (code2language($langcode) eq '') {                          if (code2language($langcode) eq '') {
                             push(@errors,$item);                              push(@errors,$item);
                         }                          }
Line 5502  sub modify_coursecategories { Line 5647  sub modify_coursecategories {
     } 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'},          $changes{'togglecatscomm'} = 1;
           $changes{'categorizecomm'} = 1;
           $domconfig{'coursecategories'} = {
                                                togglecats => $env{'form.togglecatscomm'},
                                                categorize => $env{'form.categorizecomm'},
                                          };                                           };
     }      }
     if (ref($cathash) eq 'HASH') {      if (ref($cathash) eq 'HASH') {
Line 5825  sub modify_serverstatuses { Line 5972  sub modify_serverstatuses {
     return $resulttext;      return $resulttext;
 }  }
   
   sub modify_helpsettings {
       my ($r,$dom,$confname,%domconfig) = @_;
     my ($resulttext,$errors,%changes,%helphash);
    
     my $customhelpfile  = $env{'form.loginhelpurl.filename'};
       my $defaulthelpfile = 'defaulthelp.html';
     my $servadm = $r->dir_config('lonAdmEMail');
       my ($configuserok,$author_ok,$switchserver) = 
           &config_check($dom,$confname,$servadm);
    
     my %defaultchecked = ('submitbugs' => 'on');
     my @offon = ('off','on');
       my %title = ( submitbugs     => 'Display link for users to submit a bug', 
        loginhelpurl  => 'Unauthenticated login help page set to custom file');
        
       my @toggles = ('submitbugs');
   
       $helphash{'helpsettings'} = {};
       
       if (ref($domconfig{'helpsettings'}) ne 'HASH') {
           if ($domconfig{'helpsettings'} eq '') {
               $domconfig{'helpsettings'} = {};
           }
       }
       
       if (ref($domconfig{'helpsettings'}) eq 'HASH') {
      
           foreach my $item (@toggles) {
          
    if ($defaultchecked{$item} eq 'on') { 
    if (($domconfig{'helpsettings'}{$item} eq '') &&
    ($env{'form.'.$item} eq '0')) {
    $changes{$item} = 1;
    } elsif ($domconfig{'helpsettings'}{$item} ne $env{'form.'.$item}) {
    $changes{$item} = 1;
    }
    } elsif ($defaultchecked{$item} eq 'off') {
    if (($domconfig{'helpsettings'}{$item} eq '') &&
    ($env{'form.'.$item} eq '1')) {
    $changes{$item} = 1;
    } elsif ($domconfig{'helpsettings'}{$item} ne $env{'form.'.$item}) {
    $changes{$item} = 1;
    }
    }
    $helphash{'helpsettings'}{$item} = $env{'form.'.$item};
    }
   
    if ($customhelpfile ne '') {
    my $error;
    if ($configuserok eq 'ok') {
    if ($switchserver) {
    $error = &mt("Upload of custom help file is not permitted to this server: [_1]",$switchserver);
    } else {
    if ($author_ok eq 'ok') {
    my ($result,$loginhelpurl) =
    &publishlogo($r,'upload','loginhelpurl',$dom,
    $confname,'help','','',$customhelpfile);
    if ($result eq 'ok') {
    $helphash{'helpsettings'}{'loginhelpurl'} = $loginhelpurl;
    $changes{'loginhelpurl'} = 1;
    } else {
    $error = &mt("Upload of [_1] failed because an error occurred publishing the file in RES space. Error was: [_2].",$customhelpfile,$result);
    }
    } else {
    $error = &mt("Upload of [_1] failed because an author role could not be assigned to a Domain Configuration user ([_2]) in domain: [_3].  Error was: [_4].",$customhelpfile,$confname,$dom,$author_ok);
    }
    }
    } else {
    $error = &mt("Upload of [_1] failed because a Domain Configuration user ([_2]) could not be created in domain: [_3].  Error was: [_4].",$customhelpfile,$confname,$dom,$configuserok);
    }
    if ($error) {
    &Apache::lonnet::logthis($error);
    $errors .= '<li><span class="LC_error">'.$error.'</span></li>';
    }
    }
   
           if ($domconfig{'helpsettings'}{'loginhelpurl'} ne '') {
               if ($env{'form.loginhelpurl_del'}) {
                   $helphash{'helpsettings'}{'loginhelpurl'} = '';
                   $changes{'loginhelpurl'} = 1;
               }
           }
       }
       
       
       my $putresult;
       
       if (keys(%changes) > 0) {
       $putresult = &Apache::lonnet::put_dom('configuration',\%helphash,$dom);
       } else {
       $putresult = 'ok';
       }
                                                
       if ($putresult eq 'ok') {
           if (keys(%changes) > 0) {
    $resulttext = &mt('Changes made:').'<ul>';
    foreach my $item (sort(keys(%changes))) {
    if ($item eq 'submitbugs') {
    $resulttext .= '<li>'.&mt("$title{$item} set to $offon[$env{'form.'.$item}]").'</li>';
    }
    if ($item eq 'loginhelpurl') {
    if ($helphash{'helpsettings'}{'loginhelpurl'} eq '') {
                           $resulttext .= '<li>'.&mt('[_1] help file removed; [_2] file will be used for the unathorized help page in this domain.',$customhelpfile,$defaulthelpfile).'</li>';
                       } else {
                           $resulttext .= '<li>'.&mt("$title{$item} [_1]",$customhelpfile).'</li>';
                       }
    }
    }
    $resulttext .= '</ul>';
    } else {
    $resulttext = &mt('No changes made to help settings');
    }
       } else {
           $resulttext = '<span class="LC_error">'.
       &mt('An error occurred: [_1]',$putresult).'</span>';
       }
       if ($errors) {
           $resulttext .= &mt('The following errors occurred: ').'<ul>'.
                          $errors.'</ul>';
       }
       return $resulttext;
   }
   
 sub modify_coursedefaults {  sub modify_coursedefaults {
     my ($dom,%domconfig) = @_;      my ($dom,%domconfig) = @_;
     my ($resulttext,$errors,%changes,%defaultshash);      my ($resulttext,$errors,%changes,%defaultshash);
Line 5859  sub modify_coursedefaults { Line 6129  sub modify_coursedefaults {
             }              }
             $defaultshash{'coursedefaults'}{$item} = $env{'form.'.$item};              $defaultshash{'coursedefaults'}{$item} = $env{'form.'.$item};
         }          }
           my $currdefresponder = $domconfig{'coursedefaults'}{'anonsurvey_threshold'};
           my $newdefresponder = $env{'form.anonsurvey_threshold'};
           $newdefresponder =~ s/\D//g;
           if ($newdefresponder eq '' || $newdefresponder < 1) {
               $newdefresponder = 1;
           }
           $defaultshash{'coursedefaults'}{'anonsurvey_threshold'} = $newdefresponder;
           if ($currdefresponder ne $newdefresponder) {
               unless ($currdefresponder eq '' && $newdefresponder == 10) {
                   $changes{'anonsurvey_threshold'} = 1;
               }
           }
     }      }
     my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash,      my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash,
                                              $dom);                                               $dom);
Line 5878  sub modify_coursedefaults { Line 6160  sub modify_coursedefaults {
                     } else {                      } else {
                         $resulttext .= '<li>'.&mt('Course/Community users can create/upload PDF forms set to "off"').'</li>';                          $resulttext .= '<li>'.&mt('Course/Community users can create/upload PDF forms set to "off"').'</li>';
                     }                      }
                   } elsif ($item eq 'anonsurvey_threshold') {
                           $resulttext .= '<li>'.&mt('Responder count required for display of anonymous survey submissions set to [_1].',$defaultshash{'coursedefaults'}{'anonsurvey_threshold'}).'</li>';
                 }                  }
   
             }              }
             $resulttext .= '</ul>';              $resulttext .= '</ul>';
         } else {          } else {
Line 5931  sub recurse_cat_deletes { Line 6216  sub recurse_cat_deletes {
     return;      return;
 }  }
   
 sub get_active_dcs {  sub dom_servers {
     my ($dom) = @_;      my ($dom) = @_;
     my %dompersonnel = &Apache::lonnet::get_domain_roles($dom,['dc']);      my (%uniqservers,%servers);
     my %domcoords;      my $primaryserver = &Apache::lonnet::hostname(&Apache::lonnet::domain($dom,'primary'));
     my $numdcs = 0;      my @machinedoms = &Apache::lonnet::machine_domains($primaryserver);
     my $now = time;      foreach my $mdom (@machinedoms) {
     foreach my $server (keys(%dompersonnel)) {          my %currservers = %servers;
         foreach my $user (sort(keys(%{$dompersonnel{$server}}))) {          my %server = &Apache::lonnet::get_servers($mdom);
             my ($trole,$uname,$udom,$runame,$rudom,$rsec) = split(/:/,$user);          %servers = (%currservers,%server);
             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;      my %by_hostname;
 }      foreach my $id (keys(%servers)) {
           push(@{$by_hostname{$servers{$id}}},$id);
 sub active_dc_picker {      }
     my ($dom,$curr_dc) = @_;      foreach my $hostname (sort(keys(%by_hostname))) {
     my %domcoords = &get_active_dcs($dom);          if (@{$by_hostname{$hostname}} > 1) {
     my @dcs = sort(keys(%domcoords));              my $match = 0;
     my $numdcs = scalar(@dcs);              foreach my $id (@{$by_hostname{$hostname}}) {
     my $datatable;                  if (&Apache::lonnet::host_domain($id) eq $dom) {
     my $numinrow = 2;                      $uniqservers{$id} = $hostname;
     if ($numdcs > 1) {                      $match = 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) {              unless ($match) {
                 my $colsleft = $numinrow - $rem;                  $uniqservers{$by_hostname{$hostname}[0]} = $hostname;
                 if ($colsleft > 1) {  
                     $datatable .= '<td colspan="'.$colsleft.'">';  
                 } else {  
                     $datatable .= '<td>';  
                 }  
             } else {  
                 $datatable .= '<td>';  
             }              }
             my ($dcname,$dcdom) = split(':',$dcs[$i]);          } else {
             $datatable .= '<span class="LC_nobreak"><label>'.              $uniqservers{$by_hostname{$hostname}[0]} = $hostname;
                           '<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);      return %uniqservers;
 }  }
   
 1;  1;

Removed from v.1.102.2.9  
changed lines
  Added in v.1.123.2.4


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