--- loncom/interface/lonsearchcat.pm 2009/07/31 10:58:57 1.312 +++ loncom/interface/lonsearchcat.pm 2013/01/07 22:20:58 1.331.4.4 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Search Catalog # -# $Id: lonsearchcat.pm,v 1.312 2009/07/31 10:58:57 bisitz Exp $ +# $Id: lonsearchcat.pm,v 1.331.4.4 2013/01/07 22:20:58 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -78,6 +78,7 @@ use HTML::Entities(); use Parse::RecDescent; use Apache::lonnavmaps; use Apache::lonindexer(); +use Apache::lonwishlist(); use LONCAPA; ###################################################################### @@ -118,8 +119,6 @@ sub handler { # This is set and used in &handler() and is also used in # &output_results(). - my $loaderror=&Apache::lonnet::overloaderror($r); - if ($loaderror) { return $loaderror; } # my $closebutton; # button that closes the search window # This button is different for the RAT compared to @@ -153,7 +152,8 @@ sub handler { ## Initialize global variables ## my $domain = $r->dir_config('lonDefDomain'); - $diropendb= "/home/httpd/perl/tmp/". + my $temp_file_dir = LONCAPA::tempdir(); + $diropendb= $temp_file_dir . "$env{'user.domain'}_$env{'user.name'}_sel_res.db"; # # set the name of the persistent database @@ -164,7 +164,7 @@ sub handler { $env{'form.persistent_db_id'} = time; } - my $persistent_db_file = "/home/httpd/perl/tmp/". + my $persistent_db_file = $temp_file_dir . &escape($domain). '_'.&escape($env{'user.name'}). '_'.$env{'form.persistent_db_id'}.'_persistent_search.db'; @@ -175,18 +175,9 @@ sub handler { if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) { push(@allowed_searches,'res'); } - if (exists($env{'request.course.id'}) && $env{'request.course.id'} ne '') { - push(@allowed_searches,'course'); - } my $crumb_text = 'Portfolio Search'; - if (@allowed_searches == 3) { - $crumb_text = 'Course, Portfolio and Catalog Search'; - } elsif (@allowed_searches ==2) { - if (grep(/^res$/,@allowed_searches)) { - $crumb_text = 'Portfolio and Catalog Search'; - } elsif (grep(/^course$/,@allowed_searches)) { - $crumb_text = 'Portfolio and Course Search'; - } + if (@allowed_searches ==2) { + $crumb_text = 'Portfolio and Catalog Search'; } &Apache::lonhtmlcommon::add_breadcrumb ({href=>'/adm/searchcat?'. @@ -266,25 +257,25 @@ sub handler { ## Configure dynamic components of interface ## if ($env{'form.catalogmode'} eq 'interactive') { - $closebutton=" +onclick='javascript:select_group()' /> END } else { $closebutton = ''; @@ -303,8 +294,6 @@ END if ($env{'form.phase'} eq 'adv_search' || $env{'form.phase'} eq 'disp_adv') { $env{'form.searchmode'} = 'advanced'; - } elsif ($env{'form.phase'} eq 'course_search') { - $env{'form.searchmode'} = 'course_search'; } # if ($env{'form.searchmode'} eq 'advanced') { @@ -320,16 +309,7 @@ END '&mode='.$env{'form.mode'}, text=>"Advanced $srchtype Search", bug=>'Searching',}); - } elsif ($env{'form.searchmode'} eq 'course search') { - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>'/adm/searchcat?'.&Apache::loncommon::inhibit_menu_check(). - '&phase=disp_adv'. - 'catalogmode='.$env{'form.catalogmode'}. - '&launch='.$env{'form.launch'}. - '&mode='.$env{'form.mode'}, - text=>"Course Search", - bug=>'Searching',}); - } + } ## ## Switch on the phase ## @@ -351,8 +331,6 @@ END &run_search($r,$query,$customquery,$customshow, $libraries,$pretty_string,$env{'form.area'}); } - } elsif ($env{'form.phase'} eq 'course_search') { - &course_search($r); } elsif(($env{'form.phase'} eq 'basic_search') || ($env{'form.phase'} eq 'adv_search')) { # @@ -448,244 +426,6 @@ sub hidden_field { } ###################################################################### -###################################################################### -## -## Course Search -## -###################################################################### -###################################################################### -{ # Scope the course search to avoid global variables -# -# Variables For course search -my %alreadyseen; -my %hash; -my $totalfound; - -sub make_symb { - my ($id)=@_; - my ($mapid,$resid)=split(/\./,$id); - my $map=$hash{'map_id_'.$mapid}; - my $res=$hash{'src_'.$id}; - my $symb=&Apache::lonnet::encode_symb($map,$resid,$res); - return $symb; -} - -sub course_search { - my $r=shift; - my $pretty_search_string = ''.$env{'form.courseexp'}.''; - my $search_string = $env{'form.courseexp'}; - my @New_Words; - undef(%alreadyseen); - if ($env{'form.crsrelated'}) { - ($search_string,@New_Words) = &related_version($env{'form.courseexp'}); - if (@New_Words) { - $pretty_search_string .= ' '.&mt("with related words").": @New_Words."; - } else { - $pretty_search_string .= ' '.&mt('with no related words')."."; - } - } - my $fulltext=$env{'form.crsfulltext'}; - my $discuss=$env{'form.crsdiscuss'}; - my @allwords=($search_string,@New_Words); - $totalfound=0; - - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>'/adm/searchcat?'.&Apache::loncommon::inhibit_menu_check(). - '&phase=disp_adv'. - 'catalogmode='.$env{'form.catalogmode'}. - '&launch='.$env{'form.launch'}. - '&mode='.$env{'form.mode'}, - text=>"Course Search", - bug=>'Searching',}); - $r->print(&Apache::loncommon::start_page('Course Search')); - $r->print(&Apache::lonhtmlcommon::breadcrumbs('Searching','Searching', - $env{'form.catalogmode'} ne 'import')); - - $r->print( - '
'.&mt('No matches found in resources.').'
'); - } - -# Check discussions if requested - if ($discuss) { - my $totaldiscussions = 0; - $r->print(''.&mt('No matches found in postings.').'
'); - } - } else { - $r->print('-$lt{'note'}. -
-
-ENDCOURSESEARCH
- $scrout.=' '.
- &Apache::lonhtmlcommon::textbox('courseexp',
- $env{'form.courseexp'},40);
- my $crscheckbox =
- &Apache::lonhtmlcommon::checkbox('crsfulltext',
- $env{'form.crsfulltext'});
- my $relcheckbox =
- &Apache::lonhtmlcommon::checkbox('crsrelated',
- $env{'form.crsrelated'});
- my $discheckbox =
- &Apache::lonhtmlcommon::checkbox('crsdiscuss',
- $env{'form.crsrelated'});
- $scrout.=(< | |
- -
-' + .&viewoptions() + .'
' + .'' + .'' + .' ' + .$closebutton + .'
'; # - $scrout .= '$closebutton +
END my $srchtype = 'Catalog'; my $jscript; if ($env{'form.area'} eq 'portfolio') { $srchtype = 'Portfolio'; $jscript = ''; } my $scrout= &Apache::loncommon::start_page("Advanced $srchtype Search", $jscript); - $scrout .= <<"ENDHEADER"; -$bread_crumb -'; + $scrout .= &Apache::loncommon::end_page(); $r->print($scrout); return; @@ -1172,21 +904,23 @@ Outputs: text for box with view options ###################################################################### ###################################################################### sub viewoptions { - my $scrout = ''; + my $scrout; if (! defined($env{'form.viewselect'})) { $env{'form.viewselect'}='detailed'; } - $scrout.=&Apache::lonmeta::selectbox('viewselect', - $env{'form.viewselect'}, - \&viewoptiontext, - sort(keys(%Views))); - $scrout.= ' '; + $scrout .= '' + .&mt('Type:').' ' + .&Apache::lonmeta::selectbox('viewselect', + $env{'form.viewselect'}, + \&viewoptiontext, + sort(keys(%Views))) + .''; my $countselect = &Apache::lonmeta::selectbox('show', $env{'form.show'}, undef, (10,20,50,100,1000,10000)); - $scrout .= (' 'x2) - .&mt('[_1] Records per Page',$countselect) + $scrout .= ' ' + .&mt('Records per Page:').' '.$countselect .''.$/; return $scrout; } @@ -1695,7 +1429,7 @@ sub parse_domain_restrictions { foreach (sort @allowed_domains) { $pretty_domains_string .= "".$_." "; } - my %servers = &Apache::lonnet::get_servers(\@allowed_domains, + my %servers = &Apache::lonnet::get_unique_servers(\@allowed_domains, 'library'); $libraries_to_query = [keys(%servers)]; } @@ -2047,14 +1781,14 @@ sub build_date_queries { if ((defined($cafter) && ! defined($cbefore)) || (defined($cbefore) && ! defined($cafter))) { # This is bad, so let them know - $error = &mt('Incorrect entry for the creation date. '. + $error = &mt('Incorrect entry for the creation date. '. 'You must specify both the beginning and ending dates.'); } if (! defined($error) && ((defined($mafter) && ! defined($mbefore)) || (defined($mbefore) && ! defined($mafter)))) { # This is also bad, so let them know - $error = &mt('Incorrect entry for the last revision date. '. + $error = &mt('Incorrect entry for the last revision date. '. 'You must specify both the beginning and ending dates.'); } if (! defined($error)) { @@ -2167,9 +1901,13 @@ sub ensure_db_and_table { ## Sanity check the table id. ## if (! defined($table) || $table eq '' || $table =~ /\D/ ) { - $r->print("Unable to retrieve search results. ". - "Unable to determine the table results were saved in. ". - &Apache::loncommon::end_page()); + $r->print(&Apache::loncommon::start_page(&mt('Error')) +. 'table: |'.$table.'|
' # SB + .'' + .&mt('Unable to retrieve search results. ' + .'Unable to determine the table results were saved in.') + .&Apache::loncommon::end_page() + ); return undef; } ## @@ -2177,9 +1915,12 @@ sub ensure_db_and_table { ## my $connection_result = &Apache::lonmysql::connect_to_db(); if (!defined($connection_result)) { - $r->print("Unable to connect to the MySQL database where your results". - " are saved.". - &Apache::loncommon::end_page()); + $r->print( + '
' + .&mt('Unable to connect to the MySQL database where your results are saved.') + .'
' + .&Apache::loncommon::end_page() + ); &Apache::lonnet::logthis("lonsearchcat: unable to get lonmysql to". " connect to database."); &Apache::lonnet::logthis(&Apache::lonmysql::get_error()); @@ -2187,13 +1928,20 @@ sub ensure_db_and_table { } my $table_check = &Apache::lonmysql::check_table($table); if (! defined($table_check)) { - $r->print("A MySQL error has occurred.". - &Apache::loncommon::end_page()); + $r->print( + '' + .&mt('A MySQL error has occurred.') + .'
' + .&Apache::loncommon::end_page()); &Apache::lonnet::logthis("lonmysql was unable to determine the status". " of table ".$table); return undef; } elsif (! $table_check) { - $r->print("The table of results could not be found."); + $r->print( + '' + .&mt('The table of results could not be found.') + .'
' + ); &Apache::lonnet::logthis("The user requested a table, ".$table. ", that could not be found."); return undef; @@ -2251,13 +1999,15 @@ sub print_sort_form { } my $js =<'. - ''.$sortform.''. - ' | '. - &prev_next_buttons($min,$env{'form.show'},$total_results). - ' | '. - &viewoptions().' |
'.&mt('There are currently no results').'.
'. + ''.&mt('There are currently no results.').'
'. "". &Apache::loncommon::end_page()); return; @@ -2995,15 +2768,13 @@ sub display_results { .&mt('There were no results matching your query.') .''); } else { - $r->print - ('\n"; - $result .= ''.$values{'author'}.','. + 'target="preview">'.$values{'title'}."\n". + &display_tools($values{'title'}, $jumpurl). + "
\n".
+ ''.$values{'author'}.','.
' '.$values{'owner'}.' '.$closebutton.'
$errormsg
';
foreach my $field
(
@@ -3481,7 +3285,7 @@ sub detailed_citation_view {
$result .= ''.&mt($field->{'translate'}).'';
foreach my $item (split(',',$values{$field->{'name'}})){
$item = &Apache::lonnet::clutter($item);
- $result .= &display_url($item,[2,0,1]);
+ $result .= '
'.&display_url($item,1).'
';
}
} elsif (exists($field->{'format'}) && $field->{'format'} ne ''){
$result.= &mt($field->{'translate'},
@@ -3489,7 +3293,7 @@ sub detailed_citation_view {
$values{$field->{'name'}}))."
\n";
} else {
if ($field->{'special'} eq 'url link') {
- $result .= &display_url($jumpurl,[3,0,1]);
+ $result .= '
'.&display_url($jumpurl,1).'
';
} else {
$result.= &mt($field->{'translate'},
$values{$field->{'name'}});
@@ -3543,11 +3347,12 @@ sub summary_view {
}
my $jumpurl=$values{'url'};
$jumpurl=~s|^/ext/|http://|;
- my $link = &display_url($jumpurl,[2,0,1]);
-
- $result.=<
+ my $link = '
'.&display_url($jumpurl,1).'
';
+ $result .=
+ ''.$values{'title'}.''.
+ &display_tools($values{'title'}, $jumpurl).<
$values{'author'}, $values{'owner'} -- $values{'lastrevisiondate'}
$values{'copyrighttag'}
@@ -3579,7 +3384,7 @@ sub compact_view {
my $jumpurl=$values{'url'};
$jumpurl=~s|^/ext/|http://|;
- my $link = &display_url($jumpurl,[1,1,1]);
+ my $link = &display_url($jumpurl,1);
my $result =
$prefix.'';
@@ -3593,12 +3398,13 @@ sub compact_view {
$result.=' '.
''.
&HTML::Entities::encode($values{'title'},'<>&"').' '.
+ &display_tools($values{'title'}, $jumpurl).
$link.' '.$values{'author'}.' ('.$values{'domain'}.')';
return $result;
}
sub display_url {
- my ($url,$crumb_args) = @_;
+ my ($url,$skiplast) = @_;
my $link;
if ($url=~m|^/ext/|) {
$url=~s|^/ext/|http://|;
@@ -3606,10 +3412,12 @@ sub display_url {
} elsif ($url=~m{^(http://|/uploaded/)}) {
$link=''.$url.'';
} else {
- $link=&Apache::lonhtmlcommon::crumbs($url,
- 'preview',
- '',
- (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),@{$crumb_args}).' ';
+ $link=&Apache::lonhtmlcommon::crumbs(
+ $url,
+ 'preview',
+ '',
+ (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),
+ $skiplast).' ';
}
return $link;
}
@@ -3637,8 +3445,11 @@ $prefix
';
+ } else {
+ &Apache::lonhtmlcommon::add_breadcrumb
+ ({href=>'',
+ text=>$heading,});
+ $start_page .= &Apache::lonhtmlcommon::breadcrumbs();
+ }
+
$r->print(<
+
$heading