--- loncom/interface/loncommon.pm 2012/04/05 13:32:15 1.1065 +++ loncom/interface/loncommon.pm 2012/04/06 01:23:11 1.1066 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.1065 2012/04/05 13:32:15 raeburn Exp $ +# $Id: loncommon.pm,v 1.1066 2012/04/06 01:23:11 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -10658,7 +10658,7 @@ sub process_extracted_files { (my $count,undef) = &get_extracted($docudom,$docuname,$currdir,\%is_dir,\%children, \%parent,\@contents,\%dirorder,\%titles); } - my (%referrer,%orphaned,%todelete,%newdest,%newseqid); + my (%referrer,%orphaned,%todelete,%todeletedir,%newdest,%newseqid); if ($numitems) { for (my $i=1; $i<=$numitems; $i++) { my $path = $env{'form.archive_content_'.$i}; @@ -10666,7 +10666,12 @@ sub process_extracted_files { if ($env{'form.archive_'.$i} eq 'discard') { if ($prefix ne '' && $path ne '') { if (-e $prefix.$path) { - $todelete{$prefix.$path} = 1; + if ((@archdirs > 0) && + (grep(/^\Q$i\E$/,@archdirs))) { + $todeletedir{$prefix.$path} = 1; + } else { + $todelete{$prefix.$path} = 1; + } } } } elsif ($env{'form.archive_'.$i} eq 'display') { @@ -10802,9 +10807,16 @@ sub process_extracted_files { if (keys(%todelete)) { foreach my $key (keys(%todelete)) { unlink($key); - unless ($ishome) { - #FIXME Need to notify homeserver to delete files. - } + } + } + if (keys(%todeletedir)) { + foreach my $key (keys(%todeletedir)) { + rmdir($key); + } + } + foreach my $dir (sort(keys(%is_dir))) { + if (($pathtocheck ne '') && ($dir ne '')) { + &cleanup_empty_dirs($prefix."$pathtocheck/$dir"); } } } else { @@ -10820,6 +10832,31 @@ sub process_extracted_files { return $output; } +sub cleanup_empty_dirs { + my ($path) = @_; + if (($path ne '') && (-d $path)) { + if (opendir(my $dirh,$path)) { + my @dircontents = grep(!/^\./,readdir($dirh)); + my $numitems = 0; + foreach my $item (@dircontents) { + if (-d "$path/$item") { + &recurse_dirs("$path/$item"); + if (-e "$path/$item") { + $numitems ++; + } + } else { + $numitems ++; + } + } + if ($numitems == 0) { + rmdir($path); + } + closedir($dirh); + } + } + return; +} + =pod =item * &get_turnedin_filepath()