--- loncom/interface/lonsearchcat.pm 2006/06/13 14:42:24 1.269 +++ loncom/interface/lonsearchcat.pm 2007/05/02 01:33:49 1.286 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Search Catalog # -# $Id: lonsearchcat.pm,v 1.269 2006/06/13 14:42:24 www Exp $ +# $Id: lonsearchcat.pm,v 1.286 2007/05/02 01:33:49 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -78,7 +78,6 @@ use HTML::Entities(); use Parse::RecDescent; use Apache::lonnavmaps; use Apache::lonindexer(); -use lib '/home/httpd/lib/perl/'; use LONCAPA; ###################################################################### @@ -139,7 +138,7 @@ sub handler { &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['catalogmode','launch','acts','mode','form','element','pause', 'phase','persistent_db_id','table','start','show', - 'cleargroupsort','titleelement']); + 'cleargroupsort','titleelement','area']); ## ## The following is a trick - we wait a few seconds if asked to so ## the daemon running the search can get ahead of the daemon @@ -171,25 +170,32 @@ sub handler { '_'.$env{'form.persistent_db_id'}.'_persistent_search.db'; ## &Apache::lonhtmlcommon::clear_breadcrumbs(); + + my @allowed_searches = ('portfolio'); + if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) { + push(@allowed_searches,'res'); + } if (exists($env{'request.course.id'}) && $env{'request.course.id'} ne '') { - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>'/adm/searchcat?'. - 'catalogmode='.$env{'form.catalogmode'}. - '&launch='.$env{'form.launch'}. - '&mode='.$env{'form.mode'}, - text=>"Course and Catalog Search", - target=>'_top', - bug=>'Searching',}); - } else { - &Apache::lonhtmlcommon::add_breadcrumb - ({href=>'/adm/searchcat?'. - 'catalogmode='.$env{'form.catalogmode'}. - '&launch='.$env{'form.launch'}. - '&mode='.$env{'form.mode'}, - text=>"Catalog Search", + 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'; + } + } + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>'/adm/searchcat?'. + 'catalogmode='.$env{'form.catalogmode'}. + '&launch='.$env{'form.launch'}. + '&mode='.$env{'form.mode'}, + text=>"$crumb_text", target=>'_top', bug=>'Searching',}); - } # if ($env{'form.phase'} !~ m/(basic|adv|course)_search/) { if (! &get_persistent_form_data($persistent_db_file)) { @@ -249,6 +255,9 @@ sub handler { if (exists($env{'form.mode'})) { $hidden_fields .= &hidden_field('mode'); } + if (exists($env{'form.area'})) { + $hidden_fields .= &hidden_field('area'); + } ## ## Configure dynamic components of interface ## @@ -294,12 +303,16 @@ END } # if ($env{'form.searchmode'} eq 'advanced') { + my $srchtype = 'Catalog'; + if ($env{'form.area'} eq 'portfolio') { + $srchtype = 'Portfolio'; + } &Apache::lonhtmlcommon::add_breadcrumb ({href=>'/adm/searchcat?phase=disp_adv&'. 'catalogmode='.$env{'form.catalogmode'}. '&launch='.$env{'form.launch'}. '&mode='.$env{'form.mode'}, - text=>"Advanced Search", + text=>"Advanced $srchtype Search", bug=>'Searching',}); } elsif ($env{'form.searchmode'} eq 'course search') { &Apache::lonhtmlcommon::add_breadcrumb @@ -318,7 +331,8 @@ END } elsif ($env{'form.phase'} eq 'disp_adv') { &print_advanced_search_form($r,$closebutton,$hidden_fields); } elsif ($env{'form.phase'} eq 'results') { - &display_results($r,$importbutton,$closebutton,$diropendb); + &display_results($r,$importbutton,$closebutton,$diropendb, + $env{'form.area'}); } elsif ($env{'form.phase'} =~ /^(sort|run_search)$/) { my ($query,$customquery,$customshow,$libraries,$pretty_string) = &get_persistent_data($persistent_db_file, @@ -328,7 +342,7 @@ END &print_sort_form($r,$pretty_string); } elsif ($env{'form.phase'} eq 'run_search') { &run_search($r,$query,$customquery,$customshow, - $libraries,$pretty_string); + $libraries,$pretty_string,$env{'form.area'}); } } elsif ($env{'form.phase'} eq 'course_search') { &course_search($r); @@ -358,14 +372,14 @@ END $persistent_db_file); # # Set up table - if (! defined(&create_results_table())) { + if (! defined(&create_results_table($env{'form.area'}))) { my $errorstring=&Apache::lonmysql::get_error(); &Apache::lonnet::logthis('lonsearchcat.pm: Unable to create '. 'needed table. lonmysql error:'. $errorstring); my $msg = - 'Unable to create table in which to store search results. '. + 'Unable to create table in which to save search results. '. 'The search has been aborted.'; &Apache::loncommon::simple_error_page($r,'Search Error', $msg); @@ -374,7 +388,7 @@ END delete($env{'form.launch'}); if (! &make_form_data_persistent($r,$persistent_db_file)) { my $msg= - 'Unable to properly store search information. '. + 'Unable to properly save search information. '. 'The search has been aborted.'; &Apache::loncommon::simple_error_page($r,'Search Error', $msg); @@ -507,7 +521,7 @@ sub course_search { my $applies = 0; my $symb = $resource->symb(); my $ressymb = $symb; - if ($symb =~ m#(___adm/\w+/\w+)/(\d+)/bulletinboard$#) { + if ($symb =~ m#(___adm/$LONCAPA::domain_re/$LONCAPA::username_re)/(\d+)/bulletinboard$#) { $ressymb = 'bulletin___'.$2.$1.'/'.$2.'/bulletinboard'; unless ($ressymb =~ m#bulletin___\d+___adm/wrapper#) { $ressymb=~s#(bulletin___\d+___)#$1adm/wrapper/#; @@ -665,68 +679,13 @@ sub print_basic_search_form { &Apache::lonhtmlcommon::breadcrumbs('Searching','Search_Basic', $env{'form.catalogmode'} ne 'import'); my $scrout = &Apache::loncommon::start_page('Search').$bread_crumb; +# Search form for resource space if (&Apache::lonnet::allowed('bre',$env{'request.role.domain'})) { - # Define interface components - my $userelatedwords= ''; - my $onlysearchdomain=''; - my $inclext= ''; - my $adv_search_link = - ''.&mt('Advanced Search').''; - # - $scrout.='
'; + $scrout .= &setup_basic_search($r,'res',$hidden_fields,$closebutton); + $scrout .= '\n";
if (! defined($Fields{'title'}) || $Fields{'title'} eq '') {
$Fields{'title'} = 'Untitled';
@@ -2852,10 +3028,10 @@ Parse a row returned from the database.
######################################################################
######################################################################
sub parse_row {
- my @Row = @_;
+ my ($tabletype,@Row) = @_;
my %Fields;
if (! scalar(@Datatypes)) {
- &set_up_table_structure();
+ &set_up_table_structure($tabletype);
}
for (my $i=0;$i<=$#Row;$i++) {
$Fields{$Datatypes[$i]->{'name'}}=&unescape($Row[$i]);
@@ -2891,12 +3067,13 @@ The 'title' field is set to "Untitled" i
###########################################################
###########################################################
sub parse_raw_result {
- my ($result,$hostname) = @_;
+ my ($result,$hostname,$tabletype) = @_;
# conclude from self to others regarding fields
my %Fields=&LONCAPA::lonmetadata::metadata_col_to_hash
- (map {
+ ($tabletype,
+ map {
&unescape($_);
- } (split(/\,/,$result)) );
+ } (split(/\,/,$result)) );
return %Fields;
}
@@ -3063,22 +3240,22 @@ SCRIPT
if (document.forms.results.returnvalues.length != "undefined" &&
typeof(document.forms.results.returnvalues.length) == "number") {
if (document.forms.results.returnvalues[checkbox_num].checked) {
- parent.statusframe.document.forms.statusform.elements.Queue.value +='1a'+val+'b';
+ parent.statusframe.document.forms.statusform.elements.acts.value +='1a'+val+'b';
} else {
- parent.statusframe.document.forms.statusform.elements.Queue.value +='0a'+val+'b';
+ parent.statusframe.document.forms.statusform.elements.acts.value +='0a'+val+'b';
}
} else {
if (document.forms.results.returnvalues.checked) {
- parent.statusframe.document.forms.statusform.elements.Queue.value +='1a'+val+'b';
+ parent.statusframe.document.forms.statusform.elements.acts.value +='1a'+val+'b';
} else {
- parent.statusframe.document.forms.statusform.elements.Queue.value +='0a'+val+'b';
+ parent.statusframe.document.forms.statusform.elements.acts.value +='0a'+val+'b';
}
}
}
function select_group() {
parent.window.location=
"/adm/groupsort?mode=$env{'form.mode'}&catalogmode=import&acts="+
- parent.statusframe.document.forms.statusform.elements.Queue.value;
+ parent.statusframe.document.forms.statusform.elements.acts.value;
}
SCRIPT
@@ -3093,18 +3270,6 @@ END
return $result;
}
-######################################################################
-######################################################################
-sub search_status_header {
- my $start_page = &Apache::loncommon::start_page('Search Status',undef,
- {'only_body' => 1});
- return < \n";
$result .= ''.$values{'author'}.','.
' '.$values{'owner'}.'
-ENDSTATUS
-}
-
sub results_link {
my $basic_link = "/adm/searchcat?"."&table=".$env{'form.table'}.
"&persistent_db_id=".$env{'form.persistent_db_id'};
@@ -3209,11 +3374,11 @@ sub detailed_citation_view {
my ($prefix,%values) = @_;
my $result;
my $jumpurl=$values{'url'};
- $jumpurl=~s/^\/ext\//http\:\/\//;
+ $jumpurl=~s|^/ext/|http://|;
$result .= ''.$prefix.
''.' '.
''.$values{'title'}."\n";
+ 'target="preview">'.$values{'title'}."\n";
$result .= "
';
@@ -3280,9 +3445,9 @@ sub detailed_citation_view {
$result .= ''.&mt($field->{'translate'}).'';
foreach my $item (split(',',$values{$field->{'name'}})){
$result .=
- &Apache::lonhtmlcommon::crumbs($item,
- (($env{'form.catalogmode'} eq 'import')?'_top':'preview'),
- '/res',
+ &Apache::lonhtmlcommon::crumbs(&Apache::lonnet::clutter($item),
+ 'preview',
+ '',
(($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),2,0,1);
}
} elsif (exists($field->{'format'}) && $field->{'format'} ne ''){
@@ -3291,11 +3456,15 @@ sub detailed_citation_view {
$values{$field->{'name'}}))."
\n";
} else {
if ($field->{'special'} eq 'url link') {
- $result.=
+ if ($jumpurl=~/^http\:\/\//) {
+ $result.=''.$jumpurl.'';
+ } else {
+ $result .=
&Apache::lonhtmlcommon::crumbs($jumpurl,
- (($env{'form.catalogmode'} eq 'import')?'_top':'preview'),
+ 'preview',
'',
(($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),3,0,1);
+ }
} else {
$result.= &mt($field->{'translate'},
$values{$field->{'name'}});
@@ -3351,15 +3520,19 @@ sub summary_view {
$result .= ' '.$tmp.' ';
}
my $jumpurl=$values{'url'};
- $jumpurl=~s/^\/ext\//http\:\/\//;
- my $link=&Apache::lonhtmlcommon::crumbs($jumpurl,
- (($env{'form.catalogmode'} eq 'import')?'_top':'preview'),
+ my $link;
+ if ($jumpurl=~m|^/ext/|) {
+ $jumpurl=~s|^/ext/|http://|;
+ $link='
'.$jumpurl.'';
+ } else {
+ $link=&Apache::lonhtmlcommon::crumbs($jumpurl,
+ 'preview',
'',
(($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),2,0,1);
-
+ }
$result.=<
$values{'copyrighttag'}
$values{'extrashow'}
@@ -3392,11 +3565,16 @@ sub summary_preview {
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'),
+ my $link;
+ if ($jumpurl=~m|^/ext/|) {
+ $jumpurl=~s|^/ext/|http://|;
+ $link=''.$jumpurl.'';
+ } else {
+ $link=&Apache::lonhtmlcommon::crumbs($jumpurl,
+ 'preview',
'',
(($env{'form.catalogmode'} eq 'import')?'parent.statusframe.document.forms.statusform':''),1,1,1).' ';
+ }
my $result =
$prefix.'';
if (exists($env{'form.sortfield'}) &&
@@ -3405,7 +3583,7 @@ sub compact_view {
if (! defined($tmp)) { $tmp = 'undefined'; }
$result .= ' '.$tmp.' ';
}
- $result.=' '.
+ $result.=' '.
$values{'title'}.''.(' 'x2).$link.
''.$values{'author'}.' ('.$values{'domain'}.')
';
return $result;
@@ -3428,14 +3606,14 @@ sub fielded_format_view {
my $icon=&Apache::loncommon::icon($values{'url'});
my %Translated = &Apache::lonmeta::fieldnames();
my $jumpurl=$values{'url'};
- $jumpurl=~s/^\/ext\//http\:\/\//;
+ $jumpurl=~s|^/ext/|http://|;
my $result=<