--- loncom/interface/lonsearchcat.pm 2023/12/30 03:45:44 1.359 +++ 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.359 2023/12/30 03:45:44 raeburn Exp $ +# $Id: lonsearchcat.pm,v 1.362 2025/03/19 15:18:59 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -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 @@ -547,7 +547,7 @@ sub setup_basic_search { &Apache::lonhtmlcommon::textbox('basicexp', $env{'form.basicexp'},50). '
'. - ''.&searchhelp().''.''. + ''.&searchhelp().''.''. ''. ''.(' 'x3).$adv_search_link.''.'
'. ''.(' 'x1).$userelatedwords.''.'
'. @@ -599,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'; @@ -617,7 +617,7 @@ function additional_metadata() { } my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search", $jscript); - $scrout .= $bread_crumb; + $scrout .= $bread_crumb.'
'."\n"; $scrout .= '
' .$hidden_fields @@ -636,7 +636,7 @@ function additional_metadata() { # Standard Metadata $scrout .= &Apache::lonhtmlcommon::row_headline() - .'

'.&mt("Standard $srchtype Metadata").'

' + .'

'.&mt("Standard $srchtype Metadata").'

' .&searchhelp() .&Apache::lonhtmlcommon::row_closure(); my %related_word_search = @@ -656,24 +656,26 @@ function additional_metadata() { foreach my $field ('title','author','subject','owner','authorspace', 'modifyinguser','keywords','notes','abstract', 'standards','mime') { - $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield($fields{$field})) + $scrout .= &Apache::lonhtmlcommon::row_title('') .&Apache::lonmeta::prettyinput($field, $env{'form.'.$field},'', $field, 'advsearch', $related_word_search{$field}, - '', + '  ', $env{'form.'.$field.'_related'}, 50); if ($related_word_search{$field}) { - $scrout .= &mt('related words'); + $scrout .= ''; } else { $scrout .= ''; } $scrout .= &Apache::lonhtmlcommon::row_closure(); } foreach my $field ('lowestgradelevel','highestgradelevel') { - $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield($fields{$field})) + $scrout .= &Apache::lonhtmlcommon::row_title('') .&Apache::lonmeta::prettyinput($field, $env{'form.'.$field},'', $field, @@ -682,9 +684,10 @@ function additional_metadata() { .&Apache::lonhtmlcommon::row_closure(); } - $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('MIME Type Category'))) + $scrout .= &Apache::lonhtmlcommon::row_title('') .&Apache::loncommon::filecategoryselect('category', - $env{'form.category'}) + $env{'form.category'},'category') .&Apache::lonhtmlcommon::row_closure(); my $anydomain = 1; @@ -694,23 +697,27 @@ function additional_metadata() { } } - $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('Domains'))); + $scrout .= &Apache::lonhtmlcommon::row_title(''); if ($anydomain) { my $defdom = &Apache::lonnet::default_login_domain(); my ($trusted,$untrusted) = &Apache::lonnet::trusted_domains('shared',$defdom); $scrout .= &Apache::loncommon::domain_select('domains', - $env{'form.domains'},1,$trusted,$untrusted); + $env{'form.domains'},1,$trusted,$untrusted,'domains'); } else { $scrout .= &Apache::loncommon::select_dom_form($env{'user.domain'}, - 'domains','','','',[$env{'user.domain'}],'',1); + 'domains','','','', + [$env{'user.domain'}],'',1,'domains'); } $scrout .= &Apache::lonhtmlcommon::row_closure(); # Misc metadata if ($env{'form.area'} ne 'portfolio') { - $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('Copyright/Distribution'))) + $scrout .= &Apache::lonhtmlcommon::row_title('') .&Apache::lonmeta::selectbox('copyright', $env{'form.copyright'},'', + 'copyright', \&Apache::loncommon::copyrightdescription, ( undef, &Apache::loncommon::copyrightids) @@ -718,9 +725,10 @@ function additional_metadata() { .&Apache::lonhtmlcommon::row_closure(); } - $scrout .= &Apache::lonhtmlcommon::row_title(&titlefield(&mt('Language'))) + $scrout .= &Apache::lonhtmlcommon::row_title('') .&Apache::lonmeta::selectbox('language', - $env{'form.language'},'', + $env{'form.language'},'','language', \&Apache::loncommon::languagedescription, ('any',&Apache::loncommon::languageids) ) @@ -733,26 +741,32 @@ function additional_metadata() { if ($curnumadd eq '') { $curnumadd = 1; } + my $customlabel = &mt('Text box description'); $scrout .= &Apache::lonhtmlcommon::row_headline() .'

'.&mt('Custom Metadata fields').'

' .&Apache::lonhtmlcommon::row_closure() - .&Apache::lonhtmlcommon::row_title('') + .&Apache::lonhtmlcommon::row_title(''.$customlabel.'', + '','','',1) .&mt('Field Name').' | '.&mt('Field Value(s)') .&Apache::lonhtmlcommon::row_closure(); for (my $j=0; $j<$curnumadd; $j++) { my $num = $j+1; + my $namelabel = &mt('name of custom metadata field [_1]',$num); + my $valuelabel = &mt('value of custom metadata field [_1]',$num); $scrout .= &Apache::lonhtmlcommon::row_title(&mt('Custom metadata [_1]',$num)) - .'' + .' value="'.$env{'form.addedfield_'.$j}.'" aria-label="'.$namelabel.'" />' .' ' .'' + .' value="'.$env{'form.addedvalues_'.$j}.'" aria-label="'.$valuelabel.'" />' .&Apache::lonhtmlcommon::row_closure(); } - $scrout .= &Apache::lonhtmlcommon::row_title('') + my $addcustomlabel = &mt('Add metadata field option'); + $scrout .= &Apache::lonhtmlcommon::row_title(''.$addcustomlabel.'', + '','','',1) .'
'.&Apache::loncommon::end_page(); $r->print($scrout); return; } @@ -953,20 +992,20 @@ sub viewoptions { if (! defined($env{'form.viewselect'})) { $env{'form.viewselect'}='detailed'; } - $scrout .= '' + $scrout .= ''; + .''; my $countselect = &Apache::lonmeta::selectbox('show', - $env{'form.show'},'', + $env{'form.show'},'','', undef, (10,20,50,100,1000,10000)); - $scrout .= ' ' + $scrout .= ' '.$/; + .''.$/; return $scrout; } @@ -1263,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=''; @@ -2105,10 +2144,10 @@ sub print_sort_form { &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching', $env{'form.catalogmode'} ne 'import', '','','','','','',$target); - my $result = <
@@ -2131,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; } @@ -2381,6 +2420,7 @@ sub run_search { $r->print(< END # Remove leading and trailing
$pretty_string =~ s:^\s*
::i; @@ -2608,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(< @@ -2672,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; } @@ -2694,7 +2735,7 @@ sub display_results { $r->print('

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

'. - ''. + ''. &Apache::loncommon::end_page()); $r->rflush(); return; @@ -2715,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); @@ -2820,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 @@ -2844,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 @@ -2882,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(); @@ -2920,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; @@ -3231,6 +3280,7 @@ SCRIPT 'add_modal' =>1}); my $result=<
$importbutton END @@ -3255,6 +3305,7 @@ sub print_frames_interface { my $results_link = &results_link(); my $js = < +// JS