[LON-CAPA-cvs] cvs: loncom(version_2_11_X) /interface lonsearchcat.pm

raeburn raeburn at source.lon-capa.org
Thu Aug 4 17:23:57 EDT 2016


raeburn		Thu Aug  4 21:23:57 2016 EDT

  Modified files:              (Branch: version_2_11_X)
    /loncom/interface	lonsearchcat.pm 
  Log:
  - For 2.11
    - Backport 1.345, 1.346, 1.347, 1.348, 1.349.
  
  
-------------- next part --------------
Index: loncom/interface/lonsearchcat.pm
diff -u loncom/interface/lonsearchcat.pm:1.331.4.11 loncom/interface/lonsearchcat.pm:1.331.4.12
--- loncom/interface/lonsearchcat.pm:1.331.4.11	Thu Mar 12 03:04:45 2015
+++ loncom/interface/lonsearchcat.pm	Thu Aug  4 21:23:57 2016
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Search Catalog
 #
-# $Id: lonsearchcat.pm,v 1.331.4.11 2015/03/12 03:04:45 raeburn Exp $
+# $Id: lonsearchcat.pm,v 1.331.4.12 2016/08/04 21:23:57 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -78,6 +78,7 @@
 use Apache::lonindexer();
 use Apache::lonwishlist();
 use LONCAPA;
+use Time::HiRes qw(sleep);
 
 ######################################################################
 ######################################################################
@@ -143,7 +144,7 @@
     ##     this once, so the pause indicator is deleted
     ##
     if (exists($env{'form.pause'})) {
-        sleep(1);
+        sleep(0.1);
         delete($env{'form.pause'});
     }
     ##
@@ -1911,10 +1912,11 @@
     my (undef,undef,$resdom,$resname) = split('/',
                                               $Metadata->{'url'});
     # Check for priv
-    if (($Metadata->{'copyright'} eq 'priv') && 
-        (($env{'user.name'} ne $resname) &&
-         ($env{'user.domain'} ne $resdom))) {
-        return 0;
+    if ($Metadata->{'copyright'} eq 'priv') {
+        unless (($env{'user.name'} eq $resname) &&
+                ($env{'user.domain'} eq $resdom)) {
+            return 0;
+        }
     }
     # Check for domain
     if (($Metadata->{'copyright'} eq 'domain') &&
@@ -2064,7 +2066,7 @@
 </script>
 END
 
-    my $start_page = &Apache::loncommon::start_page('Results',$js);
+    my $start_page = &Apache::loncommon::start_page('Results');
     my $breadcrumbs=
         &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching',
 					    $env{'form.catalogmode'} ne 'import');
@@ -2228,8 +2230,21 @@
     $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);
+<script type="text/javascript">
+    parent.update_results("$newloc");
+</script>
+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 +2425,7 @@
     ##
     ## Prepare for the big loop.
     my $hitcountsum;
+    my $oldhitcountsum;
     my %matches;
     my $server; 
     my $status;
@@ -2456,7 +2472,7 @@
                 &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 +2548,13 @@
                 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'}) {
+                    reload_result_frame($r);
+                }
+                $oldhitcountsum = $hitcountsum;
+            }
         }
         last if ($connection->aborted());
         &update_seconds($r);
@@ -2626,6 +2648,8 @@
     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('<p class="LC_error">'.
               &mt('Unable to save import results.').
               '</p>'.
@@ -2633,7 +2657,11 @@
 		      &Apache::loncommon::end_page());
             $r->rflush();
             return;
-        } 
+        }
+        # untie %groupsearch_db if the connection gets aborted before the end
+        $r->register_cleanup(sub {
+            untie %groupsearch_db if (tied(%groupsearch_db));
+        }); 
     }
     ##
     ## Prepare the table for querying
@@ -2775,8 +2803,7 @@
     );
 
     if ($total_results == 0) {
-        $r->print('<meta HTTP-EQUIV="Refresh" CONTENT="2" />'.
-                  '<p class="LC_info">'.&mt('There are currently no results.').'</p>'.
+        $r->print('<p class="LC_info">'.&mt('There are currently no results.').'</p>'.
                   "</form>".
 		  &Apache::loncommon::end_page());
         return;
@@ -3149,6 +3176,14 @@
 </script>
 SCRIPT
 
+    $js.=<<SCRIPT;
+<script type="text/javascript">
+    \$(document).ready(function() {
+        parent.done_loading_results();
+    });
+</script>
+SCRIPT
+
     my $start_page  = &Apache::loncommon::start_page(undef,$js,
 						     {'only_body' =>1,
                                                       'add_wishlist' =>1,
@@ -3182,6 +3217,26 @@
 // <![CDATA[
 var targetwin = opener;
 var queue = '';
+
+var loading_results = true;
+var need_reloading = false;
+var new_location;
+function update_results(newloc) {
+    if (loading_results) {
+        need_reloading = true;
+        new_location = newloc;
+    } else {
+        loading_results = true;
+        resultsframe.location = newloc;
+    }
+}
+function done_loading_results() {
+    loading_results = false;
+    if (need_reloading) {
+        need_reloading = false;
+        update_results(new_location);
+    }
+}
 // ]]>
 </script>
 JS
@@ -3294,7 +3349,7 @@
         '<b>'.$prefix.
         '<img src="'.&Apache::loncommon::icon($values{'url'}).'" alt="" />'.' '.
         '<a href="'.$jumpurl.'?inhibitmenu=yes" '.
-        'target="preview">'.$values{'title'}."</a></b>\n".
+        'target="preview" onclick="openMyModal(this.href, 500, 500, \'yes\');return false;">'.$values{'title'}."</a></b>\n".
         &display_tools($values{'title'}, $jumpurl).
         "<p>\n".
         '<b>'.$values{'author'}.'</b>,'.
@@ -3427,7 +3482,7 @@
     my $link = '<br />'.&display_url($jumpurl,1).'<br />';
     $result .=
         '<a href="'.$jumpurl.'?inhibitmenu=yes"'.
-        ' target="preview">'.$values{'title'}.'</a>'.
+        ' target="preview" onclick="openMyModal(this.href, 500, 500, \'yes\');return false;">'.$values{'title'}.'</a>'.
         &display_tools($values{'title'}, $jumpurl).<<END;
 <br />
 $link<br />
@@ -3473,7 +3528,7 @@
     }
     $jumpurl = &HTML::Entities::encode($jumpurl,'<>&"');
     $result.=' <span class="LC_nobreak">'.
-	'<a href="'.$jumpurl.'?inhibitmenu=yes" target="preview">'.
+	'<a href="'.$jumpurl.'?inhibitmenu=yes" target="preview" onclick="openMyModal(this.href, 500, 500, \'yes\');return false;">'.
         &HTML::Entities::encode($values{'title'},'<>&"').'</a></span> '.
         &display_tools($values{'title'}, $jumpurl).
 	$link.' <b>'.$values{'author'}.'</b> ('.$values{'domain'}.')';
@@ -3489,12 +3544,22 @@
     } elsif ($url=~m{^(http://|/uploaded/)}) {
 	$link='<span class="LC_filename">'.$url.'</span>';
     } 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).' ';
+        # 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)
+        $link =~ s/(href="[^"]*")/\1 onclick="window.open(this.href, '_blank', 'toolbar=1,location=1,menubar=0');return false;"/g;
     }
     return $link;
 }


More information about the LON-CAPA-cvs mailing list