--- loncom/interface/lonindexer.pm 2005/04/07 06:56:23 1.133 +++ loncom/interface/lonindexer.pm 2006/09/29 18:21:43 1.153 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Directory Indexer # -# $Id: lonindexer.pm,v 1.133 2005/04/07 06:56:23 albertel Exp $ +# $Id: lonindexer.pm,v 1.153 2006/09/29 18:21:43 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -116,14 +116,18 @@ sub handler { my $closebutton=''; my $groupimportbutton=''; my $colspan=''; - + $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 +135,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'); @@ -145,11 +146,7 @@ sub handler { $verify_title=~s/'/\\'/g; $extra='window.opener.document.forms["'.$env{'form.form'}.'"].elements["'.$env{'form.titleelement'}.'"].value=\''.$verify_title.'\';'; } - my $html=&Apache::lonxml::xmlbegin(); - $r->print(< - + my $js = < function load() { window.opener.document.forms["$env{'form.form'}"] @@ -159,11 +156,13 @@ sub handler { window.close(); } - - - - ENDSUBM + $r->print(&Apache::loncommon::start_page(undef,$js, + {'only_body' =>1, + 'add_entries' => + {'onload' => "load();"},} + ). + &Apache::loncommon::end_page()); return OK; } @@ -173,7 +172,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,9 +180,9 @@ ENDSUBM END } - elsif ($env{'form.catalogmode'} eq 'groupimport') { + elsif ($env{'form.catalogmode'} eq 'import') { $extrafield=''. - ''; $colspan=" colspan='2' "; my $cl=&mt('Close'); @@ -231,7 +230,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 @@ -242,7 +241,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"; @@ -329,7 +328,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.=<print(< -The LearningOnline Network With CAPA Directory Browser - - - + my $js = <<"ENDHEADER"; - - ENDHEADER -my ($headerdom)=($uri=~/^\/res\/(\w+)\//); -$r->print(&Apache::loncommon::bodytag('Browse Resources',undef,undef,undef, - $headerdom)); + + my ($headerdom)=($uri=~/^\/res\/(\w+)\//); + $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; @@ -488,7 +479,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();')); @@ -496,7 +487,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); @@ -589,16 +580,17 @@ 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 - $r->print(''."\n"); + $r->print(&Apache::loncommon::end_page()."\n"); } if(! $c->aborted()) { # write back into the temporary file @@ -714,16 +706,19 @@ sub dynmetaread { } # Actually get the data %dynhash= - (%dynhash,&Apache::lonmeta::get_dynamic_metadata_from_sql($uri)); + (%dynhash,&Apache::lonmeta::get_dynamic_metadata_from_sql($uri.'/')); # Remember that we got it $dynread{$uri}=1; } } sub initdebug { - my $html=&Apache::lonxml::xmlbegin(); + my $start_page= + &Apache::loncommon::start_page('Debug',undef, + {'only_body' => 1,}); + $start_page =~ s/\n/ /g; return < + ENDJS } sub writedebug { - my $text = shift; - return ""; + my ($text) = @_; + return ""; } # -------------------- filters out files based on extensions (returns an array) @@ -829,7 +824,7 @@ sub display_line { $r->print ('print (' name="'.$msg.'" height="22" type="image" border="0" />'. "\n"); - $r->print(&mt("Up")." $tabtag\n"); + $r->print(&mt("Up")."$tabtag\n"); return OK; } # Do we have permission to look at this? @@ -848,7 +843,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}) { $r->print("(".$Apache::lonnet::domaindescription{$listname}. ")"); } - $r->print (" $tabtag\n"); + $r->print ("$tabtag\n"); return OK; # display user directory @@ -875,7 +870,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]; @@ -916,11 +911,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("
\n"); + $r->print(""); + } elsif ($env{'form.catalogmode'} eq 'import') { + $r->print("\n"); $r->print("print("checked"); } $r->print(" />\n"); - $r->print("
\n"); - $r->print(""); + $r->print(""); $hash{"pre_${fnum}_link"}=$filelink; $fnum++; } @@ -943,18 +937,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 @@ -963,27 +957,27 @@ 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"); -# Close form to open/close sequence - if ($filelink=~/\.(page|sequence)$/) { - $r->print(''); - } + $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(''); + } $r->print("\n"); if ($hash{'display_attrs_0'} == 1) { my $title = &Apache::lonnet::gettitle($filelink,'title'); @@ -1044,8 +1038,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"); } @@ -1054,39 +1048,18 @@ 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'); &dynmetaprint($r,$filelink,'dependencies'); + &dynmetaprint($r,$filelink,'course_list'); $r->print(''); } if ($hash{'display_attrs_7'} == 1) { # Show resource - my $output=''; - my $embstyle=&Apache::loncommon::fileembstyle($curfext); - if ($embstyle eq 'ssi') { - my $cache=$Apache::lonnet::perlvar{'lonDocRoot'}.$filelink. - '.tmp'; - if ((!$env{'form.updatedisplay'}) && - (-e $cache)) { - open(FH,$cache); - $output=join("\n",); - close(FH); - } else { - $output=&Apache::lonnet::ssi_body($filelink); - open(FH,">$cache"); - print FH $output; - close(FH); - } - $output=''.$output.''; - } elsif ($embstyle eq 'img') { - $output=''; - } elsif ($filelink=~/^\/res\/(\w+)\/(\w+)\//) { - $output=''; - } - $r->print(' '.($output eq '' ? ' ':$output). + my $output=&showpreview($filelink); + $r->print(' '.($output eq '' ? ' ':$output). " \n"); } $r->print("\n"); @@ -1101,31 +1074,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'; @@ -1173,20 +1147,75 @@ 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); + if ($embstyle eq 'ssi') { + my $cache=$Apache::lonnet::perlvar{'lonDocRoot'}.$filelink. + '.tmp'; + if ((!$env{'form.updatedisplay'}) && + (-e $cache)) { + open(FH,$cache); + $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=''; +# Was this rendered in course content? Don't store + } elsif (!&Apache::lonnet::symbread($filelink)) { + open(FH,">$cache"); + print FH $output; + close(FH); + } + } + $output=''.$output.''; + } elsif ($embstyle eq 'img') { + $output=''.&mt('Preview').''; + } elsif ($filelink=~/^\/res\/(\w+)\/(\w+)\//) { + $output=''.&mt('Preview').''; + } + return $output; +} + sub dynmetaprint { my ($r,$filelink,$item)=@_; if ($dynhash{$filelink}->{$item}) { $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)); } } @@ -1208,14 +1237,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)/); } } @@ -1238,6 +1268,7 @@ sub cleanup { if (tied(%hash)){ &Apache::lonnet::logthis('Cleanup indexer: hash'); } + return OK; }