--- loncom/interface/lonsearchcat.pm 2022/05/29 21:59:55 1.331.4.16.2.1 +++ 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.331.4.16.2.1 2022/05/29 21:59:55 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,7 @@ 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')) || @@ -308,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'; } @@ -399,7 +399,7 @@ END } } return OK; -} +} # # The mechanism used to store values away and retrieve them does not @@ -442,7 +442,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. @@ -474,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); @@ -504,7 +504,7 @@ sub setup_basic_search { } else { $singledom = $env{'user.domain'}; $disabled = ' disabled="disabled"'; - $checked = 1; + $checked = 1; } $onlysearchdomain = ''; my $countselect = &Apache::lonmeta::selectbox('show', - $env{'form.show'}, + $env{'form.show'},'','', undef, (10,20,50,100,1000,10000)); - $scrout .= ' ' + $scrout .= ' '.$/; + .''.$/; return $scrout; } @@ -1261,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=''; @@ -2094,20 +2135,6 @@ sub print_sort_form { &Apache::lonnet::logthis(&Apache::lonmysql::get_error()); return; } - my $js =< -// - -END - my $args; if ($target eq '_parent') { $args = {'links_target' => $target}; @@ -2117,10 +2144,10 @@ END &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching', $env{'form.catalogmode'} ne 'import', '','','','','','',$target); - my $result = <
@@ -2143,7 +2170,7 @@ END .' '.$revise.'

' .'

'.&mt('Search: ').$pretty_query_string .'

'; - $r->print($result.&Apache::loncommon::end_page()); + $r->print($result.''.&Apache::loncommon::end_page()); return; } @@ -2393,6 +2420,7 @@ sub run_search { $r->print(< END # Remove leading and trailing
$pretty_string =~ s:^\s*
::i; @@ -2437,8 +2465,6 @@ END %all_library_servers = (%library_servers,%older_library_servers); @Servers_to_contact = sort(keys(%all_library_servers)); foreach my $server (@Servers_to_contact) { - my %possdoms; - map { $possdoms{$_}=1; } &Apache::lonnet::machine_domains($all_library_servers{$server}); $domains_by_server{$server} = join(',',sort(&Apache::lonnet::machine_domains($all_library_servers{$server}))); } @@ -2525,7 +2551,7 @@ END &update_status($r, &mt('waiting on [_1]',join(' ',keys(%Server_status)))); } - sleep(0.1); + sleep(0.1); } # # Loop through the servers we have contacted but do not @@ -2578,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; } # @@ -2622,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(< @@ -2686,7 +2712,8 @@ sub display_results { if (!defined($viewfunction)) { $r->print('

' .&mt('Internal Error - Bad view selected.') - .'

'."\n"); + .'

'."\n" + .''.&Apache::loncommon::end_page()); $r->rflush(); return; } @@ -2708,15 +2735,15 @@ sub display_results { $r->print('

'. &mt('Unable to save import results.'). '

'. - ''. + ''. &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 @@ -2729,7 +2756,7 @@ sub display_results { $r->print('

'. &mt('A MySQL error has occurred.'). '

'. - ''. + ''. &Apache::loncommon::end_page()); &Apache::lonnet::logthis("lonmysql was unable to determine the number". " of rows in table ".$table); @@ -2834,17 +2861,18 @@ sub display_results { $env{'form.sortorder'}='asc'; } } - my $sortform = '' - .&mt('Sort by:').' ' + my $sortform = '' + .&mt('Sort by:').' ' .&Apache::loncommon::select_form($env{'form.sortfield'}, - 'sortfield', - \%sort_fields) + 'sortfield', + \%sort_fields,'','','', + 'LC_sortby') .' ' .&Apache::loncommon::select_form($env{'form.sortorder'}, - 'sortorder', - {asc =>&mt('Ascending'), - desc=>&mt('Descending') - }) + 'sortorder', + {asc =>&mt('Ascending'), + desc=>&mt('Descending') + },'','','','LC_sortby') .''; ## ## Display links for 'prev' and 'next' pages (if necessary) and Display Options @@ -2858,15 +2886,15 @@ sub display_results { ); if ($total_results == 0) { - $r->print('

'.&mt('There are currently no results.').'

'. - "". + $r->print('

'.&mt('There are currently no results.').'

'. + ''. &Apache::loncommon::end_page()); return; } else { - $r->print('
'. + $r->print('

'. mt('Results [_1] to [_2] out of [_3]', $min,$max,$total_results). - "

\n"); + "\n"); } ## ## Get results from MySQL table @@ -2896,7 +2924,14 @@ sub display_results { if ($area eq 'portfolio') { $tabletype = 'portfolio_search'; } - $r->print(&Apache::loncommon::start_data_table()); + $r->print(&Apache::loncommon::start_data_table(). + &Apache::loncommon::start_data_table_header_row(). + ''.&mt('Data').''); + if (($env{'form.viewselect'} eq 'detailedpreview') || + ($env{'form.viewselect'} eq 'summarypreview')) { + $r->print(''.&mt('Preview').''); + } + $r->print(&Apache::loncommon::end_data_table_header_row()); foreach my $row (@Results) { if ($connection->aborted()) { &cleanup(); @@ -2934,7 +2969,7 @@ sub display_results { $env{'form.persistent_db_id'}) ); } - $r->print("".&Apache::loncommon::end_page()); + $r->print(''.&Apache::loncommon::end_page()); $r->rflush(); untie %groupsearch_db if (tied(%groupsearch_db)); return; @@ -3245,6 +3280,7 @@ SCRIPT 'add_modal' =>1}); my $result=<
$importbutton END @@ -3603,7 +3639,7 @@ sub display_url { # (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;\""; + my $onclick = " onclick=\"window.open(this.href, '_blank', 'toolbar=1,location=1,menubar=0');return false;\""; $link=&Apache::lonhtmlcommon::crumbs( $url, 'preview',