--- loncom/interface/lonindexer.pm 2012/05/15 01:41:27 1.214 +++ loncom/interface/lonindexer.pm 2018/08/09 13:52:07 1.229 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Directory Indexer # -# $Id: lonindexer.pm,v 1.214 2012/05/15 01:41:27 raeburn Exp $ +# $Id: lonindexer.pm,v 1.229 2018/08/09 13:52:07 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -34,9 +34,8 @@ ## 1. Description of functions ## ## 2. Modules used by this module ## ## 3. Choices for different output views (detailed, summary, xml, etc) ## -## 4. BEGIN block (to be run once after compilation) ## -## 5. Handling routine called via Apache and mod_perl ## -## 6. Other subroutines ## +## 4. Handling routine called via Apache and mod_perl ## +## 5. Other subroutines ## ## ## ############################################################################### @@ -60,7 +59,6 @@ use LONCAPA qw(:match); # ---------------------------------------- variables used throughout the module 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 my %dynhash; # hash of hashes for dynamic metadata my %dynread; # hash of directories already read for dynamic metadata my %fieldnames; # Metadata fieldnames @@ -94,15 +92,9 @@ sub handler { undef (@Omit); %fieldnames=&Apache::lonmeta::fieldnames(); -# ------------------------------------- read in machine configuration variables +# --------------------------------------------------------------- get icon path my $iconpath= $r->dir_config('lonIconsURL') . "/"; - my $domain = $r->dir_config('lonDefDomain'); - my $role = $r->dir_config('lonRole'); - my $loadlim = $r->dir_config('lonLoadLim'); - my $servadm = $r->dir_config('lonAdmEMail'); - my $sysadm = $r->dir_config('lonSysEMail'); - my $lonhost = $r->dir_config('lonHostID'); - my $tabdir = $r->dir_config('lonTabDir'); + my $defdom = &Apache::lonnet::default_login_domain(); #SB my $fileclr='#ffffe6'; my $line; @@ -424,7 +416,7 @@ ENDHEADER &Apache::lonhtmlcommon::clear_breadcrumbs(); &Apache::lonhtmlcommon::add_breadcrumb({ 'text' => 'Browse published resources', - 'href' => '/res/fhwfdev/?launch=1', + 'href' => '/res/'.$headerdom.'/?launch=1', }); $r->print(&Apache::loncommon::start_page('Browse published resources',$js, {'domain' => $headerdom,}) @@ -574,7 +566,7 @@ END } else { $r->print($reshome); } - $r->print("'>".&mt('Home').''); + $r->print("'>".&mt('Home directory').''); } $r->print(''); # ------------------------------------------------------ Remember where we were @@ -632,7 +624,7 @@ END # ----------------- read in what directories have previously been set to "open" - foreach (keys %hash) { + foreach (keys(%hash)) { if ($_ =~ /^diropen_status_/) { my $key = $_; $key =~ s/^diropen_status_//; @@ -673,12 +665,12 @@ END pop @uri_com; my $upone = join('/',@uri_com); my @list = qw (0); - &display_line ($r,'opened',$upone.'&viewOneUp',0,$upone,@list); + &display_line ($r,$defdom,'opened',$upone.'&viewOneUp',0,$upone,@list); $indent = 1; } # -------- recursively go through all the directories and output as appropriate - &scanDir ($r,$toplevel,$indent,\%hash); + &scanDir ($r,$toplevel,$indent,\%hash,$defdom); # -------------------------------------------------------------- end the tables $r->print(&Apache::loncommon::end_data_table()); @@ -706,7 +698,7 @@ END # ----------------------------------------------- recursive scan of a directory sub scanDir { - my ($r,$startdir,$indent,$hashref)=@_; + my ($r,$startdir,$indent,$hashref,$defdom)=@_; my $c = $r->connection(); my ($compuri,$curdir); my $dirptr=16384; @@ -718,7 +710,20 @@ sub scanDir { 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,undef)=split(/\&/,$line,16); - next if($strip =~ /.*\.meta$/ | $obs eq '1'); + next if (($strip =~ /\.meta$/) || ($obs)); + if ($dom ne 'domain') { + my ($udom,$uname); + if ($dom eq 'user') { + ($udom) = ($startdir =~ m{^/res/($match_domain)}); + $uname = $strip; + } else { + ($udom,$uname) = ($startdir =~ m{^/res/($match_domain)/($match_courseid)}); + } + if ($udom ne '' && $uname ne '') { + # Don't display "course author" directory. + next if (&Apache::lonnet::is_course($udom,$uname)); + } + } my (@fileparts) = split(/\./,$strip); if ($hash{'display_attrs_9'} != 1) { # if not all versions to be shown @@ -749,8 +754,8 @@ sub scanDir { } } } - &display_line($r,$diropen,$line,$indent,$curdir,$hashref,@list); - &scanDir ($r,$compuri,$indent) if $diropen eq 'opened'; + &display_line($r,$defdom,$diropen,$line,$indent,$curdir,$hashref,@list); + &scanDir ($r,$compuri,$indent,undef,$defdom) if $diropen eq 'opened'; } $indent--; } @@ -763,7 +768,7 @@ sub get_list { (my $luri = $uri) =~ s/\//_/g; if ($env{'form.updatedisplay'}) { - foreach (keys %hash) { + foreach (keys(%hash)) { delete $hash{$_} if ($_ =~ /^dirlist_files_/); delete $hash{$_} if ($_ =~ /^dirlist_timestamp_files_/); } @@ -880,7 +885,7 @@ sub match_ext { # ------------------------------- displays one line in appropriate table format sub display_line { - my ($r,$diropen,$line,$indent,$startdir,$hashref,@list)=@_; + my ($r,$defdom,$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) @@ -946,6 +951,15 @@ sub display_line { # Do we have permission to look at this? if($filecom[15] ne '1') { return OK if ((!&Apache::lonnet::allowed('bre',$pathprefix.$filecom[0])) && (!&Apache::lonnet::allowed('bro',$pathprefix.$filecom[0]))); } + if (($filecom[1] eq 'domain') && ($defdom ne $listname)) { + unless (&Apache::lonnet::will_trust('shared',$listname,$defdom)) { + return OK; + } + unless (&Apache::lonnet::will_trust('content',$defdom,$listname)) { + return OK; + } + } + # make absolute links appear on different background #SB if ($absolute) { $fileclr='#ccdd99'; } @@ -980,7 +994,17 @@ $r->print ('$extrafield"); my $curdir = $startdir.$filecom[0].'/'; my $anchor = $curdir; @@ -998,6 +1022,9 @@ $r->print (''. "\n"); my $quotable_curdir = &Apache::loncommon::escape_single($curdir); + my $quotable_startdir = &Apache::loncommon::escape_single($startdir); + my $quotable_listname = &Apache::loncommon::escape_single($listname); + $r->print (''.$msg.''); @@ -1009,7 +1036,7 @@ $r->print (''. + 'onclick="set_wishlistlink('."'$plainname','$quotable_startdir$quotable_listname"."/'".')">'. ''.$tabtag); $r->print(&Apache::loncommon::end_data_table_row()); @@ -1092,6 +1119,8 @@ $r->print ('\n"); my $quotable_filelink = &Apache::loncommon::escape_single($filelink); + my $quotable_startdir = Apache::loncommon::escape_single($startdir); + my $quotable_listname = &Apache::loncommon::escape_single($listname); $r->print (" $listname "); $quotable_filelink = &Apache::loncommon::escape_single($filelink.'.meta'); @@ -1105,7 +1134,7 @@ $r->print (''. + "','$quotable_startdir$quotable_listname'".')">'. ''); if ($hash{'display_attrs_0'} == 1) { @@ -1247,7 +1276,9 @@ $r->print (''. "\n"); my $quotable_curdir = &Apache::loncommon::escape_single($curdir); - + my $quotable_startdir = &Apache::loncommon::escape_single($startdir); + my $quotable_listname = &Apache::loncommon::escape_single($listname); + my $location = &Apache::loncommon::lonhttpdurl("/adm/lonIcons"); my $icon = "navmap.folder.".($nowOpen ? "open":"closed").'.gif'; $r->print (''. + 'onclick="set_wishlistlink('."'$listname','$quotable_startdir$quotable_listname"."/'".')">'. ''); # Attributes @@ -1306,8 +1337,8 @@ $r->print ('