--- loncom/interface/lonindexer.pm 2006/12/05 02:55:53 1.154
+++ loncom/interface/lonindexer.pm 2007/08/17 22:54:36 1.179
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Directory Indexer
#
-# $Id: lonindexer.pm,v 1.154 2006/12/05 02:55:53 albertel Exp $
+# $Id: lonindexer.pm,v 1.179 2007/08/17 22:54:36 banghart Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -53,6 +53,7 @@ use Apache::lonmeta;
use Apache::File;
use Apache::lonlocal;
use Apache::lonsource();
+use Apache::groupsort();
use GDBM_File;
use LONCAPA qw(:match);
@@ -105,7 +106,7 @@ sub handler {
my $fileclr='#ffffe6';
my $line;
- my (@attrchk,@openpath);
+ my (@attrchk,@openpath,$typeselect);
my $uri=$r->uri;
# -------------------------------------- see if called from an interactive mode
@@ -128,13 +129,17 @@ sub handler {
if ($env{'form.launch'} eq '1') {
&start_fresh_session(\%dbfile);
}
-
while(my($key,$value)=each(%dbfile)) {
$hash{$key}=$value;
}
untie(%dbfile);
}
}
+# - Evaluate actions from previous page (both cumulatively and chronologically)
+ if ($env{'form.catalogmode'} eq 'import' || $hash{'form.catalogmode'} eq 'import') {
+ &Apache::groupsort::update_actions_hash(\%hash);
+ }
+
{
#Hijack lonindexer to verify a title and be close down.
if ($env{'form.launch'} eq '2') {
@@ -174,7 +179,7 @@ ENDSUBM
if ($env{'form.catalogmode'} eq 'interactive') {
$extrafield='
'.
' ';
+ ' class="LC_icon" />';
$colspan=" colspan='2' ";
my $cl=&mt('Close');
$closebutton=<'.
' ';
+ ' class="LC_icon" />';
$colspan=" colspan='2' ";
my $cl=&mt('Close');
my $gi=&mt('Import');
@@ -242,7 +247,7 @@ END
#
#
if (!defined($mode) || ($mode ne 'edit' && $mode ne 'parmset')) {
- my $location = "/adm/groupsort?catalogmode=import&";
+ my $location = "/adm/groupsort?&inhibitmenu=yes&catalogmode=import&";
$location .= "mode=".$mode."&";
$location .= "acts=";
$catalogmodefunctions=<<"END";
@@ -269,6 +274,9 @@ END
function select_data(url) {
var location = "/res/?launch=2&form=$form&element=$element&titleelement=$titleelement&acts=" + url;
window.location=location;
+ if (window.opener.document.forms["$form"].elements["$element"].value != url) {
+ window.opener.unClean();
+ }
}
function select_group() {
window.location="$location"+document.forms.fileattr.acts.value;
@@ -346,10 +354,41 @@ function queue(val) {
END
}
+ my $inhibit_menu = "+'&".&Apache::loncommon::inhibit_menu_check()."'";
# ---------------------------------------------------------------- Print Header
+
my $js = <<"ENDHEADER";
ENDHEADER
@@ -370,48 +409,13 @@ ENDHEADER
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 'import') {
- my $acts=$env{'form.acts'};
- my @Acts=split(/b/,$acts);
- my %ahash;
- my %achash;
- my $ac=0;
- # some initial hashes for working with data
- foreach (@Acts) {
- my ($state,$ref)=split(/a/);
- $ahash{$ref}=$state;
- $achash{$ref}=$ac;
- $ac++;
- }
- # sorting through the actions and changing the global database hash
- foreach (sort {$achash{$a}<=>$achash{$b}} (keys %ahash)) {
- my $key=$_;
- if ($ahash{$key} eq '1') {
- $hash{'store_'.$hash{'pre_'.$key.'_link'}}=
- $hash{'pre_'.$key.'_title'};
- $hash{'storectr_'.$hash{'pre_'.$key.'_link'}}=
- $hash{'storectr'}+0;
- $hash{'storectr'}++;
- }
- if ($ahash{$key} eq '0') {
- if ($hash{'store_'.$hash{'pre_'.$key.'_link'}}) {
- delete $hash{'store_'.$hash{'pre_'.$key.'_link'}};
- }
- }
- }
- # deleting the previously cached listing
- foreach (keys %hash) {
- if ($_ =~ /^pre_/ && $_ =~/link$/) {
- my $key = $_;
- $key =~ s/^pre_//;
- $key =~ s/_[^_]*$//;
- delete $hash{'pre_'.$key.'_title'};
- delete $hash{'pre_'.$key.'_link'};
- }
- }
+# ---------------------------------- get state of file types to be showing
+ if ($env{'form.only'}) {
+ $typeselect = $env{'form.only'};
+ } else {
+ $typeselect = '';
}
-
+
# ---------------------------------- get state of file attributes to be showing
if ($env{'form.attrs'}) {
for (my $i=0; $i<=11; $i++) {
@@ -443,7 +447,10 @@ ENDHEADER
'sr' => 'Show resource',
'li' => 'Linked/Related Resources',
'av' => 'All versions',
- 'ud' => 'Update Display'
+ 'ud' => 'Update Display',
+ 'pr' => 'Problems',
+ 'gr' => 'Graphics',
+ 'at' => 'All types'
);
$r->print(<
+END
+ my @file_categories = &Apache::loncommon::filecategories();
+ my %select_file_categories;
+ my @select_form_order = ('');
+ $select_file_categories{''} = &mt('All file types');
+ foreach my $cat (@file_categories) {
+ my $types = join(",",&Apache::loncommon::filecategorytypes($cat));
+ $select_file_categories{$types} = $cat;
+ push(@select_form_order,$types);
+ }
+ $select_file_categories{'select_form_order'} = \@select_form_order;
+ my $type_element=
+ &Apache::loncommon::select_form($typeselect,'only',
+ %select_file_categories);
+ $type_element = ''.&mt('File Type Displayed: [_1]',
+ $type_element).' ';
+ $r->print(<
$closebutton $groupimportbutton
END
+ $r->print(&Apache::loncommon::inhibit_menu_check('input'));
+
# -------------- Filter out sequence containment in crumbs and "recent folders"
my $storeuri=$uri;
$storeuri='/'.(split(/\.(page|sequence)\/\//,$uri))[-1];
@@ -489,7 +517,7 @@ END
if ($reshome) {
$r->print("print('javascript:document.forms.fileattr.action="'.$reshome.'";document.forms.fileattr.submit();');
+ $r->print('javascript:document.forms.fileattr.action="'.&Apache::loncommon::inhibit_menu_check($reshome).'";document.forms.fileattr.submit();');
} else {
$r->print($reshome);
}
@@ -499,6 +527,11 @@ END
# ------------------------------------------------------ Remember where we were
&Apache::loncommon::storeresurl($storeuri);
&Apache::lonhtmlcommon::store_recent('residx',$storeuri,$storeuri);
+# -------------------------------------------------- Check All and Uncheck all
+ if ($env{'form.catalogmode'} eq 'import') {
+ $r->print(' ');
+ $r->print(' ');
+ }
# ----------------- output starting row to the indexed file/directory hierarchy
my $titleclr="#ddffff";
#$r->print(&initdebug());
@@ -680,7 +713,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 {
@@ -689,7 +722,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 {
@@ -799,7 +832,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');
@@ -811,7 +845,7 @@ sub display_line {
$updir='/'.(split(/\.(page|sequence)\/\//,$startdir))[-1];
$updir=~s/\/+/\//g;
- $r->print("$extrafield");
+ $r->print(" $extrafield");
$r->print("\n");
$r->print ('$tabtag \n");
return OK;
@@ -839,24 +874,24 @@ sub display_line {
if ($filecom[1] eq 'domain') {
$r->print (' '."\n")
if ($env{'form.dirPointer'} eq "on");
- $r->print("$extrafield");
+ $r->print(" $extrafield");
$r->print("");
&begin_form ($r,$filecom[0]);
my $anchor = $filecom[0];
- $anchor =~ s/\///g;
+ $anchor =~ s/\W//g;
$r->print (' ');
$r->print (' ');
$r->print (' print (' name="'.$msg.'" height="22" type="image" border="0" />'.
+ $r->print (' name="'.$msg.'" type="image" class="LC_indexer_icon" />'.
"\n");
my $quotable_filecom = &Apache::loncommon::escape_single($filecom[0]);
$r->print (' print (' border="0" /> '."\n");
+ $r->print (' class="LC_icon" />'."\n");
$r->print (&mt("Domain")." - $listname ");
- if ($Apache::lonnet::domaindescription{$listname}) {
- $r->print("(".$Apache::lonnet::domaindescription{$listname}.
+ if (&Apache::lonnet::domain($listname,'description')) {
+ $r->print("(".&Apache::lonnet::domain($listname,'description').
")");
}
$r->print ("$tabtag \n");
@@ -865,24 +900,23 @@ sub display_line {
# display user directory
}
if ($filecom[1] eq 'user') {
- $r->print("$extrafield");
- $r->print("\n");
+ # $r->print(" $extrafield");
my $curdir = $startdir.$filecom[0].'/';
my $anchor = $curdir;
- $anchor =~ s/\///g;
+ $anchor =~ s/\W//g;
+ $r->print(" $extrafield");
&begin_form ($r,$curdir);
$r->print (' '."\n");
+ 'whitespace1.gif" class="LC_icon" />'."\n");
$r->print (' ');
$r->print (' print (' name="'.$msg.'" height="22" type="image" border="0" />'.
+ $r->print (' name="'.$msg.'" type="image" class="LC_indexer_icon" />'.
"\n");
my $quotable_curdir = &Apache::loncommon::escape_single($curdir);
$r->print (' ');
+ .'\')"> ');
my $domain=(split(m|/|,$startdir))[2];
my $plainname=&Apache::loncommon::plainname($listname,$domain);
$r->print ($listname);
@@ -893,26 +927,30 @@ sub display_line {
# display file
if (($fnptr == 0 and $filecom[3] ne '') or $absolute) {
+ my $title;
my $filelink = $pathprefix.$filecom[0];
+ if ($hash{'display_attrs_0'} == 1) {
+ $title = &Apache::lonnet::gettitle($filelink);
+ }
my @file_ext = split (/\./,$listname);
my $curfext = $file_ext[-1];
if (@Omit) {
- foreach (@Omit) { return OK if ($curfext eq $_); }
+ foreach (@Omit) { return OK if (lc($curfext) eq $_); }
}
if (@Only) {
my $skip = 1;
- foreach (@Only) { $skip = 0 if ($curfext eq $_); }
+ foreach (@Only) { $skip = 0 if (lc($curfext) eq $_); }
return OK if ($skip > 0);
}
# Set the icon for the file
my $iconname = &Apache::loncommon::icon($listname);
- $r->print(" ");
+ $r->print(" ");
if ($env{'form.catalogmode'} eq 'interactive') {
my $quotable_filelink = &Apache::loncommon::escape_single($filelink);
$r->print("");
- $r->print(" ".
+ $r->print(" ".
"\n");
$r->print(" ");
} elsif ($env{'form.catalogmode'} eq 'import') {
@@ -926,54 +964,56 @@ sub display_line {
$r->print(" />\n");
$r->print(" ");
$hash{"pre_${fnum}_link"}=$filelink;
+ $hash{"pre_${fnum}_title"}=$title;
+ if (!$hash{"pre_${fnum}_title"}) {
+ $hash{"pre_${fnum}_title"} = 'Not_retrieved';
+ }
$fnum++;
}
# Form to open or close sequences
if ($filelink=~/\.(page|sequence)$/) {
my $curdir = $startdir.$filecom[0].'/';
- my $anchor = $curdir;
- $anchor =~ s/\///g;
&begin_form($r,$curdir);
$indent--;
}
# General indentation
if ($indent > 0 and $indent < 11) {
- $r->print(" \n");
+ $r->print(" \n");
} elsif ($indent >0) {
my $ten = int($indent/10.);
my $rem = $indent%10.0;
my $count = 0;
while ($count < $ten) {
- $r->print(" \n");
+ $r->print(" \n");
$count++;
}
$r->print(" \n") if $rem > 0;
+ ".gif class='LC_icon' />\n") if $rem > 0;
}
# Sequence open/close icon
if ($filelink=~/\.(page|sequence)$/) {
my $curdir = $startdir.$filecom[0].'/';
my $anchor = $curdir;
- $anchor =~ s/\///g;
+ $anchor =~ s/\W//g;
$r->print (' ');
$r->print (' print (' name="'.$msg.'" height="22" type="image" border="0" />'.
+ $r->print (' name="'.$msg.'" type="image" class="LC_indexer_icon" />'.
"\n");
}
# Filetype icons
- $r->print(" \n");
+ $r->print(" \n");
my $quotable_filelink = &Apache::loncommon::escape_single($filelink);
-
$r->print (" $listname ");
-
+ $quotable_filelink = &Apache::loncommon::escape_single($filelink.'.meta');
+ &Apache::loncommon::inhibit_menu_check(\$quotable_filelink);
$r->print (" (metadata ) ");
# Close form to open/close sequence
if ($filelink=~/\.(page|sequence)$/) {
@@ -981,7 +1021,6 @@ sub display_line {
}
$r->print(" \n");
if ($hash{'display_attrs_0'} == 1) {
- my $title = &Apache::lonnet::gettitle($filelink,'title');
$r->print(' '.($title eq '' ? ' ' : $title).
' '."\n");
}
@@ -1037,6 +1076,7 @@ sub display_line {
if($source eq 'open') {
my $sourcelink = &Apache::lonsource::make_link($filelink,$listname);
my $quotable_sourcelink = &Apache::loncommon::escape_single($sourcelink);
+ &Apache::loncommon::inhibit_menu_check(\$quotable_sourcelink);
$r->print(''."print("$extrafield");
+ $anchor =~ s/\W//g;
+ $r->print(" $extrafield");
&begin_form ($r,$curdir);
my $indentm1 = $indent-1;
if ($indentm1 < 11 and $indentm1 > 0) {
$r->print(" \n");
+ ".gif class='LC_icon' />\n");
} else {
my $ten = int($indentm1/10.);
my $rem = $indentm1%10.0;
my $count = 0;
while ($count < $ten) {
$r->print (" \n");
+ ,"whitespace10.gif class='LC_icon' />\n");
$count++;
}
$r->print (" \n") if $rem > 0;
+ ".gif class='LC_icon' />\n") if $rem > 0;
}
$r->print (' ');
$r->print (' print (' name="'.$msg.'" height="22" type="image" border="0" />'.
+ $r->print (' name="'.$msg.'" type="image" class="LC_indexer_icon" />'.
"\n");
my $quotable_curdir = &Apache::loncommon::escape_single($curdir);
$r->print (''
.' '.
+ $iconpath.'folder_'.$diropen.'.gif" class="LC_icon" />'.
"\n");
$r->print ("$listname \n");
# Attributes
my $filelink = $startdir.$filecom[0].'/default';
if ($hash{'display_attrs_0'} == 1) {
- my $title = &Apache::lonnet::gettitle($filelink,'title');
+ my $title = &Apache::lonnet::gettitle($filelink);
$r->print(' '.($title eq '' ? ' ' : $title).
' '."\n");
}
@@ -1202,7 +1242,7 @@ sub showpreview {
$output=' ';
} elsif ($filelink=~m{^/res/($match_domain)/($match_username)/}) {
$output=' ';
}
return $output;
@@ -1224,7 +1264,8 @@ sub dynmetaprint {
sub begin_form {
my ($r,$uri) = @_;
my $anchor = $uri;
- $anchor =~ s/\///g;
+ $anchor =~ s/\W//g;
+ $uri=&Apache::loncommon::escape_single($uri);
$r->print (''.
"\n");
$r->print (' '."\n");
+ $r->print(&Apache::loncommon::inhibit_menu_check('input'));
$dnum++;
}