--- loncom/interface/lonindexer.pm 2004/02/05 03:42:52 1.90
+++ 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.90 2004/02/05 03:42:52 taceyjo1 Exp $
+# $Id: lonindexer.pm,v 1.97 2004/03/30 02:50:27 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;
@@ -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');
@@ -442,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());
@@ -568,10 +573,11 @@ sub scanDir {
foreach my $line (@list) {
return if ($c->aborted());
#This is a kludge, sorry aboot this
- my ($strip,$dom,undef,$testdir,undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,$obs)=split(/\&/,$line,15);
+ 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 not all versions to be shown
if (scalar(@fileparts) >= 3) {
my $fext = pop @fileparts;
my $ov = pop @fileparts;
@@ -590,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";
@@ -608,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) {
@@ -618,12 +624,22 @@ sub get_list {
if ($hash{'dirlist_files_'.$luri}) {
@list = split(/\n/,$hash{'dirlist_files_'.$luri});
+ } elsif ($uri=~/\.(page|sequence)\/$/) {
+# is a page or a sequence
+ $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
@list = &Apache::lonnet::dirlist($uri);
$hash{'dirlist_files_'.$luri} = join("\n",@list);
}
- @list=&match_ext($r,@list);
- return @list;
+ return @list=&match_ext($r,@list);
}
sub initdebug {
@@ -665,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) &&
@@ -682,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') . '/';
@@ -724,7 +751,10 @@ sub display_line {
}
# Do we have permission to look at this?
- return OK if (!&Apache::lonnet::allowed('bre',$startdir.$filecom[0]));
+ 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') {
@@ -780,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) {
@@ -809,8 +839,7 @@ sub display_line {
$r->print("".
"\n");
$r->print("