Diff for /loncom/interface/domainprefs.pm between versions 1.15 and 1.27

version 1.15, 2007/05/27 16:31:54 version 1.27, 2007/09/12 12:01:04
Line 67  sub handler { Line 67  sub handler {
     }      }
     my %domconfig =      my %domconfig =
       &Apache::lonnet::get_dom('configuration',['login','rolecolors',        &Apache::lonnet::get_dom('configuration',['login','rolecolors',
                                'quotas','autoenroll','autoupdate'],$dom);                  'quotas','autoenroll','autoupdate','directorysrch',
                   'usercreation'],$dom);
     my @prefs = (      my @prefs = (
       { text => 'Default color schemes',        { text => 'Default color schemes',
         help => 'Default_Color_Schemes',          help => 'Default_Color_Schemes',
Line 106  sub handler { Line 107  sub handler {
                     col2 => 'Value',},                      col2 => 'Value',},
                    {col1 => 'User Population',                     {col1 => 'User Population',
                     col2 => 'Updataeable user data'}],                      col2 => 'Updataeable user data'}],
       },          },
         { text => 'Institutional directory searches',
           help => 'Domain_Directory_Search',
           action => 'directorysrch',
           header => [{col1 => 'Setting',
                       col2 => 'Value',}],
           },
         { text => 'User creation',
           help => 'Domain_User_Creation',
           action => 'usercreation',
           header => [{col1 => 'Setting',
                       col2 => 'Value',}],
           },
     );      );
     my @roles = ('student','coordinator','author','admin');      my @roles = ('student','coordinator','author','admin');
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
Line 133  sub handler { Line 146  sub handler {
         my %helphash;             my %helphash;   
         my $numprefs = @prefs;          my $numprefs = @prefs;
         &print_header($r,$phase);          &print_header($r,$phase);
           if (keys(%domconfig) == 0) {
               my $primarylibserv = &Apache::lonnet::domain($dom,'primary');
               my $perlvarref = &LONCAPA::Configuration::read_conf('loncapa.conf');
               my $hostid = $perlvarref->{'lonHostID'};
               if ($hostid ne $primarylibserv) {
                   my %designhash = &Apache::loncommon::get_domainconf($dom);
                   my @loginimages = ('img','logo','domlogo');
                   my $custom_img_count = 0;
                   foreach my $img (@loginimages) {
                       if ($designhash{$dom.'.login.'.$img} ne '') {
                           $custom_img_count ++;
                       }
                   }
                   foreach my $role (@roles) {
                       if ($designhash{$dom.'.'.$role.'.img'} ne '') {
                           $custom_img_count ++;
                       }
                   }
                   if ($custom_img_count > 0) {
                       my $switch_server = &check_switchserver($dom,$confname);
                       $r->print(&mt('Domain configuration settings have yet to be saved for this domain via the web-based domain preferences interface.').'<br />'.&mt("While this remains so, you must switch to the domain's primary library server in order to update settings.").'<br /><br />'.&mt("Thereafter, you will be able to update settings from this screen when logged in to any server in the LON-CAPA network (with a DC role selected in the domain), although you will still need to switch to the domain's primary library server to upload new images or logos.").'<br /><br />'.$switch_server.' '.&mt('to primary library server for domain: [_1]',$dom));
                       return OK;
                   }
               }
           }
         $r->print('<table border="0" width="100%" cellpadding="2" cellspacing="4"><tr><td align="left" valign="top" width="45%">');          $r->print('<table border="0" width="100%" cellpadding="2" cellspacing="4"><tr><td align="left" valign="top" width="45%">');
         foreach my $item (@prefs) {          foreach my $item (@prefs) {
             if ($item->{'action'} eq 'login') {              if ($item->{'action'} eq 'login') {
Line 164  sub process_changes { Line 202  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 'directorysrch') {
           $output = &modify_directorysrch($dom,%domconfig);
       } elsif ($action eq 'usercreation') {
           $output = &modify_user_creation($dom,%domconfig);
     }      }
     return $output;      return $output;
 }  }
Line 173  sub print_config_box { Line 215  sub print_config_box {
     $r->print('      $r->print('
          <table class="LC_nested_outer">           <table class="LC_nested_outer">
           <tr>            <tr>
            <th>'.&mt($item->{text}).'&nbsp;'.             <th>'.&mt($item->{text}).'&nbsp;</th></tr>');
            &Apache::loncommon::help_open_topic($item->{'help'}).'</th>  # 
           </tr>');  # FIXME - put the help link back in when the help files exist
   #           <th>'.&mt($item->{text}).'&nbsp;'.
   #           &Apache::loncommon::help_open_topic($item->{'help'}).'</th>
   #          </tr>');
     if (($action eq 'autoupdate') || ($action eq 'rolecolors')) {      if (($action eq 'autoupdate') || ($action eq 'rolecolors')) {
         my $colspan = ($action eq 'rolecolors')?' colspan="2"':'';          my $colspan = ($action eq 'rolecolors')?' colspan="2"':'';
         $r->print('          $r->print('
Line 235  sub print_config_box { Line 280  sub print_config_box {
            <td>             <td>
             <table class="LC_nested">              <table class="LC_nested">
              <tr class="LC_info_row">');               <tr class="LC_info_row">');
         if ($action eq 'login') {          if (($action eq 'login') || ($action eq 'directorysrch')) {
             $r->print('                $r->print('  
               <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 {
Line 251  sub print_config_box { Line 296  sub print_config_box {
            $r->print(&print_quotas($dom,$settings));             $r->print(&print_quotas($dom,$settings));
         } elsif ($action eq 'autoenroll') {          } elsif ($action eq 'autoenroll') {
            $r->print(&print_autoenroll($dom,$settings));             $r->print(&print_autoenroll($dom,$settings));
         }            } elsif ($action eq 'directorysrch') {
              $r->print(&print_directorysrch($dom,$settings));
           } elsif ($action eq 'usercreation') {
              $r->print(&print_usercreation($dom,$settings));
           }
     }      }
     $r->print('      $r->print('
    </table>     </table>
Line 522  sub display_color_options { Line 571  sub display_color_options {
                   '</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}) {
         $itemcount ++;   $itemcount ++;
         $css_class = $itemcount%2?' class="LC_odd_row"':'';          $css_class = $itemcount%2?' class="LC_odd_row"':'';
         $datatable .= '<tr'.$css_class.'>'.          $datatable .= '<tr'.$css_class.'>'.
                       '<td>'.$choices->{$img}.'</td>';                        '<td>'.$choices->{$img}.'</td>';
         my $imgfile;          my ($imgfile, $img_import);
         if ($designs->{$img} ne '') {          if ($designs->{$img} ne '') {
             $imgfile = $designs->{$img};              $imgfile = $designs->{$img};
       $img_import = ($imgfile =~ m{^/adm/});
         } else {          } else {
             $imgfile = $defaults->{$img};              $imgfile = $defaults->{$img};
         }          }
Line 550  sub display_color_options { Line 600  sub display_color_options {
                     $showfile = '';                      $showfile = '';
                 }                  }
             } elsif ($imgfile =~ m-^/(adm/[^/]+)/([^/]+)$-) {              } elsif ($imgfile =~ m-^/(adm/[^/]+)/([^/]+)$-) {
                   $showfile = $imgfile;
                 my $imgdir = $1;                  my $imgdir = $1;
                 my $filename = $2;                  my $filename = $2;
                 if (-e "/home/httpd/html/$imgdir/tn-".$filename) {                  if (-e "/home/httpd/html/$imgdir/tn-".$filename) {
Line 559  sub display_color_options { Line 610  sub display_color_options {
                     my $output = '/home/httpd/html/'.$imgdir.'/tn-'.$filename;                      my $output = '/home/httpd/html/'.$imgdir.'/tn-'.$filename;
                     if (!-e $output) {                      if (!-e $output) {
                         my ($width,$height) = &thumb_dimensions();                          my ($width,$height) = &thumb_dimensions();
                         my $size = $width.'x'.$height;                          my ($fullwidth,$fullheight) = &check_dimensions($input);
                         system("convert -sample $size $input $output");                          if ($fullwidth ne '' && $fullheight ne '') {
                               if ($fullwidth > $width && $fullheight > $height) { 
                                   my $size = $width.'x'.$height;
                                   system("convert -sample $size $input $output");
                                   $showfile = '/'.$imgdir.'/tn-'.$filename;
                               }
                           }
                     }                      }
                     $showfile = '/'.$imgdir.'/tn-'.$filename;  
                 }                  }
             }               }
             if ($showfile) {              if ($showfile) {
                 $showfile = &Apache::loncommon::lonhttpdurl($showfile);                  $showfile = &Apache::loncommon::lonhttpdurl($showfile);
                 $fullsize =  &Apache::loncommon::lonhttpdurl($imgfile);                  $fullsize =  &Apache::loncommon::lonhttpdurl($imgfile);
Line 572  sub display_color_options { Line 628  sub display_color_options {
                 if (!$is_custom->{$img}) {                  if (!$is_custom->{$img}) {
                     $datatable .= &mt('Default in use:').'<br />';                      $datatable .= &mt('Default in use:').'<br />';
                 }                  }
    if ($img_import) {
       $datatable.= '<input type="hidden" name="'.$role.'_import_'.$img.'" value="'.$imgfile.'" />';
    }
                 $datatable.= '<a href="'.$fullsize.'" target="_blank"><img src="'.                  $datatable.= '<a href="'.$fullsize.'" target="_blank"><img src="'.
                              $showfile.'" alt="'.$alt_text->{$img}.                               $showfile.'" alt="'.$alt_text->{$img}.
                              '" border="0" /></a></td>';                               '" border="0" /></a></td>';
Line 694  ENDCOL Line 753  ENDCOL
 sub print_quotas {  sub print_quotas {
     my ($dom,$settings) = @_;      my ($dom,$settings) = @_;
     my $datatable;      my $datatable;
     my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom);      my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
     my $othertitle = "All users";  
     my @types;  
     if (ref($order) eq 'ARRAY') {  
         @types = @{$order};  
     }  
     if (@types == 0) {  
         if (ref($usertypes) eq 'HASH') {  
             @types = sort(keys(%{$usertypes}));  
         }  
     }  
     my $typecount = 0;      my $typecount = 0;
     my $css_class;      my $css_class;
     if (@types > 0) {      if (ref($types) eq 'ARRAY') {
         foreach my $type (@types) {          foreach my $type (@{$types}) {
             if (defined($usertypes->{$type})) {              if (defined($usertypes->{$type})) {
                 $typecount ++;                  $typecount ++;
                 $css_class = $typecount%2?' class="LC_odd_row"':'';                  $css_class = $typecount%2?' class="LC_odd_row"':'';
Line 720  sub print_quotas { Line 769  sub print_quotas {
                               '" size="5" /> Mb</span></td></tr>';                                '" size="5" /> Mb</span></td></tr>';
             }              }
         }          }
         $othertitle = "Other users";  
     }      }
     my $defaultquota = '20';      my $defaultquota = '20';
     if (ref($settings) eq 'HASH') {      if (ref($settings) eq 'HASH') {
Line 731  sub print_quotas { Line 779  sub print_quotas {
     $typecount ++;      $typecount ++;
     $css_class = $typecount%2?' class="LC_odd_row"':'';      $css_class = $typecount%2?' class="LC_odd_row"':'';
     $datatable .= '<tr'.$css_class.'>'.      $datatable .= '<tr'.$css_class.'>'.
                   '<td>'.&mt($othertitle).'</td>'.                    '<td>'.$othertitle.'</td>'.
                   '<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>';
Line 740  sub print_quotas { Line 788  sub print_quotas {
   
 sub print_autoenroll {  sub print_autoenroll {
     my ($dom,$settings) = @_;      my ($dom,$settings) = @_;
     my $defdom = $dom;  
     my $autorun = &Apache::lonnet::auto_run(undef,$dom),      my $autorun = &Apache::lonnet::auto_run(undef,$dom),
     my ($runon,$runoff);      my ($defdom,$runon,$runoff);
     if (ref($settings) eq 'HASH') {      if (ref($settings) eq 'HASH') {
         if (exists($settings->{'run'})) {          if (exists($settings->{'run'})) {
             if ($settings->{'run'} eq '0') {              if ($settings->{'run'} eq '0') {
Line 830  sub print_autoupdate { Line 877  sub print_autoupdate {
                   $classlistsoff.'value="0" />'.&mt('No').'</label></span></td>'.                    $classlistsoff.'value="0" />'.&mt('No').'</label></span></td>'.
                   '</tr>';                    '</tr>';
     } else {      } else {
         my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom);          my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
         my @types;          my @fields = ('lastname','firstname','middlename','gen',
         if (ref($order) eq 'ARRAY') {                        'permanentemail','id');
             @types = @{$order};  
         }  
         if (@types == 0) {  
             if (ref($usertypes) eq 'HASH') {  
                 @types = sort(keys(%{$usertypes}));  
             }  
         }  
         my $othertitle = &mt('All users');  
         if (keys(%{$usertypes}) > 0) {  
             $othertitle = &mt('Other users');  
         }  
         my @fields = ('lastname','firstname','middlename','gen','email','id');  
         my %fieldtitles = &Apache::lonlocal::texthash (          my %fieldtitles = &Apache::lonlocal::texthash (
                             id => 'Student/Employee ID',                              id => 'Student/Employee ID',
                             email => 'E-mail address',                              permanentemail => 'E-mail address',
                             lastname => 'Last Name',                              lastname => 'Last Name',
                             firstname => 'First Name',                              firstname => 'First Name',
                             middlename => 'Middle Name',                              middlename => 'Middle Name',
                             gen => 'Generation',                              gen => 'Generation',
                       );                        );
         my $numrows = 0;          my $numrows = 0;
         if (@types > 0) {          if (ref($types) eq 'ARRAY') {
             $datatable =               if (@{$types} > 0) {
                 &usertype_update_row($settings,$usertypes,\%fieldtitles,                  $datatable = 
                                      \@fields,\@types,\$numrows);                      &usertype_update_row($settings,$usertypes,\%fieldtitles,
                                            \@fields,$types,\$numrows);
               }
         }          }
         $datatable .=           $datatable .= 
             &usertype_update_row($settings,{'default' => $othertitle},              &usertype_update_row($settings,{'default' => $othertitle},
Line 867  sub print_autoupdate { Line 904  sub print_autoupdate {
     return $datatable;      return $datatable;
 }  }
   
   sub print_directorysrch {
       my ($dom,$settings) = @_;
       my $srchon = ' ';
       my $srchoff = ' checked="checked" ';
       my ($exacton,$containson,$beginson);
       my $localon = ' ';
       my $localoff = ' checked="checked" ';
       if (ref($settings) eq 'HASH') {
           if ($settings->{'available'} eq '1') {
               $srchon = $srchoff;
               $srchoff = ' ';
           }
           if ($settings->{'localonly'} eq '1') {
               $localon = $localoff;
               $localoff = ' ';
           }
           if (ref($settings->{'searchtypes'}) eq 'ARRAY') {
               foreach my $type (@{$settings->{'searchtypes'}}) {
                   if ($type eq 'exact') {
                       $exacton = ' checked="checked" ';
                   } elsif ($type eq 'contains') {
                       $containson = ' checked="checked" ';
                   } elsif ($type eq 'begins') {
                       $beginson = ' checked="checked" ';
                   }
               }
           } else {
               if ($settings->{'searchtypes'} eq 'exact') {
                   $exacton = ' checked="checked" ';
               } elsif ($settings->{'searchtypes'} eq 'contains') {
                   $containson = ' checked="checked" ';
               } elsif ($settings->{'searchtypes'} eq 'specify') {
                   $exacton = ' checked="checked" ';
                   $containson = ' checked="checked" ';
               }
           }
       }
       my ($searchtitles,$titleorder) = &sorted_searchtitles();
       my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
   
       my $numinrow = 4;
       my $cansrchrow = 0;
       my $datatable='<tr class="LC_odd_row">'.
                     '<td colspan="2">'.&mt('Directory search available?').'</td>'.
                     '<td class="LC_right_item"><span class="LC_nobreak"><label>'.
                     '<input type="radio" name="dirsrch_available"'.
                     $srchon.' value="1" />'.&mt('Yes').'</label>&nbsp;'.
                     '<label><input type="radio" name="dirsrch_available"'.
                     $srchoff.' value="0" />'.&mt('No').'</label></span></td>'.
                     '</tr><tr>'.
                     '<td colspan="2">'.&mt('Other domains can search?').'</td>'.
                     '<td class="LC_right_item"><span class="LC_nobreak"><label>'.
                     '<input type="radio" name="dirsrch_localonly"'.
                     $localoff.' value="0" />'.&mt('Yes').'</label>&nbsp;'.
                     '<label><input type="radio" name="dirsrch_localonly"'.
                     $localon.' value="1" />'.&mt('No').'</label></span></td>'.
                     '</tr>';
       if (ref($usertypes) eq 'HASH') {
           if (keys(%{$usertypes}) > 0) {
               $datatable .= &users_cansearch_row($settings,$types,$usertypes,$dom,
                                                  $numinrow,$othertitle);
               $cansrchrow = 1;
           }
       }
       if ($cansrchrow) {
           $datatable .= '<tr>';
       } else {
           $datatable .= '<tr class="LC_odd_row">';
       }
       $datatable .= '<td>'.&mt('Supported search methods').
                     '</td><td class="LC_left_item" colspan="2"><table><tr>';
       foreach my $title (@{$titleorder}) {
           if (defined($searchtitles->{$title})) {
               my $check = ' ';
               if (ref($settings->{'searchby'}) eq 'ARRAY') {
                   if (grep(/^\Q$title\E$/,@{$settings->{'searchby'}})) {
                       $check = ' checked="checked" ';
                   }
               }
               $datatable .= '<td class="LC_left_item">'.
                             '<span class="LC_nobreak"><label>'.
                             '<input type="checkbox" name="searchby" '.
                             'value="'.$title.'"'.$check.'/>'.
                             $searchtitles->{$title}.'</label></span></td>';
           }
       }
       $datatable .= '</tr></table></td></tr>';
       if ($cansrchrow) {
           $datatable .= '<tr class="LC_odd_row">';
       } else {
           $datatable .= '<tr>';
       }
       $datatable .= '<td>'.&mt('Search latitude').'</td>'.   
                     '<td class="LC_left_item" colspan="2">'.
                     '<span class="LC_nobreak"><label>'.
                     '<input type="checkbox" name="searchtypes" '.
                     $exacton.' value="exact" />'.&mt('Exact match').
                     '</label>&nbsp;'.
                     '<label><input type="checkbox" name="searchtypes" '.
                     $beginson.' value="begins" />'.&mt('Begins with').
                     '</label>&nbsp;'.
                     '<label><input type="checkbox" name="searchtypes" '.
                     $containson.' value="contains" />'.&mt('Contains').
                     '</label></span></td></tr>';
       return $datatable;
   }
   
   sub print_usercreation {
       my ($dom,$settings) = @_;
       my $numinrow = 4;
       my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($dom);
       my %checked;
       if (ref($settings) eq 'HASH') {
           if (ref($settings->{'cancreate'}) eq 'ARRAY') {
               foreach my $item (@{$settings->{'cancreate'}}) { 
                   $checked{$item} = ' checked="checked" ';
               }
           }
       }
       my $datatable = '<td>'.&mt('User creation other than by DC: ').'</td>'.
                       '<td class="LC_left_item"><table><tr><td>'.
                       '<span class="LC_nobreak"><label>'.
                       '<input type="checkbox" name="can_createuser" '.
                       $checked{'author'}.' value="author" />'.
                       &mt('When adding a co-author/assistant author').
               '</label><span></td></tr>'.
                       '<tr><td>'.
                       '<span class="LC_nobreak"><label>'.
                       '<input type="checkbox" name="can_createuser" '.
                       $checked{'course'}.' value="course" />'.
                       &mt('When adding users to a course').
                       '</label><span></td></tr></table></td></tr>';
       if (ref($rules) eq 'HASH') {
           if (keys(%{$rules}) > 0) {
               $datatable .= &username_formats_row($settings,$rules,$ruleorder,
                                                   $numinrow);
           }
       }
       return $datatable;
   }
   
   sub username_formats_row {
       my ($settings,$rules,$ruleorder,$numinrow) = @_;
       my $output =  '<tr class="LC_odd_row">'.
                     '<td>'.&mt('Format rules to check for new usernames').
                     '</td><td class="LC_left_item" colspan="2"><table>';
       my $rem;
       if (ref($ruleorder) eq 'ARRAY') {
           for (my $i=0; $i<@{$ruleorder}; $i++) {
               if (ref($rules->{$ruleorder->[$i]}) eq 'HASH') {
                   my $rem = $i%($numinrow);
                   if ($rem == 0) {
                       if ($i > 0) {
                           $output .= '</tr>';
                       }
                       $output .= '<tr>';
                   }
                   my $check = ' ';
                   if (ref($settings->{'username_rule'}) eq 'ARRAY') {
                       if (grep(/^\Q$ruleorder->[$i]\E$/,@{$settings->{'username_rule'}})) {
                           $check = ' checked="checked" ';
                       }
                   }
                   $output .= '<td class="LC_left_item">'.
                              '<span class="LC_nobreak"><label>'.
                              '<input type="checkbox" name="username_rule" '.
                              'value="'.$ruleorder->[$i].'"'.$check.'/>'.
                              $rules->{$ruleorder->[$i]}{'name'}.'</label></span></td>';
               }
           }
           $rem = @{$ruleorder}%($numinrow);
       }
       my $colsleft = $numinrow - $rem;
       if ($colsleft > 1 ) {
           $output .= '<td colspan="'.$colsleft.'" class="LC_left_item">'.
                      '&nbsp;</td>';
       } elsif ($colsleft == 1) {
           $output .= '<td class="LC_left_item">&nbsp;</td>';
       }
       $output .= '</tr></table></td></tr>';
       return $output;
   }
   
   sub users_cansearch_row {
       my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle) = @_;
       my $output =  '<tr class="LC_odd_row">'.
                     '<td>'.&mt('Users allowed to search').' ('.$dom.')'.
                     '</td><td class="LC_left_item" colspan="2"><table>';
       my $rem;
       if (ref($types) eq 'ARRAY') {
           for (my $i=0; $i<@{$types}; $i++) {
               if (defined($usertypes->{$types->[$i]})) {
                   my $rem = $i%($numinrow);
                   if ($rem == 0) {
                       if ($i > 0) {
                           $output .= '</tr>';
                       }
                       $output .= '<tr>';
                   }
                   my $check = ' ';
                   if (ref($settings->{'cansearch'}) eq 'ARRAY') {
                       if (grep(/^\Q$types->[$i]\E$/,@{$settings->{'cansearch'}})) {
                           $check = ' checked="checked" ';
                       }
                   }
                   $output .= '<td class="LC_left_item">'.
                              '<span class="LC_nobreak"><label>'.
                              '<input type="checkbox" name="cansearch" '.
                              'value="'.$types->[$i].'"'.$check.'/>'.
                              $usertypes->{$types->[$i]}.'</label></span></td>';
               }
           }
          
           $rem = @{$types}%($numinrow);
       }
       my $colsleft = $numinrow - $rem;
       if ($colsleft > 1) {
           $output .= '<td colspan="'.$colsleft.'" class="LC_left_item">';
       } else {
           $output .= '<td class="LC_left_item">';
       }
       my $defcheck = ' ';
       if (ref($settings->{'cansearch'}) eq 'ARRAY') {
           if (grep(/^default$/,@{$settings->{'cansearch'}})) {
               $defcheck = ' checked="checked" ';
           }
       }
       $output .= '<span class="LC_nobreak"><label>'.
                  '<input type="checkbox" name="cansearch" '.
                  'value="default"'.$defcheck.'/>'.
                  $othertitle.'</label></span></td>'.
                  '</tr></table></td></tr>';
       return $output;
   }
   
   sub sorted_inst_types {
       my ($dom) = @_;
       my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom);
       my $othertitle = &mt('All users');
       my @types;
       if (ref($order) eq 'ARRAY') {
           @types = @{$order};
       }
       if (@types == 0) {
           if (ref($usertypes) eq 'HASH') {
               @types = sort(keys(%{$usertypes}));
           }
       }
       if (keys(%{$usertypes}) > 0) {
           $othertitle = &mt('Other users');
       }
       return ($othertitle,$usertypes,\@types);
   }
   
   sub sorted_searchtitles {
       my %searchtitles = &Apache::lonlocal::texthash(
                            'uname' => 'username',
                            'lastname' => 'last name',
                            'lastfirst' => 'last name, first name',
                        );
       my @titleorder = ('uname','lastname','lastfirst');
       return (\%searchtitles,\@titleorder);
   }
   
   sub sorted_searchtypes {
       my %srchtypes_desc = (
                              exact    => 'is exact match',
                              contains => 'contains ..',
                              begins   => 'begins with ..',
                            );
       my @srchtypeorder = ('exact','begins','contains');
       return (\%srchtypes_desc,\@srchtypeorder);
   }
   
 sub usertype_update_row {  sub usertype_update_row {
     my ($settings,$usertypes,$fieldtitles,$fields,$types,$rownums) = @_;      my ($settings,$usertypes,$fieldtitles,$fields,$types,$rownums) = @_;
     my $datatable;      my $datatable;
Line 1047  sub modify_colors { Line 1358  sub modify_colors {
         }          }
         my ($width,$height) = &thumb_dimensions();          my ($width,$height) = &thumb_dimensions();
         foreach my $img (@images) {          foreach my $img (@images) {
       if ( ! $env{'form.'.$role.'_'.$img.'.filename'} 
    && !defined($domconfig->{$role}{$img})
    && !$env{'form.'.$role.'_del_'.$img}
    && $env{'form.'.$role.'_import_'.$img}) {
    # import the old configured image from the .tab setting
    # if they haven't provided a new one 
    $domconfig->{$role}{$img} = 
       $env{'form.'.$role.'_import_'.$img};
       }
             if ($env{'form.'.$role.'_'.$img.'.filename'} ne '') {              if ($env{'form.'.$role.'_'.$img.'.filename'} ne '') {
                 my $error;                  my $error;
                 if ($configuserok eq 'ok') {                  if ($configuserok eq 'ok') {
Line 1086  sub modify_colors { Line 1406  sub modify_colors {
                                             $dom,$confname,$img,$width,$height);                                              $dom,$confname,$img,$width,$height);
                                 if ($result eq 'ok') {                                  if ($result eq 'ok') {
                                     $confhash->{$role}{$img} = $logourl;                                      $confhash->{$role}{$img} = $logourl;
       $changes{$role}{'images'}{$img} = 1;
                                 }                                  }
                             }                              }
                         }                          }
Line 1237  sub thumb_dimensions { Line 1558  sub thumb_dimensions {
     return ('200','50');      return ('200','50');
 }  }
   
   sub check_dimensions {
       my ($inputfile) = @_;
       my ($fullwidth,$fullheight);
       if ($inputfile =~ m|^[/\w.\-]+$|) {
           if (open(PIPE,"identify $inputfile 2>&1 |")) {
               my $imageinfo = <PIPE>;
               if (!close(PIPE)) {
                   &Apache::lonnet::logthis("Failed to close PIPE opened to retrieve image information for $inputfile");
               }
               chomp($imageinfo);
               my ($fullsize) = 
                   ($imageinfo =~ /^\Q$inputfile\E\s+\w+\s+(\d+x\d+)/);
               if ($fullsize) {
                   ($fullwidth,$fullheight) = split(/x/,$fullsize);
               }
           }
       }
       return ($fullwidth,$fullheight);
   }
   
 sub check_configuser {  sub check_configuser {
     my ($uhome,$dom,$confname,$servadm) = @_;      my ($uhome,$dom,$confname,$servadm) = @_;
     my ($configuserok,%currroles);      my ($configuserok,%currroles);
Line 1369  $env{'user.name'}.':'.$env{'user.domain' Line 1710  $env{'user.name'}.':'.$env{'user.domain'
             if (($thumbwidth =~ /^\d+$/) && ($thumbheight =~ /^\d+$/)) {              if (($thumbwidth =~ /^\d+$/) && ($thumbheight =~ /^\d+$/)) {
                 my $inputfile = $filepath.'/'.$file;                  my $inputfile = $filepath.'/'.$file;
                 my $outfile = $filepath.'/'.'tn-'.$file;                  my $outfile = $filepath.'/'.'tn-'.$file;
                 my $thumbsize = $thumbwidth.'x'.$thumbheight;                  my ($fullwidth,$fullheight) = &check_dimensions($inputfile);
                 system("convert -sample $thumbsize $inputfile $outfile");                  if ($fullwidth ne '' && $fullheight ne '') { 
                 chmod(0660, $filepath.'/tn-'.$file);                      if ($fullwidth > $thumbwidth && $fullheight > $thumbheight) {
                 if (-e $outfile) {                          my $thumbsize = $thumbwidth.'x'.$thumbheight;
                     my $copyfile=$targetdir.'/tn-'.$file;                          system("convert -sample $thumbsize $inputfile $outfile");
                     if (copy($outfile,$copyfile)) {                          chmod(0660, $filepath.'/tn-'.$file);
                         print $logfile "\nCopied source to ".$copyfile."\n";                          if (-e $outfile) {
                         &write_metadata($dom,$confname,$formname,$targetdir,                              my $copyfile=$targetdir.'/tn-'.$file;
                                         'tn-'.$file,$logfile);                              if (copy($outfile,$copyfile)) {
                     } else {                                  print $logfile "\nCopied source to ".$copyfile."\n";
                         print $logfile "\nUnable to write ".$copyfile.':'.$!."\n";                                  &write_metadata($dom,$confname,$formname,
                                                   $targetdir,'tn-'.$file,$logfile);
                               } else {
                                   print $logfile "\nUnable to write ".$copyfile.
                                                  ':'.$!."\n";
                               }
                           }
                     }                      }
                 }                  }
             }              }
Line 1483  sub check_switchserver { Line 1830  sub check_switchserver {
 sub modify_quotas {  sub modify_quotas {
     my ($dom,%domconfig) = @_;      my ($dom,%domconfig) = @_;
     my ($resulttext,%changes);      my ($resulttext,%changes);
     my ($usertypes,$order) =       my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
         &Apache::lonnet::retrieve_inst_usertypes($dom);  
     my %formhash;      my %formhash;
     foreach my $key (keys(%env)) {      foreach my $key (keys(%env)) {
         if ($key =~ /^form\.quota_(.+)$/) {          if ($key =~ /^form\.quota_(.+)$/) {
Line 1518  sub modify_quotas { Line 1864  sub modify_quotas {
     if ($putresult eq 'ok') {      if ($putresult eq 'ok') {
         if (keys(%changes) > 0) {          if (keys(%changes) > 0) {
             $resulttext = &mt('Changes made:').'<ul>';              $resulttext = &mt('Changes made:').'<ul>';
             foreach my $item (sort(keys(%changes))) {              foreach my $type (@{$types},'default') {
                 $resulttext .= '<li>'.&mt('[_1] set to [_2] Mb',$usertypes->{$item},$formhash{$item}).'</li>';                  if (defined($changes{$type})) { 
                       my $typetitle = $usertypes->{$type};
                       if ($type eq 'default') {
                           $typetitle = $othertitle;
                       }
                       $resulttext .= '<li>'.&mt('[_1] set to [_2] Mb',$typetitle,$formhash{$type}).'</li>';
                   }
             }              }
             $resulttext .= '</ul>';              $resulttext .= '</ul>';
         } else {          } else {
Line 1545  sub modify_autoenroll { Line 1897  sub modify_autoenroll {
     my %title = ( run => 'Auto-enrollment active',      my %title = ( run => 'Auto-enrollment active',
                   sender => 'Sender for notification messages');                    sender => 'Sender for notification messages');
     my @offon = ('off','on');      my @offon = ('off','on');
       my $sender_uname = $env{'form.sender_uname'};
       my $sender_domain = $env{'form.sender_domain'};
       if ($sender_domain eq '') {
           $sender_uname = '';
       } elsif ($sender_uname eq '') {
           $sender_domain = '';
       }
     my %autoenrollhash =  (      my %autoenrollhash =  (
                        autoenroll => { run => $env{'form.autoenroll_run'},                         autoenroll => { run => $env{'form.autoenroll_run'},
                                        sender_uname => $env{'form.sender_uname'},                                         sender_uname => $sender_uname,
                                        sender_domain => $env{'form.sender_domain'},                                         sender_domain => $sender_domain,
   
                                 }                                  }
                      );                       );
Line 1561  sub modify_autoenroll { Line 1920  sub modify_autoenroll {
              }               }
         } elsif ($autorun) {          } elsif ($autorun) {
             if ($env{'form.autoenroll_run'} ne '1') {              if ($env{'form.autoenroll_run'} ne '1') {
                 $changes{'run'} = 1;                   $changes{'run'} = 1;
             }              }
         }          }
         if (exists($currautoenroll{sender_uname})) {          if ($currautoenroll{'sender_uname'} ne $sender_uname) {
             if ($currautoenroll{'sender_uname'} ne $env{'form.sender_uname'}) {  
                 $changes{'sender'} = 1;  
             }  
         } else {  
             $changes{'sender'} = 1;              $changes{'sender'} = 1;
         }          }
         if (exists($currautoenroll{sender_domain})) {          if ($currautoenroll{'sender_domain'} ne $sender_domain) {
             if ($currautoenroll{'sender_domain'} ne $env{'form.sender_domain'}) {  
                 $changes{'sender'} = 1;  
             }  
         } else {  
             $changes{'sender'} = 1;              $changes{'sender'} = 1;
         }          }
         if (keys(%changes) > 0) {          if (keys(%changes) > 0) {
Line 1584  sub modify_autoenroll { Line 1935  sub modify_autoenroll {
                 $resulttext .= '<li>'.&mt("$title{'run'} set to $offon[$env{'form.autoenroll_run'}]").'</li>';                  $resulttext .= '<li>'.&mt("$title{'run'} set to $offon[$env{'form.autoenroll_run'}]").'</li>';
             }              }
             if ($changes{'sender'}) {              if ($changes{'sender'}) {
                 $resulttext .= '<li>'.&mt("$title{'sender'} set to [_1]",$env{'form.sender_uname'}.':'.$env{'form.sender_domain'}).'</li>';                  if ($sender_uname eq '' || $sender_domain eq '') {
                       $resulttext .= '<li>'.&mt("$title{'sender'} set to default (course owner).").'</li>';
                   } else {
                       $resulttext .= '<li>'.&mt("$title{'sender'} set to [_1]",$sender_uname.':'.$sender_domain).'</li>';
                   }
             }              }
             $resulttext .= '</ul>';              $resulttext .= '</ul>';
         } else {          } else {
Line 1610  sub modify_autoupdate { Line 1965  sub modify_autoupdate {
                    run => 'Auto-update:',                     run => 'Auto-update:',
                    classlists => 'Updates to user information in classlists?'                     classlists => 'Updates to user information in classlists?'
                 );                  );
     my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom);      my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
     my %fieldtitles = &Apache::lonlocal::texthash (      my %fieldtitles = &Apache::lonlocal::texthash (
                         id => 'Student/Employee ID',                          id => 'Student/Employee ID',
                         email => 'E-mail address',                          permanentemail => 'E-mail address',
                         lastname => 'Last Name',                          lastname => 'Last Name',
                         firstname => 'First Name',                          firstname => 'First Name',
                         middlename => 'Middle Name',                          middlename => 'Middle Name',
Line 1621  sub modify_autoupdate { Line 1976  sub modify_autoupdate {
                       );                        );
     my $othertitle = &mt('All users');      my $othertitle = &mt('All users');
     if (keys(%{$usertypes}) >  0) {      if (keys(%{$usertypes}) >  0) {
         $othertitle = "Other users";          $othertitle = &mt('Other users');
     }      }
     foreach my $key (keys(%env)) {      foreach my $key (keys(%env)) {
         if ($key =~ /^form\.updateable_(.+)_([^_]+)$/) {          if ($key =~ /^form\.updateable_(.+)_([^_]+)$/) {
Line 1643  sub modify_autoupdate { Line 1998  sub modify_autoupdate {
             }              }
         } elsif ($key eq 'fields') {          } elsif ($key eq 'fields') {
             if (ref($currautoupdate{$key}) eq 'HASH') {              if (ref($currautoupdate{$key}) eq 'HASH') {
                 foreach my $item (keys(%{$currautoupdate{$key}})) {                  foreach my $item (@{$types},'default') {
                     if (ref($currautoupdate{$key}{$item}) eq 'ARRAY') {                      if (ref($currautoupdate{$key}{$item}) eq 'ARRAY') {
                         my $change = 0;                          my $change = 0;
                         foreach my $type (@{$currautoupdate{$key}{$item}}) {                          foreach my $type (@{$currautoupdate{$key}{$item}}) {
                             if (!exists($fields{$item})) {                              if (!exists($fields{$item})) {
                                 $change = 1;                                  $change = 1;
                             } elsif (ref($fields{$item}) eq 'ARRAY') {                              } elsif (ref($fields{$item}) eq 'ARRAY') {
                                 if (!grep/^\Q$type\E$/,@{$fields{$item}}) {                                  if (!grep(/^\Q$type\E$/,@{$fields{$item}})) {
                                     $change = 1;                                      $change = 1;
                                 }                                  }
                             }                              }
Line 1658  sub modify_autoupdate { Line 2013  sub modify_autoupdate {
                         if ($change) {                          if ($change) {
                             push(@{$changes{$key}},$item);                              push(@{$changes{$key}},$item);
                         }                          }
                     }                      } 
                 }                  }
             }              }
         }          }
     }      }
     foreach my $key (keys(%fields)) {      foreach my $item (@{$types},'default') {
         if (ref($currautoupdate{'fields'}) eq 'HASH') {          if (defined($fields{$item})) {
             if (!exists($currautoupdate{'fields'}{$key})) {              if (ref($currautoupdate{'fields'}) eq 'HASH') {
                 push(@{$changes{'fields'}},$key);                  if (!exists($currautoupdate{'fields'}{$item})) {
                       push(@{$changes{'fields'}},$item);
                   }
               } else {
                   push(@{$changes{'fields'}},$item);
             }              }
         } else {  
             push(@{$changes{'fields'}},$key);  
         }          }
     }      }
     my $putresult = &Apache::lonnet::put_dom('configuration',\%updatehash,      my $putresult = &Apache::lonnet::put_dom('configuration',\%updatehash,
Line 1691  sub modify_autoupdate { Line 2048  sub modify_autoupdate {
                             $newvaluestr = &mt('none');                              $newvaluestr = &mt('none');
                         }                          }
                         if ($item eq 'default') {                          if ($item eq 'default') {
                             $resulttext .= '<li>'.&mt("Updates for $othertitle set to: [_1]",$newvaluestr).'</li>';                              $resulttext .= '<li>'.&mt("Updates for '[_1]' set to: '[_2]'",$othertitle,$newvaluestr).'</li>';
                         } else {                          } else {
                             $resulttext .= '<li>'.&mt("Updates for [_1] set to: [_2]",$usertypes->{$item},$newvaluestr).'</li>';                              $resulttext .= '<li>'.&mt("Updates for '[_1]' set to: '[_2]'",$usertypes->{$item},$newvaluestr).'</li>';
                         }                          }
                     }                      }
                 } else {                  } else {
Line 1717  sub modify_autoupdate { Line 2074  sub modify_autoupdate {
     return $resulttext;      return $resulttext;
 }  }
   
 1;  sub modify_directorysrch {
       my ($dom,%domconfig) = @_;
       my ($resulttext,%changes);
       my %currdirsrch;
       if (ref($domconfig{'directorysrch'}) eq 'HASH') {
           foreach my $key (keys(%{$domconfig{'directorysrch'}})) {
               $currdirsrch{$key} = $domconfig{'directorysrch'}{$key};
           }
       }
       my %title = ( available => 'Directory search available',
                     localonly => 'Other domains can search',
                     searchby => 'Search types',
                     searchtypes => 'Search latitude');
       my @offon = ('off','on');
       my @otherdoms = ('Yes','No');
   
       my @searchtypes = &Apache::loncommon::get_env_multiple('form.searchtypes');  
       my @cansearch = &Apache::loncommon::get_env_multiple('form.cansearch');
       my @searchby = &Apache::loncommon::get_env_multiple('form.searchby');
   
       my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
       if (keys(%{$usertypes}) == 0) {
           @cansearch = ('default');
       } else {
           if (ref($currdirsrch{'cansearch'}) eq 'ARRAY') {
               foreach my $type (@{$currdirsrch{'cansearch'}}) {
                   if (!grep(/^\Q$type\E$/,@cansearch)) {
                       push(@{$changes{'cansearch'}},$type);
                   }
               }
               foreach my $type (@cansearch) {
                   if (!grep(/^\Q$type\E$/,@{$currdirsrch{'cansearch'}})) {
                       push(@{$changes{'cansearch'}},$type);
                   }
               }
           } else {
               push(@{$changes{'cansearch'}},@cansearch);
           }
       }
   
       if (ref($currdirsrch{'searchby'}) eq 'ARRAY') {
           foreach my $by (@{$currdirsrch{'searchby'}}) {
               if (!grep(/^\Q$by\E$/,@searchby)) {
                   push(@{$changes{'searchby'}},$by);
               }
           }
           foreach my $by (@searchby) {
               if (!grep(/^\Q$by\E$/,@{$currdirsrch{'searchby'}})) {
                   push(@{$changes{'searchby'}},$by);
               }
           }
       } else {
           push(@{$changes{'searchby'}},@searchby);
       }
   
       if (ref($currdirsrch{'searchtypes'}) eq 'ARRAY') {
           foreach my $type (@{$currdirsrch{'searchtypes'}}) {
               if (!grep(/^\Q$type\E$/,@searchtypes)) {
                   push(@{$changes{'searchtypes'}},$type);
               }
           }
           foreach my $type (@searchtypes) {
               if (!grep(/^\Q$type\E$/,@{$currdirsrch{'searchtypes'}})) {
                   push(@{$changes{'searchtypes'}},$type);
               }
           }
       } else {
           if (exists($currdirsrch{'searchtypes'})) {
               foreach my $type (@searchtypes) {  
                   if ($type ne $currdirsrch{'searchtypes'}) { 
                       push(@{$changes{'searchtypes'}},$type);
                   }
               }
               if (!grep(/^\Q$currdirsrch{'searchtypes'}\E/,@searchtypes)) {
                   push(@{$changes{'searchtypes'}},$currdirsrch{'searchtypes'});
               }   
           } else {
               push(@{$changes{'searchtypes'}},@searchtypes); 
           }
       }
   
       my %dirsrch_hash =  (
               directorysrch => { available => $env{'form.dirsrch_available'},
                                  cansearch => \@cansearch,
                                  localonly => $env{'form.dirsrch_localonly'},
                                  searchby => \@searchby,
                                  searchtypes => \@searchtypes,
                                }
               );
       my $putresult = &Apache::lonnet::put_dom('configuration',\%dirsrch_hash,
                                                $dom);
       if ($putresult eq 'ok') {
           if (exists($currdirsrch{'available'})) {
                if ($currdirsrch{'available'} ne $env{'form.dirsrch_available'}) {
                    $changes{'available'} = 1;
                }
           } else {
               if ($env{'form.dirsrch_available'} eq '1') {
                   $changes{'available'} = 1;
               }
           }
           if (exists($currdirsrch{'localonly'})) {
                if ($currdirsrch{'localonly'} ne $env{'form.dirsrch_localonly'}) {
                    $changes{'localonly'} = 1;
                }
           } else {
               if ($env{'form.dirsrch_localonly'} eq '1') {
                   $changes{'localonly'} = 1;
               }
           }
           if (keys(%changes) > 0) {
               $resulttext = &mt('Changes made:').'<ul>';
               if ($changes{'available'}) {
                   $resulttext .= '<li>'.&mt("$title{'available'} set to: $offon[$env{'form.dirsrch_available'}]").'</li>';
               }
               if ($changes{'localonly'}) {
                   $resulttext .= '<li>'.&mt("$title{'localonly'} set to: $otherdoms[$env{'form.dirsrch_localonly'}]").'</li>';
               }
   
               if (ref($changes{'cansearch'}) eq 'ARRAY') {
                   my $chgtext;
                   if (ref($usertypes) eq 'HASH') {
                       if (keys(%{$usertypes}) > 0) {
                           foreach my $type (@{$types}) {
                               if (grep(/^\Q$type\E$/,@cansearch)) {
                                   $chgtext .= $usertypes->{$type}.'; ';
                               }
                           }
                           if (grep(/^default$/,@cansearch)) {
                               $chgtext .= $othertitle;
                           } else {
                               $chgtext =~ s/\; $//;
                           }
                           $resulttext .= '<li>'.&mt("Users from domain '<span class=\"LC_cusr_emph\">[_1]</span>' permitted to search the institutional directory set to: [_2]",$dom,$chgtext).'</li>';
                       }
                   }
               }
               if (ref($changes{'searchby'}) eq 'ARRAY') {
                   my ($searchtitles,$titleorder) = &sorted_searchtitles();
                   my $chgtext;
                   foreach my $type (@{$titleorder}) {
                       if (grep(/^\Q$type\E$/,@searchby)) {
                           if (defined($searchtitles->{$type})) {
                               $chgtext .= $searchtitles->{$type}.'; ';
                           }
                       }
                   }
                   $chgtext =~ s/\; $//;
                   $resulttext .= '<li>'.&mt("$title{'searchby'} set to: [_1]",$chgtext).'</li>';
               }
               if (ref($changes{'searchtypes'}) eq 'ARRAY') {
                   my ($srchtypes_desc,$srchtypeorder) = &sorted_searchtypes(); 
                   my $chgtext;
                   foreach my $type (@{$srchtypeorder}) {
                       if (grep(/^\Q$type\E$/,@searchtypes)) {
                           if (defined($srchtypes_desc->{$type})) {
                               $chgtext .= $srchtypes_desc->{$type}.'; ';
                           }
                       }
                   }
                   $chgtext =~ s/\; $//;
                   $resulttext .= '<li>'.&mt("$title{'searchtypes'} set to: \"[_1]\"",$chgtext).'</li>';
               }
               $resulttext .= '</ul>';
           } else {
               $resulttext = &mt('No changes made to institution directory search settings');
           }
       } else {
           $resulttext = '<span class="LC_error">'.
                         &mt('An error occurred: [_1]',$putresult).'</span>';
       }
       return $resulttext;
   }
   
   sub modify_user_creation {
       my ($dom,%domconfig) = @_;
       my ($resulttext,%curr_usercreation,%changes);
       if (ref($domconfig{'usercreation'}) eq 'HASH') {
           foreach my $key (keys(%{$domconfig{'usercreation'}})) {
               $curr_usercreation{$key} = $domconfig{'usercreation'}{$key};
           }
       }
       my %title = &Apache::lonlocal::texthash (
                      author => 'adding co-authors/assistant authors',
                      course => 'adding users to a course',
                   );
       my @username_rule = &Apache::loncommon::get_env_multiple('form.username_rule');
       my @cancreate = &Apache::loncommon::get_env_multiple('form.can_createuser');
       if (ref($curr_usercreation{'cancreate'}) eq 'ARRAY') {
           foreach my $type (@{$curr_usercreation{'cancreate'}}) {
               if (!grep(/^\Q$type\E$/,@cancreate)) {
                   push(@{$changes{'cancreate'}},$type);
               }
           }
           foreach my $type (@cancreate) {
               if (!grep(/^\Q$type\E$/,@{$curr_usercreation{'cancreate'}})) {
                   push(@{$changes{'cancreate'}},$type);
               }
           }
       } else {
           push(@{$changes{'cancreate'}},@cancreate);
       }
       if (ref($curr_usercreation{'username_rule'}) eq 'ARRAY') {
           foreach my $type (@{$curr_usercreation{'username_rule'}}) {
               if (!grep(/^\Q$type\E$/,@username_rule)) {
                   push(@{$changes{'username_rule'}},$type);
               }
           }
           foreach my $type (@username_rule) {
               if (!grep(/^\Q$type\E$/,@{$curr_usercreation{'username_rule'}})) {
                   push(@{$changes{'username_rule'}},$type);
               }
           }
       } else {
           push(@{$changes{'username_rule'}},@username_rule);
       }
   
       my %usercreation_hash =  (
               usercreation => { 
                                 cancreate     => \@cancreate,
                                 username_rule => \@username_rule,
                               }
               );
   
       my $putresult = &Apache::lonnet::put_dom('configuration',\%usercreation_hash,
                                                $dom);
       if ($putresult eq 'ok') {
           if (keys(%changes) > 0) {
               $resulttext = &mt('Changes made:').'<ul>';
               my $chgtext;
               if (ref($changes{'cancreate'}) eq 'ARRAY') {
                   my $chgtext = '<ul>';
                   foreach my $type (@cancreate) {
                       $chgtext .= '<li>'.$title{$type}.'</li>';
                   }
                   $chgtext .= '</ul>';
                   if (@cancreate > 0) {
                       $resulttext .= '<li>'.&mt('Creation of new users is permitted by a Domain Coordinator, and also by other users when: ').$chgtext.'</li>';
                   } else {
                       $resulttext .= '<li>'.&mt("Creation of new users is now only allowed when the user's role is Domain Coordinator.").'</li>';
                   }
               }
               if (ref($changes{'username_rule'}) eq 'ARRAY') {
                   my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($dom);
                   my $chgtext = '<ul>';
                   foreach my $type (@username_rule) {
                       if (ref($rules->{$type}) eq 'HASH') {
                           $chgtext .= '<li>'.$rules->{$type}{'name'}.'</li>';
                       }
                   }
                   $chgtext .= '</ul>';
                   if (@username_rule > 0) {
                       $resulttext .= '<li>'.&mt('Usernames with the following formats are restricted to verified users in the institutional directory: ').$chgtext.'</li>';     
                   } else {
                       $resulttext .= '<li>'.&mt('There are now no username formats currenty restricted to verified users in the institutional directory.').'</li>'; 
                   }
               }
               $resulttext .= '</ul>';
           } else {
               $resulttext = &mt('No changes made to log-in page settings');
           }
       } else {
           $resulttext = '<span class="LC_error">'.
               &mt('An error occurred: [_1]',$putresult).'</span>';
       }
       return $resulttext;
   }
   
   1;

Removed from v.1.15  
changed lines
  Added in v.1.27


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