--- loncom/interface/lonindexer.pm 2001/12/04 18:35:47 1.26 +++ loncom/interface/lonindexer.pm 2002/03/08 18:33:29 1.37 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Directory Indexer # -# $Id: lonindexer.pm,v 1.26 2001/12/04 18:35:47 matthew Exp $ +# $Id: lonindexer.pm,v 1.37 2002/03/08 18:33:29 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,6 +40,9 @@ # 8/14 H. K. Ng # 8/28,10/15,11/28,11/29 Scott Harrison # 11/30 Matthew Hall +# 12/11,12/13 Scott Harrison +# YEAR=2002 +# 1/17 Scott Harrison # ### @@ -61,6 +64,7 @@ package Apache::lonindexer; # ------------------------------------------------- modules used by this module use strict; use Apache::lonnet(); +use Apache::loncommon(); use Apache::Constants qw(:common); use Apache::File; use GDBM_File; @@ -76,16 +80,6 @@ my $extrafield; # default extra table ce my $fnum; # file counter my $dnum; # directory counter -# ---------------------------------------------------------------------- BEGIN -sub BEGIN { - my $fh=Apache::File->new($Apache::lonnet::perlvar{'lonTabDir'}. - '/language.tab'); - map { - $_=~/(\w+)\s+([\w\s\-]+)/; - $language{$1}=$2; - } <$fh>; -} - # ----------------------------- Handling routine called via Apache and mod_perl sub handler { my $r = shift; @@ -112,8 +106,10 @@ sub handler { my $uri=$r->uri; # -------------------------------------- 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']); + #------------------------------------------------------------------- my $closebutton=''; my $groupimportbutton=''; my $colspan=''; @@ -160,12 +156,36 @@ END onClick="javascript:select_group()"> 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'); + + my $mode = $ENV{'form.mode'}; + my ($form,$element); + if ($mode eq 'edit') { + $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 my $catalogmodefunctions=''; if ($ENV{'form.catalogmode'} eq 'interactive' or $ENV{'form.catalogmode'} eq 'groupimport') { - $catalogmodefunctions=<$achash{$b}} (keys %ahash)) { my $key=$_; if ($ahash{$key} eq '1') { $hash{'store_'.$hash{'pre_'.$key.'_link'}}= @@ -260,9 +306,9 @@ ENDHEADER delete $hash{'store_'.$hash{'pre_'.$key.'_link'}}; } } - } sort {$achash{$a}<=>$achash{$b}} (keys %ahash); + } # deleting the previously cached listing - map { + foreach (keys %hash) { if ($_ =~ /^pre_/ && $_ =~/link$/) { my $key = $_; $key =~ s/^pre_//; @@ -270,7 +316,7 @@ ENDHEADER delete $hash{'pre_'.$key.'_title'}; delete $hash{'pre_'.$key.'_link'}; } - } keys %hash; + } } # ---------------------------------------------------------------- output title @@ -335,13 +381,13 @@ END $r->print(""); # ----------------- read in what directories have previously been set to "open" - map { + foreach (keys %hash) { if ($_ =~ /^diropen_status_/) { my $key = $_; $key =~ s/^diropen_status_//; $dirs{$key} = $hash{$_}; } - } keys %hash; + } if ($ENV{'form.openuri'}) { # take care of review and refresh options my $uri=$ENV{'form.openuri'}; @@ -457,9 +503,9 @@ sub get_list { $luri =~ s/\//_/g; if ($ENV{'form.attrs'} eq "Refresh") { - map { + foreach (keys %hash) { delete $hash{$_} if ($_ =~ /^dirlist_files_/); - } keys %hash; + } } if ($hash{'dirlist_files'.$luri}) { @@ -489,9 +535,9 @@ sub match_ext { my $fext = pop(@filecom); my $fnptr = $unpackline[3]&$dirptr; if ($fnptr == 0 and $unpackline[3] ne "") { - my $embstyle = &Apache::lonnet::fileembstyle($fext); + my $embstyle = &Apache::loncommon::fileembstyle($fext); push @trimlist,$line if (defined($embstyle) && - $embstyle ne 'hdn' ); + ($embstyle ne 'hdn' or $fext eq 'meta')); } else { push @trimlist,$line; } @@ -594,7 +640,7 @@ sub display_line { my $curfext = $file_ext[-1]; # Set the icon for the file my $iconname = "unknown.gif"; - my $embstyle = &Apache::lonnet::fileembstyle($curfext); + my $embstyle = &Apache::loncommon::fileembstyle($curfext); # The unless conditional that follows is a bit of overkill $iconname = $curfext.".gif" unless (!defined($embstyle) || $embstyle eq 'unk' || $embstyle eq 'hdn'); @@ -608,8 +654,10 @@ sub display_line { $title = &Apache::lonnet::metadata($filelink,'title') if ($metafile == 1); $title=$listname unless $title; - $r->print(""); + my $titleesc=$title; + $titleesc=~s/\'/\\'/; #' (clean up this spare quote + $r->print(""); $r->print("". "\n"); $r->print(""); @@ -689,7 +737,7 @@ sub display_line { if ($hash{'display_attrs_5'} == 1) { my $lang = &Apache::lonnet::metadata($filelink,'language') if ($metafile == 1); - $lang = $language{$lang}; + $lang = &Apache::loncommon::languagedescription($lang); $lang = ' ' if (!$lang); $r->print(" ".$lang. " \n"); @@ -751,29 +799,33 @@ sub begin_form { $dnum++; } -# ----------- grab unprocessed CGI variables that may have been appended to URL -sub get_unprocessed_cgi { - map { - 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; - } - } (split(/&/,$ENV{'QUERY_STRING'})); -} - # --------- settings whenever the user causes the indexer window to be launched sub start_fresh_session { delete $hash{'mode_catalog'}; - map { + delete $hash{'form_mode'}; + delete $hash{'form_form'}; + delete $hash{'form_element'}; + foreach (keys %hash) { if ($_ =~ /^pre_/) { delete $hash{$_}; } if ($_ =~ /^store/) { delete $hash{$_}; } - } keys %hash; + } +} + +# ------------------------------------------------------------------- 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; @@ -912,11 +964,6 @@ begin_form - prints the beginning of a f =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 to be launched 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.