version 1.28, 2001/12/13 13:38:14
|
version 1.40, 2002/03/25 19:27:17
|
Line 41
|
Line 41
|
# 8/28,10/15,11/28,11/29 Scott Harrison |
# 8/28,10/15,11/28,11/29 Scott Harrison |
# 11/30 Matthew Hall |
# 11/30 Matthew Hall |
# 12/11,12/13 Scott Harrison |
# 12/11,12/13 Scott Harrison |
|
# YEAR=2002 |
|
# 1/17 Scott Harrison |
# |
# |
### |
### |
|
|
Line 62 package Apache::lonindexer;
|
Line 64 package Apache::lonindexer;
|
# ------------------------------------------------- modules used by this module |
# ------------------------------------------------- modules used by this module |
use strict; |
use strict; |
use Apache::lonnet(); |
use Apache::lonnet(); |
|
use Apache::loncommon(); |
use Apache::Constants qw(:common); |
use Apache::Constants qw(:common); |
use Apache::File; |
use Apache::File; |
use GDBM_File; |
use GDBM_File; |
Line 77 my $extrafield; # default extra table ce
|
Line 80 my $extrafield; # default extra table ce
|
my $fnum; # file counter |
my $fnum; # file counter |
my $dnum; # directory counter |
my $dnum; # directory counter |
|
|
# ---------------------------------------------------------------------- BEGIN |
# ----- Used to include or exclude files with certain extensions. |
sub BEGIN { |
my @Only = (); |
my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}. |
my @Omit = (); |
'/language.tab'); |
|
while(<$fh>) { |
|
$_=~/(\w+)\s+([\w\s\-]+)/; |
|
$language{$1}=$2; |
|
} |
|
} |
|
|
|
# ----------------------------- Handling routine called via Apache and mod_perl |
# ----------------------------- Handling routine called via Apache and mod_perl |
sub handler { |
sub handler { |
Line 113 sub handler {
|
Line 111 sub handler {
|
my $uri=$r->uri; |
my $uri=$r->uri; |
|
|
# -------------------------------------- see if called from an interactive mode |
# -------------------------------------- see if called from an interactive mode |
&get_unprocessed_cgi(); |
# Get the parameters from the query string |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
|
['catalogmode','launch','acts','mode','form','element', |
|
'only','omit']); |
|
#------------------------------------------------------------------- |
my $closebutton=''; |
my $closebutton=''; |
my $groupimportbutton=''; |
my $groupimportbutton=''; |
my $colspan=''; |
my $colspan=''; |
Line 161 END
|
Line 162 END
|
onClick="javascript:select_group()"> |
onClick="javascript:select_group()"> |
END |
END |
} |
} |
|
# Additions made by Matthew to make the browser a little easier to deal |
|
# with in the future. |
|
# |
|
# $mode (at this time) indicates if we are in edit mode. |
|
# $form is the name of the form that the URL is placed when the |
|
# selection is made. |
|
# $element is the name of the element in $formname which receives |
|
# the URL. |
|
# &Apache::lonxml::debug('Checking mode, form, element'); |
|
&setvalues(\%hash,'form_mode' ,\%ENV,'form.mode' ); |
|
&setvalues(\%hash,'form_form' ,\%ENV,'form.form' ); |
|
&setvalues(\%hash,'form_element',\%ENV,'form.element'); |
|
&setvalues(\%hash,'form_only' ,\%ENV,'form.only' ); |
|
&setvalues(\%hash,'form_omit' ,\%ENV,'form.omit' ); |
|
|
|
# Deal with 'omit' and 'only' |
|
if (exists $ENV{'form.omit'}) { |
|
@Omit = split(',',$ENV{'form.omit'}); |
|
} |
|
if (exists $ENV{'form.only'}) { |
|
@Only = split(',',$ENV{'form.only'}); |
|
} |
|
|
|
my $mode = $ENV{'form.mode'}; |
|
my ($form,$element); |
|
if ($mode eq 'edit' || $mode eq 'parmset') { |
|
$form = $ENV{'form.form'}; |
|
$element = $ENV{'form.element'}; |
|
} |
|
&Apache::lonxml::debug("mode=$mode form=$form element=$element"); |
# ------ set catalogmodefunctions to have extra needed javascript functionality |
# ------ set catalogmodefunctions to have extra needed javascript functionality |
my $catalogmodefunctions=''; |
my $catalogmodefunctions=''; |
if ($ENV{'form.catalogmode'} eq 'interactive' or |
if ($ENV{'form.catalogmode'} eq 'interactive' or |
$ENV{'form.catalogmode'} eq 'groupimport') { |
$ENV{'form.catalogmode'} eq 'groupimport') { |
$catalogmodefunctions=<<END; |
# The if statement below sets us up to use the old version |
|
# by default (ie. if $mode is undefined). This is the easy |
|
# way out. Hopefully in the future I'll find a way to get |
|
# the calls dealt with in a more comprehensive manner. |
|
if (!defined($mode) || ($mode ne 'edit' && $mode ne 'parmset')) { |
|
my $location = "/adm/groupsort?catalogmode=groupimport&"; |
|
$location .= "acts="; |
|
$catalogmodefunctions=<<"END"; |
function select_data(title,url) { |
function select_data(title,url) { |
changeTitle(title); |
changeTitle(title); |
changeURL(url); |
changeURL(url); |
self.close(); |
self.close(); |
} |
} |
function select_group() { |
function select_group() { |
window.location="/adm/groupsort?catalogmode=groupimport&acts="+document.forms.fileattr.acts.value; |
window.location="$location"+document.forms.fileattr.acts.value; |
} |
} |
function changeTitle(val) { |
function changeTitle(val) { |
if (opener.inf.document.forms.resinfo.elements.t) { |
if (opener.inf) { |
opener.inf.document.forms.resinfo.elements.t.value=val; |
if (opener.inf.document.forms.resinfo.elements.t) { |
|
opener.inf.document.forms.resinfo.elements.t.value=val; |
|
} |
} |
} |
} |
} |
function changeURL(val) { |
function changeURL(val) { |
if (opener.inf.document.forms.resinfo.elements.u) { |
if (opener.inf) { |
opener.inf.document.forms.resinfo.elements.u.value=val; |
if (opener.inf.document.forms.resinfo.elements.u) { |
|
opener.inf.document.forms.resinfo.elements.u.value=val; |
|
} |
} |
} |
} |
} |
END |
END |
|
} elsif ($mode eq 'edit') { # we are in 'edit' mode |
|
my $location = "/adm/groupsort?catalogmode=interactive&"; |
|
$location .= "form=$form&element=$element&mode=edit&acts="; |
|
$catalogmodefunctions=<<END; |
|
// mode = $mode |
|
function select_data(title,url) { |
|
changeURL(url); |
|
self.close(); |
|
} |
|
|
|
function select_group() { |
|
window.location="$location"+document.forms.fileattr.acts.value; |
|
} |
|
|
|
function changeURL(val) { |
|
if (window.opener.document) { |
|
window.opener.document.forms["$form"].elements["$element"].value=val; |
|
} else { |
|
alert("The file you selected is: "+val); |
|
} |
|
} |
|
|
|
END |
|
} elsif ($mode eq 'parmset') { |
|
my $location = "/adm/groupsort?catalogmode=interactive&"; |
|
$location .= "form=$form&element=$element&mode=parmset&acts="; |
|
$catalogmodefunctions=<<END; |
|
// mode = $mode |
|
function select_data(title,url) { |
|
changeURL(url); |
|
self.close(); |
|
} |
|
|
|
function select_group() { |
|
window.location="$location"+document.forms.fileattr.acts.value; |
|
} |
|
|
|
function changeURL(val) { |
|
if (window.opener.document) { |
|
var elementname = "$element"+"_value"; |
|
var checkboxname = "$element"+"_setparmval"; |
|
window.opener.document.forms["$form"].elements[elementname].value=val; |
|
window.opener.document.forms["$form"].elements[checkboxname].checked=true; |
|
} else { |
|
alert("The file you selected is: "+val); |
|
} |
|
} |
|
|
|
END |
|
} |
} |
} |
if ($ENV{'form.catalogmode'} eq 'groupimport') { |
$catalogmodefunctions.=<<END; |
$catalogmodefunctions.=<<END; |
|
var acts=''; |
var acts=''; |
|
function rep_dirpath(suffix,val) { |
|
eval("document.forms.dirpath"+suffix+".acts.value=val"); |
|
} |
|
END |
|
if ($ENV{'form.catalogmode'} eq 'groupimport') { |
|
$catalogmodefunctions.=<<END; |
function queue(val) { |
function queue(val) { |
if (eval("document.forms."+val+".filelink.checked")) { |
if (eval("document.forms."+val+".filelink.checked")) { |
var l=val.length; |
var l=val.length; |
Line 202 function queue(val) {
|
Line 298 function queue(val) {
|
document.forms.fileattr.acts.value+='0a'+v+'b'; |
document.forms.fileattr.acts.value+='0a'+v+'b'; |
} |
} |
} |
} |
function rep_dirpath(suffix,val) { |
|
eval("document.forms.dirpath"+suffix+".acts.value=val"); |
|
} |
|
END |
END |
} |
} |
|
|
Line 318 END
|
Line 411 END
|
|
|
# ----------------- output starting row to the indexed file/directory hierarchy |
# ----------------- output starting row to the indexed file/directory hierarchy |
my $titleclr="#ddffff"; |
my $titleclr="#ddffff"; |
$r->print("<table border=0><tr><td bgcolor=#eeeeee>\n"); |
# $r->print(&initdebug()); |
$r->print("<table border=0><tr>\n"); |
# $r->print(&writedebug("Omit:@Omit")) if (@Omit); |
|
# $r->print(&writedebug("Only:@Only")) if (@Only); |
|
$r->print("<table width='100\%' border=0><tr><td bgcolor=#eeeeee>\n"); |
|
$r->print("<table width='100\%' border=0><tr>\n"); |
$r->print("<td $colspan bgcolor=$titleclr><b>Name</b></td>\n"); |
$r->print("<td $colspan bgcolor=$titleclr><b>Name</b></td>\n"); |
$r->print("<td bgcolor=$titleclr align=right><b>Size (bytes) ". |
$r->print("<td bgcolor=$titleclr align=right><b>Size (bytes) ". |
"</b></td>\n") if ($hash{'display_attrs_0'} == 1); |
"</b></td>\n") if ($hash{'display_attrs_0'} == 1); |
Line 472 sub get_list {
|
Line 568 sub get_list {
|
return @list=&match_ext($r,@list); |
return @list=&match_ext($r,@list); |
} |
} |
|
|
|
sub initdebug { |
|
return <<ENDJS; |
|
<script> |
|
var debugging = true; |
|
if (debugging) { |
|
var debuggingWindow = window.open('','Debug','width=400,height=300',true); |
|
} |
|
|
|
function output(text) { |
|
if (debugging) { |
|
debuggingWindow.document.writeln(text); |
|
} |
|
} |
|
output("<html><head><title>Debugging Window</title></head><body><pre>"); |
|
</script> |
|
ENDJS |
|
} |
|
|
|
sub writedebug { |
|
my $text = shift; |
|
return "<script>output('$text');</script>"; |
|
} |
|
|
# -------------------- filters out files based on extensions (returns an array) |
# -------------------- filters out files based on extensions (returns an array) |
sub match_ext { |
sub match_ext { |
my ($r,@packlist)=@_; |
my ($r,@packlist)=@_; |
Line 492 sub match_ext {
|
Line 611 sub match_ext {
|
if ($fnptr == 0 and $unpackline[3] ne "") { |
if ($fnptr == 0 and $unpackline[3] ne "") { |
my $embstyle = &Apache::loncommon::fileembstyle($fext); |
my $embstyle = &Apache::loncommon::fileembstyle($fext); |
push @trimlist,$line if (defined($embstyle) && |
push @trimlist,$line if (defined($embstyle) && |
$embstyle ne 'hdn' ); |
($embstyle ne 'hdn' or $fext eq 'meta')); |
} else { |
} else { |
push @trimlist,$line; |
push @trimlist,$line; |
} |
} |
Line 593 sub display_line {
|
Line 712 sub display_line {
|
if ($fnptr == 0 and $filecom[3] ne "") { |
if ($fnptr == 0 and $filecom[3] ne "") { |
my @file_ext = split (/\./,$listname); |
my @file_ext = split (/\./,$listname); |
my $curfext = $file_ext[-1]; |
my $curfext = $file_ext[-1]; |
|
if (@Omit) { |
|
foreach (@Omit) { return OK if ($curfext eq $_); } |
|
} |
|
if (@Only) { |
|
my $skip = 1; |
|
foreach (@Only) { $skip = 0 if ($curfext eq $_); } |
|
return OK if ($skip > 0); |
|
} |
# Set the icon for the file |
# Set the icon for the file |
my $iconname = "unknown.gif"; |
my $iconname = "unknown.gif"; |
my $embstyle = &Apache::loncommon::fileembstyle($curfext); |
my $embstyle = &Apache::loncommon::fileembstyle($curfext); |
Line 609 sub display_line {
|
Line 736 sub display_line {
|
$title = &Apache::lonnet::metadata($filelink,'title') |
$title = &Apache::lonnet::metadata($filelink,'title') |
if ($metafile == 1); |
if ($metafile == 1); |
$title=$listname unless $title; |
$title=$listname unless $title; |
$r->print("<a href='javascript:select_data(\"", |
my $titleesc=$title; |
$title,'","',$filelink,"\")'>"); |
$titleesc=~s/\'/\\'/; #' (clean up this spare quote |
|
$r->print("<a href=\"javascript:select_data(\'", |
|
$titleesc,"','",$filelink,"')\">"); |
$r->print("<img src='",$iconpath,"select.gif' border='0' /></a>". |
$r->print("<img src='",$iconpath,"select.gif' border='0' /></a>". |
"\n"); |
"\n"); |
$r->print("</td><td valign='bottom' nowrap bgcolor=$fileclr>"); |
$r->print("</td><td valign='bottom' nowrap bgcolor=$fileclr>"); |
Line 752 sub begin_form {
|
Line 881 sub begin_form {
|
$dnum++; |
$dnum++; |
} |
} |
|
|
# ----------- 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; |
|
} |
|
} |
|
} |
|
|
|
# --------- settings whenever the user causes the indexer window to be launched |
# --------- settings whenever the user causes the indexer window to be launched |
sub start_fresh_session { |
sub start_fresh_session { |
delete $hash{'mode_catalog'}; |
delete $hash{'mode_catalog'}; |
|
delete $hash{'form_mode'}; |
|
delete $hash{'form_form'}; |
|
delete $hash{'form_element'}; |
|
delete $hash{'form_omit'}; |
|
delete $hash{'form_only'}; |
foreach (keys %hash) { |
foreach (keys %hash) { |
if ($_ =~ /^pre_/) { |
if ($_ =~ /^pre_/) { |
delete $hash{$_}; |
delete $hash{$_}; |
Line 777 sub start_fresh_session {
|
Line 899 sub start_fresh_session {
|
} |
} |
} |
} |
|
|
|
# ------------------------------------------------------------------- setvalues |
|
sub setvalues { |
|
# setvalues is used in registerurl to synchronize the database |
|
# hash and environment hashes |
|
my ($H1,$h1key,$H2,$h2key) =@_; |
|
# |
|
if (exists $H2->{$h2key}) { |
|
$H1->{$h1key} = $H2->{$h2key}; |
|
} elsif (exists $H1->{$h1key}) { |
|
$H2->{$h2key} = $H1->{$h1key}; |
|
} |
|
} |
|
|
1; |
1; |
|
|
=head1 NAME |
=head1 NAME |
Line 913 begin_form - prints the beginning of a f
|
Line 1048 begin_form - prints the beginning of a f
|
|
|
=item * |
=item * |
|
|
get_unprocessed_cgi - grab unprocessed CGI variables that may have been |
|
appended to URL |
|
|
|
=item * |
|
|
|
start_fresh_session - settings whenever the user causes the indexer window |
start_fresh_session - settings whenever the user causes the indexer window |
to be launched |
to be launched |
|
|