--- loncom/publisher/loncfile.pm 2005/05/30 16:56:46 1.69 +++ loncom/publisher/loncfile.pm 2005/07/14 22:49:26 1.70 @@ -9,7 +9,7 @@ # and displays a page showing the results of the action. # # -# $Id: loncfile.pm,v 1.69 2005/05/30 16:56:46 www Exp $ +# $Id: loncfile.pm,v 1.70 2005/07/14 22:49:26 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -194,7 +194,32 @@ sub obsolete_unpub { } } - +# see if directory is empty +# ignores any .meta, .save and .log files created for a previously +# published file, which has since been marked obsolete and deleted. +sub empty_directory { + my ($dirname,$phase) = @_; + if (opendir DIR, $dirname) { + my @files = grep(!/^\.\.?$/, readdir(DIR)); # ignore . and .. + if (@files) { + my @orphans = grep(/\.(meta|save|log)$/,@files); + if (scalar(@files) - scalar(@orphans) > 0) { + return 0; + } else { + if (($phase eq 'Delete2') && (@orphans > 0)) { + foreach my $file (@orphans) { + if ($file =~ /\.(meta|save|log)$/) { + unlink($dirname.$file); + } + } + } + } + } + closedir(DIR); + return 1; + } + return 0; +} =pod @@ -519,11 +544,20 @@ sub Delete1 { if( -e $fn) { $request->print(''); - unless (&obsolete_unpub($user,$domain,$fn)) { - $request->print('

'.&mt('Cannot delete non-obsolete published file').'

'. + if (-d $fn) { + unless (&empty_directory($fn,'Delete1')) { + $request->print('

'.&mt('Only empty directories may be deleted.').'

'. + 'You must delete the contents of the directory first.
'. + '
'.&mt('Cancel').''); + return; + } + } else { + unless (&obsolete_unpub($user,$domain,$fn)) { + $request->print('

'.&mt('Cannot delete non-obsolete published file').'

'. '
'.&mt('Cancel').''); - return; - } + return; + } + } $request->print('

'.&mt('Delete').' '.&display($fn).'?

'); &CloseForm1($request, $fn); } else { @@ -938,10 +972,8 @@ Returns: sub Delete2 { my ($request, $user, $filename) = @_; - if(opendir DIR, $filename) { - my @files=readdir(DIR); - shift @files; shift @files; # takes off . and .. - if(@files) { + if (-d $filename) { + unless (&empty_directory($filename,'Delete2')) { $request->print(' '.&mt('Error: Directory Non Empty').''); return 0; } else {