version 1.1062, 2012/03/31 23:10:39
|
version 1.1066, 2012/04/06 01:23:11
|
Line 4406 END_MYBLOCK
|
Line 4406 END_MYBLOCK
|
my $text = &mt('Communication Blocked'); |
my $text = &mt('Communication Blocked'); |
if ($activity eq 'docs') { |
if ($activity eq 'docs') { |
$text = &mt('Content Access Blocked'); |
$text = &mt('Content Access Blocked'); |
|
} elsif ($activity eq 'printout') { |
|
$text = &mt('Printing Blocked'); |
} |
} |
|
|
$output .= <<"END_BLOCK"; |
$output .= <<"END_BLOCK"; |
<div class='LC_comblock'> |
<div class='LC_comblock'> |
<a onclick='openWindow("$popupUrl","Blocking Table",600,300,"no","no");return false;' href='/adm/blockingstatus/$querystring' |
<a onclick='openWindow("$popupUrl","Blocking Table",600,300,"no","no");return false;' href='/adm/blockingstatus/$querystring' |
Line 6915 sub headtag {
|
Line 6916 sub headtag {
|
'<head>'. |
'<head>'. |
&font_settings(); |
&font_settings(); |
|
|
|
my $inhibitprint = &print_suppression(); |
|
|
if (!$args->{'frameset'}) { |
if (!$args->{'frameset'}) { |
$result .= &Apache::lonhtmlcommon::htmlareaheaders(); |
$result .= &Apache::lonhtmlcommon::htmlareaheaders(); |
} |
} |
Line 6960 ADDMETA
|
Line 6963 ADDMETA
|
if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); } |
if (!$args->{'no_auto_mt_title'}) { $title = &mt($title); } |
$result .= '<title> LON-CAPA '.$title.'</title>' |
$result .= '<title> LON-CAPA '.$title.'</title>' |
.'<link rel="stylesheet" type="text/css" href="'.$url.'" />' |
.'<link rel="stylesheet" type="text/css" href="'.$url.'" />' |
|
.$inhibitprint |
.$head_extra; |
.$head_extra; |
return $result.'</head>'; |
return $result.'</head>'; |
} |
} |
Line 6985 sub font_settings {
|
Line 6989 sub font_settings {
|
|
|
=pod |
=pod |
|
|
|
=item * &print_suppression() |
|
|
|
In course context returns css which causes the body to be blank when media="print", |
|
if printout generation is unavailable for the current resource. |
|
|
|
This could be because: |
|
|
|
(a) printstartdate is in the future |
|
|
|
(b) printenddate is in the past |
|
|
|
(c) there is an active exam block with "printout" |
|
functionality blocked |
|
|
|
Users with pav, pfo or evb privileges are exempt. |
|
|
|
Inputs: none |
|
|
|
=cut |
|
|
|
|
|
sub print_suppression { |
|
my $noprint; |
|
if ($env{'request.course.id'}) { |
|
my $scope = $env{'request.course.id'}; |
|
if ((&Apache::lonnet::allowed('pav',$scope)) || |
|
(&Apache::lonnet::allowed('pfo',$scope))) { |
|
return; |
|
} |
|
if ($env{'request.course.sec'} ne '') { |
|
$scope .= "/$env{'request.course.sec'}"; |
|
if ((&Apache::lonnet::allowed('pav',$scope)) || |
|
(&Apache::lonnet::allowed('pfo',$scope))) { |
|
return; |
|
} |
|
} |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $blocked = &blocking_status('printout',$cnum,$cdom); |
|
if ($blocked) { |
|
my $checkrole = "cm./$cdom/$cnum"; |
|
if ($env{'request.course.sec'} ne '') { |
|
$checkrole .= "/$env{'request.course.sec'}"; |
|
} |
|
unless ((&Apache::lonnet::allowed('evb',undef,undef,$checkrole)) && |
|
($env{'request.role'} !~ m{^st\./$cdom/$cnum})) { |
|
$noprint = 1; |
|
} |
|
} |
|
unless ($noprint) { |
|
my $symb = &Apache::lonnet::symbread(); |
|
if ($symb ne '') { |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (ref($navmap)) { |
|
my $res = $navmap->getBySymb($symb); |
|
if (ref($res)) { |
|
if (!$res->resprintable()) { |
|
$noprint = 1; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if ($noprint) { |
|
return <<"ENDSTYLE"; |
|
<style type="text/css" media="print"> |
|
body { display:none } |
|
</style> |
|
ENDSTYLE |
|
} |
|
} |
|
return; |
|
} |
|
|
|
=pod |
|
|
=item * &xml_begin() |
=item * &xml_begin() |
|
|
Returns the needed doctype and <html> |
Returns the needed doctype and <html> |
Line 9848 sub is_archive_file {
|
Line 9928 sub is_archive_file {
|
} |
} |
|
|
sub decompress_form { |
sub decompress_form { |
my ($mimetype,$archiveurl,$action,$noextract,$hiddenelements) = @_; |
my ($mimetype,$archiveurl,$action,$noextract,$hiddenelements,$dirlist) = @_; |
my %lt = &Apache::lonlocal::texthash ( |
my %lt = &Apache::lonlocal::texthash ( |
this => 'This file is an archive file.', |
this => 'This file is an archive file.', |
|
itsc => 'Its contents are as follows:', |
youm => 'You may wish to extract its contents.', |
youm => 'You may wish to extract its contents.', |
camt => 'Extraction of contents is recommended for Camtasia zip files.', |
camt => 'Extraction of contents is recommended for Camtasia zip files.', |
perm => 'Permanently remove archive file after extraction of contents?', |
|
extr => 'Extract contents', |
extr => 'Extract contents', |
yes => 'Yes', |
yes => 'Yes', |
no => 'No', |
no => 'No', |
); |
); |
my $output = '<p>'.$lt{'this'}.' '.$lt{'youm'}.'<br />'; |
my $output = '<p>'.$lt{'this'}; |
|
my $fileloc = &Apache::lonnet::filelocation(undef,$archiveurl); |
|
my (%toplevel,@paths); |
|
my $info = &list_archive_contents($fileloc,\@paths); |
|
if (@paths) { |
|
foreach my $path (@paths) { |
|
$path =~ s{^/}{}; |
|
if ($path =~ m{^([^/]+)/}) { |
|
$toplevel{$1} = $path; |
|
} else { |
|
$toplevel{$path} = $path; |
|
} |
|
} |
|
} |
|
if ($info eq '') { |
|
$output .= ' '.$lt{'youm'}.'</p>'."\n"; |
|
} else { |
|
$output .= ' '.$lt{'itsc'}.'</p>'."\n". |
|
'<div><pre>'.$info.'</pre></div>'; |
|
} |
|
my $duplicates; |
|
my $num = 0; |
|
if (ref($dirlist) eq 'ARRAY') { |
|
foreach my $item (@{$dirlist}) { |
|
if (ref($item) eq 'ARRAY') { |
|
if (exists($toplevel{$item->[0]})) { |
|
$duplicates .= |
|
&start_data_table_row(). |
|
'<td><label><input type="radio" name="archive_overwrite_'.$num.'" '. |
|
'value="0" checked="checked" />'.&mt('No').'</label>'. |
|
' <label><input type="radio" name="archive_overwrite_'.$num.'" '. |
|
'value="1" />'.&mt('Yes').'</label>'. |
|
'<input type="hidden" name="archive_overwrite_name_'.$num.'" value="'.$item->[0].'" /></td>'."\n". |
|
'<td>'.$item->[0].'</td>'; |
|
if ($item->[2]) { |
|
$duplicates .= '<td>'.&mt('Directory').'</td>'; |
|
} else { |
|
$duplicates .= '<td>'.&mt('File').'</td>'; |
|
} |
|
$duplicates .= '<td>'.$item->[3].'</td>'. |
|
'<td>'. |
|
&Apache::lonlocal::locallocaltime($item->[4]). |
|
'</td>'. |
|
&end_data_table_row(); |
|
$num ++; |
|
} |
|
} |
|
} |
|
} |
|
my $itemcount; |
|
if (@paths > 0) { |
|
$itemcount = scalar(@paths); |
|
} else { |
|
$itemcount = 1; |
|
} |
|
$output .= |
|
'<input type="hidden" name="archive_overwrite_total" value="'.$num.'" />'. |
|
'<input type="hidden" name="archive_itemcount" value="'.$itemcount.'" />'."\n"; |
|
if ($duplicates ne '') { |
|
$output .= '<p><span class="LC_warning">'. |
|
&mt('Warning: decompression of the archive will overwrite the following items which already exist:').'</span><br />'. |
|
&start_data_table(). |
|
&start_data_table_header_row(). |
|
'<th>'.&mt('Overwrite?').'</th>'. |
|
'<th>'.&mt('Name').'</th>'. |
|
'<th>'.&mt('Type').'</th>'. |
|
'<th>'.&mt('Size').'</th>'. |
|
'<th>'.&mt('Last modified').'</th>'. |
|
&end_data_table_header_row(). |
|
$duplicates. |
|
&end_data_table(). |
|
'</p>'; |
|
} |
if ($mimetype =~ m{^application/(x\-)?(compressed|zip)}) { |
if ($mimetype =~ m{^application/(x\-)?(compressed|zip)}) { |
$output .= $lt{'camt'}; |
$output .= '<p>'.$lt{'camt'}.'</p>'; |
} |
} |
$output .= '</p>'; |
|
$output .= <<"START"; |
$output .= <<"START"; |
<div id="uploadfileresult"> |
<div id="uploadfileresult"> |
<form name="uploaded_decompress" action="$action" method="post"> |
<form name="uploaded_decompress" action="$action" method="post"> |
Line 9874 START
|
Line 10025 START
|
} |
} |
} |
} |
$output .= <<"END"; |
$output .= <<"END"; |
<span class="LC_nobreak">$lt{'perm'} |
|
<label><input type="radio" name="archivedelete" value="0" checked="checked" />$lt{'no'}</label> |
|
<label><input type="radio" name="archivedelete" value="1" />$lt{'yes'}</label></span><br /> |
|
<input type="submit" name="decompress" value="$lt{'extr'}" /> |
<input type="submit" name="decompress" value="$lt{'extr'}" /> |
</form> |
</form> |
$noextract |
$noextract |
Line 9885 END
|
Line 10033 END
|
return $output; |
return $output; |
} |
} |
|
|
|
sub decompression_utility { |
|
my ($program) = @_; |
|
my @utilities = ('tar','gunzip','bunzip2','unzip'); |
|
my $location; |
|
if (grep(/^\Q$program\E$/,@utilities)) { |
|
foreach my $dir ('/bin/','/usr/bin/','/usr/local/bin/','/sbin/', |
|
'/usr/sbin/') { |
|
if (-x $dir.$program) { |
|
$location = $dir.$program; |
|
last; |
|
} |
|
} |
|
} |
|
return $location; |
|
} |
|
|
|
sub list_archive_contents { |
|
my ($file,$pathsref) = @_; |
|
my (@cmd,$output); |
|
my $needsregexp; |
|
if ($file =~ /\.zip$/) { |
|
@cmd = (&decompression_utility('unzip'),"-l"); |
|
$needsregexp = 1; |
|
} elsif (($file =~ m/\.tar\.gz$/) || |
|
($file =~ /\.tgz$/)) { |
|
@cmd = (&decompression_utility('tar'),"-ztf"); |
|
} elsif ($file =~ /\.tar\.bz2$/) { |
|
@cmd = (&decompression_utility('tar'),"-jtf"); |
|
} elsif ($file =~ m|\.tar$|) { |
|
@cmd = (&decompression_utility('tar'),"-tf"); |
|
} |
|
if (@cmd) { |
|
undef($!); |
|
undef($@); |
|
if (open(my $fh,"-|", @cmd, $file)) { |
|
while (my $line = <$fh>) { |
|
$output .= $line; |
|
chomp($line); |
|
my $item; |
|
if ($needsregexp) { |
|
($item) = ($line =~ /^\s*\d+\s+[\d\-]+\s+[\d:]+\s*(.+)$/); |
|
} else { |
|
$item = $line; |
|
} |
|
if ($item ne '') { |
|
unless (grep(/^\Q$item\E$/,@{$pathsref})) { |
|
push(@{$pathsref},$item); |
|
} |
|
} |
|
} |
|
close($fh); |
|
} |
|
} |
|
return $output; |
|
} |
|
|
sub decompress_uploaded_file { |
sub decompress_uploaded_file { |
my ($file,$dir) = @_; |
my ($file,$dir) = @_; |
&Apache::lonnet::appenv({'cgi.file' => $file}); |
&Apache::lonnet::appenv({'cgi.file' => $file}); |
Line 9914 sub process_decompression {
|
Line 10118 sub process_decompression {
|
} else { |
} else { |
my @ids=&Apache::lonnet::current_machine_ids(); |
my @ids=&Apache::lonnet::current_machine_ids(); |
my $currdir = "$dir_root/$destination"; |
my $currdir = "$dir_root/$destination"; |
my ($currdirlistref,$currlisterror) = |
|
&Apache::lonnet::dirlist($currdir,$docudom,$docuname,1); |
|
if (grep(/^\Q$docuhome\E$/,@ids)) { |
if (grep(/^\Q$docuhome\E$/,@ids)) { |
$dir = &LONCAPA::propath($docudom,$docuname). |
$dir = &LONCAPA::propath($docudom,$docuname). |
"$dir_root/$destination"; |
"$dir_root/$destination"; |
Line 9926 sub process_decompression {
|
Line 10128 sub process_decompression {
|
$error = &mt('Archive file not found.'); |
$error = &mt('Archive file not found.'); |
} |
} |
} |
} |
if ($dir eq '') { |
my (@to_overwrite,@to_skip); |
|
if ($env{'form.archive_overwrite_total'} > 0) { |
|
my $total = $env{'form.archive_overwrite_total'}; |
|
for (my $i=0; $i<$total; $i++) { |
|
if ($env{'form.archive_overwrite_'.$i} == 1) { |
|
push(@to_overwrite,$env{'form.archive_overwrite_name_'.$i}); |
|
} elsif ($env{'form.archive_overwrite_'.$i} == 0) { |
|
push(@to_skip,$env{'form.archive_overwrite_name_'.$i}); |
|
} |
|
} |
|
} |
|
my $numskip = scalar(@to_skip); |
|
if (($numskip > 0) && |
|
($numskip == $env{'form.archive_itemcount'})) { |
|
$warning = &mt('All items in the archive file already exist, and no overwriting of existing files has been requested.'); |
|
} elsif ($dir eq '') { |
$error = &mt('Directory containing archive file unavailable.'); |
$error = &mt('Directory containing archive file unavailable.'); |
} elsif (!$error) { |
} elsif (!$error) { |
my ($decompressed,$display) = &decompress_uploaded_file($file,$dir); |
my ($decompressed,$display); |
|
if ($numskip > 0) { |
|
my $tempdir = time.'_'.$$.int(rand(10000)); |
|
mkdir("$dir/$tempdir",0755); |
|
system("mv $dir/$file $dir/$tempdir/$file"); |
|
($decompressed,$display) = |
|
&decompress_uploaded_file($file,"$dir/$tempdir"); |
|
foreach my $item (@to_skip) { |
|
if (($item ne '') && ($item !~ /\.\./)) { |
|
if (-f "$dir/$tempdir/$item") { |
|
unlink("$dir/$tempdir/$item"); |
|
} elsif (-d "$dir/$tempdir/$item") { |
|
system("rm -rf $dir/$tempdir/$item"); |
|
} |
|
} |
|
} |
|
system("mv $dir/$tempdir/* $dir"); |
|
rmdir("$dir/$tempdir"); |
|
} else { |
|
($decompressed,$display) = |
|
&decompress_uploaded_file($file,$dir); |
|
} |
if ($decompressed eq 'ok') { |
if ($decompressed eq 'ok') { |
$output = &mt('Files extracted successfully from archive.').'<br />'; |
$output = '<p class="LC_info">'. |
|
&mt('Files extracted successfully from archive.'). |
|
'</p>'."\n"; |
my ($warning,$result,@contents); |
my ($warning,$result,@contents); |
my ($newdirlistref,$newlisterror) = |
my ($newdirlistref,$newlisterror) = |
&Apache::lonnet::dirlist($currdir,$docudom, |
&Apache::lonnet::dirlist($currdir,$docudom, |
$docuname,1); |
$docuname,1); |
my (%is_dir,%changes,@newitems); |
my (%is_dir,%changes,@newitems); |
my $dirptr = 16384; |
my $dirptr = 16384; |
if (ref($currdirlistref) eq 'ARRAY') { |
if (ref($newdirlistref) eq 'ARRAY') { |
my @curritems; |
|
foreach my $dir_line (@{$currdirlistref}) { |
|
my ($item,$rest)=split(/\&/,$dir_line,2); |
|
unless ($item =~ /\.+$/) { |
|
push(@curritems,$item); |
|
} |
|
} |
|
if (ref($newdirlistref) eq 'ARRAY') { |
|
foreach my $dir_line (@{$newdirlistref}) { |
|
my ($item,undef,undef,$testdir)=split(/\&/,$dir_line,4); |
|
unless ($item =~ /^\.+$/) { |
|
if ($dirptr&$testdir) { |
|
$is_dir{$item} = 1; |
|
} |
|
push(@newitems,$item); |
|
} |
|
} |
|
my @diffs = &compare_arrays(\@curritems,\@newitems); |
|
if (@diffs > 0) { |
|
foreach my $item (@diffs) { |
|
$changes{$item} = 1; |
|
} |
|
} |
|
} |
|
} elsif (ref($newdirlistref) eq 'ARRAY') { |
|
foreach my $dir_line (@{$newdirlistref}) { |
foreach my $dir_line (@{$newdirlistref}) { |
my ($item,undef,undef,$testdir)=split(/\&/,$dir_line,5); |
my ($item,undef,undef,$testdir)=split(/\&/,$dir_line,5); |
unless ($item =~ /\.+$/) { |
unless (($item =~ /^\.+$/) || ($item eq $file) || |
|
((@to_skip > 0) && (grep(/^\Q$item\E$/,@to_skip)))) { |
push(@newitems,$item); |
push(@newitems,$item); |
if ($dirptr&$testdir) { |
if ($dirptr&$testdir) { |
$is_dir{$item} = 1; |
$is_dir{$item} = 1; |
Line 9993 sub process_decompression {
|
Line 10209 sub process_decompression {
|
if ($datatable ne '') { |
if ($datatable ne '') { |
$output .= &archive_options_form('decompressed',$datatable, |
$output .= &archive_options_form('decompressed',$datatable, |
$count,$hiddenelem); |
$count,$hiddenelem); |
my $startcount = 4; |
my $startcount = 6; |
$output .= &archive_javascript($startcount,$count, |
$output .= &archive_javascript($startcount,$count, |
\%titles,\%children); |
\%titles,\%children); |
} |
} |
Line 10122 sub archive_row {
|
Line 10338 sub archive_row {
|
my $offset = 0; |
my $offset = 0; |
foreach my $action ('display','dependency','discard') { |
foreach my $action ('display','dependency','discard') { |
$offset ++; |
$offset ++; |
|
if ($action ne 'display') { |
|
$offset ++; |
|
} |
$output .= '<td><span class="LC_nobreak">'. |
$output .= '<td><span class="LC_nobreak">'. |
'<label><input type="radio" name="archive_'.$count. |
'<label><input type="radio" name="archive_'.$count. |
'" id="archive_'.$action.'_'.$count.'" value="'.$action.'"'; |
'" id="archive_'.$action.'_'.$count.'" value="'.$action.'"'; |
Line 10167 sub archive_row {
|
Line 10386 sub archive_row {
|
} |
} |
|
|
sub archive_options_form { |
sub archive_options_form { |
my ($form,$output,$count,$hiddenelem) = @_; |
my ($form,$display,$count,$hiddenelem) = @_; |
return '<form name="'.$form.'" method="post" action="">'."\n". |
my %lt = &Apache::lonlocal::texthash( |
'<input type="hidden" name="phase" value="decompress_cleanup" />'."\n". |
perm => 'Permanently remove archive file?', |
'<p>'. |
hows => 'How should each extracted item be incorporated in the course?', |
&mt('How should each item be incorporated in the course?'). |
cont => 'Content actions for all', |
'</p>'. |
addf => 'Add as folder/file', |
'<div class="LC_columnSection"><fieldset>'. |
incd => 'Include as dependency for a displayed file', |
'<legend>'.&mt('Content actions for all').'</legend>'. |
disc => 'Discard', |
'<input type="button" value="'.&mt('Add as folder/file').'" '. |
no => 'No', |
'onclick="javascript:checkAll(document.'.$form.",'display'".')" />'. |
yes => 'Yes', |
' <input type="button" value="'.&mt('Include as dependency for a displayed file').'"'. |
save => 'Save', |
' onclick="javascript:checkAll(document.'.$form.",'dependency'".')" />'. |
); |
' <input type="button" value="'.&mt('Discard').'"'. |
my $output = <<"END"; |
' onclick="javascript:checkAll(document.'.$form.",'discard'".')" />'. |
<form name="$form" method="post" action=""> |
'</fieldset></div>'. |
<p><span class="LC_nobreak">$lt{'perm'} |
|
<label> |
|
<input type="radio" name="archivedelete" value="0" checked="checked" />$lt{'no'} |
|
</label> |
|
|
|
<label> |
|
<input type="radio" name="archivedelete" value="1" />$lt{'yes'}</label> |
|
</span> |
|
</p> |
|
<input type="hidden" name="phase" value="decompress_cleanup" /> |
|
<br />$lt{'hows'} |
|
<div class="LC_columnSection"> |
|
<fieldset> |
|
<legend>$lt{'cont'}</legend> |
|
<input type="button" value="$lt{'addf'}" onclick="javascript:checkAll(document.$form,'display');" /> |
|
<input type="button" value="$lt{'incd'}" onclick="javascript:checkAll(document.$form,'dependency');" /> |
|
<input type="button" value="$lt{'disc'}" onclick="javascript:checkAll(document.$form,'discard');" /> |
|
</fieldset> |
|
</div> |
|
END |
|
return $output. |
&start_data_table()."\n". |
&start_data_table()."\n". |
$output."\n". |
$display."\n". |
&end_data_table()."\n". |
&end_data_table()."\n". |
'<input type="hidden" name="archive_count" value="'.$count.'" />'. |
'<input type="hidden" name="archive_count" value="'.$count.'" />'. |
$hiddenelem. |
$hiddenelem. |
'<br /><input type="submit" name="archive_submit" value="'.&mt('Save').'" />'. |
'<br /><input type="submit" name="archive_submit" value="'.$lt{'save'}.'" />'. |
'</form>'; |
'</form>'; |
} |
} |
|
|
Line 10308 function dependencyCheck(form,count,offs
|
Line 10547 function dependencyCheck(form,count,offs
|
|
|
function propagateSelect(form,count,offset) { |
function propagateSelect(form,count,offset) { |
if (count > 0) { |
if (count > 0) { |
var item = (2+offset+$startcount)+7*(count-1); |
var item = (1+offset+$startcount)+7*(count-1); |
var picked = form.elements[item].options[form.elements[item].selectedIndex].value; |
var picked = form.elements[item].options[form.elements[item].selectedIndex].value; |
if (Object.prototype.toString.call(parents[count]) === '[object Array]') { |
if (Object.prototype.toString.call(parents[count]) === '[object Array]') { |
if (parents[count].length > 0) { |
if (parents[count].length > 0) { |
Line 10322 function propagateSelect(form,count,offs
|
Line 10561 function propagateSelect(form,count,offs
|
|
|
function containerSelect(form,count,offset,picked) { |
function containerSelect(form,count,offset,picked) { |
if (count > 0) { |
if (count > 0) { |
var item = (1+offset+$startcount)+7*(count-1); |
var item = (offset+$startcount)+7*(count-1); |
if (form.elements[item].type == 'radio') { |
if (form.elements[item].type == 'radio') { |
if (form.elements[item].value == 'dependency') { |
if (form.elements[item].value == 'dependency') { |
if (form.elements[item+1].type == 'select-one') { |
if (form.elements[item+1].type == 'select-one') { |
Line 10372 END
|
Line 10611 END
|
} |
} |
|
|
sub process_extracted_files { |
sub process_extracted_files { |
my ($context,$docudom,$docuname,$destination,$dir_root,$hiddenelem) = @_; |
my ($context,$docudom,$docuname,$url,$destination,$dir_root,$hiddenelem) = @_; |
my $numitems = $env{'form.archive_count'}; |
my $numitems = $env{'form.archive_count'}; |
return unless ($numitems); |
return unless ($numitems); |
my @ids=&Apache::lonnet::current_machine_ids(); |
my @ids=&Apache::lonnet::current_machine_ids(); |
Line 10419 sub process_extracted_files {
|
Line 10658 sub process_extracted_files {
|
(my $count,undef) = &get_extracted($docudom,$docuname,$currdir,\%is_dir,\%children, |
(my $count,undef) = &get_extracted($docudom,$docuname,$currdir,\%is_dir,\%children, |
\%parent,\@contents,\%dirorder,\%titles); |
\%parent,\@contents,\%dirorder,\%titles); |
} |
} |
my (%referrer,%orphaned,%todelete,%newdest,%newseqid); |
my (%referrer,%orphaned,%todelete,%todeletedir,%newdest,%newseqid); |
if ($numitems) { |
if ($numitems) { |
for (my $i=1; $i<=$numitems; $i++) { |
for (my $i=1; $i<=$numitems; $i++) { |
my $path = $env{'form.archive_content_'.$i}; |
my $path = $env{'form.archive_content_'.$i}; |
Line 10427 sub process_extracted_files {
|
Line 10666 sub process_extracted_files {
|
if ($env{'form.archive_'.$i} eq 'discard') { |
if ($env{'form.archive_'.$i} eq 'discard') { |
if ($prefix ne '' && $path ne '') { |
if ($prefix ne '' && $path ne '') { |
if (-e $prefix.$path) { |
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') { |
} elsif ($env{'form.archive_'.$i} eq 'display') { |
Line 10563 sub process_extracted_files {
|
Line 10807 sub process_extracted_files {
|
if (keys(%todelete)) { |
if (keys(%todelete)) { |
foreach my $key (keys(%todelete)) { |
foreach my $key (keys(%todelete)) { |
unlink($key); |
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 { |
} else { |
Line 10581 sub process_extracted_files {
|
Line 10832 sub process_extracted_files {
|
return $output; |
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 |
=pod |
|
|
=item * &get_turnedin_filepath() |
=item * &get_turnedin_filepath() |