--- loncom/interface/domainprefs.pm 2007/04/13 16:21:15 1.12
+++ loncom/interface/domainprefs.pm 2007/08/26 15:31:03 1.25
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to set domain-wide configuration settings
#
-# $Id: domainprefs.pm,v 1.12 2007/04/13 16:21:15 raeburn Exp $
+# $Id: domainprefs.pm,v 1.25 2007/08/26 15:31:03 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
@@ -133,6 +139,31 @@ sub handler {
my %helphash;
my $numprefs = @prefs;
&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.').' '.&mt("While this remains so, you must switch to the domain's primary library server in order to update settings.").' '.&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.").' '.$switch_server.' '.&mt('to primary library server for domain: [_1]',$dom));
+ return OK;
+ }
+ }
+ }
$r->print('
- '.&mt($item->{text}).' '.
- &Apache::loncommon::help_open_topic($item->{'help'}).'
- ');
+ '.&mt($item->{text}).' ');
+#
+# FIXME - put the help link back in when the help files exist
+# '.&mt($item->{text}).' '.
+# &Apache::loncommon::help_open_topic($item->{'help'}).'
+# ');
if (($action eq 'autoupdate') || ($action eq 'rolecolors')) {
my $colspan = ($action eq 'rolecolors')?' colspan="2"':'';
$r->print('
@@ -235,7 +271,7 @@ sub print_config_box {
');
- if ($action eq 'login') {
+ if (($action eq 'login') || ($action eq 'directorysrch')) {
$r->print('
'.$item->{'header'}->[0]->{'col1'}.' ');
} else {
@@ -251,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('
@@ -522,13 +560,14 @@ sub display_color_options {
' ';
my $switchserver = &check_switchserver($dom,$confname);
foreach my $img (@{$images}) {
- $itemcount ++;
+ $itemcount ++;
$css_class = $itemcount%2?' class="LC_odd_row"':'';
$datatable .= ''.
''.$choices->{$img}.' ';
- my $imgfile;
+ my ($imgfile, $img_import);
if ($designs->{$img} ne '') {
$imgfile = $designs->{$img};
+ $img_import = ($imgfile =~ m{^/adm/});
} else {
$imgfile = $defaults->{$img};
}
@@ -550,6 +589,7 @@ sub display_color_options {
$showfile = '';
}
} elsif ($imgfile =~ m-^/(adm/[^/]+)/([^/]+)$-) {
+ $showfile = $imgfile;
my $imgdir = $1;
my $filename = $2;
if (-e "/home/httpd/html/$imgdir/tn-".$filename) {
@@ -559,12 +599,17 @@ sub display_color_options {
my $output = '/home/httpd/html/'.$imgdir.'/tn-'.$filename;
if (!-e $output) {
my ($width,$height) = &thumb_dimensions();
- my $size = $width.'x'.$height;
- system("convert -sample $size $input $output");
+ my ($fullwidth,$fullheight) = &check_dimensions($input);
+ 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) {
$showfile = &Apache::loncommon::lonhttpdurl($showfile);
$fullsize = &Apache::loncommon::lonhttpdurl($imgfile);
@@ -572,6 +617,9 @@ sub display_color_options {
if (!$is_custom->{$img}) {
$datatable .= &mt('Default in use:').' ';
}
+ if ($img_import) {
+ $datatable.= ' ';
+ }
$datatable.= ' ';
@@ -694,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"':'';
@@ -720,7 +758,6 @@ sub print_quotas {
'" size="5" /> Mb ';
}
}
- $othertitle = "Other users";
}
my $defaultquota = '20';
if (ref($settings) eq 'HASH') {
@@ -733,16 +770,15 @@ sub print_quotas {
$datatable .= ''.
''.&mt($othertitle).' '.
''.
- ' Mb ';
return $datatable;
}
sub print_autoenroll {
my ($dom,$settings) = @_;
- my $defdom = $dom;
my $autorun = &Apache::lonnet::auto_run(undef,$dom),
- my ($runon,$runoff);
+ my ($defdom,$runon,$runoff);
if (ref($settings) eq 'HASH') {
if (exists($settings->{'run'})) {
if ($settings->{'run'} eq '0') {
@@ -764,6 +800,14 @@ sub print_autoenroll {
if (exists($settings->{'sender_domain'})) {
$defdom = $settings->{'sender_domain'};
}
+ } else {
+ if ($autorun) {
+ $runon = ' checked="checked" ';
+ $runoff = ' ';
+ } else {
+ $runoff = ' checked="checked" ';
+ $runon = ' ';
+ }
}
my $domform = &Apache::loncommon::select_dom_form($defdom,'sender_domain',1);
my $datatable=''.
@@ -772,7 +816,7 @@ sub print_autoenroll {
' '.&mt('Yes').' '.
' '.&mt('No').' '.
+ $runoff.' value="0" />'.&mt('No').''.
' '.
''.&mt('Notification messages - sender').
' '.
@@ -822,34 +866,22 @@ 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 @fields = ('lastname','firstname','middlename','gen','email','id');
+ my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);
+ my @fields = ('lastname','firstname','middlename','gen',
+ 'permanentemail','id');
my %fieldtitles = &Apache::lonlocal::texthash (
id => 'Student/Employee ID',
- email => 'E-mail address',
+ permanentemail => 'E-mail address',
lastname => 'Last Name',
firstname => 'First Name',
middlename => 'Middle Name',
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},
@@ -859,6 +891,186 @@ sub print_autoupdate {
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 $datatable=''.
+ ''.&mt('Directory search available?').' '.
+ ''.
+ ' '.&mt('Yes').' '.
+ ' '.&mt('No').' '.
+ ' '.
+ ''.&mt('Other domains can search?').' '.
+ ''.
+ ' '.&mt('Yes').' '.
+ ' '.&mt('No').' '.
+ ' ';
+ $datatable .= &users_cansearch_row($settings,$types,$usertypes,$dom,
+ $numinrow,$othertitle);
+ $datatable .= ''.
+ ''.&mt('Supported search methods').
+ ' '.
+ ''.&mt('Search latitude').' '.
+ ''.
+ ''.
+ ' '.&mt('Exact match').
+ ' '.
+ ' '.&mt('Begins with').
+ ' '.
+ ' '.&mt('Contains').
+ ' ';
+ return $datatable;
+}
+
+sub users_cansearch_row {
+ my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle) = @_;
+ my $output = ''.
+ ''.&mt('Users allowed to search').' ('.$dom.')'.
+ ' ';
+ return $output;
+}
+
+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 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 {
my ($settings,$usertypes,$fieldtitles,$fields,$types,$rownums) = @_;
my $datatable;
@@ -1039,6 +1251,15 @@ sub modify_colors {
}
my ($width,$height) = &thumb_dimensions();
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 '') {
my $error;
if ($configuserok eq 'ok') {
@@ -1078,6 +1299,7 @@ sub modify_colors {
$dom,$confname,$img,$width,$height);
if ($result eq 'ok') {
$confhash->{$role}{$img} = $logourl;
+ $changes{$role}{'images'}{$img} = 1;
}
}
}
@@ -1229,6 +1451,26 @@ sub thumb_dimensions {
return ('200','50');
}
+sub check_dimensions {
+ my ($inputfile) = @_;
+ my ($fullwidth,$fullheight);
+ if ($inputfile =~ m|^[/\w.\-]+$|) {
+ if (open(PIPE,"identify $inputfile 2>&1 |")) {
+ my $imageinfo = ;
+ 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 {
my ($uhome,$dom,$confname,$servadm) = @_;
my ($configuserok,%currroles);
@@ -1361,17 +1603,23 @@ $env{'user.name'}.':'.$env{'user.domain'
if (($thumbwidth =~ /^\d+$/) && ($thumbheight =~ /^\d+$/)) {
my $inputfile = $filepath.'/'.$file;
my $outfile = $filepath.'/'.'tn-'.$file;
- my $thumbsize = $thumbwidth.'x'.$thumbheight;
- system("convert -sample $thumbsize $inputfile $outfile");
- chmod(0660, $filepath.'/tn-'.$file);
- if (-e $outfile) {
- my $copyfile=$targetdir.'/tn-'.$file;
- if (copy($outfile,$copyfile)) {
- print $logfile "\nCopied source to ".$copyfile."\n";
- &write_metadata($dom,$confname,$formname,$targetdir,
- 'tn-'.$file,$logfile);
- } else {
- print $logfile "\nUnable to write ".$copyfile.':'.$!."\n";
+ my ($fullwidth,$fullheight) = &check_dimensions($inputfile);
+ if ($fullwidth ne '' && $fullheight ne '') {
+ if ($fullwidth > $thumbwidth && $fullheight > $thumbheight) {
+ my $thumbsize = $thumbwidth.'x'.$thumbheight;
+ system("convert -sample $thumbsize $inputfile $outfile");
+ chmod(0660, $filepath.'/tn-'.$file);
+ if (-e $outfile) {
+ my $copyfile=$targetdir.'/tn-'.$file;
+ if (copy($outfile,$copyfile)) {
+ print $logfile "\nCopied source to ".$copyfile."\n";
+ &write_metadata($dom,$confname,$formname,
+ $targetdir,'tn-'.$file,$logfile);
+ } else {
+ print $logfile "\nUnable to write ".$copyfile.
+ ':'.$!."\n";
+ }
+ }
}
}
}
@@ -1483,6 +1731,7 @@ sub modify_quotas {
$formhash{$1} = $env{$key};
}
}
+ $formhash{'default'} = $env{'form.defaultquota'};
if (ref($domconfig{'quotas'}) eq 'HASH') {
foreach my $key (keys(%{$domconfig{'quotas'}})) {
if (exists($formhash{$key})) {
@@ -1536,10 +1785,17 @@ sub modify_autoenroll {
my %title = ( run => 'Auto-enrollment active',
sender => 'Sender for notification messages');
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 = (
autoenroll => { run => $env{'form.autoenroll_run'},
- sender_uname => $env{'form.sender_uname'},
- sender_domain => $env{'form.sender_domain'},
+ sender_uname => $sender_uname,
+ sender_domain => $sender_domain,
}
);
@@ -1552,21 +1808,13 @@ sub modify_autoenroll {
}
} elsif ($autorun) {
if ($env{'form.autoenroll_run'} ne '1') {
- $changes{'run'} = 1;
+ $changes{'run'} = 1;
}
}
- if (exists($currautoenroll{sender_uname})) {
- if ($currautoenroll{'sender_uname'} ne $env{'form.sender_uname'}) {
- $changes{'sender'} = 1;
- }
- } else {
+ if ($currautoenroll{'sender_uname'} ne $sender_uname) {
$changes{'sender'} = 1;
}
- if (exists($currautoenroll{sender_domain})) {
- if ($currautoenroll{'sender_domain'} ne $env{'form.sender_domain'}) {
- $changes{'sender'} = 1;
- }
- } else {
+ if ($currautoenroll{'sender_domain'} ne $sender_domain) {
$changes{'sender'} = 1;
}
if (keys(%changes) > 0) {
@@ -1575,7 +1823,11 @@ sub modify_autoenroll {
$resulttext .= ''.&mt("$title{'run'} set to $offon[$env{'form.autoenroll_run'}]").' ';
}
if ($changes{'sender'}) {
- $resulttext .= ''.&mt("$title{'sender'} set to [_1]",$env{'form.sender_uname'}.':'.$env{'form.sender_domain'}).' ';
+ if ($sender_uname eq '' || $sender_domain eq '') {
+ $resulttext .= ''.&mt("$title{'sender'} set to default (course owner).").' ';
+ } else {
+ $resulttext .= ''.&mt("$title{'sender'} set to [_1]",$sender_uname.':'.$sender_domain).' ';
+ }
}
$resulttext .= '';
} else {
@@ -1604,7 +1856,7 @@ sub modify_autoupdate {
my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom);
my %fieldtitles = &Apache::lonlocal::texthash (
id => 'Student/Employee ID',
- email => 'E-mail address',
+ permanentemail => 'E-mail address',
lastname => 'Last Name',
firstname => 'First Name',
middlename => 'Middle Name',
@@ -1708,5 +1960,171 @@ sub modify_autoupdate {
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',
+ cansearch => 'Users permitted to search',
+ 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');
+
+ 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:').'';
+ if ($changes{'available'}) {
+ $resulttext .= ''.&mt("$title{'available'} set to: $offon[$env{'form.dirsrch_available'}]").' ';
+ }
+ if ($changes{'localonly'}) {
+ $resulttext .= ''.&mt("$title{'localonly'} set to: $otherdoms[$env{'form.dirsrch_localonly'}]").' ';
+ }
+
+ 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 .= ''.&mt("$title{'cansearch'} ([_1]) set to: [_2]",$dom,$chgtext).' ';
+ }
+ 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 .= ''.&mt("$title{'searchby'} set to: [_1]",$chgtext).' ';
+ }
+ 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 .= ''.&mt("$title{'searchtypes'} set to: \"[_1]\"",$chgtext).' ';
+ }
+ $resulttext .= ' ';
+ } else {
+ $resulttext = &mt('No changes made to institution directory search settings');
+ }
+ } else {
+ $resulttext = ''.
+ &mt('An error occurred: [_1]',$putresult).' ';
+ }
+ return $resulttext;
+}
+
+1;