--- loncom/interface/lonsearchcat.pm 2004/07/19 16:38:07 1.231
+++ loncom/interface/lonsearchcat.pm 2005/04/01 20:01:32 1.237.2.1
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Catalog
#
-# $Id: lonsearchcat.pm,v 1.231 2004/07/19 16:38:07 raeburn Exp $
+# $Id: lonsearchcat.pm,v 1.237.2.1 2005/04/01 20:01:32 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -449,12 +449,22 @@ 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 $bodytag=&Apache::loncommon::bodytag('Course Search');
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) {
@@ -471,16 +481,18 @@ sub course_search {
$bodytag.'
'.$pretty_search_string.'
'.&mt('Course content').':
');
$r->rflush();
# ======================================================= Go through the course
- undef %alreadyseen;
- %alreadyseen=();
my $c=$r->connection;
if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db",
&GDBM_READER(),0640)) {
- foreach (keys %hash) {
+ foreach (sort(keys(%hash))) {
if ($c->aborted()) { last; }
- if (($_=~/^src\_(.+)$/) && (!$alreadyseen{$hash{$_}})) {
- &checkonthis($r,$hash{$_},0,$hash{'title_'.$1},$fulltext,
- @allwords);
+ if (($_=~/^src\_(.+)$/)) {
+ if ($hash{'randomout_'.$1} & !$ENV{'request.role.adv'}) {
+ next;
+ }
+ my $symb=&make_symb($1);
+ &checkonthis($r,$1,$hash{$_},0,&Apache::lonnet::gettitle($symb),
+ $fulltext,$symb,@allwords);
}
}
untie(%hash);
@@ -570,15 +582,22 @@ sub course_search {
# =============================== This pulls up a resource and its dependencies
sub checkonthis {
- my ($r,$url,$level,$title,$fulltext,@allwords)=@_;
- $alreadyseen{$url}=1;
+ my ($r,$id,$url,$level,$title,$fulltext,$symb,@allwords)=@_;
+ $alreadyseen{$id}=1;
+ if (&Apache::loncommon::connection_aborted($r)) { return; }
$r->rflush();
- my $result=&Apache::lonnet::metadata($url,'title').' '.
- &Apache::lonnet::metadata($url,'subject').' '.
- &Apache::lonnet::metadata($url,'abstract').' '.
- &Apache::lonnet::metadata($url,'keywords');
- if (($url) && ($fulltext)) {
- $result.=&Apache::lonnet::ssi_body($url);
+
+ my $result=$title.' ';
+ if ($ENV{'request.role.adv'} || !$hash{'encrypted_'.$id}) {
+ $result.=&Apache::lonnet::metadata($url,'title').' '.
+ &Apache::lonnet::metadata($url,'subject').' '.
+ &Apache::lonnet::metadata($url,'abstract').' '.
+ &Apache::lonnet::metadata($url,'keywords');
+ }
+ 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=~s/\s+/ /gs;
my $applies = 0;
@@ -589,8 +608,15 @@ sub checkonthis {
for (my $i=0;$i<=$level*5;$i++) {
$r->print(' ');
}
- $r->print(''.
- ($title?$title:$url).'
');
+ my $href=$url;
+ if ($hash{'encrypted_'.$id} && !$ENV{'request.role.adv'}) {
+ $href=&Apache::lonenc::encrypted($href)
+ .'?symb='.&Apache::lonenc::encrypted($symb);
+ } else {
+ $href.='?symb='.&Apache::lonnet::escape($symb);
+ }
+ $r->print(''.($title?$title:$url).
+ '
');
$totalfound++;
} elsif ($fulltext) {
$r->print(' .');
@@ -600,8 +626,8 @@ sub checkonthis {
my $dependencies=
&Apache::lonnet::metadata($url,'dependencies');
foreach (split(/\,/,$dependencies)) {
- if (($_=~/^\/res\//) && (!$alreadyseen{$_})) {
- &checkonthis($r,$_,$level+1,'',$fulltext,@allwords);
+ if (($_=~/^\/res\//) && (!$alreadyseen{$id})) {
+ &checkonthis($r,$id,$_,$level+1,'',$fulltext,undef,@allwords);
}
}
}
@@ -659,18 +685,18 @@ sub print_basic_search_form {
my $scrout = &search_html_header().$bodytag;
if (&Apache::lonnet::allowed('bre',$ENV{'request.role.domain'})) {
# Define interface components
- my $userelatedwords=
+ my $userelatedwords= '';
+ my $onlysearchdomain='';
my $adv_search_link =
'
@@ -2443,8 +2469,8 @@ END
delete ($Server_status{$server});
next;
}
- $status=~/^([\.\w]+)$/;
- my $datafile=$r->dir_config('lonDaemons').'/tmp/'.$1;
+ $status=~s|/||g;
+ my $datafile=$r->dir_config('lonDaemons').'/tmp/'.$status;
if (-e $datafile && ! -e "$datafile.end") {
&update_status($r,&mt('Receiving results from [_1]',$server));
next;
@@ -2633,10 +2659,74 @@ sub display_results {
&hidden_field('persistent_db_id').
&hidden_field('start')
);
+ #
+ # Build sorting selector
+ my @field_order = ('default',
+ 'title',
+ 'author',
+ 'subject',
+ 'url',
+ 'keywords',
+ 'version',
+ 'language',
+ 'creationdate'=>,
+ 'lastrevisiondate',
+ 'owner',
+ 'copyright',
+ 'authorspace',
+ 'lowestgradeleve',
+ 'highestgradelevel',
+ 'standards',
+ 'count',
+ 'stdno',
+ 'avetries',
+ 'difficulty',
+ 'disc',
+ 'clear',
+ 'technical',
+ 'correct',
+ 'helpful',
+ 'depth',
+ );
+ my %sort_fields = ('default' => 'Default',
+ 'title' => 'Title',
+ 'author' => 'Author',
+ 'subject' => 'Subject',
+ 'url' => 'URL',
+ 'keywords' => 'Keywords',
+ 'version' => 'Version',
+ 'language' => 'Language',
+ 'creationdate'=> 'Creation Date',
+ 'lastrevisiondate' => 'Last Revision Date',
+ 'owner' => 'Owner',
+ 'copyright' => 'Copyright',
+ 'authorspace' => 'Authorspace',
+ 'lowestgradeleve' => 'Lowest Grade Level',
+ 'highestgradelevel' => 'Highest Grade Level',
+ 'standards' => 'Standards',
+ 'count' => 'Number of Accesses',
+ 'stdno' => 'Students Attempting',
+ 'avetries' => 'Average Number of Tries',
+ 'difficulty' => 'Mean Degree of Difficulty',
+ 'disc' => 'Mean Degree of Discrimination',
+ 'clear' => 'Evaluation: Clear',
+ 'technical' => 'Evaluation: Technically Correct',
+ 'correct' => 'Evaluation: Material is Correct',
+ 'helpful' => 'Evaluation: Material is Helpful',
+ 'depth' => 'Evaluation: Material has Depth',
+ 'select_form_order' => \@field_order,
+ );
+
+ my $sortform = &mt('Sort by [_1]',
+ &Apache::loncommon::select_form($ENV{'form.sortfield'},
+ 'sortfield',
+ %sort_fields));
##
## Output links (if necessary) for 'prev' and 'next' pages.
$r->print
- (''.
+ (''.
+ $sortform.
+ ' | '.
&prev_next_buttons($min,$ENV{'form.show'},$total_results).
' | '.
&viewoptions().' | '
@@ -2647,13 +2737,21 @@ sub display_results {
" |