Diff for /loncom/interface/domainprefs.pm between versions 1.22 and 1.23

version 1.22, 2007/06/07 23:36:32 version 1.23, 2007/07/25 20:12:26
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'],$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 106  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',}],
           },
     );      );
     my @roles = ('student','coordinator','author','admin');      my @roles = ('student','coordinator','author','admin');
     &Apache::lonhtmlcommon::add_breadcrumb      &Apache::lonhtmlcommon::add_breadcrumb
Line 189  sub process_changes { Line 195  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);
     }      }
     return $output;      return $output;
 }  }
Line 279  sub print_config_box { Line 287  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));
         }            }  
     }      }
     $r->print('      $r->print('
Line 732  ENDCOL Line 742  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 (@{$types} > 0) {
         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 758  sub print_quotas { Line 758  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 867  sub print_autoupdate { Line 866  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;  
         if (ref($order) eq 'ARRAY') {  
             @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',          my @fields = ('lastname','firstname','middlename','gen',
                       'permanentemail','id');                        'permanentemail','id');
         my %fieldtitles = &Apache::lonlocal::texthash (          my %fieldtitles = &Apache::lonlocal::texthash (
Line 892  sub print_autoupdate { Line 878  sub print_autoupdate {
                             gen => 'Generation',                              gen => 'Generation',
                       );                        );
         my $numrows = 0;          my $numrows = 0;
         if (@types > 0) {          if (@{$types} > 0) {
             $datatable =               $datatable = 
                 &usertype_update_row($settings,$usertypes,\%fieldtitles,                  &usertype_update_row($settings,$usertypes,\%fieldtitles,
                                      \@fields,\@types,\$numrows);                                       \@fields,$types,\$numrows);
         }          }
         $datatable .=           $datatable .= 
             &usertype_update_row($settings,{'default' => $othertitle},              &usertype_update_row($settings,{'default' => $othertitle},
Line 905  sub print_autoupdate { Line 891  sub print_autoupdate {
     return $datatable;      return $datatable;
 }  }
   
   sub print_directorysrch {
       my ($dom,$settings) = @_;
       my $srchon = ' ';
       my $srchoff = ' checked="checked" ';
       my $exacton = '';
       my $containson = ' checked="checked" ';
       my $specifyon = '';
       if (ref($settings) eq 'HASH') {
           if ($settings->{'available'} eq '1') {
               $srchon = $srchoff;
               $srchoff = ' ';
           }
           if ($settings->{'searchtypes'} eq 'exact') {
               $exacton = $containson;
               $containson = ' ';
           }
           if ($settings->{'searchtypes'} eq 'specify') {
               $specifyon = $containson;
               $containson = ' ';
           }
       }
       my ($searchtitles,$titleorder) = &sorted_searchtitles();
       my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
   
       my $numinrow = 4;
       my $datatable='<tr class="LC_odd_row">'.
                     '<td>'.&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>'.&mt('Search latitude').'</td>'.
                     '<td class="LC_right_item"><span class="LC_nobreak"><label>'.
                     '<input type="radio" name="searchtypes"'.
                     $exacton.' value="exact" />'.&mt('Exact match only').'</label>&nbsp;'.
                     '<label><input type="radio" name="searchtypes"'.
                     $containson.' value="contains" />'.&mt('Contains is a match').'</label>'.
                     '&nbsp;<label><input type="radio" name="searchtypes"'.
                     $specifyon.' value="specify" />'.&mt('Specifiable type').
                     '</label></span></td></tr>'.
                     '<tr class="LC_odd_row">'.
                     '<td>'.&mt('Users permitted to search').
                     '</td><td class="LC_left_item"><table>';
       for (my $i=0; $i<@{$types}; $i++) {
           if (defined($usertypes->{$types->[$i]})) {
               my $rem = $i%($numinrow);
               if ($rem == 0) {
                   if ($i > 0) {
                       $datatable .= '</tr>';
                   }
                   $datatable .= '<tr>';
               }
               my $check = ' ';
               if (ref($settings->{'cansearch'}) eq 'ARRAY') {
                   if (grep(/^\Q$types->[$i]\E$/,@{$settings->{'cansearch'}})) {
                       $check = ' checked="checked" ';
                   }
               }
               $datatable .= '<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>';
           }
       }
   
       my $rem = @{$types}%($numinrow);
       my $colsleft = $numinrow - $rem;
       if ($colsleft > 1) {
           $datatable .= '<td colspan="'.$colsleft.'" class="LC_left_item">';
       } else {
           $datatable .= '<td class="LC_left_item">';
       }
       my $defcheck = ' ';
       if (ref($settings->{'cansearch'}) eq 'ARRAY') {
            if (grep(/^default$/,@{$settings->{'cansearch'}})) {
                 $defcheck = ' checked="checked" ';
            }
       }
       $datatable .= '<span class="LC_nobreak"><label>'.
                     '<input type="checkbox" name="cansearch" '.
                     'value="default"'.$defcheck.'/>'.
                     $othertitle.'</label></span></td>'.
                     '</tr></table></td></tr>';
   
       $datatable .= '<tr>'.
                     '<td>'.&mt('Supported search methods').
                     '</td><td class="LC_left_item"><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>';
       return $datatable;
   }
   
   sub sorted_inst_types {
       my ($dom) = @_;
       my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($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}));
           }
       }
       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 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 1642  sub modify_autoenroll { Line 1766  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 ($currautoenroll{'sender_uname'} ne $sender_uname) {          if ($currautoenroll{'sender_uname'} ne $sender_uname) {
Line 1793  sub modify_autoupdate { Line 1917  sub modify_autoupdate {
     }      }
     return $resulttext;      return $resulttext;
 }  }
   
   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',
                     cansearch => 'Users permitted to search',
                     searchby => 'Search types',
                     searchtypes => 'Search latitude');
   
       my @offon = ('off','on');
   
       my @cansearch = &Apache::loncommon::get_env_multiple('form.cansearch');
       my @searchby = &Apache::loncommon::get_env_multiple('form.searchby');
   
       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);
       }
       
       my %dirsrch_hash =  (
               directorysrch => { available => $env{'form.dirsrch_available'},
                                  cansearch => \@cansearch,
                                  searchby => \@searchby,
                                  searchtypes => $env{'form.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{'searchtypes'})) {
                if ($currdirsrch{'searchtypes'} ne $env{'form.searchtypes'}) {
                    $changes{'searchtypes'} = 1;
                }
           } else {
               if ($env{'form.searchtypes'}) {
                   $changes{'searchtypes'} = 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 (ref($changes{'cansearch'}) eq 'ARRAY') {
                   my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
                   my $chgtext;
                   foreach my $type (@cansearch) {
                       if (defined($usertypes->{$type})) {
                           $chgtext .= $usertypes->{$type}.'; ';
                       }
                   }
                   if (grep(/^default$/,@cansearch)) {
                       $chgtext .= $othertitle;
                   } else {
                       $chgtext =~ s/\; $//;
                   }
                   $resulttext .= '<li>'.&mt("$title{'cansearch'} set to: [_1]",$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 ($changes{'searchtypes'}) {
                   my %srchtypes_desc = ( 
                                          exact => 'Exact match only',
                                          contains => 'Contains is a match',
                                          specify => 'Match type specifiable',
                                        );
                   $resulttext .= '<li>'.&mt("$title{'searchtypes'} set to: \"$srchtypes_desc{$env{'form.searchtypes'}}\"").'</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;
   }
   
 1;  1;
   

Removed from v.1.22  
changed lines
  Added in v.1.23


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