--- loncom/interface/lonsearchcat.pm 2006/03/15 20:56:16 1.256 +++ loncom/interface/lonsearchcat.pm 2006/06/29 16:08:43 1.271 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Search Catalog # -# $Id: lonsearchcat.pm,v 1.256 2006/03/15 20:56:16 albertel Exp $ +# $Id: lonsearchcat.pm,v 1.271 2006/06/29 16:08:43 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -78,6 +78,8 @@ use HTML::Entities(); use Parse::RecDescent; use Apache::lonnavmaps; use Apache::lonindexer(); +use lib '/home/httpd/lib/perl/'; +use LONCAPA; ###################################################################### ###################################################################### @@ -116,9 +118,6 @@ sub handler { my $diropendb; # The full path to the (temporary) search database file. # This is set and used in &handler() and is also used in # &output_results(). - my $bodytag; # LON-CAPA standard body tag, gotten from - # &Apache::lonnet::bodytag. - # No title, no table, just a tag. my $loaderror=&Apache::lonnet::overloaderror($r); if ($loaderror) { return $loaderror; } @@ -156,7 +155,7 @@ sub handler { ## my $domain = $r->dir_config('lonDefDomain'); $diropendb= "/home/httpd/perl/tmp/". - "$env{'user.domain'}_$env{'user.name'}_searchcat.db"; + "$env{'user.domain'}_$env{'user.name'}_sel_res.db"; # # set the name of the persistent database # $env{'form.persistent_db_id'} can only have digits in it. @@ -165,10 +164,10 @@ sub handler { ($env{'form.launch'} eq '1')) { $env{'form.persistent_db_id'} = time; } - $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1); + my $persistent_db_file = "/home/httpd/perl/tmp/". - &Apache::lonnet::escape($domain). - '_'.&Apache::lonnet::escape($env{'user.name'}). + &escape($domain). + '_'.&escape($env{'user.name'}). '_'.$env{'form.persistent_db_id'}.'_persistent_search.db'; ## &Apache::lonhtmlcommon::clear_breadcrumbs(); @@ -202,7 +201,9 @@ sub handler { 'We were unable to retrieve data describing your search. '. 'This is a serious error and has been logged. '. 'Please alert your LON-CAPA administrator.'; - return &error_page($r,$msg); + &Apache::loncommon::simple_error_page($r,'Search Error', + $msg); + return OK; } } } else { @@ -214,7 +215,7 @@ sub handler { untie %groupsearch_db if (tied(%groupsearch_db)); if (($env{'form.cleargroupsort'} eq '1') || (($env{'form.launch'} eq '1') && - ($env{'form.catalogmode'} eq 'groupsearch'))) { + ($env{'form.catalogmode'} eq 'import'))) { if (tie(%groupsearch_db,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) { &start_fresh_session(); untie %groupsearch_db; @@ -223,7 +224,9 @@ sub handler { # This is a stupid error to give to the user. # It really tells them nothing. my $msg = 'Unable to tie hash to db file.'; - return &error_page($r,$msg); + &Apache::loncommon::simple_error_page($r,'Search Error', + $msg); + return OK; } } ## @@ -257,7 +260,7 @@ sub handler { $closebutton .="onClick='self.close()'"; } $closebutton .=">\n"; - } elsif ($env{'form.catalogmode'} eq 'groupsearch') { + } elsif ($env{'form.catalogmode'} eq 'import') { $closebutton="print(&Apache::loncommon::start_page('Search Error'). - &mt($msg). - &Apache::loncommon::end_page()); - return OK; -} - # # The mechanism used to store values away and retrieve them does not # handle the case of missing environment variables being significant. @@ -554,7 +553,7 @@ sub course_search { } else { $url .= '?symb='; } - $url .= &Apache::lonnet::escape($resource->symb()); + $url .= &escape($resource->symb()); my $title = $resource->compTitle(); $r->print('
'. ($title?$title:$url).'  - '.$disctype.'
'); @@ -590,7 +589,7 @@ sub checkonthis { my ($extension)=($url=~/\.(\w+)$/); if (&Apache::loncommon::fileembstyle($extension) eq 'ssi' && ($url) && ($fulltext)) { - $result.=&Apache::lonnet::ssi_body($url.'?symb='.&Apache::lonnet::escape($symb)); + $result.=&Apache::lonnet::ssi_body($url.'?symb='.&escape($symb)); } $result=~s/\s+/ /gs; my $applies = 0; @@ -606,7 +605,7 @@ sub checkonthis { $href=&Apache::lonenc::encrypted($href) .'?symb='.&Apache::lonenc::encrypted($symb); } else { - $href.='?symb='.&Apache::lonnet::escape($symb); + $href.='?symb='.&escape($symb); } $r->print(''.($title?$title:$url). '
'); @@ -661,11 +660,10 @@ Prints the form for the basic search. S ###################################################################### sub print_basic_search_form { my ($r,$closebutton,$hidden_fields) = @_; - my $result = ($env{'form.catalogmode'} ne 'groupsearch'); + my $result = ($env{'form.catalogmode'} ne 'import'); my $bread_crumb = - &Apache::lonhtmlcommon::breadcrumbs(undef,'Searching','Search_Basic', - undef,undef, - $env{'form.catalogmode'} ne 'groupsearch'); + &Apache::lonhtmlcommon::breadcrumbs('Searching','Search_Basic', + $env{'form.catalogmode'} ne 'import'); my $scrout = &Apache::loncommon::start_page('Search').$bread_crumb; if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) { # Define interface components @@ -707,10 +705,8 @@ sub print_basic_search_form { } $scrout.=''. ''. '
'. - &Apache::lonhtmlcommon::textbox - ('basicexp', - &HTML::Entities::encode($env{'form.basicexp'},'<>&"'),50 - ). + &Apache::lonhtmlcommon::textbox('basicexp', + $env{'form.basicexp'},50). '
'. ''.&searchhelp().''.'
'. @@ -797,10 +793,8 @@ Prints the advanced search form. sub print_advanced_search_form{ my ($r,$closebutton,$hidden_fields) = @_; my $bread_crumb = - &Apache::lonhtmlcommon::breadcrumbs(undef,'Searching', - 'Search_Advanced', - undef,undef, - $env{'form.catalogmode'} ne 'groupsearch'); + &Apache::lonhtmlcommon::breadcrumbs('Searching','Search_Advanced', + $env{'form.catalogmode'} ne 'import'); my %lt=&Apache::lonlocal::texthash('srch' => 'Search', 'reset' => 'Reset', 'help' => 'Help'); @@ -1155,7 +1149,7 @@ sub get_persistent_form_data { # End kludge (hopefully) next if (exists($env{$name})); my @values = map { - &Apache::lonnet::unescape($_); + &unescape($_); } split(',',$persistent_db{$name}); next if (@values <1); if ($arrays_allowed{$name}) { @@ -1201,7 +1195,7 @@ sub get_persistent_data { next; } my @values = map { - &Apache::lonnet::unescape($_); + &unescape($_); } split(',',$persistent_db{$name}); if (@values <= 1) { push @Values,$values[0]; @@ -1238,7 +1232,7 @@ sub make_persistent { foreach my $name (keys(%save)) { my @values = (ref($save{$name}) ? @{$save{$name}} : ($save{$name})); # We handle array references, but not recursively. - my $store = join(',', map { &Apache::lonnet::escape($_); } @values ); + my $store = join(',', map { &escape($_); } @values ); $persistent_db{$name} = $store; } untie(%persistent_db); @@ -1321,7 +1315,7 @@ sub parse_advanced_search { foreach ('mode','form','element') { # is this required? Hmmm. next if (! exists($env{'form.'.$_})); - $env{'form.'.$_}=&Apache::lonnet::unescape($env{'form.'.$_}); + $env{'form.'.$_}=&unescape($env{'form.'.$_}); $env{'form.'.$_}=~s/[^\w\/\s\(\)\=\-\"\']//g; } # Preprocess the category form element. @@ -1589,7 +1583,7 @@ sub parse_basic_search { foreach ('mode','form','element') { # is this required? Hmmm. next unless (exists($env{"form.$_"})); - $env{"form.$_"}=&Apache::lonnet::unescape($env{"form.$_"}); + $env{"form.$_"}=&unescape($env{"form.$_"}); $env{"form.$_"}=~s/[^\w\/\s\(\)\=\-\"\']//g; } my ($libraries_to_query,$pretty_domains_string) = &parse_domain_restrictions(); @@ -2065,10 +2059,6 @@ a link to change the search query. ###################################################################### sub print_sort_form { my ($r,$pretty_query_string) = @_; - my $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1). - &Apache::lonhtmlcommon::breadcrumbs - (undef,'Searching','Searching',undef,undef, - $env{'form.catalogmode'} ne 'groupsearch'); ## my %SortableFields=&Apache::lonlocal::texthash( @@ -2101,14 +2091,8 @@ sub print_sort_form { &Apache::lonnet::logthis(&Apache::lonmysql::get_error()); return; } - my $result; - my $html = &Apache::lonxml::xmlbegin(); - my $head = &Apache::lonxml::headtag('Results'); - my $end_head = &Apache::loncommon::endheadtag(); - $result.=< + my $js =< function change_sort() { var newloc = "/adm/searchcat?phase=results"; newloc += "&persistent_db_id=$env{'form.persistent_db_id'}"; @@ -2117,10 +2101,20 @@ $head parent.resultsframe.location= newloc; } -$end_head -$bodytag -
- +END + + my $start_page = &Apache::loncommon::start_page('Results',$js, + {'no_title' => 1}); + my $breadcrumbs= + &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching', + $env{'form.catalogmode'} ne 'import'); + + my $result = < + + END #

Sort Results

@@ -2335,22 +2329,21 @@ results into MySQL. ###################################################################### sub run_search { my ($r,$query,$customquery,$customshow,$serverlist,$pretty_string) = @_; - my $bodytag=&Apache::loncommon::bodytag(undef,undef,undef,1); - $bodytag.=&Apache::lonhtmlcommon::breadcrumbs - (undef,'Searching','Searching',undef,undef, - $env{'form.catalogmode'} ne 'groupsearch'); + my $connection = $r->connection; # # Print run_search header # - my $html = &Apache::lonxml::xmlbegin(); - my $head = &Apache::loncommon::head('Search Status'); + my $start_page = &Apache::loncommon::start_page('Search Status',undef, + {'no_title' => 1}); + my $breadcrumbs = + &Apache::lonhtmlcommon::breadcrumbs('Searching','Searching', + $env{'form.catalogmode'} ne 'import'); $r->print(< - + END # Remove leading and trailing
$pretty_string =~ s:^\s*
::i; @@ -2535,7 +2528,7 @@ END # results to get, so let the client know the top frame needs to be # loaded from /adm/searchcat $r->print(&Apache::loncommon::end_page()); -# if ($env{'form.catalogmode'} ne 'groupsearch') { +# if ($env{'form.catalogmode'} ne 'import') { $r->print(" SCRIPT - my $end_head = &Apache::loncommon::endheadtag(); - my $bodytag = &Apache::loncommon::bodytag(undef,undef,undef,1); - $result.=< - + my $start_page = &Apache::loncommon::start_page(undef,$js, + {'only_body' =>1}); + my $result=< $importbutton END return $result; } -###################################################################### -###################################################################### -sub search_status_header { - my $bodytag = &Apache::loncommon::bodytag(undef,undef,undef,1); - my $html = &Apache::lonxml::xmlbegin(); - my $head = &Apache::loncommon::head('Search Status'); - return <Search Status -Sending search request to LON-CAPA servers.
-ENDSTATUS -} - sub results_link { my $basic_link = "/adm/searchcat?"."&table=".$env{'form.table'}. "&persistent_db_id=".$env{'form.persistent_db_id'}; @@ -3135,22 +3109,27 @@ sub print_frames_interface { "&persistent_db_id=".$env{'form.persistent_db_id'}; my $run_search_link = $basic_link."&phase=run_search"; my $results_link = &results_link(); - my $html = &Apache::lonxml::xmlbegin(); - my $head = &Apache::loncommon::headtag('LON-CAPA Digital Library Search Results'); - my $end_head = &Apache::loncommon::endheadtag(); - my $result = <<"ENDFRAMES"; -$html -$head - -$end_head - +JS + + my $start_page = + &Apache::loncommon::start_page('LON-CAPA Digital Library Search Results', + $js, + {'frameset' => 1, + 'add_entries' => { + 'rows' => "150,*",},}); + my $end_page = + &Apache::loncommon::end_page({'frameset' => 1}); + + my $result = <<"ENDFRAMES"; +$start_page - - +$end_page ENDFRAMES $r->print($result); @@ -3220,7 +3199,7 @@ sub detailed_citation_view { my $jumpurl=$values{'url'}; $jumpurl=~s/^\/ext\//http\:\/\//; $result .= ''.$prefix. - ''.' '. + ''.' '. ''.$values{'title'}."\n"; $result .= "

\n"; @@ -3286,25 +3265,25 @@ sub detailed_citation_view { next if (! exists($values{$field->{'name'}}) || $values{$field->{'name'}} eq ''); if (exists($field->{'type'}) && $field->{'type'} eq 'list') { - $result .= ''.&mt($field->{'translate'}).'

    '; + $result .= ''.&mt($field->{'translate'}).''; foreach my $item (split(',',$values{$field->{'name'}})){ - $result .= '
  • '. - ''.$item.'
  • '; + $result .= + &Apache::lonhtmlcommon::crumbs($item, + (($env{'form.catalogmode'} eq 'import')?'_top':'preview'), + '/res', + (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),2,0,1); } - $result .= '
'; } elsif (exists($field->{'format'}) && $field->{'format'} ne ''){ $result.= &mt($field->{'translate'}, sprintf($field->{'format'}, $values{$field->{'name'}}))."
\n"; } else { if ($field->{'special'} eq 'url link') { - $result.= - &mt($field->{'translate'}, - ''. - $values{$field->{'name'}}. - ''); + $result.= + &Apache::lonhtmlcommon::crumbs($jumpurl, + (($env{'form.catalogmode'} eq 'import')?'_top':'preview'), + '', + (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),3,0,1); } else { $result.= &mt($field->{'translate'}, $values{$field->{'name'}}); @@ -3361,10 +3340,14 @@ sub summary_view { } my $jumpurl=$values{'url'}; $jumpurl=~s/^\/ext\//http\:\/\//; + my $link=&Apache::lonhtmlcommon::crumbs($jumpurl, + (($env{'form.catalogmode'} eq 'import')?'_top':'preview'), + '', + (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),2,0,1); $result.=<$values{'title'}
+ target='search_preview'>$values{'title'}$link $values{'author'}, $values{'owner'} -- $values{'lastrevisiondate'}
$values{'copyrighttag'}
$values{'extrashow'} @@ -3398,7 +3381,10 @@ sub compact_view { my ($prefix,%values) = @_; my $jumpurl=$values{'url'}; $jumpurl=~s/^\/ext\//http\:\/\//; - + my $link=&Apache::lonhtmlcommon::crumbs($jumpurl, + (($env{'form.catalogmode'} eq 'import')?'_top':'preview'), + '', + (($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),1,1,1).' '; my $result = $prefix.''; if (exists($env{'form.sortfield'}) && @@ -3408,7 +3394,7 @@ sub compact_view { $result .= ' '.$tmp.' '; } $result.=' '. - $values{'title'}.''.(' 'x2). + $values{'title'}.''.(' 'x2).$link. ''.$values{'author'}.' ('.$values{'domain'}.')
'; return $result; } @@ -3621,7 +3607,6 @@ $parms is extra information to include i ###################################################################### sub output_blank_field_error { my ($r,$closebutton,$parms,$hidden_fields)=@_; - my $bodytag=&Apache::loncommon::bodytag('Search'); my $errormsg = &mt('You did not fill in enough information for the search to be started. You need to fill in relevant fields on the search page in order for a query to be processed.'); my $revise = &mt('Revise Search Request'); my $heading = &mt('Unactionable Search Queary');