--- loncom/interface/lonindexer.pm 2006/06/08 13:56:31 1.145 +++ loncom/interface/lonindexer.pm 2007/01/16 21:20:57 1.156 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Directory Indexer # -# $Id: lonindexer.pm,v 1.145 2006/06/08 13:56:31 www Exp $ +# $Id: lonindexer.pm,v 1.156 2007/01/16 21:20:57 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 @@ -123,7 +124,11 @@ sub handler { %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'); @@ -181,7 +183,7 @@ END } elsif ($env{'form.catalogmode'} eq 'import') { $extrafield=''. - ''; $colspan=" colspan='2' "; my $cl=&mt('Close'); @@ -365,7 +367,7 @@ function gothere(val) { 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) @@ -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("
"); - $r->print("
"); # -------------------------------------------------------------- end the tables $r->print(''); +# ---------------------------- embed hidden information useful for group import + $r->print("
"); + $r->print("
"); +# -------------------------------------------------------------- end the tables $r->print(''); # --------------------------------------------------- end the output and return @@ -677,7 +680,7 @@ sub get_list { $uri=~s/\/+/\//g; foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$uri))) { my @ratpart=split(/\:/,$_); - push @list,$ratpart[1]; + push(@list,&LONCAPA::map::qtescape($ratpart[1])); } $hash{'dirlist_files_'.$luri} = join("\n",@list); } else { @@ -686,7 +689,7 @@ sub get_list { $hash{'dirlist_files_'.$luri} = join("\n",@list); $hash{'dirlist_timestamp_files_'.$luri} = time; } - return @list=&match_ext($r,@list); + return @list=&match_ext($r,@list); } sub dynmetaread { @@ -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(""); + $r->print(""); } elsif ($env{'form.catalogmode'} eq 'import') { - $r->print("
\n"); + $r->print("\n"); $r->print("print("checked"); } $r->print(" />\n"); - $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 ('' + .''.&mt('Open Folder').''. "\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=''.&mt('Preview').''; } @@ -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)/); } }