--- loncom/interface/lonsearchcat.pm 2002/01/17 13:53:45 1.115
+++ loncom/interface/lonsearchcat.pm 2002/05/22 16:21:50 1.119
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Search Catalog
#
-# $Id: lonsearchcat.pm,v 1.115 2002/01/17 13:53:45 harris41 Exp $
+# $Id: lonsearchcat.pm,v 1.119 2002/05/22 16:21:50 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -68,6 +68,7 @@ my %hitcount; # stores number of hits pe
# -- dynamically rendered interface components
my $closebutton; # button that closes the search window
my $importbutton; # button to take the selected results and go to group sorting
+my $hidden;
# -- miscellaneous variables
my $scrout; # string that holds portions of the screen output
@@ -111,6 +112,7 @@ BEGIN {
}
}
+#------------------------------------------------------------- global variables
my $diropendb = "";
my $domain = "";
@@ -118,16 +120,17 @@ my $domain = "";
sub handler {
my $r = shift;
untie %hash;
- &get_unprocessed_cgi();
$r->content_type('text/html');
$r->send_http_header;
return OK if $r->header_only;
$domain = $r->dir_config('lonDefDomain');
-
$diropendb= "/home/httpd/perl/tmp/$domain\_$ENV{'user.name'}_searchcat.db";
+ &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
+ ['catalogmode','launch','acts','mode','form','element']);
+
if ($ENV{'form.launch'} eq '1') {
if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) {
&start_fresh_session();
@@ -140,8 +143,13 @@ sub handler {
}
}
+# --------------------------- Produce some output, so people know it is working
+
+ $r->print("\n");
+ $r->rflush;
+
# ----------------------------------- configure dynamic components of interface
- my $hidden='';
+
if ($ENV{'form.catalogmode'} eq 'interactive') {
$hidden="".
"\n";
@@ -160,7 +168,12 @@ END
onClick='javascript:select_group()'>
END
}
-
+ $hidden .= <
+
+
+
+END
# ------------------------------------------------------ Determine current user
$yourself=$ENV{'user.name'}.'@'.$ENV{'user.domain'};
@@ -305,7 +318,7 @@ $scrout.=' initial users of this syst
@@ -355,18 +368,6 @@ ENDDOCUMENT
return OK;
}
-# ----------- grab unprocessed CGI variables that may have been appended to URL
-sub get_unprocessed_cgi {
- foreach (split(/&/,$ENV{'QUERY_STRING'})) {
- my ($name, $value) = split(/=/,$_);
- $value =~ tr/+/ /;
- $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
- if ($name eq 'catalogmode' or $name eq 'launch' or $name eq 'acts') {
- $ENV{'form.'.$name}=$value;
- }
- }
-}
-
# ------------------------------------------------------------- make persistent
sub make_persistent {
my $persistent='';
@@ -416,142 +417,42 @@ sub dateboxes {
my ($name,$defaultmonth,$defaultday,$defaultyear,
$currentmonth,$currentday,$currentyear)=@_;
($defaultmonth,$defaultday,$defaultyear)=('','','');
- my $month=<
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-END
- $month=~s/(\"$currentmonth\")/$1 SELECTED/ if length($currentmonth);
+ #
+ # Day
my $day=<
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
END
+ for (my $i = 1; $i<=31; $i++) {
+ $day.="\n";
+ }
+ $day.="\n";
$day=~s/(\"$currentday\")/$1 SELECTED/ if length($currentday);
+ #
+ # Month
+ my $month=<
+
+END
+ my $i = 1;
+ foreach (qw/January February March April May June
+ July August September October November December /){
+ $month .="\n";
+ $i++;
+ }
+ $month.="\n";
+ $month=~s/(\"$currentmonth\")/$1 SELECTED/ if length($currentmonth);
+ #
+ # Year (obviously)
my $year=<
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
END
+ my $maxyear = 2051;
+ for (my $i = 1976; $i<=$maxyear; $i++) {
+ $year.="\n";
+ }
+ $year.="\n";
$year=~s/(\"$currentyear\")/$1 SELECTED/ if length($currentyear);
return "$month$day$year";
}
@@ -574,10 +475,6 @@ sub selectbox {
return $selout.'';
}
-sub testf {
- return @_[0];
-}
-
# ----------------------------------------------- Performing an advanced search
sub advancedsearch {
my ($r,$envhash)=@_;
@@ -596,7 +493,12 @@ sub advancedsearch {
'custommetadata','customshow') {
$ENV{"form.$field"}=~s/[^\w\/\s\(\)\=\-\"\']//g;
}
-
+ foreach ('mode','form','element') {
+ # is this required? Hmmm.
+ next unless (exists($ENV{"form.$_"}));
+ $ENV{"form.$_"}=&Apache::lonnet::unescape($ENV{"form.$_"});
+ $ENV{"form.$_"}=~s/[^\w\/\s\(\)\=\-\"\']//g;
+ }
# Check to see if enough information was filled in
for my $field ('title','author','subject','keywords','url','version',
'notes','abstract','mime','language','owner',
@@ -703,6 +605,12 @@ sub basicsearch {
for my $field ('basicexp') {
$ENV{"form.$field"}=~s/[^\w\s\(\)\-]//g;
}
+ foreach ('mode','form','element') {
+ # is this required? Hmmm.
+ next unless (exists($ENV{"form.$_"}));
+ $ENV{"form.$_"}=&Apache::lonnet::unescape($ENV{"form.$_"});
+ $ENV{"form.$_"}=~s/[^\w\/\s\(\)\=\-\"\']//g;
+ }
# Check to see if enough is filled in
unless (&filled($ENV{'form.basicexp'})) {
@@ -866,7 +774,9 @@ BEGINNING
# conditional output of script functions dependent on the mode in
# which the search was invoked
- $r->print(<
SCRIPT
- $r->print(<
+SCRIPT
+ }
+ }
+ $r->print(<
SCRIPT
- $r->print(<
SCRIPT
@@ -932,6 +864,7 @@ SCRIPT
CATALOGBEGIN
$r->print(<
+$hidden
@@ -975,7 +908,7 @@ RESULTS
$grid.=$sk;
my $hc;
if ($rhash{$sk} eq 'con_lost') {
- $hc="!!!BAD CONNECTION, CONTACT SYSTEM ADMINISTRATOR!!!";
+ $hc="BAD CONNECTION, CONTACT SYSTEM ADMINISTRATOR ";
}
else {
$hc="'+\"'\"+\"+hc['$sk']+\"+\"'\"+'";
@@ -994,7 +927,7 @@ RESULTS
}
$r->print(<
- popwin=open('','popwin','scrollbars=1,width=400,height=200');
+ popwin=open('','popwin','scrollbars=1,width=400,height=220');
popwin.focus();
popwin.document.writeln('<'+'html>');
popwin.document.writeln('<'+'head>');
@@ -1022,11 +955,11 @@ RESULTS
$grid
'<'+'br />'+
'Server details '+
- '<'+'input type="text" size="25" name="sdetails"'+
+ '<'+'input type="text" size="35" name="sdetails"'+
' value="" />'+
'<'+'br />'+
' <'+'input type="button" name="button"'+
- ' value="abort search and view current results" '+
+ ' value="close this window" '+
' onClick="javascript:opener.abortsearch()" />'+
' <'+'input type="button" name="button"'+
' value="help" onClick="javascript:opener.openhelp()" />'+
@@ -1059,11 +992,7 @@ ENDPOP
my $replyfile='';
if ($reply eq 'con_lost') {
- $r->print(''.
- "\n");
- $r->rflush();
+ &popwin_imgupdate($r,$sn,"srvbad.gif");
$bloop--;
$orkey{$rkey}=1;
}
@@ -1075,58 +1004,31 @@ ENDPOP
my $temp=0;
WLOOP: while (1) {
if (-e $replyfile && $tflag) {
- $r->print(''.
- "\n");
- $r->rflush();
- $r->print(''.
- "\n");
- $r->rflush();
+ &popwin_imgupdate($r,$sn,"srvhalf.gif");
+ &popwin_js($r,'popwin.hc["'.$rkey.'"]='.
+ '"still transferring..."'.';');
$tflag=0;
}
if (-e "$replyfile.end") {
$bloop--;
$orkey{$rkey}=1;
if (-s $replyfile) {
- $r->print(''."\n");
- $r->rflush();
+ &popwin_imgupdate($r,$sn,"srvgood.gif");
my $fh=Apache::File->new($replyfile) or
($r->print('ERROR: file '.
$replyfile.' cannot be opened') and
return OK);
@results=<$fh> if $fh;
$hitcount{$rkey}=@results+0;
- $r->print(''.
- "\n");
- $r->rflush();
+ &popwin_js($r,'popwin.hc["'.$rkey.'"]='.
+ $hitcount{$rkey}.';');
$hitcountsum+=$hitcount{$rkey};
- $r->print(''.
- "\n");
- $r->rflush();
+ &popwin_js($r,'popwin.document.forms.popremain.'.
+ 'numhits.value='.$hitcountsum.';');
}
else {
- $r->print(''.
- "\n");
- $r->rflush();
- $r->print(''.
- "\n");
- $r->rflush();
+ &popwin_imgupdate($r,$sn,"srvempty.gif");
+ &popwin_js($r,'popwin.hc["'.$rkey.'"]=0;');
}
last WLOOP;
}
@@ -1140,18 +1042,13 @@ ENDPOP
sleep 1;
$timeremain--;
$elapsetime++;
- $r->print(''."\n");
- $r->rflush();
+ &popwin_js($r,"popwin.document.popremain.".
+ "elapsetime.value=$elapsetime;");
$temp++;
}
}
- $r->print(''."\n");
- $r->rflush();
+ &popwin_js($r,'popwin.document.whirly.'.
+ 'src="/adm/lonIcons/lonanimend.gif";');
}
my $customshow='';
my $extrashow='';
@@ -1195,6 +1092,7 @@ ENDPOP
$notes,$abstract,$mime,$lang,
$creationdate,$lastrevisiondate,$owner,$copyright)=@fields;
+ unless ($title) { $title='Untitled'; }
unless ($ENV{'user.adv'}) {
$keywords='- not displayed -';
$fields[4]=$keywords;
@@ -1232,10 +1130,9 @@ END
END
if ($ENV{'form.catalogmode'} eq 'interactive') {
my $titleesc=$title;
- $titleesc=~s/\'/\\'/;
+ $titleesc=~s/\'/\\'/; # '
- $compiledresult.=<
@@ -1247,7 +1144,8 @@ END
$hash{"pre_${fnum}_link"}=$url;
$hash{"pre_${fnum}_title"}=$title;
$compiledresult.=<
+
@@ -1531,6 +1429,27 @@ sub start_fresh_session {
}
}
+# ----------------------------------------------- send javascript to popwin
+sub popwin_js {
+ # Print javascript out to popwin, but make sure we dont generate
+ # any javascript errors in doing so.
+ my ($r,$text) = @_;
+ $r->print(<<"END");
+
+END
+ $r->rflush();
+}
+
+sub popwin_imgupdate {
+ my ($r,$imgnum,$icon) = @_;
+ &popwin_js($r,'popwin.document.img'.$imgnum.'.'.
+ 'src="/adm/lonIcons/'.$icon.'";');
+}
+
1;
__END__