version 1.34, 2002/01/17 14:10:44
|
version 1.44, 2002/06/20 21:22:20
|
Line 80 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 |
|
|
|
# ----- Used to include or exclude files with certain extensions. |
|
my @Only = (); |
|
my @Omit = (); |
|
|
|
|
# ----------------------------- Handling routine called via Apache and mod_perl |
# ----------------------------- Handling routine called via Apache and mod_perl |
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
Line 90 sub handler {
|
Line 95 sub handler {
|
$dnum=0; |
$dnum=0; |
untie %hash; |
untie %hash; |
|
|
|
# Deal with stupid global variables (is there a way around making |
|
# these global to this package? It is just so wrong....) |
|
undef (@Only); |
|
undef (@Omit); |
|
|
# ------------------------------------- read in machine configuration variables |
# ------------------------------------- read in machine configuration variables |
my $iconpath= $r->dir_config('lonIconsURL') . "/"; |
my $iconpath= $r->dir_config('lonIconsURL') . "/"; |
my $domain = $r->dir_config('lonDefDomain'); |
my $domain = $r->dir_config('lonDefDomain'); |
Line 106 sub handler {
|
Line 116 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 119 sub handler {
|
Line 132 sub handler {
|
if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) { |
if (tie(%hash,'GDBM_File',$diropendb,&GDBM_WRCREAT,0640)) { |
if ($ENV{'form.launch'} eq '1') { |
if ($ENV{'form.launch'} eq '1') { |
&start_fresh_session(); |
&start_fresh_session(); |
} |
} |
|
|
# -------------------- refresh environment with user database values (in %hash) |
# -------------------- refresh environment with user database values (in %hash) |
if ($hash{'mode_catalog'} eq 'interactive') { |
if ($hash{'mode_catalog'} eq 'interactive') { |
$ENV{'form.catalogmode'}='interactive'; |
$ENV{'form.catalogmode'}='interactive'; |
Line 154 END
|
Line 166 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. |
|
|
|
# |
|
# There is now also mode "simple", which is for the simple version of the rat |
|
# |
|
# |
|
if (!defined($mode) || ($mode ne 'edit' && $mode ne 'parmset')) { |
|
my $location = "/adm/groupsort?catalogmode=groupimport&"; |
|
$location .= "mode=".$mode."&"; |
|
$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) { |
|
if (opener.inf) { |
|
if (opener.inf.document.forms.resinfo.elements.u) { |
|
opener.inf.document.forms.resinfo.elements.u.value=val; |
|
} |
} |
} |
} |
} |
|
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) { |
function changeURL(val) { |
if (opener.inf.document.forms.resinfo.elements.u) { |
if (window.opener.document) { |
opener.inf.document.forms.resinfo.elements.u.value=val; |
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 |
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 195 function queue(val) {
|
Line 308 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 268 ENDHEADER
|
Line 378 ENDHEADER
|
} |
} |
|
|
# ---------------------------------------------------------------- output title |
# ---------------------------------------------------------------- output title |
$r->print('<h2><font color="#888888">The LearningOnline With CAPA '. |
$r->print( |
|
'<h2><font color="#339933">The Learning<i>Online</i> Network with CAPA '. |
'Network Directory Browser</font></h2>'."\n"); |
'Network Directory Browser</font></h2>'."\n"); |
# ---------------------------------- get state of file attributes to be showing |
# ---------------------------------- get state of file attributes to be showing |
if ($ENV{'form.attrs'} ne "") { |
if ($ENV{'form.attrs'} ne "") { |
Line 311 END
|
Line 422 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=#990404>\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 465 sub get_list {
|
Line 579 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 586 sub display_line {
|
Line 723 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 602 sub display_line {
|
Line 747 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; |
my $titleesc=$title; |
my $titleesc=HTML::Entities::encode($title); |
$titleesc=~s/\'/\\'/; |
$titleesc=~s/\'/\\'/; #' (clean up this spare quote) |
$r->print("<a href=\"javascript:select_data('", |
$r->print("<a href=\"javascript:select_data(\'", |
$titleesc,"','",$filelink,"')\">"); |
$titleesc,"','",$filelink,"')\">"); |
$r->print("<img src='",$iconpath,"select.gif' border='0' /></a>". |
$r->print("<img src='",$iconpath,"select.gif' border='0' /></a>". |
"\n"); |
"\n"); |
Line 615 sub display_line {
|
Line 760 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; |
|
my $titleesc=&HTML::Entities::encode($title); |
$r->print("<form name='form$fnum'>\n"); |
$r->print("<form name='form$fnum'>\n"); |
$r->print("<input type='checkbox' name='filelink"."' ". |
$r->print("<input type='checkbox' name='filelink"."' ". |
"value='$filelink' onClick='". |
"value='$filelink' onClick='". |
Line 624 sub display_line {
|
Line 770 sub display_line {
|
} |
} |
$r->print(">\n"); |
$r->print(">\n"); |
$r->print("<input type='hidden' name='title"."' ". |
$r->print("<input type='hidden' name='title"."' ". |
"value='$title'>\n"); |
"value='$titleesc'>\n"); |
$r->print("</form>\n"); |
$r->print("</form>\n"); |
$r->print("</td><td valign='bottom' nowrap bgcolor=$fileclr>"); |
$r->print("</td><td valign='bottom' nowrap bgcolor=$fileclr>"); |
$hash{"pre_${fnum}_link"}=$filelink; |
$hash{"pre_${fnum}_link"}=$filelink; |
$hash{"pre_${fnum}_title"}=$title; |
$hash{"pre_${fnum}_title"}=$titleesc; |
$fnum++; |
$fnum++; |
} |
} |
|
|
Line 747 sub begin_form {
|
Line 893 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 772 sub start_fresh_session {
|
Line 911 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 908 begin_form - prints the beginning of a f
|
Line 1060 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 |
|
|