--- loncom/interface/lonindexer.pm 2004/03/29 21:18:00 1.96 +++ loncom/interface/lonindexer.pm 2004/03/30 02:50:27 1.97 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Directory Indexer # -# $Id: lonindexer.pm,v 1.96 2004/03/29 21:18:00 www Exp $ +# $Id: lonindexer.pm,v 1.97 2004/03/30 02:50:27 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -443,16 +443,20 @@ $r->print(&Apache::loncommon::bodytag('B $closebutton $groupimportbutton END +# -------------- Filter out sequence containment in crumbs and "recent folders" + my $storeuri=$uri; + $storeuri='/'.(split(/\.(page|sequence)\/\//,$uri))[-1]; + $storeuri=~s/\/+/\//g; # ---------------------------------------------------------------- Bread crumbs - $r->print(&Apache::lonhtmlcommon::crumbs($uri,'','', + $r->print(&Apache::lonhtmlcommon::crumbs($storeuri,'','', (($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); + &Apache::loncommon::storeresurl($storeuri); + &Apache::lonhtmlcommon::store_recent('residx',$storeuri,$storeuri); # ----------------- output starting row to the indexed file/directory hierarchy my $titleclr="#ddffff"; # $r->print(&initdebug()); @@ -610,7 +614,7 @@ sub scanDir { # --------------- get complete matched list based on the uri (returns an array) sub get_list { my ($r,$uri)=@_; - my @list; + my @list=(); (my $luri = $uri) =~ s/\//_/g; if ($ENV{'form.updatedisplay'}) { foreach (keys %hash) { @@ -620,9 +624,15 @@ sub get_list { if ($hash{'dirlist_files_'.$luri}) { @list = split(/\n/,$hash{'dirlist_files_'.$luri}); - } elsif ($uri=~/\.(page|sequence)$/) { + } elsif ($uri=~/\.(page|sequence)\/$/) { # is a page or a sequence - @list= &Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$uri)); + $uri=~s/\/$//; + $uri='/'.(split(/\.(page|sequence)\/\//,$uri))[-1]; + $uri=~s/\/+/\//g; + foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$uri))) { + my @ratpart=split(/\:/,$_); + push @list,$ratpart[1]; + } $hash{'dirlist_files_'.$luri} = join("\n",@list); } else { # is really a directory @@ -688,6 +698,17 @@ sub match_ext { sub display_line { my ($r,$diropen,$line,$indent,$startdir,$hashref,@list)=@_; my (@pathfn, $fndir); +# there could be relative paths (files actually belonging into this directory) +# or absolute paths (for example, from sequences) + my $absolute; + my $pathprefix; + if ($line=~/^\/res\//) { + $absolute=1; + $pathprefix=''; + } else { + $absolute=0; + $pathprefix=$startdir; + } my $dirptr=16384; my $fileclr="#ffffe6"; my $iconpath= $r->dir_config('lonIconsURL') . '/'; @@ -728,8 +749,12 @@ sub display_line { $r->print(&mt("Up")." $tabtag\n"); return OK; } -# Do we have permission to look at this? - if($filecom[15] ne '1') { 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',$pathprefix.$filecom[0])); } + +# make absolute links appear on different background + if ($absolute) { $fileclr='#aaaa88'; } # display domain if ($filecom[1] eq 'domain') { @@ -785,8 +810,8 @@ sub display_line { } # display file - if ($fnptr == 0 and $filecom[3] ne '') { - my $filelink = $startdir.$filecom[0]; + if (($fnptr == 0 and $filecom[3] ne '') or $absolute) { + my $filelink = $pathprefix.$filecom[0]; my @file_ext = split (/\./,$listname); my $curfext = $file_ext[-1]; if (@Omit) {