--- loncom/interface/domainprefs.pm 2007/06/07 23:36:32 1.22 +++ loncom/interface/domainprefs.pm 2007/07/25 20:12:26 1.23 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: domainprefs.pm,v 1.22 2007/06/07 23:36:32 raeburn Exp $ +# $Id: domainprefs.pm,v 1.23 2007/07/25 20:12:26 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -67,7 +67,7 @@ sub handler { } my %domconfig = &Apache::lonnet::get_dom('configuration',['login','rolecolors', - 'quotas','autoenroll','autoupdate'],$dom); + 'quotas','autoenroll','autoupdate','directorysrch'],$dom); my @prefs = ( { text => 'Default color schemes', help => 'Default_Color_Schemes', @@ -106,7 +106,13 @@ sub handler { col2 => 'Value',}, {col1 => 'User Population', 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'); &Apache::lonhtmlcommon::add_breadcrumb @@ -189,6 +195,8 @@ sub process_changes { $output = &modify_autoenroll($dom,%domconfig); } elsif ($action eq 'autoupdate') { $output = &modify_autoupdate($dom,%domconfig); + } elsif ($action eq 'directorysrch') { + $output = &modify_directorysrch($dom,%domconfig); } return $output; } @@ -279,6 +287,8 @@ sub print_config_box { $r->print(&print_quotas($dom,$settings)); } elsif ($action eq 'autoenroll') { $r->print(&print_autoenroll($dom,$settings)); + } elsif ($action eq 'directorysrch') { + $r->print(&print_directorysrch($dom,$settings)); } } $r->print(' @@ -732,21 +742,11 @@ ENDCOL sub print_quotas { my ($dom,$settings) = @_; my $datatable; - 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})); - } - } + my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom); my $typecount = 0; my $css_class; - if (@types > 0) { - foreach my $type (@types) { + if (@{$types} > 0) { + foreach my $type (@{$types}) { if (defined($usertypes->{$type})) { $typecount ++; $css_class = $typecount%2?' class="LC_odd_row"':''; @@ -758,7 +758,6 @@ sub print_quotas { '" size="5" /> Mb'; } } - $othertitle = "Other users"; } my $defaultquota = '20'; if (ref($settings) eq 'HASH') { @@ -867,20 +866,7 @@ sub print_autoupdate { $classlistsoff.'value="0" />'.&mt('No').''. ''; } else { - my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($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 ($othertitle,$usertypes,$types) = &sorted_inst_types($dom); my @fields = ('lastname','firstname','middlename','gen', 'permanentemail','id'); my %fieldtitles = &Apache::lonlocal::texthash ( @@ -892,10 +878,10 @@ sub print_autoupdate { gen => 'Generation', ); my $numrows = 0; - if (@types > 0) { + if (@{$types} > 0) { $datatable = &usertype_update_row($settings,$usertypes,\%fieldtitles, - \@fields,\@types,\$numrows); + \@fields,$types,\$numrows); } $datatable .= &usertype_update_row($settings,{'default' => $othertitle}, @@ -905,6 +891,144 @@ sub print_autoupdate { 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=''. + ''.&mt('Directory search available?').''. + ' '. + ''. + ''. + ''.&mt('Search latitude').''. + ' '. + ''. + ' '. + ''. + ''.&mt('Users permitted to search'). + ''; + for (my $i=0; $i<@{$types}; $i++) { + if (defined($usertypes->{$types->[$i]})) { + my $rem = $i%($numinrow); + if ($rem == 0) { + if ($i > 0) { + $datatable .= ''; + } + $datatable .= ''; + } + my $check = ' '; + if (ref($settings->{'cansearch'}) eq 'ARRAY') { + if (grep(/^\Q$types->[$i]\E$/,@{$settings->{'cansearch'}})) { + $check = ' checked="checked" '; + } + } + $datatable .= ''; + } + } + + my $rem = @{$types}%($numinrow); + my $colsleft = $numinrow - $rem; + if ($colsleft > 1) { + $datatable .= ''. + '
'. + ''; + } else { + $datatable .= ''; + } + my $defcheck = ' '; + if (ref($settings->{'cansearch'}) eq 'ARRAY') { + if (grep(/^default$/,@{$settings->{'cansearch'}})) { + $defcheck = ' checked="checked" '; + } + } + $datatable .= '
'; + + $datatable .= ''. + ''.&mt('Supported search methods'). + ''; + 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 .= ''; + } + } + $datatable .= '
'. + '
'; + 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 { my ($settings,$usertypes,$fieldtitles,$fields,$types,$rownums) = @_; my $datatable; @@ -1642,7 +1766,7 @@ sub modify_autoenroll { } } elsif ($autorun) { if ($env{'form.autoenroll_run'} ne '1') { - $changes{'run'} = 1; + $changes{'run'} = 1; } } if ($currautoenroll{'sender_uname'} ne $sender_uname) { @@ -1793,6 +1917,135 @@ sub modify_autoupdate { } 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:').''; + } else { + $resulttext = &mt('No changes made to institution directory search settings'); + } + } else { + $resulttext = ''. + &mt('An error occurred: [_1]',$putresult).''; + } + return $resulttext; +} 1;