--- loncom/interface/lonsearchcat.pm 2014/02/23 22:16:20 1.331.4.10
+++ loncom/interface/lonsearchcat.pm 2016/11/15 20:03:50 1.351
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Catalog
#
-# $Id: lonsearchcat.pm,v 1.331.4.10 2014/02/23 22:16:20 raeburn Exp $
+# $Id: lonsearchcat.pm,v 1.351 2016/11/15 20:03:50 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -78,6 +78,7 @@ use Apache::lonnavmaps;
use Apache::lonindexer();
use Apache::lonwishlist();
use LONCAPA;
+use Time::HiRes qw(sleep);
######################################################################
######################################################################
@@ -143,7 +144,7 @@ sub handler {
## this once, so the pause indicator is deleted
##
if (exists($env{'form.pause'})) {
- sleep(1);
+ sleep(0.1);
delete($env{'form.pause'});
}
##
@@ -432,7 +433,7 @@ sub hidden_field {
=pod
=over 4
-
+
=item &print_basic_search_form()
Prints the form for the basic search. Sorry the name is so cryptic.
@@ -478,14 +479,31 @@ sub setup_basic_search {
.&mt('use related words')
.'';
+ my $anydom = 1;
+ if ($area eq 'res') {
+ unless (&Apache::lonnet::allowed('bre','/res/') eq 'F') {
+ $anydom = 0;
+ }
+ }
+ my $singledom;
+ my ($disabled,$checked);
+ if ($anydom) {
+ $singledom = $r->dir_config('lonDefDomain');
+ if ($env{'form.domains'} eq $singledom) {
+ $checked = 1;
+ }
+ } else {
+ $singledom = $env{'user.domain'};
+ $disabled = ' disabled="disabled"';
+ $checked = 1;
+ }
$onlysearchdomain = '';
$adv_search_link = '
-//
-
-END
-
- my $start_page = &Apache::loncommon::start_page('Results',$js);
+ my $start_page = &Apache::loncommon::start_page('Results',undef);
my $breadcrumbs=
&Apache::lonhtmlcommon::breadcrumbs('Searching','Searching',
$env{'form.catalogmode'} ne 'import');
@@ -2228,8 +2245,21 @@ SCRIPT
$r->rflush();
}
+sub reload_result_frame {
+ my ($r) = @_;
+ my $newloc = '/adm/searchcat?phase=results&persistent_db_id='.
+ $env{'form.persistent_db_id'};
+ $r->print(<
+SCRIPT
+
+ $r->rflush();
+}
+
{
- my $max_time = 300; # seconds for the search to complete
+ my $max_time = 60; # seconds for the search to complete
my $start_time = 0;
my $last_time = 0;
@@ -2410,6 +2440,8 @@ END
##
## Prepare for the big loop.
my $hitcountsum;
+ my $oldhitcountsum;
+ my $displaycount;
my %matches;
my $server;
my $status;
@@ -2456,7 +2488,7 @@ END
&update_status($r,
&mt('waiting on [_1]',join(' ',keys(%Server_status))));
}
- sleep(1);
+ sleep(0.1);
}
#
# Loop through the servers we have contacted but do not
@@ -2532,7 +2564,15 @@ END
delete($Server_status{$server});
}
last if ($connection->aborted());
- &update_count_status($r,$hitcountsum);
+ if ($oldhitcountsum < $hitcountsum) {
+ &update_count_status($r,$hitcountsum);
+ if (($hitcountsum <= $env{'form.show'}) ||
+ (!$displaycount && $hitcountsum)) {
+ reload_result_frame($r);
+ $displaycount = $hitcountsum;
+ }
+ $oldhitcountsum = $hitcountsum;
+ }
}
last if ($connection->aborted());
&update_seconds($r);
@@ -2626,6 +2666,8 @@ sub display_results {
if ($env{'form.catalogmode'} eq 'import') {
if (! tie(%groupsearch_db,'GDBM_File',$diropendb,
&GDBM_WRCREAT(),0640)) {
+ # NOTE: this can happen when a previous request to searchcat?phase=results gets interrupted
+ # (%groupsearch_db is not untied)
$r->print(' '.
&mt('Unable to save import results.').
' '.&mt('There are currently no results.').' '.&mt('There are currently no results.').''.' '.
''.$values{'title'}."\n".
+ 'target="preview" onclick="openMyModal(this.href, 500, 500, \'yes\');return false;">'.$values{'title'}."
\n".
''.$values{'author'}.','.
@@ -3427,7 +3498,7 @@ sub summary_view {
my $link = '
'.&display_url($jumpurl,1).'
';
$result .=
''.$values{'title'}.''.
+ ' target="preview" onclick="openMyModal(this.href, 500, 500, \'yes\');return false;">'.$values{'title'}.''.
&display_tools($values{'title'}, $jumpurl).<
@@ -3473,7 +3544,7 @@ sub compact_view {
}
$jumpurl = &HTML::Entities::encode($jumpurl,'<>&"');
$result.=' '.
- ''.
+ ''.
&HTML::Entities::encode($values{'title'},'<>&"').' '.
&display_tools($values{'title'}, $jumpurl).
$link.' '.$values{'author'}.' ('.$values{'domain'}.')';
@@ -3489,12 +3560,17 @@ sub display_url {
} elsif ($url=~m{^(http://|/uploaded/)}) {
$link=''.$url.'';
} else {
+ # replace the links to open in a new window
+ # (because the search opens in a new window, it gets
+ # confusing when the links open a tab in the
+ # parent window; ideally we should not force windows)
+ my $onclick = " onclick=\"window.open(this.href, '_blank', 'toolbar=1,location=1,menubar=0');return false;\"";
$link=&Apache::lonhtmlcommon::crumbs(
$url,
'preview',
'',
- (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),
- $skiplast).' ';
+ '',
+ $skiplast,$onclick).' ';
}
return $link;
}
@@ -3800,7 +3876,7 @@ Cleans the global %groupsearch_db by rem
######################################################################
sub start_fresh_session {
delete $groupsearch_db{'mode_catalog'};
- foreach (keys %groupsearch_db) {
+ foreach (keys(%groupsearch_db)) {
if ($_ =~ /^pre_/) {
delete $groupsearch_db{$_};
}