--- loncom/interface/lonindexer.pm 2003/12/22 19:30:25 1.83 +++ loncom/interface/lonindexer.pm 2004/03/26 19:35:59 1.94 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Directory Indexer # -# $Id: lonindexer.pm,v 1.83 2003/12/22 19:30:25 www Exp $ +# $Id: lonindexer.pm,v 1.94 2004/03/26 19:35:59 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -47,6 +47,7 @@ use strict; use Apache::lonnet(); use Apache::loncommon(); use Apache::lonhtmlcommon(); +use Apache::lonsequence(); use Apache::Constants qw(:common); use Apache::lonmeta; use Apache::File; @@ -54,7 +55,7 @@ use Apache::lonlocal; use GDBM_File; # ---------------------------------------- variables used throughout the module -my %hash; # tied to a user-specific gdbm file +my %hash; # global user-specific gdbm file my %dirs; # keys are directories, values are the open/close status my %language; # has the reference information present in language.tab @@ -116,7 +117,7 @@ sub handler { %hash = (); { my %dbfile; - if (tie(%dbfile,'GDBM_File',$diropendb,&GDBM_WRCREAT(),0640)) { + if (tie(%dbfile,'GDBM_File',$diropendb,&GDBM_READER(),0640)) { while(my($key,$value)=each(%dbfile)) { $hash{$key}=$value; } @@ -164,7 +165,7 @@ END # selection is made. # $element is the name of the element in $formname which receives # the URL. - # &Apache::lonxml::debug('Checking mode, form, element'); + #&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'); @@ -187,8 +188,7 @@ END $element = $ENV{'form.element'}; $titleelement = $ENV{'form.titleelement'}; } - &Apache::lonxml::debug("mode=$mode form=$form element=$element - titleelement=$titleelement"); + #&Apache::lonxml::debug("mode=$mode form=$form element=$element titleelement=$titleelement"); # ------ set catalogmodefunctions to have extra needed javascript functionality my $catalogmodefunctions=''; if ($ENV{'form.catalogmode'} eq 'interactive' or @@ -360,7 +360,7 @@ $r->print(&Apache::loncommon::bodytag('B $achash{$ref}=$ac; $ac++; } - # sorting through the actions and changing the tied database hash + # sorting through the actions and changing the global database hash foreach (sort {$achash{$a}<=>$achash{$b}} (keys %ahash)) { my $key=$_; if ($ahash{$key} eq '1') { @@ -389,7 +389,7 @@ $r->print(&Apache::loncommon::bodytag('B } # ---------------------------------- get state of file attributes to be showing - if ($ENV{'form.attrs'} ne '') { + if ($ENV{'form.attrs'}) { for (my $i=0; $i<=9; $i++) { delete $hash{'display_attrs_'.$i}; if ($ENV{'form.attr'.$i} == 1) { @@ -402,6 +402,7 @@ $r->print(&Apache::loncommon::bodytag('B $attrchk[$i] = 'checked' if $hash{'display_attrs_'.$i} == 1; } } + # ------------------------------- output state of file attributes to be showing # All versions has to the last item # since it does not take an extra col @@ -424,28 +425,34 @@ $r->print(&Apache::loncommon::bodytag('B enctype="application/x-www-form-urlencoded"> $Displayfileattributes
- - - - - + + + + + - - - - - + + + + +
$lt{'ti'} $lt{'si'} $lt{'la'} $lt{'lm'} $lt{'st'} $lt{'ti'} $lt{'si'} $lt{'la'} $lt{'lm'} $lt{'st'}
$lt{'au'} $lt{'kw'} $lt{'ln'} $lt{'sr'} $lt{'av'} $lt{'au'} $lt{'kw'} $lt{'ln'} $lt{'sr'} $lt{'av'}  
- + + - -$closebutton -$groupimportbutton - +$closebutton $groupimportbutton END # ---------------------------------------------------------------- Bread crumbs - $r->print(&Apache::lonhtmlcommon::crumbs($uri)); + $r->print(&Apache::lonhtmlcommon::crumbs($uri,'','', + (($ENV{'form.catalogmode'} eq 'groupimport')? + 'document.forms.fileattr':'')). + &Apache::lonhtmlcommon::select_recent('residx','resrecent', +'this.form.action=this.form.resrecent.options[this.form.resrecent.selectedIndex].value;this.form.submit();'). + ''); +# ------------------------------------------------------ Remember where we were + &Apache::loncommon::storeresurl($uri); + &Apache::lonhtmlcommon::store_recent('residx',$uri,$uri); # ----------------- output starting row to the indexed file/directory hierarchy my $titleclr="#ddffff"; # $r->print(&initdebug()); @@ -500,18 +507,16 @@ END } } - my $bredir = $ENV{'form.dirPointer'}; my $toplevel; my $indent = 0; $uri = $uri.'/' if $uri !~ /.*\/$/; - if ($bredir ne 'on') { - $hash{'top.level'} = $uri; - $toplevel = $uri; - - } else { - $toplevel = $hash{'top.level'}; - } + if ($ENV{'form.dirPointer'} ne 'on') { + $hash{'top.level'} = $uri; + $toplevel = $uri; + } else { + $toplevel = $hash{'top.level'}; + } # -------------------------------- if not at top level, provide an uplink arrow if ($toplevel ne '/res/'){ @@ -536,12 +541,9 @@ END # --------------------------------------------------- end the output and return $r->print(''."\n"); -# } else { -# $r->print('Unable to tie hash to db '. -# 'file'); -# return OK; } if(! $c->aborted()) { +# write back into the temporary file my %dbfile; if (tie(%dbfile,'GDBM_File',$diropendb,&GDBM_NEWDB(),0640)) { while (my($key,$value) = each(%hash)) { @@ -560,14 +562,15 @@ sub scanDir { my $c = $r->connection(); my ($compuri,$curdir); my $dirptr=16384; + my $obs; $indent++; - my %dupdirs = %dirs; my @list=&get_list($r,$startdir); foreach my $line (@list) { return if ($c->aborted()); - my ($strip,$dom,undef,$testdir,undef)=split(/\&/,$line,5); - next if $strip =~ /.*\.meta$/; + #This is a kludge, sorry aboot this + my ($strip,$dom,undef,$testdir,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,$obs,undef)=split(/\&/,$line,16); + next if($strip =~ /.*\.meta$/ | $obs eq '1'); my (@fileparts) = split(/\./,$strip); if ($hash{'display_attrs_9'} != 1) { if (scalar(@fileparts) >= 3) { @@ -608,18 +611,22 @@ sub get_list { my ($r,$uri)=@_; my @list; (my $luri = $uri) =~ s/\//_/g; - - if ($ENV{'form.attrs'} eq &mt('Update Display')) { + if ($ENV{'form.updatedisplay'}) { foreach (keys %hash) { delete $hash{$_} if ($_ =~ /^dirlist_files_/); - } + } } - if ($hash{'dirlist_files'.$luri}) { + if ($hash{'dirlist_files_'.$luri}) { @list = split(/\n/,$hash{'dirlist_files_'.$luri}); + } elsif ($uri=~/\.(page|sequence)$/) { +# is a page or a sequence + @list= &Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$uri)); + $hash{'dirlist_files_'.$luri} = join("\n",@list); } else { +# is really a directory @list = &Apache::lonnet::dirlist($uri); - $hash{'dirlist_files_'.$luri} = join('\n',@list); + $hash{'dirlist_files_'.$luri} = join("\n",@list); } return @list=&match_ext($r,@list); } @@ -693,7 +700,6 @@ sub display_line { my $tabtag=''; my $i=0; - while ($i<=8) { $tabtag=join('',$tabtag," ") if $hash{'display_attrs_'.$i} == 1; @@ -721,14 +727,13 @@ sub display_line { $r->print(&mt("Up")." $tabtag\n"); return OK; } -# Do we have permission to look at this? - - return OK if (!&Apache::lonnet::allowed('bre',$startdir.$filecom[0])); +# Do we have permission to look at this? + if($filecom[15] ne '1') { return OK if (!&Apache::lonnet::allowed('bre',$startdir.$filecom[0])); } # display domain if ($filecom[1] eq 'domain') { - $r->print (''."\n") - if ($ENV{'form.dirPointer'} eq "on"); + $r->print (''."\n") + if ($ENV{'form.dirPointer'} eq "on"); $r->print("$extrafield"); $r->print(""); &begin_form ($r,$filecom[0]); @@ -781,7 +786,6 @@ sub display_line { # display file if ($fnptr == 0 and $filecom[3] ne '') { my $filelink = $startdir.$filecom[0]; - next if &Apache::lonnet::metadata($filelink,'obsolete'); my @file_ext = split (/\./,$listname); my $curfext = $file_ext[-1]; if (@Omit) { @@ -793,12 +797,7 @@ sub display_line { return OK if ($skip > 0); } # Set the icon for the file - my $iconname = "unknown.gif"; - 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'); - # + my $iconname = &Apache::loncommon::icon($listname); $r->print(""); my $metafile = grep /^\Q$filecom[0]\E\.meta\&/, @list; my $title; @@ -817,8 +816,8 @@ sub display_line { } elsif ($ENV{'form.catalogmode'} eq 'groupimport') { $title=$listname; - $title = &Apache::lonnet::metadata($filelink,'title') - if ($metafile == 1); + #$title = &Apache::lonnet::metadata($filelink,'title') + #if ($metafile == 1); $title=$listname unless $title; my $titleesc=&HTML::Entities::encode($title); $r->print("
\n"); @@ -854,7 +853,7 @@ sub display_line { ".gif border='0' />\n") if $rem > 0; } - $r->print("\n"); + $r->print("\n"); $r->print (" $listname "); @@ -904,8 +903,20 @@ sub display_line { my $output=''; my $embstyle=&Apache::loncommon::fileembstyle($curfext); if ($embstyle eq 'ssi') { - $output=&Apache::lonnet::ssi_body($filelink); - $output=''.$output.''; + my $cache=$Apache::lonnet::perlvar{'lonDocRoot'}.$filelink. + '.tmp'; + if ((!$ENV{'form.updatedisplay'}) && + (-e $cache)) { + open(FH,$cache); + $output=join("\n",); + close(FH); + } else { + $output=&Apache::lonnet::ssi_body($filelink); + open(FH,">$cache"); + print FH $output; + close(FH); + } + $output=''.$output.''; } elsif ($embstyle eq 'img') { $output=''; } elsif ($filelink=~/^\/res\/(\w+)\/(\w+)\//) { @@ -930,8 +941,6 @@ sub display_line { # -- display directory if ($fnptr == $dirptr) { - my @file_ext = split (/\./,$listname); - my $curfext = $file_ext[scalar(@file_ext)-1]; my $curdir = $startdir.$filecom[0].'/'; my $anchor = $curdir; $anchor =~ s/\///g; @@ -961,7 +970,49 @@ sub display_line { $r->print (''. "\n"); - $r->print ("$listname$tabtag\n"); + $r->print ("$listname\n"); +# Attributes + my $filelink = $startdir.$filecom[0].'/default'; + + if ($hash{'display_attrs_0'} == 1) { + my $title = &Apache::lonnet::gettitle($filelink,'title'); + $r->print(' '.($title eq '' ? ' ' : $title). + ' '."\n"); + } + $r->print(' ', + $filecom[8]," \n") + if $hash{'display_attrs_1'} == 1; + $r->print(' '. + (localtime($filecom[9]))." \n") + if $hash{'display_attrs_2'} == 1; + $r->print(' '. + (localtime($filecom[10]))." \n") + if $hash{'display_attrs_3'} == 1; + + if ($hash{'display_attrs_4'} == 1) { + my $author = &Apache::lonnet::metadata($filelink,'author'); + $r->print(' '.($author eq '' ? ' ' : $author). + " \n"); + } + if ($hash{'display_attrs_5'} == 1) { + my $keywords = &Apache::lonnet::metadata($filelink,'keywords'); + # $keywords = ' ' if (!$keywords); + $r->print(' '.($keywords eq '' ? ' ' : $keywords). + " \n"); + } + if ($hash{'display_attrs_6'} == 1) { + my $lang = &Apache::lonnet::metadata($filelink,'language'); + $lang = &Apache::loncommon::languagedescription($lang); + $r->print(' '.($lang eq '' ? ' ' : $lang). + " \n"); + } + if ($hash{'display_attrs_7'} == 1) { + $r->print(' '); + } + if ($hash{'display_attrs_8'} == 1) { + $r->print(' '); + } + $r->print(''); } }