--- loncom/interface/lonindexer.pm 2004/03/26 19:35:59 1.94
+++ 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.94 2004/03/26 19:35:59 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());
@@ -573,6 +577,7 @@ sub scanDir {
next if($strip =~ /.*\.meta$/ | $obs eq '1');
my (@fileparts) = split(/\./,$strip);
if ($hash{'display_attrs_9'} != 1) {
+# if not all versions to be shown
if (scalar(@fileparts) >= 3) {
my $fext = pop @fileparts;
my $ov = pop @fileparts;
@@ -591,7 +596,7 @@ sub scanDir {
$curdir = $startdir;
}
my $diropen = 'closed';
- if (($dirptr&$testdir) or ($dom =~ /^(domain|user)$/)) {
+ if (($dirptr&$testdir) or ($dom =~ /^(domain|user)$/) or ($compuri=~/\.(sequence|page)\/$/)) {
while (my ($key,$val)= each %dupdirs) {
if ($key eq $compuri and $val eq "open") {
$diropen = "opened";
@@ -609,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) {
@@ -619,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
@@ -670,7 +681,7 @@ sub match_ext {
next if ($unpackline[0] eq '..');
my @filecom = split (/\./,$unpackline[0]);
my $fext = pop(@filecom);
- my $fnptr = $unpackline[3]&$dirptr;
+ my $fnptr = ($unpackline[3]&$dirptr) || ($fext=~/\.(page|sequence)$/);
if ($fnptr == 0 and $unpackline[3] ne "") {
my $embstyle = &Apache::loncommon::fileembstyle($fext);
push @trimlist,$line if (defined($embstyle) &&
@@ -687,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') . '/';
@@ -727,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') {
@@ -784,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) {
@@ -813,8 +839,7 @@ sub display_line {
$r->print("".
"\n");
$r->print("