--- loncom/interface/lonindexer.pm 2006/05/31 16:22:10 1.143
+++ loncom/interface/lonindexer.pm 2006/12/11 02:12:08 1.155
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Directory Indexer
#
-# $Id: lonindexer.pm,v 1.143 2006/05/31 16:22:10 www Exp $
+# $Id: lonindexer.pm,v 1.155 2006/12/11 02:12:08 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -54,6 +54,7 @@ use Apache::File;
use Apache::lonlocal;
use Apache::lonsource();
use GDBM_File;
+use LONCAPA qw(:match);
# ---------------------------------------- variables used throughout the module
my %hash; # global user-specific gdbm file
@@ -119,11 +120,15 @@ sub handler {
$extrafield='';
my $diropendb =
- "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_indexer.db";
+ "/home/httpd/perl/tmp/$env{'user.domain'}_$env{'user.name'}_sel_res.db";
%hash = ();
{
my %dbfile;
- if (tie(%dbfile,'GDBM_File',$diropendb,&GDBM_READER(),0640)) {
+ if (tie(%dbfile,'GDBM_File',$diropendb,&GDBM_WRITER(),0640)) {
+ if ($env{'form.launch'} eq '1') {
+ &start_fresh_session(\%dbfile);
+ }
+
while(my($key,$value)=each(%dbfile)) {
$hash{$key}=$value;
}
@@ -131,9 +136,6 @@ sub handler {
}
}
{
- if ($env{'form.launch'} eq '1') {
- &start_fresh_session();
- }
#Hijack lonindexer to verify a title and be close down.
if ($env{'form.launch'} eq '2') {
&Apache::loncommon::content_type($r,'text/html');
@@ -171,7 +173,7 @@ ENDSUBM
# --------------------- define extra fields and buttons in case of special mode
if ($env{'form.catalogmode'} eq 'interactive') {
$extrafield='
'.
- ' | ';
$colspan=" colspan='2' ";
my $cl=&mt('Close');
@@ -179,9 +181,9 @@ ENDSUBM
END
}
- elsif ($env{'form.catalogmode'} eq 'groupimport') {
+ elsif ($env{'form.catalogmode'} eq 'import') {
$extrafield=''.
- ' | ';
$colspan=" colspan='2' ";
my $cl=&mt('Close');
@@ -229,7 +231,7 @@ END
# ------ set catalogmodefunctions to have extra needed javascript functionality
my $catalogmodefunctions='';
if ($env{'form.catalogmode'} eq 'interactive' or
- $env{'form.catalogmode'} eq 'groupimport') {
+ $env{'form.catalogmode'} eq 'import') {
# The if statement below sets us up to use the old version
# by default (ie. if $mode is undefined). This is the easy
# way out. Hopefully in the future I'll find a way to get
@@ -240,7 +242,7 @@ END
#
#
if (!defined($mode) || ($mode ne 'edit' && $mode ne 'parmset')) {
- my $location = "/adm/groupsort?catalogmode=groupimport&";
+ my $location = "/adm/groupsort?catalogmode=import&";
$location .= "mode=".$mode."&";
$location .= "acts=";
$catalogmodefunctions=<<"END";
@@ -327,7 +329,7 @@ function rep_dirpath(suffix,val) {
eval("document.forms.dirpath"+suffix+".acts.value=val");
}
END
- if ($env{'form.catalogmode'} eq 'groupimport') {
+ if ($env{'form.catalogmode'} eq 'import') {
$catalogmodefunctions.=<
ENDHEADER
- my ($headerdom)=($uri=~/^\/res\/(\w+)\//);
+ my ($headerdom)=($uri=~m{^/res/($match_domain)/});
$r->print(&Apache::loncommon::start_page('Browse Resources',$js,
{'domain' => $headerdom,}));
# - Evaluate actions from previous page (both cumulatively and chronologically)
- if ($env{'form.catalogmode'} eq 'groupimport') {
+ if ($env{'form.catalogmode'} eq 'import') {
my $acts=$env{'form.acts'};
my @Acts=split(/b/,$acts);
my %ahash;
@@ -478,7 +480,7 @@ END
$storeuri=~s/\/+/\//g;
# ---------------------------------------------------------------- Bread crumbs
$r->print(&Apache::lonhtmlcommon::crumbs($storeuri,'','',
- (($env{'form.catalogmode'} eq 'groupimport')?
+ (($env{'form.catalogmode'} eq 'import')?
'document.forms.fileattr':'')).
&Apache::lonhtmlcommon::select_recent('residx','resrecent',
'window.status=this.form.resrecent.options[this.form.resrecent.selectedIndex].value;this.form.action=this.form.resrecent.options[this.form.resrecent.selectedIndex].value;this.form.submit();'));
@@ -486,7 +488,7 @@ END
my $reshome=$env{'course.'.$env{'request.course.id'}.'.reshome'};
if ($reshome) {
$r->print("print('javascript:document.forms.fileattr.action="'.$reshome.'";document.forms.fileattr.submit();');
} else {
$r->print($reshome);
@@ -579,12 +581,13 @@ END
# -------- recursively go through all the directories and output as appropriate
&scanDir ($r,$toplevel,$indent,\%hash);
-# ---------------------------- embed hidden information useful for group import
- $r->print("");
# -------------------------------------------------------------- end the tables
$r->print('');
+# ---------------------------- embed hidden information useful for group import
+ $r->print("");
+# -------------------------------------------------------------- end the tables
$r->print('');
# --------------------------------------------------- end the output and return
@@ -796,7 +799,8 @@ sub display_line {
my $i=0;
while ($i<=11) {
$tabtag=join('',$tabtag," | ")
- if $hash{'display_attrs_'.$i} == 1;
+ if ($i != 9 &&
+ $hash{'display_attrs_'.$i} == 1);
$i++;
}
my $valign = ($hash{'display_attrs_7'} == 1 ? 'top' : 'bottom');
@@ -841,7 +845,7 @@ sub display_line {
&begin_form ($r,$filecom[0]);
my $anchor = $filecom[0];
$anchor =~ s/\///g;
- $r->print ('');
+ $r->print ('');
$r->print ('');
$r->print ('print ('
print (' border="0" />'."\n");
$r->print (&mt("Domain")." - $listname ");
if ($Apache::lonnet::domaindescription{$listname}) {
@@ -868,7 +872,7 @@ sub display_line {
my $anchor = $curdir;
$anchor =~ s/\///g;
&begin_form ($r,$curdir);
- $r->print ('
'."\n");
$r->print ('');
$r->print ('print ('
');
my $domain=(split(m|/|,$startdir))[2];
@@ -909,11 +913,11 @@ sub display_line {
my $quotable_filelink = &Apache::loncommon::escape_single($filelink);
$r->print("");
- $r->print("
".
+ $r->print("
".
"\n");
- $r->print("");
- } elsif ($env{'form.catalogmode'} eq 'groupimport') {
- $r->print(" | ");
+ } elsif ($env{'form.catalogmode'} eq 'import') {
+ $r->print(" | ");
+ $r->print(" | ");
$hash{"pre_${fnum}_link"}=$filelink;
$fnum++;
}
@@ -935,18 +939,18 @@ sub display_line {
}
# General indentation
if ($indent > 0 and $indent < 11) {
- $r->print(" print(" \n");
} elsif ($indent >0) {
my $ten = int($indent/10.);
my $rem = $indent%10.0;
my $count = 0;
while ($count < $ten) {
- $r->print(" \n");
$count++;
}
- $r->print(" print(" \n") if $rem > 0;
}
# Sequence open/close icon
@@ -955,23 +959,23 @@ sub display_line {
my $anchor = $curdir;
$anchor =~ s/\///g;
$r->print ('');
- $r->print ('print (' name="'.$msg.'" height="22" type="image" border="0" />'.
"\n");
}
# Filetype icons
- $r->print(" \n");
+ $r->print(" \n");
my $quotable_filelink = &Apache::loncommon::escape_single($filelink);
$r->print (" $listname ");
+ "', 'previewfile', '450', '500', 'no', 'yes','yes');\"".
+ " target=\"_self\">$listname ");
$r->print (" (metadata) ");
+ ".meta', 'metadatafile', '500', '550', 'no', 'yes','no');\" ".
+ " target=\"_self\">metadata) ");
# Close form to open/close sequence
if ($filelink=~/\.(page|sequence)$/) {
$r->print('');
@@ -1036,8 +1040,8 @@ sub display_line {
my $quotable_sourcelink = &Apache::loncommon::escape_single($sourcelink);
$r->print(' | '."Yes "." | \n");
+ "', 'previewsource', '700', '700', 'no', 'yes','yes');\"".
+ " target=\"_self\">Yes "."\n");
} else { #A cuddled else. :P
$r->print(" | \n");
}
@@ -1046,6 +1050,7 @@ sub display_line {
# links
&dynmetaread($filelink);
$r->print('');
+ &coursecontext($r,$filelink);
&dynmetaprint($r,$filelink,'goto_list');
&dynmetaprint($r,$filelink,'comefrom_list');
&dynmetaprint($r,$filelink,'sequsage_list');
@@ -1071,31 +1076,32 @@ sub display_line {
&begin_form ($r,$curdir);
my $indentm1 = $indent-1;
if ($indentm1 < 11 and $indentm1 > 0) {
- $r->print(" print(" \n");
} else {
my $ten = int($indentm1/10.);
my $rem = $indentm1%10.0;
my $count = 0;
while ($count < $ten) {
- $r->print (" \n");
$count++;
}
- $r->print (" print (" \n") if $rem > 0;
}
$r->print ('');
- $r->print ('print (' name="'.$msg.'" height="22" type="image" border="0" />'.
"\n");
my $quotable_curdir = &Apache::loncommon::escape_single($curdir);
$r->print (' '
+ .' '.
"\n");
- $r->print ("$listname | \n");
+ $r->print ("$listname\n");
# Attributes
my $filelink = $startdir.$filecom[0].'/default';
@@ -1143,13 +1149,27 @@ sub display_line {
if ($hash{'display_attrs_7'} == 1) {
$r->print(' | ');
}
- $r->print('');
+ $r->print('');
}
}
+sub coursecontext {
+ my ($r,$filelink)=@_;
+ my $filesymb=&Apache::lonnet::symbread($filelink);
+ if ($filesymb) {
+ my ($map,$index,$resource)=&Apache::lonnet::decode_symb($filesymb);
+ $r->print(&mt('Already in this course:
[_1] in folder/map [_2].
',
+ &Apache::lonnet::gettitle($resource),
+ &Apache::lonnet::gettitle($map)));
+ }
+}
+
sub showpreview {
my ($filelink)=@_;
+ if ($filelink=~m-^(/ext/|http://)-) {
+ return &mt('External Resource, preview not enabled');
+ }
my ($curfext)=($filelink=~/\.(\w+)$/);
my $output='';
my $embstyle=&Apache::loncommon::fileembstyle($curfext);
@@ -1162,10 +1182,17 @@ sub showpreview {
$output=join("\n",);
close(FH);
} else {
+# In update display mode, remove old cache. This is done to retroactively
+# clean up course context renderings.
+ if (-e $cache) {
+ unlink($cache);
+ }
$output=&Apache::lonnet::ssi_body($filelink);
+# Is access denied? Don't render, don't store
if ($output=~/LONCAPAACCESSCONTROLERRORSCREEN/s) {
$output='';
- } else {
+# Was this rendered in course content? Don't store
+ } elsif (!&Apache::lonnet::symbread($filelink)) {
open(FH,">$cache");
print FH $output;
close(FH);
@@ -1173,9 +1200,9 @@ sub showpreview {
}
$output=''.$output.'';
} elsif ($embstyle eq 'img') {
- $output='
';
- } elsif ($filelink=~/^\/res\/(\w+)\/(\w+)\//) {
- $output='
';
+ } elsif ($filelink=~m{^/res/($match_domain)/($match_username)/}) {
+ $output='
';
}
@@ -1188,9 +1215,9 @@ sub dynmetaprint {
$r->print("\n
".$fieldnames{$item}.': '.
&Apache::lonmeta::prettyprint($item,
$dynhash{$filelink}->{$item},
- (($env{'form.catalogmode'} ne 'groupimport')?'preview':''),
+ (($env{'form.catalogmode'} ne 'import')?'preview':''),
'',
- (($env{'form.catalogmode'} eq 'groupimport')?'document.forms.fileattr':''),1));
+ (($env{'form.catalogmode'} eq 'import')?'document.forms.fileattr':''),1));
}
}
@@ -1212,14 +1239,15 @@ sub begin_form {
# --------- settings whenever the user causes the indexer window to be launched
sub start_fresh_session {
- delete $hash{'form.catalogmode'};
- delete $hash{'form.mode'};
- delete $hash{'form.form'};
- delete $hash{'form.element'};
- delete $hash{'form.omit'};
- delete $hash{'form.only'};
- foreach (keys %hash) {
- delete $hash{$_} if (/^(pre_|store)/);
+ my ($hash) = @_;
+ delete $hash->{'form.catalogmode'};
+ delete $hash->{'form.mode'};
+ delete $hash->{'form.form'};
+ delete $hash->{'form.element'};
+ delete $hash->{'form.omit'};
+ delete $hash->{'form.only'};
+ foreach (keys %{$hash}) {
+ delete $hash->{$_} if (/^(pre_|store)/);
}
}