--- loncom/interface/lonsearchcat.pm 2015/06/12 21:11:07 1.345 +++ loncom/interface/lonsearchcat.pm 2023/12/30 03:52:33 1.360 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Search Catalog # -# $Id: lonsearchcat.pm,v 1.345 2015/06/12 21:11:07 damieng Exp $ +# $Id: lonsearchcat.pm,v 1.360 2023/12/30 03:52:33 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -144,7 +144,7 @@ sub handler { ## this once, so the pause indicator is deleted ## if (exists($env{'form.pause'})) { - Time::HiRes::sleep(0.1); + sleep(0.1); delete($env{'form.pause'}); } ## @@ -176,7 +176,16 @@ sub handler { } my $crumb_text = 'Portfolio Search'; if (@allowed_searches ==2) { - $crumb_text = 'Portfolio and Catalog Search'; + $crumb_text = 'Portfolio and Content Library Search'; + } + my $target = '_top'; + if ((($env{'request.lti.login'}) && ($env{'request.lti.target'} eq 'iframe')) || + (($env{'request.deeplink.login'}) && ($env{'request.deeplink.target'} eq '_self'))) { + if ($env{'form.phase'} =~ /^(sort|run_search)$/) { + $target = '_parent'; + } else { + $target = '_self'; + } } &Apache::lonhtmlcommon::add_breadcrumb ({href=>'/adm/searchcat?'. @@ -185,7 +194,7 @@ sub handler { '&launch='.$env{'form.launch'}. '&mode='.$env{'form.mode'}, text=>"$crumb_text", - target=>'_top', + target=>$target, bug=>'Searching',}); # if ($env{'form.phase'} !~ m/(basic|adv|course)_search/) { @@ -299,7 +308,7 @@ END } # if ($env{'form.searchmode'} eq 'advanced') { - my $srchtype = 'Catalog'; + my $srchtype = 'Content Library'; if ($env{'form.area'} eq 'portfolio') { $srchtype = 'Portfolio'; } @@ -328,10 +337,10 @@ END ['query','customquery','customshow', 'libraries','pretty_string','domains']); if ($env{'form.phase'} eq 'sort') { - &print_sort_form($r,$pretty_string); + &print_sort_form($r,$pretty_string,$target); } elsif ($env{'form.phase'} eq 'run_search') { &run_search($r,$query,$customquery,$customshow, - $libraries,$pretty_string,$env{'form.area'},$domainsref); + $libraries,$pretty_string,$env{'form.area'},$domainsref,$target); } } elsif(($env{'form.phase'} eq 'basic_search') || ($env{'form.phase'} eq 'adv_search')) { @@ -465,7 +474,7 @@ sub setup_basic_search { my ($r,$area,$hidden_fields,$closebutton) = @_; # Define interface components my %lt = &Apache::lonlocal::texthash ( - res => 'LON-CAPA Catalog Search', + res => 'Content Library Search', portfolio => 'Portfolio Search', ); my ($userelatedwords,$onlysearchdomain,$inclext,$adv_search_link,$scrout); @@ -479,14 +488,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 = '' .&mt('Type:').' ' .&Apache::lonmeta::selectbox('viewselect', - $env{'form.viewselect'}, + $env{'form.viewselect'},'', \&viewoptiontext, sort(keys(%Views))) .''; my $countselect = &Apache::lonmeta::selectbox('show', - $env{'form.show'}, + $env{'form.show'},'', undef, (10,20,50,100,1000,10000)); $scrout .= ' ' @@ -1852,6 +1892,8 @@ sub build_date_queries { my (undef,undef,undef,$cbday,$cbmon,$cbyear) = localtime($cbefore); # Correct for year being relative to 1900 $cayear+=1900; $cbyear+=1900; + # Correct month; localtime gives month 0..11 but MySQL expects 1..12 + $camon++; $cbmon++; my $cquery= '(creationdate BETWEEN '. "'".$cayear.'-'.$camon.'-'.$caday."'". @@ -1870,6 +1912,8 @@ sub build_date_queries { my (undef,undef,undef,$mbday,$mbmon,$mbyear) = localtime($mbefore); # Correct for year being relative to 1900 $mayear+=1900; $mbyear+=1900; + # Correct month; localtime gives month 0..11 but MySQL expects 1..12 + $mamon++; $mbmon++; my $mquery= '(lastrevisiondate BETWEEN '. "'".$mayear.'-'.$mamon.'-'.$maday."'". @@ -1912,10 +1956,11 @@ sub copyright_check { 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') && @@ -2018,7 +2063,7 @@ a link to change the search query. ###################################################################### ###################################################################### sub print_sort_form { - my ($r,$pretty_query_string) = @_; + my ($r,$pretty_query_string,$target) = @_; ## my %SortableFields=&Apache::lonlocal::texthash( @@ -2051,27 +2096,20 @@ sub print_sort_form { &Apache::lonnet::logthis(&Apache::lonmysql::get_error()); return; } - # update results - my $newloc = '/adm/searchcat?phase=results&persistent_db_id='. - $env{'form.persistent_db_id'}; - my $js =< - var frame = parent.resultsframe; - var frameDoc = frame.document; - if (frameDoc.readyState == 'complete') - frame.location = "$newloc"; - -END - - my $start_page = &Apache::loncommon::start_page('Results',$js); + my $args; + if ($target eq '_parent') { + $args = {'links_target' => $target}; + } + my $start_page = &Apache::loncommon::start_page('Results',undef,$args); my $breadcrumbs= &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching', - $env{'form.catalogmode'} ne 'import'); + $env{'form.catalogmode'} ne 'import', + '','','','','','',$target); my $result = < +
END @@ -2233,10 +2271,7 @@ sub reload_result_frame { $env{'form.persistent_db_id'}; $r->print(< - var frame = parent.resultsframe; - var frameDoc = frame.document; - if (frameDoc.readyState == 'complete') - frame.location = "$newloc"; + parent.update_results("$newloc"); SCRIPT @@ -2325,7 +2360,7 @@ results into MySQL. ###################################################################### sub run_search { my ($r,$query,$customquery,$customshow,$serverlist, - $pretty_string,$area,$domainsref) = @_; + $pretty_string,$area,$domainsref,$target) = @_; my $tabletype = 'metadata'; if ($area eq 'portfolio') { $tabletype = 'portfolio_search'; @@ -2334,10 +2369,15 @@ sub run_search { # # Print run_search header # - my $start_page = &Apache::loncommon::start_page('Search Status',undef); + my $args; + if ($target eq '_parent') { + $args = {'links_target' => $target}; + } + my $start_page = &Apache::loncommon::start_page('Search Status',undef,$args); my $breadcrumbs = &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching', - $env{'form.catalogmode'} ne 'import'); + $env{'form.catalogmode'} ne 'import', + '','','','','','',$target); $r->print(<aborted()); if ($oldhitcountsum < $hitcountsum) { &update_count_status($r,$hitcountsum); - if ($hitcountsum <= $env{'form.show'}) { + if (($hitcountsum <= $env{'form.show'}) || + (!$displaycount && $hitcountsum)) { reload_result_frame($r); + $displaycount = $hitcountsum; } $oldhitcountsum = $hitcountsum; } @@ -3176,6 +3217,14 @@ SCRIPT SCRIPT + $js.=< + \$(document).ready(function() { + parent.done_loading_results(); + }); + +SCRIPT + my $start_page = &Apache::loncommon::start_page(undef,$js, {'only_body' =>1, 'add_wishlist' =>1, @@ -3206,10 +3255,28 @@ sub print_frames_interface { my $results_link = &results_link(); my $js = < -// + +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); + } +} JS @@ -3321,7 +3388,7 @@ sub detailed_citation_view { ''.$prefix. ''.' '. ''.$values{'title'}."\n". + 'target="preview" onclick="openMyModal(this.href, 500, 500, \'yes\');return false;">'.$values{'title'}."\n". &display_tools($values{'title'}, $jumpurl). "

\n". ''.$values{'author'}.','. @@ -3454,7 +3521,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).< $link
@@ -3500,7 +3567,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'}.')'; @@ -3516,12 +3583,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; }