--- loncom/interface/lonsearchcat.pm 2017/08/10 22:49:01 1.352
+++ loncom/interface/lonsearchcat.pm 2025/03/19 15:18:59 1.362
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Catalog
#
-# $Id: lonsearchcat.pm,v 1.352 2017/08/10 22:49:01 raeburn Exp $
+# $Id: lonsearchcat.pm,v 1.362 2025/03/19 15:18:59 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -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')) {
@@ -390,7 +399,7 @@ END
}
}
return OK;
-}
+}
#
# The mechanism used to store values away and retrieve them does not
@@ -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);
@@ -538,7 +547,7 @@ sub setup_basic_search {
&Apache::lonhtmlcommon::textbox('basicexp',
$env{'form.basicexp'},50).
' '.
- ''.&searchhelp().' '.''.
+ ''.&searchhelp().' '.''.
'
'.
''.(' 'x3).$adv_search_link.' '.' '.
''.(' 'x1).$userelatedwords.' '.' '.
@@ -590,7 +599,7 @@ sub print_advanced_search_form{
$closebutton
END
- my $srchtype = 'Catalog';
+ my $srchtype = 'Content Library';
my $jscript;
if ($env{'form.area'} eq 'portfolio') {
$srchtype = 'Portfolio';
@@ -608,7 +617,7 @@ function additional_metadata() {
}
my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search",
$jscript);
- $scrout .= $bread_crumb;
+ $scrout .= $bread_crumb.''."\n";
$scrout .= '';
- $scrout .= &Apache::loncommon::end_page();
+ $scrout .= '
'.&Apache::loncommon::end_page();
$r->print($scrout);
return;
}
@@ -942,20 +992,20 @@ sub viewoptions {
if (! defined($env{'form.viewselect'})) {
$env{'form.viewselect'}='detailed';
}
- $scrout .= ''
+ $scrout .= ''
.&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 .= ' '
+ $scrout .= ' '
.&mt('Records per Page:').' '.$countselect
- .' '.$/;
+ .' '.$/;
return $scrout;
}
@@ -1252,7 +1302,7 @@ sub parse_advanced_search {
if (! $fillflag) {
&output_blank_field_error($r,$closebutton,
'phase=disp_adv',$hidden_fields);
- return ;
+ return;
}
# Turn the form input into a SQL-based query
my $query='';
@@ -1881,6 +1931,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."'".
@@ -1899,6 +1951,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."'".
@@ -2048,7 +2102,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(
@@ -2081,15 +2135,20 @@ sub print_sort_form {
&Apache::lonnet::logthis(&Apache::lonmysql::get_error());
return;
}
- my $start_page = &Apache::loncommon::start_page('Results',undef);
+ 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 = <
+
+
';
- $r->print($result.&Apache::loncommon::end_page());
+ $r->print($result.'
'.&Apache::loncommon::end_page());
return;
}
@@ -2340,7 +2399,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';
@@ -2349,13 +2408,19 @@ 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(<
END
# Remove leading and trailing
$pretty_string =~ s:^\s* ::i;
@@ -2539,8 +2604,8 @@ END
if ($area eq 'portfolio') {
next if (defined($matches{$Fields{'url'}}));
- # Skip if inaccessible
- next if (!&Apache::lonnet::portfolio_access($Fields{'url'}));
+ # Skip unless access control set to public or passphrase-protected
+ next unless (($Fields{'scope'} eq 'public') || ($Fields{'scope'} eq 'guest'));
$matches{$Fields{'url'}} = 1;
}
#
@@ -2583,7 +2648,7 @@ END
# We have run out of time or run out of servers to talk to and
# results to get, so let the client know the top frame needs to be
# loaded from /adm/searchcat
- $r->print(&Apache::loncommon::end_page());
+ $r->print(''.&Apache::loncommon::end_page());
# if ($env{'form.catalogmode'} ne 'import') {
$r->print(<
JS