[LON-CAPA-cvs] cvs: loncom /interface domainprefs.pm
raeburn
lon-capa-cvs-allow@mail.lon-capa.org
Wed, 25 Jul 2007 20:12:28 -0000
This is a MIME encoded message
--raeburn1185394348
Content-Type: text/plain
raeburn Wed Jul 25 16:12:28 2007 EDT
Modified files:
/loncom/interface domainprefs.pm
Log:
Domain settings to configure access to institutional directory search (used in loncreateuser).
Institutional user type ordering icode moved to subroutine.
--raeburn1185394348
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20070725161228.txt"
Index: loncom/interface/domainprefs.pm
diff -u loncom/interface/domainprefs.pm:1.22 loncom/interface/domainprefs.pm:1.23
--- loncom/interface/domainprefs.pm:1.22 Thu Jun 7 19:36:32 2007
+++ loncom/interface/domainprefs.pm Wed Jul 25 16:12:26 2007
@@ -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 @@
}
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 @@
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 @@
$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 @@
$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 @@
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 @@
'" size="5" /> Mb</span></td></tr>';
}
}
- $othertitle = "Other users";
}
my $defaultquota = '20';
if (ref($settings) eq 'HASH') {
@@ -867,20 +866,7 @@
$classlistsoff.'value="0" />'.&mt('No').'</label></span></td>'.
'</tr>';
} 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 @@
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 @@
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> '.
+ '<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> '.
+ '<label><input type="radio" name="searchtypes"'.
+ $containson.' value="contains" />'.&mt('Contains is a match').'</label>'.
+ ' <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 {
my ($settings,$usertypes,$fieldtitles,$fields,$types,$rownums) = @_;
my $datatable;
@@ -1642,7 +1766,7 @@
}
} elsif ($autorun) {
if ($env{'form.autoenroll_run'} ne '1') {
- $changes{'run'} = 1;
+ $changes{'run'} = 1;
}
}
if ($currautoenroll{'sender_uname'} ne $sender_uname) {
@@ -1794,5 +1918,134 @@
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;
--raeburn1185394348--