Diff for /loncom/interface/domainprefs.pm between versions 1.29 and 1.30

version 1.29, 2007/09/19 17:36:47 version 1.30, 2007/09/26 12:42:32
Line 61  sub handler { Line 61  sub handler {
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['phase']);                                              ['phase']);
     my $phase = "display";      my $phase = 'pickactions';
     if ( exists($env{'form.phase'}) ) {      if ( exists($env{'form.phase'}) ) {
         $phase = $env{'form.phase'};          $phase = $env{'form.phase'};
     }      }
Line 69  sub handler { Line 69  sub handler {
       &Apache::lonnet::get_dom('configuration',['login','rolecolors',        &Apache::lonnet::get_dom('configuration',['login','rolecolors',
                 'quotas','autoenroll','autoupdate','directorysrch',                  'quotas','autoenroll','autoupdate','directorysrch',
                 'usercreation','contacts'],$dom);                  'usercreation','contacts'],$dom);
     my @prefs = (      my @prefs_order = ('rolecolors','login','quotas','autoenroll',
       { text => 'Default color schemes',                         'autoupdate','directorysrch','contacts',
         help => 'Default_Color_Schemes',                         'usercreation');
         action => 'rolecolors',      my %prefs = (
         header => [{col1 => 'Student Settings',          'rolecolors' =>
                     col2 => '',},                     { text => 'Default color schemes',
                    {col1 => 'Coordinator Settings',                       help => 'Default_Color_Schemes',
                     col2 => '',},                       header => [{col1 => 'Student Settings',
                    {col1 => 'Author Settings',                                   col2 => '',},
                     col2 => '',},                                  {col1 => 'Coordinator Settings',
                    {col1 => 'Administrator Settings',                                   col2 => '',},
                     col2 => '',}],                                  {col1 => 'Author Settings',
         },                                   col2 => '',},
       { text => 'Log-in page options',                                  {col1 => 'Administrator Settings',
         help => 'Domain_Log-in_Page',                                   col2 => '',}],
         action => 'login',                      },
         header => [{col1 => 'Item',          'login' =>  
                     col2 => '',}],                      { text => 'Log-in page options',
         },                        help => 'Domain_Log-in_Page',
       { text => 'Default quotas for user portfolios',                        header => [{col1 => 'Item',
         help => 'Default_User_Quota',                                    col2 => '',}],
         action => 'quotas',                      },
         header => [{col1 => 'User type',          'quotas' => 
                     col2 => 'Default quota'}],                      { text => 'Default quotas for user portfolios',
         },                        help => 'Default_User_Quota',
       { text => 'Auto-enrollment settings',                        header => [{col1 => 'User type',
         help => 'Domain_Auto_Enrollment',                                    col2 => 'Default quota'}],
         action => 'autoenroll',                      },
         header => [{col1 => 'Configuration setting',          'autoenroll' =>
                     col2 => 'Value(s)'}],                     { text => 'Auto-enrollment settings',
         },                       help => 'Domain_Auto_Enrollment',
       { text => 'Auto-update settings',                       header => [{col1 => 'Configuration setting',
         help => 'Domain_Auto_Update',                                   col2 => 'Value(s)'}],
         action => 'autoupdate',                     },
         header => [{col1 => 'Setting',          'autoupdate' => 
                     col2 => 'Value',},                     { text => 'Auto-update settings',
                    {col1 => 'User Population',                       help => 'Domain_Auto_Update',
                     col2 => 'Updataeable user data'}],                       header => [{col1 => 'Setting',
         },                                   col2 => 'Value',},
       { text => 'Institutional directory searches',                                  {col1 => 'User Population',
         help => 'Domain_Directory_Search',                                   col2 => 'Updataeable user data'}],
         action => 'directorysrch',                    },
         header => [{col1 => 'Setting',          'directorysrch' => 
                     col2 => 'Value',}],                    { text => 'Institutional directory searches',
         },                      help => 'Domain_Directory_Search',
       { text => 'Contact Information',                      header => [{col1 => 'Setting',
         help => 'Domain_Contact_Information',                                  col2 => 'Value',}],
         action => 'contacts',                    },
         header => [{col1 => 'Setting',          'contacts' =>
                     col2 => 'Value',}],                    { text => 'Contact Information',
         },                      help => 'Domain_Contact_Information',
                       header => [{col1 => 'Setting',
       { text => 'User creation',                                  col2 => 'Value',}],
         help => 'Domain_User_Creation',                    },
         action => 'usercreation',  
         header => [{col1 => 'Setting',          'usercreation' => 
                     col2 => 'Value',},                    { text => 'User creation',
                    {col1 => 'Context',                      help => 'Domain_User_Creation',
                     col2 => 'Assignable Authentication Types'}],                      header => [{col1 => 'Setting',
         },                                  col2 => 'Value',},
                                  {col1 => 'Context',
                                   col2 => 'Assignable Authentication Types'}],
                     },
     );      );
     my @roles = ('student','coordinator','author','admin');      my @roles = ('student','coordinator','author','admin');
       my @actions = &Apache::loncommon::get_env_multiple('form.actions');
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
     ({href=>"javascript:changePage(document.$phase,'display')",      ({href=>"javascript:changePage(document.$phase,'pickactions')",
       text=>"Domain Configuration"});        text=>"Pick functionality"});
     my $confname = $dom.'-domainconfig';      my $confname = $dom.'-domainconfig';
     if ($phase eq 'process') {      if ($phase eq 'process') {
         &Apache::lonhtmlcommon::add_breadcrumb          &Apache::lonhtmlcommon::add_breadcrumb
           ({href=>"javascript:changePage(document.$phase,'$phase')",            ({href=>"javascript:changePage(document.$phase,'display')",
               text=>"Domain Configuration"},
              {href=>"javascript:changePage(document.$phase,'$phase')",
             text=>"Updated"});              text=>"Updated"});
         &print_header($r,$phase);          &print_header($r,$phase);
         foreach my $item (@prefs) {          foreach my $item (@prefs_order) {
             $r->print('<h3>'.&mt($item->{'text'}).'</h3>'.              if (grep(/^\Q$item\E$/,@actions)) {
                       &process_changes($r,$dom,$confname,                  $r->print('<h3>'.&mt($prefs{$item}{'text'}).'</h3>'.
                         $item->{'action'},\@roles,%domconfig));                            &process_changes($r,$dom,$confname,$item,
                             \@roles,%domconfig));
               }
         }          }
         $r->print('<p>');          $r->print('<p>');
         &print_footer($r,$phase,'display','Back to actions menu');          &print_footer($r,$phase,'display','Back to configuration display',
                         \@actions);
         $r->print('</p>');          $r->print('</p>');
       } elsif ($phase eq 'display') {
           &Apache::lonhtmlcommon::add_breadcrumb
               ({href=>"javascript:changePage(document.$phase,'display')",
                 text=>"Domain Configuration"});
           &print_header($r,$phase);
           if (@actions > 0) {
               my $rowsum = 0;
               my (%output,%rowtotal,@items);
               my $halfway = @actions/2;
               foreach my $item (@prefs_order) {
                   if (grep(/^\Q$item\E$/,@actions)) {
                       push(@items,$item);
                       ($output{$item},$rowtotal{$item}) = 
                           &print_config_box($r,$dom,$confname,$phase,
                                             $item,$prefs{$item},
                                             $domconfig{$item});
                       $rowsum += $rowtotal{$item};
                   }
               }
               my $colend;
               my $halfway = $rowsum/2;
               my $aggregate = 0;
               my $sumleft = 0;
               my $sumright = 0;
               my $crossover;
               for (my $i=0; $i<@items; $i++) {
                   $aggregate += $rowtotal{$items[$i]};
                   if ($aggregate > $halfway) {
                       $crossover = $i;
                       last;
                   }
               }
               for (my $i=0; $i<$crossover; $i++) {
                   $sumleft += $rowtotal{$items[$i]}; 
               }
               for (my $i=$crossover+1; $i<@items; $i++) {
                   $sumright += $rowtotal{$items[$i]};
               }
               if ((@items > 1) && ($env{'form.numcols'} == 2)) {
                   my $sumdiff = $sumright - $sumleft;
                   if ($sumdiff > 0) {
                       $colend = $crossover + 1;
                   } else {
                       $colend = $crossover;
                   }
               } else {
                   $colend = @items;
               }
               $r->print('<p><table class="LC_double_column"><tr><td class="LC_left_col">');
               for (my $i=0; $i<$colend; $i++) {
                   $r->print($output{$items[$i]});
               }
               $r->print('</td><td></td><td class="LC_right_col">');
               if ($colend < @items) {
                   for (my $i=$colend; $i<@items; $i++) { 
                       $r->print($output{$items[$i]});
                   }
               }
               $r->print('</td></tr></table></p>');
               $r->print(&print_footer($r,$phase,'process','Save',\@actions));
           } else {
               $r->print('<input type="hidden" name="phase" value="" />'.
                         '<input type="hidden" name="numcols" value="'.
                         $env{'form.numcols'}.'" />'."\n".
                         '<span clas="LC_error">'.&mt('No settings chosen').
                         '</span>');
           }
           $r->print('</form>');
           $r->print(&Apache::loncommon::end_page());
     } else {      } else {
         if ($phase eq '') {          if ($phase eq '') {
             $phase = 'display';              $phase = 'pickactions';
         }          }
         my %helphash;             my %helphash;
         my $numprefs = @prefs;  
         &print_header($r,$phase);          &print_header($r,$phase);
         if (keys(%domconfig) == 0) {          if (keys(%domconfig) == 0) {
             my $primarylibserv = &Apache::lonnet::domain($dom,'primary');              my $primarylibserv = &Apache::lonnet::domain($dom,'primary');
Line 180  sub handler { Line 257  sub handler {
     &mt("Thereafter, (with a Domain Coordinator role selected in the domain) you will be able to update settings when logged in to any server in the LON-CAPA network.").'<br />'.      &mt("Thereafter, (with a Domain Coordinator role selected in the domain) you will be able to update settings when logged in to any server in the LON-CAPA network.").'<br />'.
     &mt("However, you will still need to switch to the domain's primary library server to upload new images or logos.").'<br /><br />');      &mt("However, you will still need to switch to the domain's primary library server to upload new images or logos.").'<br /><br />');
                     if ($switch_server) {                      if ($switch_server) {
                        $r->print($switch_server.' '.&mt('to primary library server for domain: [_1]',$dom));                          $r->print($switch_server.' '.&mt('to primary library server for domain: [_1]',$dom));
                     }                      }
                     return OK;                      return OK;
                 }                  }
             }              }
         }          }
         $r->print('<table border="0" width="100%" cellpadding="2" cellspacing="4"><tr><td align="left" valign="top" width="45%">');          $r->print('<h3>'.&mt('Functionality to display/modify').'</h3>');
         foreach my $item (@prefs) {          $r->print('<script type="text/javascript">'."\n".
             if ($item->{'action'} eq 'login') {                &Apache::loncommon::check_uncheck_jscript()."\n".
                 $r->print('</td><td width="6%">&nbsp;</td><td align="left" valign="top" width="47%">');                '</script>'."\n".'<p><input type="button" value="check all" '.
             }                'onclick="javascript:checkAll(document.pickactions.actions)"'.
             &print_config_box($r,$dom,$confname,$phase,$item->{'action'},                ' />&nbsp;&nbsp;'.
                               $item,$domconfig{$item->{'action'}});                '<input type="button" value="uncheck all" '.
         }                'onclick="javascript:uncheckAll(document.pickactions.actions)"'.
         $r->print('                ' /></p>');
       </td>          foreach my $item (@prefs_order) {
     </tr>              $r->print('<p><label><input type="checkbox" name="actions" value="'.$item.'" />&nbsp;'.$prefs{$item}->{'text'}.'</label></p>');
    </table>');          }
         &print_footer($r,$phase,'process','Save changes');          $r->print('<h3>'.&mt('Display options').'</h3>'."\n".
                     '<p><span class="LC_nobreak">'.&mt('Display using: ')."\n".
                     '<label><input type="radio" name="numcols" value="1">'.
                     &mt('one column').'</label>&nbsp;&nbsp;'.
                     '<input type="radio" name="numcols" value="2">'.
                     &mt('two columns').'</label></span></p>');
           $r->print(&print_footer($r,$phase,'display','Go'));
           $r->print('</form>');
           $r->print(&Apache::loncommon::end_page());
     }      }
     return OK;      return OK;
 }  }
Line 229  sub process_changes { Line 314  sub process_changes {
   
 sub print_config_box {  sub print_config_box {
     my ($r,$dom,$confname,$phase,$action,$item,$settings) = @_;      my ($r,$dom,$confname,$phase,$action,$item,$settings) = @_;
     $r->print('      my $rowtotal = 0;
          <table class="LC_nested_outer">      my $output = 
            '<table class="LC_nested_outer">
           <tr>            <tr>
            <th>'.&mt($item->{text}).'&nbsp;</th></tr>');             <th align="left"><span class="LC_nobreak">'.&mt($item->{text}).
              '&nbsp;</span></th></tr>';
 #   # 
 # FIXME - put the help link back in when the help files exist  # FIXME - put the help link back in when the help files exist
 #           <th>'.&mt($item->{text}).'&nbsp;'.  #           <th>'.&mt($item->{text}).'&nbsp;'.
 #           &Apache::loncommon::help_open_topic($item->{'help'}).'</th>  #           &Apache::loncommon::help_open_topic($item->{'help'}).'</th>
 #          </tr>');  #          </tr>');
       $rowtotal ++;
     if (($action eq 'autoupdate') || ($action eq 'rolecolors') ||       if (($action eq 'autoupdate') || ($action eq 'rolecolors') || 
         ($action eq 'usercreation')) {          ($action eq 'usercreation')) {
         my $colspan = ($action eq 'rolecolors')?' colspan="2"':'';          my $colspan = ($action eq 'rolecolors')?' colspan="2"':'';
         $r->print('          $output .= '
           <tr>            <tr>
            <td>             <td>
             <table class="LC_nested">              <table class="LC_nested">
              <tr class="LC_info_row">               <tr class="LC_info_row">
               <td class="LC_left_item"'.$colspan.'>'.$item->{'header'}->[0]->{'col1'}.'</td>                <td class="LC_left_item"'.$colspan.'>'.$item->{'header'}->[0]->{'col1'}.'</td>
               <td class="LC_right_item">'.$item->{'header'}->[0]->{'col2'}.'</td>                <td class="LC_right_item">'.$item->{'header'}->[0]->{'col2'}.'</td>
              </tr>');               </tr>';
                $rowtotal ++;
         if ($action eq 'autoupdate') {          if ($action eq 'autoupdate') {
             $r->print(&print_autoupdate('top',$dom,$settings));              $output .= &print_autoupdate('top',$dom,$settings,\$rowtotal);
         } elsif ($action eq 'usercreation') {          } elsif ($action eq 'usercreation') {
             $r->print(&print_usercreation('top',$dom,$settings));               $output .= &print_usercreation('top',$dom,$settings,\$rowtotal); 
         } else {          } else {
             $r->print(&print_rolecolors($phase,'student',$dom,$confname,$settings));              $output .= &print_rolecolors($phase,'student',$dom,$confname,$settings,\$rowtotal);
         }          }
         $r->print('          $output .= '
            </table>             </table>
           </td>            </td>
          </tr>           </tr>
Line 266  sub print_config_box { Line 355  sub print_config_box {
              <tr class="LC_info_row">               <tr class="LC_info_row">
               <td class="LC_left_item"'.$colspan.'>'.$item->{'header'}->[1]->{'col1'}.'</td>                <td class="LC_left_item"'.$colspan.'>'.$item->{'header'}->[1]->{'col1'}.'</td>
               <td class="LC_right_item">'.$item->{'header'}->[1]->{'col2'}.'</td>                <td class="LC_right_item">'.$item->{'header'}->[1]->{'col2'}.'</td>
              </tr>');               </tr>';
               $rowtotal ++;
         if ($action eq 'autoupdate') {          if ($action eq 'autoupdate') {
             $r->print(&print_autoupdate('bottom',$dom,$settings));              $output .= &print_autoupdate('bottom',$dom,$settings,\$rowtotal);
         } elsif ($action eq 'usercreation') {          } elsif ($action eq 'usercreation') {
             $r->print(&print_usercreation('bottom',$dom,$settings));              $output .= &print_usercreation('bottom',$dom,$settings,\$rowtotal);
         } else {          } else {
             $r->print(&print_rolecolors($phase,'coordinator',$dom,$confname,$settings).'              $output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).'
            </table>             </table>
           </td>            </td>
          </tr>           </tr>
Line 283  sub print_config_box { Line 373  sub print_config_box {
               <td class="LC_left_item"'.$colspan.'>'.$item->{'header'}->[2]->{'col1'}.'</td>                <td class="LC_left_item"'.$colspan.'>'.$item->{'header'}->[2]->{'col1'}.'</td>
               <td class="LC_right_item">'.$item->{'header'}->[2]->{'col2'}.'</td>                <td class="LC_right_item">'.$item->{'header'}->[2]->{'col2'}.'</td>
              </tr>'.               </tr>'.
             &print_rolecolors($phase,'author',$dom,$confname,$settings).'              &print_rolecolors($phase,'author',$dom,$confname,$settings,\$rowtotal).'
            </table>             </table>
           </td>            </td>
          </tr>           </tr>
Line 294  sub print_config_box { Line 384  sub print_config_box {
               <td class="LC_left_item"'.$colspan.'>'.$item->{'header'}->[3]->{'col1'}.'</td>                <td class="LC_left_item"'.$colspan.'>'.$item->{'header'}->[3]->{'col1'}.'</td>
               <td class="LC_right_item">'.$item->{'header'}->[3]->{'col2'}.'</td>                <td class="LC_right_item">'.$item->{'header'}->[3]->{'col2'}.'</td>
              </tr>'.               </tr>'.
             &print_rolecolors($phase,'admin',$dom,$confname,$settings));              &print_rolecolors($phase,'admin',$dom,$confname,$settings,\$rowtotal);
               $rowtotal += 2;
         }          }
     } else {      } else {
         $r->print('          $output .= '
           <tr>            <tr>
            <td>             <td>
             <table class="LC_nested">              <table class="LC_nested">
              <tr class="LC_info_row">');               <tr class="LC_info_row">';
         if (($action eq 'login') || ($action eq 'directorysrch')) {          if (($action eq 'login') || ($action eq 'directorysrch')) {
             $r->print('                $output .= '  
               <td class="LC_left_item" colspan="2">'.$item->{'header'}->[0]->{'col1'}.'</td>');                <td class="LC_left_item" colspan="2">'.$item->{'header'}->[0]->{'col1'}.'</td>';
         } else {          } else {
             $r->print('              $output .= '
               <td class="LC_left_item">'.$item->{'header'}->[0]->{'col1'}.'</td>');                <td class="LC_left_item">'.$item->{'header'}->[0]->{'col1'}.'</td>';
         }          }
         $r->print('          $output .= '
               <td class="LC_right_item">'.$item->{'header'}->[0]->{'col2'}.'</td>                <td class="LC_right_item">'.$item->{'header'}->[0]->{'col2'}.'</td>
              </tr>');               </tr>';
           $rowtotal ++;      
         if ($action eq 'login') {          if ($action eq 'login') {
             $r->print(&print_login($dom,$confname,$phase,$settings));              $output .= &print_login($dom,$confname,$phase,$settings,\$rowtotal);
         } elsif ($action eq 'quotas') {          } elsif ($action eq 'quotas') {
             $r->print(&print_quotas($dom,$settings));              $output .= &print_quotas($dom,$settings,\$rowtotal);
         } elsif ($action eq 'autoenroll') {          } elsif ($action eq 'autoenroll') {
             $r->print(&print_autoenroll($dom,$settings));              $output .= &print_autoenroll($dom,$settings,\$rowtotal);
         } elsif ($action eq 'directorysrch') {          } elsif ($action eq 'directorysrch') {
             $r->print(&print_directorysrch($dom,$settings));              $output .= &print_directorysrch($dom,$settings,\$rowtotal);
         } elsif ($action eq 'contacts') {          } elsif ($action eq 'contacts') {
             $r->print(&print_contacts($dom,$settings));              $output .= &print_contacts($dom,$settings,\$rowtotal);
         }          }
     }      }
     $r->print('      $output .= '
    </table>     </table>
   </td>    </td>
  </tr>   </tr>
 </table><br />');  </table><br />';
     return;      return ($output,$rowtotal);
 }  }
   
 sub print_header {  sub print_header {
     my ($r,$phase) = @_;      my ($r,$phase) = @_;
       my $alert = &mt('You must select at least one functionality type to display.'); 
     my $js = '      my $js = '
 <script type="text/javascript">  <script type="text/javascript">
 function changePage(formname,newphase) {  function changePage(formname,newphase) {
     formname.phase.value = newphase;      formname.phase.value = newphase;
       numchecked = 0;
       if (formname == document.pickactions) {
           if (formname.actions.length > 0) {
               for (var i = 0; i <formname.actions.length; i++) {
                   if (formname.actions[i].checked) {
                       numchecked ++;
                   }
               }
           } else {
               if (formname.actions.checked) {
                   numchecked ++;
               }
           }
           if (numchecked > 0) {
               formname.submit();
           } else {
               alert("'.$alert.'");
               return;
           }
       }
     formname.submit();      formname.submit();
 }  }'."\n";
 '.      if ($phase eq 'pickactions') {
 &color_pick_js().'          $js .= 
               &Apache::lonhtmlcommon::set_form_elements({actions => 'checkbox',numcols => 'radio',})."\n".
               &javascript_set_colnums();
       } elsif ($phase eq 'display') {
           $js .= &color_pick_js()."\n";
       }
       $js .= &Apache::lonhtmlcommon::javascript_window_dims().'
 </script>  </script>
 ';  ';
       my $additem;
       if ($phase eq 'pickactions') {
           my %loaditems = (
                       'onload' => "javascript:;getDimensions(document.$phase.width,document.$phase.height);setDisplayColumns();setFormElements(document.pickactions);",
                           );
           $additem = {'add_entries' => \%loaditems,};
       } else {
           my %loaditems = (
                       'onload' => "javascript:getDimensions(document.$phase.width,document.$phase.height)",
                           );
           $additem = {'add_entries' => \%loaditems,};
       }
     $r->print(&Apache::loncommon::start_page('View/Modify Domain Settings',      $r->print(&Apache::loncommon::start_page('View/Modify Domain Settings',
                                            $js));                                             $js,$additem));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Domain Settings'));      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Domain Settings'));
     $r->print('      $r->print('
 <form name="parmform" action="">  <form name="parmform" action="">
Line 360  function changePage(formname,newphase) { Line 491  function changePage(formname,newphase) {
 }  }
   
 sub print_footer {  sub print_footer {
     my ($r,$phase,$newphase,$button_text) = @_;      my ($r,$phase,$newphase,$button_text,$actions) = @_;
     $button_text = &mt($button_text);      $button_text = &mt($button_text);
     $r->print('<input type="hidden" name="phase" value="" />');      $r->print('<input type="hidden" name="phase" value="" />'.
                 '<input type="hidden" name="width" value="'.
                 $env{'form.width'}.'" />'.
                 '<input type="hidden" name="height" value="'.
                 $env{'form.height'}.'" />');
       if (($phase eq 'display') || ($phase eq 'process')) {
           if (ref($actions) eq 'ARRAY') {
               foreach my $item (@{$actions}) {
                   $r->print('<input type="hidden" name="actions" value="'.$item.'" />')."\n";
               }
           }
           $r->print('<input type="hidden" name="numcols" value="'.$env{'form.numcols'}.'" />');
       }
     my $dest='"javascript:changePage(document.'.$phase.','."'$newphase'".')"';      my $dest='"javascript:changePage(document.'.$phase.','."'$newphase'".')"';
     if ($phase eq 'process') {      if ($phase eq 'process') {
         $r->print('<a href='.$dest.'>'.$button_text.'</a>');          $r->print('<p><a href='.$dest.'>'.$button_text.'</a></p>');
     } else {      } else {
         $r->print('<input type="button" name="store" value="'.          my $onclick;
                   $button_text.'" onclick='.$dest.' />');          if ($phase eq 'display') {
               $onclick = '"javascript:changePage(document.'.$phase.','."'$newphase'".')"';
           } else {
               $onclick = '"javascript:changePage(document.'.$phase.','."'$newphase'".')"';
           } 
           $r->print('<p><input type="button" name="store" value="'.
                     $button_text.'" onclick='.$onclick.' /></p>');
       }
       if ($phase eq 'process') {
           $r->print('</form>'.&Apache::loncommon::end_page());
     }      }
     $r->print('</form>');  
     $r->print('<br />'.&Apache::loncommon::end_page());  
     return;      return;
 }  }
   
 sub print_login {  sub print_login {
     my ($dom,$confname,$phase,$settings) = @_;      my ($dom,$confname,$phase,$settings,$rowtotal) = @_;
     my %choices = &login_choices();      my %choices = &login_choices();
     my ($catalogon,$catalogoff,$adminmailon,$adminmailoff);      my ($catalogon,$catalogoff,$adminmailon,$adminmailoff);
     $catalogon = ' checked="checked" ';      $catalogon = ' checked="checked" ';
Line 477  sub print_login { Line 627  sub print_login {
         '<label><input type="radio" name="adminmail"'.          '<label><input type="radio" name="adminmail"'.
         $adminmailoff.'value="0" />'.&mt('No').'</label></span></td></tr>';          $adminmailoff.'value="0" />'.&mt('No').'</label></span></td></tr>';
     $itemcount ++;      $itemcount ++;
     $datatable .= &display_color_options($dom,$confname,$phase,'login',$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text);      $datatable .= &display_color_options($dom,$confname,$phase,'login',$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text,$rowtotal);
     $datatable .= '</tr></table></td></tr>';      $datatable .= '</tr></table></td></tr>';
     return $datatable;      return $datatable;
 }  }
Line 504  sub login_choices { Line 654  sub login_choices {
 }  }
   
 sub print_rolecolors {  sub print_rolecolors {
     my ($phase,$role,$dom,$confname,$settings) = @_;      my ($phase,$role,$dom,$confname,$settings,$rowtotal) = @_;
     my %choices = &color_font_choices();      my %choices = &color_font_choices();
     my @bgs = ('pgbg','tabbg','sidebg');      my @bgs = ('pgbg','tabbg','sidebg');
     my @links = ('link','alink','vlink');      my @links = ('link','alink','vlink');
Line 570  sub print_rolecolors { Line 720  sub print_rolecolors {
         }          }
     }      }
     my $itemcount = 1;      my $itemcount = 1;
     my $datatable = &display_color_options($dom,$confname,$phase,$role,$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text);      my $datatable = &display_color_options($dom,$confname,$phase,$role,$itemcount,\%choices,\%is_custom,\%defaults,\%designs,\@images,\@bgs,\@links,\%alt_text,$rowtotal);
     $datatable .= '</tr></table></td></tr>';      $datatable .= '</tr></table></td></tr>';
     return $datatable;      return $datatable;
 }  }
   
 sub display_color_options {  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) = @_;          $images,$bgs,$links,$alt_text,$rowtotal) = @_;
     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'.$css_class.'>'.
         '<td>'.$choices->{'font'}.'</td>';          '<td>'.$choices->{'font'}.'</td>';
     if (!$is_custom->{'font'}) {      if (!$is_custom->{'font'}) {
         $datatable .=  '<td>'.&mt('Default in use:').'&nbsp;'.$defaults->{'font'}.'</td>';          $datatable .=  '<td>'.&mt('Default in use:').'&nbsp;<span id="css_default_'.$role.'_font" style="color: '.$defaults->{'font'}.';">'.$defaults->{'font'}.'</span></td>';
     } else {      } else {
         $datatable .= '<td>&nbsp;</td>';          $datatable .= '<td>&nbsp;</td>';
     }      }
Line 590  sub display_color_options { Line 740  sub display_color_options {
     $datatable .= '<td><span class="LC_nobreak">'.      $datatable .= '<td><span class="LC_nobreak">'.
                   '<input type="text" size="10" name="'.$role.'_font"'.                    '<input type="text" size="10" name="'.$role.'_font"'.
                   ' value="'.$designs->{'font'}.'" />&nbsp;'.$fontlink.                    ' value="'.$designs->{'font'}.'" />&nbsp;'.$fontlink.
                     '&nbsp;<span id="css_'.$role.'_font" style="background-color: '.
                     $designs->{'font'}.';">&nbsp;&nbsp;&nbsp;</span>'.
                   '</span></td></tr>';                    '</span></td></tr>';
     my $switchserver = &check_switchserver($dom,$confname);      my $switchserver = &check_switchserver($dom,$confname);
     foreach my $img (@{$images}) {      foreach my $img (@{$images}) {
Line 685  sub display_color_options { Line 837  sub display_color_options {
     my $bgs_def;      my $bgs_def;
     foreach my $item (@{$bgs}) {      foreach my $item (@{$bgs}) {
         if (!$is_custom->{$item}) {          if (!$is_custom->{$item}) {
             $bgs_def .= '<td>'.$choices->{$item}.'<br />'.$defaults->{'bgs'}{$item}.'</td>';              $bgs_def .= '<td>'.$choices->{$item}.'&nbsp;<span id="css_default_'.$role.'_'.$item.'" style="background-color: '.$defaults->{'bgs'}{$item}.';">&nbsp;&nbsp;&nbsp;</span><br />'.$defaults->{'bgs'}{$item}.'</td>';
         }          }
     }      }
     if ($bgs_def) {      if ($bgs_def) {
Line 699  sub display_color_options { Line 851  sub display_color_options {
         my $link = &color_pick($phase,$role,$item,$choices->{$item},$designs->{'bgs'}{$item});          my $link = &color_pick($phase,$role,$item,$choices->{$item},$designs->{'bgs'}{$item});
         $datatable .= '<td align="center">'.$link;          $datatable .= '<td align="center">'.$link;
         if ($designs->{'bgs'}{$item}) {          if ($designs->{'bgs'}{$item}) {
             $datatable .= '<span style="background-color:'.$designs->{'bgs'}{$item}.'width: 10px">&nbsp;</span>';              $datatable .= '&nbsp;<span id="css_'.$role.'_'.$item.'" style="background-color: '.$designs->{'bgs'}{$item}.';">&nbsp;&nbsp;&nbsp;</span>';
         }          }
         $datatable .= '<br /><input type="text" size="8" name="'.$role.'_'.$item.'" value="'.$designs->{'bgs'}{$item}.          $datatable .= '<br /><input type="text" size="8" name="'.$role.'_'.$item.'" value="'.$designs->{'bgs'}{$item}.
                       '" /></td>';                        '" onblur = "javascript:document.display.css_'.$role.'_'.$item.'.style.background-color = document.display.'.$role.'_'.$item.'.value;"/></td>';
     }      }
     $datatable .= '</tr></table></td></tr>';      $datatable .= '</tr></table></td></tr>';
     $itemcount ++;      $itemcount ++;
Line 712  sub display_color_options { Line 864  sub display_color_options {
     my $links_def;      my $links_def;
     foreach my $item (@{$links}) {      foreach my $item (@{$links}) {
         if (!$is_custom->{$item}) {          if (!$is_custom->{$item}) {
             $links_def .= '<td>'.$choices->{$item}.'<br />'.$defaults->{'links'}{$item}.'</td>';              $links_def .= '<td>'.$choices->{$item}.'<br /><span id="css_default_'.$role.'_'.$item.'" style="color: '.$defaults->{'links'}{$item}.';">'.$defaults->{'links'}{$item}.'</span></td>';
         }          }
     }      }
     if ($links_def) {      if ($links_def) {
Line 723  sub display_color_options { Line 875  sub display_color_options {
     $datatable .= '<td class="LC_right_item">'.      $datatable .= '<td class="LC_right_item">'.
                   '<table border="0"><tr>';                    '<table border="0"><tr>';
     foreach my $item (@{$links}) {      foreach my $item (@{$links}) {
         $datatable .= '<td align="center">';          $datatable .= '<td align="center">'."\n".
         my $link = &color_pick($phase,$role,$item,$choices->{$item},$designs->{'links'}{$item});                        &color_pick($phase,$role,$item,$choices->{$item},
                                     $designs->{'links'}{$item});
         if ($designs->{'links'}{$item}) {          if ($designs->{'links'}{$item}) {
             $datatable.='<span style="color: '.$designs->{'links'}{$item}.';">'.              $datatable.='&nbsp;<span id="css_'.$role.'_'.$item.'" style="background-color: '.$designs->{'links'}{$item}.';">&nbsp;&nbsp;&nbsp;</span>';
                         $link.'</span>';  
         } else {  
             $datatable .= $link;  
         }          }
         $datatable .= '<br /><input type="text" size="8" name="'.$role.'_'.$item.'" value="'.$designs->{'links'}{$item}.          $datatable .= '<br /><input type="text" size="8" name="'.$role.'_'.$item.'" value="'.$designs->{'links'}{$item}.
                       '" /></td>';                        '" /></td>';
     }      }
       $$rowtotal += $itemcount;
     return $datatable;      return $datatable;
 }  }
   
Line 773  ENDCOL Line 924  ENDCOL
 }  }
   
 sub print_quotas {  sub print_quotas {
     my ($dom,$settings) = @_;      my ($dom,$settings,$rowtotal) = @_;
     my $datatable;      my $datatable;
     my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);      my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
     my $typecount = 0;      my $typecount = 0;
Line 805  sub print_quotas { Line 956  sub print_quotas {
                   '<td class="LC_right_item"><span class="LC_nobreak">'.                    '<td class="LC_right_item"><span class="LC_nobreak">'.
                   '<input type="text" name="defaultquota" value="'.                    '<input type="text" name="defaultquota" value="'.
                   $defaultquota.'" size="5" /> Mb</span></td></tr>';                    $defaultquota.'" size="5" /> Mb</span></td></tr>';
       $$rowtotal += $typecount;
     return $datatable;      return $datatable;
 }  }
   
 sub print_autoenroll {  sub print_autoenroll {
     my ($dom,$settings) = @_;      my ($dom,$settings,$rowtotal) = @_;
     my $autorun = &Apache::lonnet::auto_run(undef,$dom),      my $autorun = &Apache::lonnet::auto_run(undef,$dom),
     my ($defdom,$runon,$runoff);      my ($defdom,$runon,$runoff);
     if (ref($settings) eq 'HASH') {      if (ref($settings) eq 'HASH') {
Line 858  sub print_autoenroll { Line 1010  sub print_autoenroll {
                   $settings->{'sender_uname'}.                    $settings->{'sender_uname'}.
                   '" size="10" />&nbsp;&nbsp;'.&mt('domain').                    '" size="10" />&nbsp;&nbsp;'.&mt('domain').
                   ':&nbsp;'.$domform.'</span></td></tr>';                    ':&nbsp;'.$domform.'</span></td></tr>';
       $$rowtotal += 2;
     return $datatable;      return $datatable;
 }  }
   
 sub print_autoupdate {  sub print_autoupdate {
     my ($position,$dom,$settings) = @_;      my ($position,$dom,$settings,$rowtotal) = @_;
     my $datatable;      my $datatable;
     if ($position eq 'top') {      if ($position eq 'top') {
         my $updateon = ' ';          my $updateon = ' ';
Line 898  sub print_autoupdate { Line 1051  sub print_autoupdate {
                   '<label><input type="radio" name="classlists"'.                    '<label><input type="radio" name="classlists"'.
                   $classlistsoff.'value="0" />'.&mt('No').'</label></span></td>'.                    $classlistsoff.'value="0" />'.&mt('No').'</label></span></td>'.
                   '</tr>';                    '</tr>';
           $$rowtotal += 2;
     } else {      } else {
         my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);          my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
         my @fields = ('lastname','firstname','middlename','gen',          my @fields = ('lastname','firstname','middlename','gen',
Line 916  sub print_autoupdate { Line 1070  sub print_autoupdate {
                 $datatable =                   $datatable = 
                     &usertype_update_row($settings,$usertypes,\%fieldtitles,                      &usertype_update_row($settings,$usertypes,\%fieldtitles,
                                          \@fields,$types,\$numrows);                                           \@fields,$types,\$numrows);
                       $$rowtotal += @{$types}; 
             }              }
         }          }
         $datatable .=           $datatable .= 
             &usertype_update_row($settings,{'default' => $othertitle},              &usertype_update_row($settings,{'default' => $othertitle},
                                  \%fieldtitles,\@fields,['default'],                                   \%fieldtitles,\@fields,['default'],
                                  \$numrows);                                   \$numrows);
           $$rowtotal ++;     
     }      }
     return $datatable;      return $datatable;
 }  }
   
 sub print_directorysrch {  sub print_directorysrch {
     my ($dom,$settings) = @_;      my ($dom,$settings,$rowtotal) = @_;
     my $srchon = ' ';      my $srchon = ' ';
     my $srchoff = ' checked="checked" ';      my $srchoff = ' checked="checked" ';
     my ($exacton,$containson,$beginson);      my ($exacton,$containson,$beginson);
Line 969  sub print_directorysrch { Line 1125  sub print_directorysrch {
     my $numinrow = 4;      my $numinrow = 4;
     my $cansrchrow = 0;      my $cansrchrow = 0;
     my $datatable='<tr class="LC_odd_row">'.      my $datatable='<tr class="LC_odd_row">'.
                   '<td colspan="2">'.&mt('Directory search available?').'</td>'.                    '<td colspan="2"><span class ="LC_nobreak">'.&mt('Directory search available?').'</span></td>'.
                   '<td class="LC_right_item"><span class="LC_nobreak"><label>'.                    '<td class="LC_right_item"><span class="LC_nobreak"><label>'.
                   '<input type="radio" name="dirsrch_available"'.                    '<input type="radio" name="dirsrch_available"'.
                   $srchon.' value="1" />'.&mt('Yes').'</label>&nbsp;'.                    $srchon.' value="1" />'.&mt('Yes').'</label>&nbsp;'.
                   '<label><input type="radio" name="dirsrch_available"'.                    '<label><input type="radio" name="dirsrch_available"'.
                   $srchoff.' value="0" />'.&mt('No').'</label></span></td>'.                    $srchoff.' value="0" />'.&mt('No').'</label></span></td>'.
                   '</tr><tr>'.                    '</tr><tr>'.
                   '<td colspan="2">'.&mt('Other domains can search?').'</td>'.                    '<td colspan="2"><span class ="LC_nobreak">'.&mt('Other domains can search?').'</span></td>'.
                   '<td class="LC_right_item"><span class="LC_nobreak"><label>'.                    '<td class="LC_right_item"><span class="LC_nobreak"><label>'.
                   '<input type="radio" name="dirsrch_localonly"'.                    '<input type="radio" name="dirsrch_localonly"'.
                   $localoff.' value="0" />'.&mt('Yes').'</label>&nbsp;'.                    $localoff.' value="0" />'.&mt('Yes').'</label>&nbsp;'.
                   '<label><input type="radio" name="dirsrch_localonly"'.                    '<label><input type="radio" name="dirsrch_localonly"'.
                   $localon.' value="1" />'.&mt('No').'</label></span></td>'.                    $localon.' value="1" />'.&mt('No').'</label></span></td>'.
                   '</tr>';                    '</tr>';
       $$rowtotal += 2;
     if (ref($usertypes) eq 'HASH') {      if (ref($usertypes) eq 'HASH') {
         if (keys(%{$usertypes}) > 0) {          if (keys(%{$usertypes}) > 0) {
             $datatable .= &users_cansearch_row($settings,$types,$usertypes,$dom,              $datatable .= &users_cansearch_row($settings,$types,$usertypes,$dom,
Line 991  sub print_directorysrch { Line 1148  sub print_directorysrch {
         }          }
     }      }
     if ($cansrchrow) {      if ($cansrchrow) {
           $$rowtotal ++;
         $datatable .= '<tr>';          $datatable .= '<tr>';
     } else {      } else {
         $datatable .= '<tr class="LC_odd_row">';          $datatable .= '<tr class="LC_odd_row">';
     }      }
     $datatable .= '<td>'.&mt('Supported search methods').      $datatable .= '<td><span class ="LC_nobreak">'.&mt('Supported search methods').
                   '</td><td class="LC_left_item" colspan="2"><table><tr>';                    '</span></td><td class="LC_left_item" colspan="2"><table><tr>';
     foreach my $title (@{$titleorder}) {      foreach my $title (@{$titleorder}) {
         if (defined($searchtitles->{$title})) {          if (defined($searchtitles->{$title})) {
             my $check = ' ';              my $check = ' ';
Line 1013  sub print_directorysrch { Line 1171  sub print_directorysrch {
         }          }
     }      }
     $datatable .= '</tr></table></td></tr>';      $datatable .= '</tr></table></td></tr>';
       $$rowtotal ++;
     if ($cansrchrow) {      if ($cansrchrow) {
         $datatable .= '<tr class="LC_odd_row">';          $datatable .= '<tr class="LC_odd_row">';
     } else {      } else {
         $datatable .= '<tr>';          $datatable .= '<tr>';
     }      }
     $datatable .= '<td>'.&mt('Search latitude').'</td>'.         $datatable .= '<td><span class ="LC_nobreak">'.&mt('Search latitude').'</span></td>'.   
                   '<td class="LC_left_item" colspan="2">'.                    '<td class="LC_left_item" colspan="2">'.
                   '<span class="LC_nobreak"><label>'.                    '<span class="LC_nobreak"><label>'.
                   '<input type="checkbox" name="searchtypes" '.                    '<input type="checkbox" name="searchtypes" '.
Line 1030  sub print_directorysrch { Line 1189  sub print_directorysrch {
                   '<label><input type="checkbox" name="searchtypes" '.                    '<label><input type="checkbox" name="searchtypes" '.
                   $containson.' value="contains" />'.&mt('Contains').                    $containson.' value="contains" />'.&mt('Contains').
                   '</label></span></td></tr>';                    '</label></span></td></tr>';
       $$rowtotal ++;
     return $datatable;      return $datatable;
 }  }
   
 sub print_contacts {  sub print_contacts {
     my ($dom,$settings) = @_;      my ($dom,$settings,$rowtotal) = @_;
     my $datatable;      my $datatable;
     my @contacts = ('adminemail','supportemail');      my @contacts = ('adminemail','supportemail');
     my (%checked,%to,%otheremails);      my (%checked,%to,%otheremails);
Line 1076  sub print_contacts { Line 1236  sub print_contacts {
         } else {          } else {
             $css_class = ' class="LC_odd_row" ';              $css_class = ' class="LC_odd_row" ';
         }          }
         $datatable .= '<tr'.$css_class.' ">'.           $datatable .= '<tr'.$css_class.'>'. 
                   '<td>'.$titles->{$item}.'</td>'.                    '<td><span class="LC_nobreak">'.$titles->{$item}.
                   '<td class="LC_right_item">'.                    '</span></td><td class="LC_right_item">'.
                   '<input type="text" name="'.$item.'" value="'.                    '<input type="text" name="'.$item.'" value="'.
                   $to{$item}.'" /></td></tr>';                    $to{$item}.'" /></td></tr>';
         $rownum ++;          $rownum ++;
Line 1090  sub print_contacts { Line 1250  sub print_contacts {
             $css_class = ' class="LC_odd_row" ';              $css_class = ' class="LC_odd_row" ';
         }          }
         $datatable .= '<tr'.$css_class.'>'.          $datatable .= '<tr'.$css_class.'>'.
                       '<td>'.$titles->{$type}.': </td>'.                        '<td><span class="LC_nobreak">'.
                         $titles->{$type}.': </span></td>'.
                       '<td class="LC_left_item">'.                        '<td class="LC_left_item">'.
                       '<span class="LC_nobreak">';                        '<span class="LC_nobreak">';
         foreach my $item (@contacts) {          foreach my $item (@contacts) {
Line 1106  sub print_contacts { Line 1267  sub print_contacts {
                       '</td></tr>'."\n";                        '</td></tr>'."\n";
         $rownum ++;          $rownum ++;
     }      }
       $$rowtotal += $rownum;
     return $datatable;      return $datatable;
 }  }
   
Line 1125  sub contact_titles { Line 1287  sub contact_titles {
 }  }
   
 sub print_usercreation {  sub print_usercreation {
     my ($position,$dom,$settings) = @_;      my ($position,$dom,$settings,$rowtotal) = @_;
     my $numinrow = 4;      my $numinrow = 4;
     my $rowcount = 0;  
     my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($dom);      my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($dom);
     my $datatable;      my $datatable;
     my %lt = &Apache::lonlocal::texthash (      my %lt = &Apache::lonlocal::texthash (
Line 1145  sub print_usercreation { Line 1306  sub print_usercreation {
             }              }
         }          }
         $datatable = '<tr class="LC_odd_row">'.          $datatable = '<tr class="LC_odd_row">'.
                      '<td>'.$lt{'nondc'}.'</td>'.                       '<td><span class="LC_nobreak">'.$lt{'nondc'}.
                      '<td class="LC_left_item"><table>';                       '</span></td><td class="LC_left_item"><table>';
         foreach my $item ('author','course') {          foreach my $item ('author','course') {
             $datatable .= '<tr><td><span class="LC_nobreak"><label>'.              $datatable .= '<tr><td><span class="LC_nobreak"><label>'.
                           '<input type="checkbox" name="can_createuser" '.                            '<input type="checkbox" name="can_createuser" '.
Line 1154  sub print_usercreation { Line 1315  sub print_usercreation {
                           $lt{$item}.'</label><span></td></tr>';                            $lt{$item}.'</label><span></td></tr>';
         }          }
         $datatable .= '</table></td></tr>';          $datatable .= '</table></td></tr>';
         $rowcount ++;          $$rowtotal ++;
         if (ref($rules) eq 'HASH') {          if (ref($rules) eq 'HASH') {
             if (keys(%{$rules}) > 0) {              if (keys(%{$rules}) > 0) {
                 $datatable .= &username_formats_row($settings,$rules,                  $datatable .= &username_formats_row($settings,$rules,
                                                     $ruleorder,$numinrow);                                                      $ruleorder,$numinrow);
                 $rowcount ++;                  $$rowtotal ++;
             }              }
         }          }
     } else {      } else {
Line 1190  sub print_usercreation { Line 1351  sub print_usercreation {
             } else {              } else {
                 $css_class = ' class="LC_odd_row" ';                  $css_class = ' class="LC_odd_row" ';
             }              }
             $datatable .=   '<tr'.$css_class.'">'.              $datatable .=   '<tr'.$css_class.'>'.
                             '<td>'.$title{$item}.                              '<td>'.$title{$item}.
                             '</td><td class="LC_left_item">'.                              '</td><td class="LC_left_item">'.
                             '<span class="LC_nobreak">';                              '<span class="LC_nobreak">';
Line 1203  sub print_usercreation { Line 1364  sub print_usercreation {
             $datatable .= '</span></td></tr>';              $datatable .= '</span></td></tr>';
             $rownum ++;              $rownum ++;
         }          }
           $$rowtotal += $rownum;
     }      }
     return $datatable;      return $datatable;
 }  }
Line 1210  sub print_usercreation { Line 1372  sub print_usercreation {
 sub username_formats_row {  sub username_formats_row {
     my ($settings,$rules,$ruleorder,$numinrow) = @_;      my ($settings,$rules,$ruleorder,$numinrow) = @_;
     my $output =  '<tr>'.      my $output =  '<tr>'.
                   '<td>'.&mt('Format rules to check for new usernames: ').                    '<td><span class="LC_nobreak">'.
                   '</td><td class="LC_left_item" colspan="2"><table>';                    &mt('Format rules to check for new usernames: ').
                     '</span></td>'.
                     '<td class="LC_left_item" colspan="2"><table>';
     my $rem;      my $rem;
     if (ref($ruleorder) eq 'ARRAY') {      if (ref($ruleorder) eq 'ARRAY') {
         for (my $i=0; $i<@{$ruleorder}; $i++) {          for (my $i=0; $i<@{$ruleorder}; $i++) {
Line 2009  sub check_switchserver { Line 2173  sub check_switchserver {
     return $switchserver;      return $switchserver;
 }  }
   
   sub javascript_set_colnums {
       return <<END;
   function setDisplayColumns() {
       if (document.pickactions.width.value > 1100) {
           document.pickactions.numcols[1].checked = true;
       } else {
           document.pickactions.numcols[0].checked = true;
       }
   }
   END
   }
   
 sub modify_quotas {  sub modify_quotas {
     my ($dom,%domconfig) = @_;      my ($dom,%domconfig) = @_;
     my ($resulttext,%changes);      my ($resulttext,%changes);

Removed from v.1.29  
changed lines
  Added in v.1.30


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